Three areas I wish I’d known better prior starting iOS developer job
Tags: ios, swift, beginners
Published: 2020-03-07 09:38:24

Last July I started my first job as an iOS developer and it has been great. I have learned tons of stuff, the people and projects are super. However this post is about something else and I hope it will help folks learning to become iOS developers themselves.

I started dabbling in iOS development in spring of 2018 just for fun. I simply wanted to build stuff for my iPhone. Some months later I decided to take iOS development more seriously and started doing various tutorials, among them the amazing [100 Days Of Swift](https://www.hackingwithswift.com/100) by [Paul Hudson](https://twitter.com/twostraws).

I even got a certificate upon passing the final exam with distinction. I was always pretty bad at these kinds of tests but here I got around 97 out of 100 correct I think. It was first and so far last certificate I shared publicly.

![My 100 Days of Swift certificate](https://dev-to-uploads.s3.amazonaws.com/i/nlnk35h1x895c2wdz2je.jpg)

When applying for that first job and working on a take-home project to showcase my skills I think I was a bit overconfident. I thought that since I was learning Swift/iOS for quite some time and was developing Windows Phone apps before that + working as remote .NET developer for one company that I know a lot.

Long story short. I had realized I had quite a lot shortcomings regarding iOS development. And in this post I want to share top three of them so others can learn those areas better than I did before applying for iOS positions.

So let’s get started.

## 1) Table View

I thought I knew `UITableView` well. I understood how the recycling of cells works, how to refactor it out of the View Controller to separate class and similar stuff. But all the Table Views I worked with were really simple compared to what I encountered in the first weeks on the job.
Suddenly these Table Views had many types of different cells, sections. Then complex logic to calculate number of rows for specific sections, custom table view headers and much more.

I also had no idea that to get zero height table view header, you need to provide inside the method `heightForHeaderInSection` the value of `CGFloat.leastNonzeroMagnitude` which is something super small but not zero, since `0` in this context means automatic.. Just one of many things I had to learn.

Also it is not uncommon for 80% of the application UI to be made using Table Views because they scale very well, you get scrolling out of the box and much more.

I would really recommend you to try to create really intricate Table Views. Maybe with expandable sections on tap, multiple buttons in one cell.

## 2) Core Data 

For my biggest hobby app I chose to use [Realm](https://realm.io/products/realm-database/) database because at the time it seemed much more friendly to use than to pick Core Data. But Core Data is the dominant solution and it has made great progress in recent years. And used correctly it is great solution to persist complex data.

My first real deep-dive into Core Data was when I was building the take-home project and this was probably the biggest mistake I made learning iOS. I truly wish I did not ignore this part of development for so long.
Just few weeks back I was fixing dumb bug in the app which was result of my poor understanding of Core Data months prior when I build this functionality..

I am currently reading [Core Data by objc.io](https://www.objc.io/books/core-data/) and it is mind-blowing what kind of stuff is possible and how neat the code can be when used properly.

## 3) Networking

The last of the big three. Prior starting the developer job I never did any kind of POST requests to the server because I simply did not have backend API for my hobby projects. Even though this was pretty easy to pick up. Mainly because [Alamofire](https://github.com/Alamofire/Alamofire) library is very nice and the app had some nice examples from the senior developer who works with me on the project.

Also I should have paid more attention to handling different kinds of networking errors and presenting those well to the end users.
So if you are learning, try to find some public API and really get a good grip on sending network requests. Chances are the app you will be working on in your future job will be a client for a robust API.

_Do you have any questions? Feel free to ask in the comments. I will do my best to reply as soon as possible._