It always excites me to see so many people jumping into iOS development. We have a great community with lot of talented people and it is continuously expanding.
Recently, I have been talking to a lot of new developers and one of the main challenges they shared with me is that they have trouble getting started and they don’t have a clear path on what to learn in order to move forward in their iOS journey.
In this post, I will cover my recommendations on how you can become an iOS developer. Keep in mind that this is not the only path but just one of possible ways you can become an iOS developer. This is the strategy I would have used if I was in their position.
A lot of content covered in this article is part of my book called Surviving the Coding Bootcamp - From no coding experience to earning a six-figure salary.
Updated - 11/08/2022 - Added Git Section
The short answer is NO! You do not need a computer science degree to become a software developer. As a coding bootcamp instructor for the last 5+ years, I have taught many students who did not have a degree and they turned out to be great developers.
Having said that if you do have an option to attend school, debt free then go ahead and get a degree. I just don’t want anyone to go in $100K debt, thinking that it was the only way to become a software developer.
If you decide against getting a degree then keep in mind that there will be few jobs that may require a degree. Usually, these jobs are with big non-tech companies and education institutions.
People often ask me that how much of knowledge I learned in school is being used in my day to day job. For me personally, I use 0.000000000000001% of information I learned in school at my actual work. Most of the things I use at work, I learned on my own. This included Microsoft.NET, C# language, VB.NET, ASP.NET, iOS etc.
Once again, if you can afford college and can graduate 100% debt free then go ahead and attend it. But don’t think that college is the only way to become a software developer.
Coding bootcamps are a great way to learn a technology stack quickly. Instead of spending 4 years and $100K in college, you spend 4 months and $15K-$20K. Coding bootcamps are fast paced and as a student, you need to digest the information on daily basis. This format may not suit everyone and once a student gets too far behind in their assignments, homework etc it becomes very hard to recover from it.
Once again, I am not advocating taking out loans to attend a coding bootcamp. Work hard and save $15K-$20K and then attend a bootcamp, completely debt free.
Keep in mind that a coding bootcamp is not some magical place, where you can sit back and relax and become a developer in 12-16 weeks. This is like saying that I need to loose weight so I got a gym membership but never attended gym. Just because you are paying for a gym membership does not mean that you will automatically loose weight. In order to loose weight, you need to get on the treadmill and start burning those calories.
Every day you will learn new concepts and apply them to build applications. You will have to work extremely hard to keep up with the pace. If you are willing to put in the hours and do hard work then coding bootcamps can be a great investment.
Disclaimer: I am a coding bootcamp instructor for more than 5+ years.
Programming is one of those rare professions where you don’t really need a degree or attend a coding bootcamp to land a job. There are countless free resources available online. This ranges from YouTube videos, books, articles, courses and even free lectures from elite universities like Stanford.
I found a great post on Kean Blog, which lists a lot of resources. Keep in mind that not all the resources discussed in the post are free.
Anyone can learn programming by using free online resources. Yet, we don’t see a lot of self taught developers in the industry. The main reason is not the quality of resources but because most people lack motivation and consistency. Once they are stuck on something, they usually give up and move in different direction.
In simple terms, most people lack Grit. They don’t stay with problems longer. They don’t persevere and give up easily.
Let me tell you the biggest secret in software development. Programming languages are easy to learn. Once you know one language, you can easily transition to any other language.
The most important part of learning a language is to make sure your fundamentals are strong. This means, you should know how to create variables, functions, conditions, loops, modules etc. Once you are comfortable with the fundamentals, you can jump in and learn any programming language you want.
One of the roadblocks, new developers face is a choice between UIKit vs SwiftUI. This is an interesting question because there is no one correct answer. My recommendation is that new developers should spend 75% of the time learning SwiftUI and 25% on UIKit. SwiftUI is the future and all new development is being done in SwiftUI.
Having said that, as a new developer you will most likely not be working on a green field project. This means you will be dealing with legacy code, which is probably written in UIKit. This is where your 25% is going to come in handy. If you see yourself continuously working on legacy codebase then increase the percentage to 50% for UIKit.
Greenfield projects are the one that lack the constraints imposed by prior work. A brownfield project is one that carries constraints related to the current state of the site.
One thing I noticed about new developers is that they want to see the progress quickly. I don’t blame them, if I am starting to learn something new then I would like to see the results quickly too. SwiftUI declarative syntax, along with Xcode previews allows developers to quickly prototype their apps as compared to UIKit.
One other benefit of learning SwiftUI is that, you can easily transition to React or Flutter when and if needed. I am not saying that you should learn SwiftUI to move to React or Flutter. I am pointing out a fact that React, Flutter and SwiftUI are so similar that by learning one framework, you will automatically know the basics of other framework.
You never know, when you need to use React to create web applications or Flutter to build a cross platform app.
React has been around since 2013 and it is much more mature as compared to SwiftUI. This allows us to look at React apps and incorporate patterns from React into our SwiftUI applications.
Source control systems like Git allows you to keep track of the changes to your codebase and collaborate between team members. It is important that you are familiar with the basic operations of a source control system so you can start contributing to your project at work. These basic operations includes:
Git (Most popular source control system) provides a lot more features but to start out, you should learn enough to be productive.
Git can be used in several different ways. This includes the terminal interface and also graphical user interface. If you are a visual person then start with the graphical user interface. Get comfortable with using Git and performing the above mentioned actions. You can even use source control explorer built right into Xcode. You can find a list of Git GUI clients here.
Don’t pay attention to people, who suggests that you must use terminal in order to work with Git. Git can be used in many different ways and there is nothing wrong with using graphical user interface with Git.
To learn more about Git, check out the following resources:
The hard part of learning iOS, Android or any other technology is not the programming language but the frameworks. There are many frameworks available in iOS, which serves a particular purpose. This includes Audio/Video (AVFoundation), Core Data, MapKit, SwiftUI, UIKit, AppKit and even third party platforms including Firebase, Realm etc.
For junior developers, it becomes confusing as where to start. My recommendation is to first get comfortable with the Swift language. This means you should know how to create variables, functions, loops, conditions. You can even move to the advance stuff like closures and generics.
After that your focus should be on the UI framework like SwiftUI. You should spend 75% of time learning SwiftUI and 25% on UIKit. This percentage will change with each year as more and more companies start adopting SwiftUI. Maybe in next 3-5 years, you will only be spending 5% time in learning UIKit and your core focus will be SwiftUI.
Here are some resources to get you started with SwiftUI.
Once you are comfortable with Swift and SwiftUI then focus on learning about how to consume an API (JSON). This is by far the most common operation when you are building an iOS application. Learn about GET and POST requests and how to successfully decode the response and display it on the screen. Apart from consuming an API, also learn about POST request so you can send information to the server.
I have worked on dozens of iOS projects throughout my career and one thing that was common in almost all of them was that they all consumed some sort of API. Most of the time, it was an API implemented internally by the company using different technologies like .NET Web API, Ruby on Rails, Django etc.
Here are few free APIs that you can use to practice JSON parsing and consuming JSON in your iOS application.
I often advice my students to make sure that API is working as expected before writing a single line of code. You can use networking tools like POSTMAN to perform network request and validate the API.
JSON parsing in iOS can get complicated based on the response you received from the server. If you are interested then check out my course The Complete Guide to JSON Parsing in Swift. In this course, I mentioned several ways of parsing JSON using the
codable features of iOS and Swift language.
You might be wondering that I did not mention Core Data, Maps, AVFoundation, CoreML and many other frameworks. The main reason is that you need to start slow and learn 20% of the things that will be used 80% of the time. In my opinion, Swift language, SwiftUI and consuming JSON is more important for a junior developer.
When you are working on a Core Data project then you will learn Core Data. Same is true for Maps, AVFoundation or a gaming framework.
The most important thing you will learn is not any framework but ability to learn on your own.
Even though I have been teaching at coding bootcamp for a very long time, one thing I witness in every cohort is student’s fear of writing wrong code. Students would rather jump off a building than write wrong code. I think this is deeply rooted to our education system, where different and unique answers are punished instead of being appreciated.
In one of the TED talks, Sir Ken Robinson talked about a young girl who was considered hopeless by her teachers. The teachers contacted her parents and told them that they believe that the child has learning disability and she is not able to concentrate in class.
Her parents took her to see a specialist. The specialist discussed talked to the parents about their child’s condition. After a while, the doctor left the room with the parents leaving the kid alone. As they left the room, the specialist turned on the radio.
To everyone’s surprise, the little girl started dancing to the music. The doctor turned to her parents and told them that the girl is not sick, she is a dancer and you should take her to dance school and they did.
That little girl was Gillian Lynne, legendary English ballerina, dancer and choreographer. She is responsible for some of the most successful theater productions in history and she is a multi-millionaire.
Like Gillian Lynne, we all have creative genes in our body. Unfortunately, this creativity starts to fade away as we enter schools and colleges. Students are punished for having creative thoughts and are told to follow the yellow brick road. Colleges focuses solely on how students can get good grades instead of a good education.
I always tell my students that writing code is not like an open heart surgery. If you make a mistake, nobody will die. The worst that can happen is your editor is going to give syntax errors, presented as a learning opportunity.
Nobody writes perfect code first time. Everyone makes mistakes. The most important thing is that you learn from your mistakes and improve yourself to become a better developer.
If you are afraid to be wrong, you will never come up with anything original - Sir Ken Robinson
Curiosity also plays an important role in becoming a good developer. Instead of following a predefined path, try to experiment what will happen if you change few lines of code or if you adjust the ordering of the lines. Don’t get discouraged if the path you choose hits a brick wall. You didn’t fail in solving the problem, you just learned several other ways your program does not work.
As a new developer your main goal is to get the program working. It does not have to be the best and the most efficient code, it just have to work correctly. After you get it working then you can make it better through the process of refactoring.
Refactoring is a principle of changing existing code to make it better without changing the overall functionality of the code.
The year was 2004 and I was taking a .NET web services class at University of Houston. My assignment was due in few hours and I was stuck. I just could not comprehend the scope of the assignment. Each time I begin implementing the solution, I got overwhelmed. I felt like standing in front of a huge mountain. Mountain so high that I cannot even see the peak.
I decided to take a break from coding. I knew that my method was not working and I need to try something different. I took out my notepad and wrote down all the steps I needed to take in order to complete the assignment. After that I focused on one single step at a time. Every time I complete a step, I crossed it out. Soon I was able to complete all the steps, which in turn completed the assignment.
The lesson that I learned from this experience is that one of the most important skills you can learn as a software developer is to break down a large task into micro tasks. Micro tasks represent a very small subset of a larger task. Once you finish all the micro tasks associated with a particular task, your primary task is completed. This technique allows you to move much quicker since you are focusing on a single problem.
New developers usually look at a programming problem and get overwhelmed by the sheer scope of it. Try to break it down into smaller manageable pieces and then only focus on the smaller piece.
Dividing a large task into micro tasks is a skill that you will develop as you gain more experience. My advice is to always write down your tasks on a piece of paper (Remember paper, that comes from trees) and then check them off as you finish them. This will visually show you which tasks are completed and more importantly it will give you the confidence to move forward and attempt other tasks in the list.
A task can be as simple as displaying few text boxes on the screen or even changing the background color of the screen. The main idea is to break down to a granular level that you are comfortable with and are able to complete it in a short amount of time.
Another question my students ask is that should they attempt the easier task first or hard. My recommendation is to always start with an easier task first. The reason is that once you finish the easier task, it will give you the confidence to tackle hard tasks. If you attempt the hard task first and get stuck then even the easier tasks will feel challenging. The confidence you gain from completing easy tasks will provide you the momentum to face and conquer hard tasks.
Next time you are about to write an app, write down all the tasks associated with your app. Then take each task and divide it further into micro tasks. Now you can start with each micro task and only focus on that one micro task. You will notice that using this approach you are going to complete tasks much faster and it will provide you the encouragement you need to move forward.
One of the main skills of becoming a developer is to be independent. Information is now readily available at your finger tips. Every coding question you have has already been answered and just waiting to be discovered. You no longer have to drive to a local library and search through magazines and books for a solution. You can simply go to Google and type in your question and voila!
Apart from searching for your answer on a search engine, you should also be comfortable with asking for help. There is nothing wrong with asking for help when you need it. There are several different forums where you can post your programming questions.
I remember taking part on ASP.NET forums, while I was still in college. At that time I was learning web development so I posted a lot of questions on the forum. Later on, after I gained more experience I started helping people out. My contributions were recognized and I was awarded the Microsoft Most Valuable Professional (MVP) award in 2007.
Google also has similar programs (GDE), which are awarded based on developer’s contributions to the community. If you are awarded MVP or GDE then it will certainly look good on your resume.
When asking questions on forums make sure to formalize it correctly. Don’t just paste 200 lines of code and ask why it does not work. Questions like that are regularly down-voted on online forums and if you continue posting such questions without any context then there is a probability that your account will be suspended.
You need to explain the exact problem you are facing and what solutions you have tried. The more context you are going to provide, more experienced developers will be willing to help you.
StackOverFlow has prepared a document, which illustrates how to ask a good question. You can read that document here (https://bit.ly/3MJAVVE).
According to Google, Debugging is defined as a process of detecting and removing of existing and potential errors (also called as ‘bugs’) in a software code that can cause it to behave unexpectedly or crash.
As a student, you should pay special attention to debugging, as majority of your time at work will be spent maintaining and fixing bugs in an existing legacy codebase.
In one of my earlier cohorts, I was teaching debugging in web development using Chrome developer tools. I strongly suggested all my students to pay close attention to the debugging techniques discussed in the class. Some did and others did not. Few months after graduation, one of my students from the same cohort came back to thank me for teaching debugging. He told me that debugging skills that he learned in class helped him fix a lot of bugs and allowing him to solve complicated problems at his new job.
It does not matter what programming language or platform you are working with, all of them provides debugging features. Debugging might feels boring and it might even feel like a slow process but when applied correctly, you can detect bugs much quickly as compared to good old console logs.
My simple rule is to locate the problem or bug using logs for the first 5 minutes. If I am not able to find the source of bugs then I resort to debugging.
One of the best ways to boost your learning is to work on your side/pet project. The main purpose of your personal project is to integrate all the skills you have learned into your own application.
This means your side project should be something that you are passionate about. Your passion will drive the progress of the project. One of my students from an earlier cohort had passion for astronomy. He used the concepts discussed in class to implement a custom iOS application to keep track of Earth’s distance from various sources. During the class, when we learned about how to consume a JSON API, he immediately went to NASA’s website and found a relevant API for his needs. Using the concepts that he learned in class, he was able to integrate the API into his own iOS app.
It is always encouraging to see your project growing as you learn new skills. It also makes you confident that the knowledge you have learned during the coding bootcamp is practical and can be used to create real world applications.
So go ahead and start your passion project on the side. When you acquire new knowledge through bootcamp learnings, apply it to your project. It is a great feeling when you can see your project growing right in front of your eyes.
Once the project is mature enough you can include it in your resume. Employers are always interested in project based work from potential employees. You never know, the difference between you and other candidate might come down to your pet project.
A million years ago, people used Google Reader to subscribe to RSS feeds and read their favorite blogs. I was one of those people and loved reading my subscriptions in the morning, with a hot cup of coffee. Good Reader was later killed by Google and ended up in the Google graveyard.
Please have a moment of silence for respect…
Nowadays, even though you can curate your own feeds. Most people rely on newsletters to stay updated. I love newsletters and I have subscribed to several of them. The main idea behind newsletter is that someone else is in charge of curating weekly articles/videos on a particular topic. As a subscriber to the newsletter, you only need to provide your email address and that’s it.
Once a week, on a designated day you will receive a list of curated content through your email. All you need to do is open the email and go through the articles that interest you. Most newsletters take liberty to write an abstract for the article. This will give you a much better idea about the article contents and if you will be interested in reading it further.
No matter what technology stack you are using to build an application, you can always find a newsletter pertaining to your needs. I have personally subscribed to newsletters ranging from machine learning, React, iOS development and even Flutter. I highly encourage you to subscribe to a few newsletters to get started, you will be amazed at how easy it is to keep up with all the latest happenings in the industry.
Make sure you allocate weekly time to go through your newsletters. I go through my feeds during early morning on the weekends. By checking my newsletters on a weekend, I get the advantage of having all the updated feeds, since most newsletters are sent during the weekdays.
Searching for newsletters is quite simple too. Simply go to Google and search for your favorite topic i.e “React Newsletter”. You will be presented with several different options. Subscribe to the ones you find interesting and then sit back and enjoy with a hot cup of coffee.
Here are some iOS newsletters I am subscribed to:
Twitter is a great medium to get up to date information about a particular topic. I personally use Twitter to post coding articles, videos and courses. Apart from sharing my content I also follow hundreds of people so I can learn from them.
iOS community is fortunate to have many great content creators, who regularly put out material in the form of articles and videos.
Here are some content creators to follow.
If you like the content from any of the creators then make sure to tell them. All of them would be very happy to hear from a satisfied consumer.
We live in an age, where reading books is getting obsolete. What was the last technology book you read? You probably don’t remember. I am in the same boat, I don’t read as many books as I should. As a junior developer, you will always be in a advantageous position if you read books.
Knowledge is power
If you are starting out with iOS development then here are few recommendations on the books.
Try to read several books on a single subject. This way you will learn the technology from several different point of view. You don’t need to read the whole book at one sitting. You can read book in chunks of 30 minute each day. It may take longer to read the book but you will finish the book.
If you are reading a programming book then it is important to practice what is being taught in the book. This means manually typing (not copy pasting) the code in your editor and making sure that it runs as expected.
I love listening to podcasts. I listen to them during my daily walks, cleaning, rearranging garage and even swimming. Podcasts is a great way to consume knowledge and all of them are available free of cost. So the next time you are taking a walk outside in nice weather, give these podcasts a listen.
Here are few iOS development podcasts you might want to check out.
Nothing demonstrates your work better than a portfolio. Portfolio allows you to showcase your skills to an employer and make an immediate and a long lasting impression. I always advice my students to feature their main projects on their portfolio.
Although you can invest your time in implementing the portfolio website yourself but my recommendation is to use a low cost template as a starting point of your portfolio. You can easily purchase a very good portfolio template from ThemeForest or similar websites for under $15. When purchasing a template, make sure to select a basic HTML, CSS template. This will allow you to easily change the contents of the template and publish it on all available hosting providers.
After completing the portfolio your next step is to deploy it and make it available to the rest of the world. A static website can be deployed to many different hosting providers including Surge, Netlify, GitHub Pages and infinite others. Apart from hosting, you should also invest in getting a custom domain name. Once again there are several different options. I recommend hover.com as they provide excellent customer service and don’t up sell you on additional features.
Make sure to keep your portfolio up to date. As soon as you finish a project, add it to your portfolio. Don’t wait months or years to update your portfolio. It will take double the time if you wait, do it while it is fresh in your memory.
If there is such a thing as a resume strictly for developers then it would be your GitHub profile. GitHub profile hosts all your coding projects and allows prospective employers to evaluate your technical skills.
A great GitHub project profile explains the purpose of the project clearly. It also list all the different technologies and APIs that were used in the project including live link and tags. If the project was UI/UX based then it should also include screenshots of the website. If it is a framework then it should consists of documentation on how to use the framework and even code samples. If your project is based on effects and animation, then it would be wise to add a small video or even a GIF animation showing the effect in action. This way viewers can simply watch the video and get a better understanding of your animation library, without spending time to download and install the framework.
Polishing your GitHub repository is mandatory in development world. If your repository does not even have a decent README file then it will send message to your audience that you don’t care much about your work.
Another things to keep in mind is not to publish your API keys or sensitive data in your GitHub repositories. Provided that your repositories are listed as public repositories, anyone can see and use your keys. Always make sure that your sensitive data is encrypted and not published online.
GitHub is your developer resume. You must take time to make it stand out. It is not surprising that most students in my class who landed job first, had a polished GitHub profile. One of those students was Beyza Kilickol and her GitHub profile can be found here (https://github.com/beyzakilickol). As you can see Beyza worked extremely hard on her profile and made it easy for employers to experience her projects. She even added screenshots, videos, guest account login to streamline the experience. I encourage you to follow her GitHub profile as a template and learn how she has laid out her repositories.
As developers we are always focused on coding and find these tasks meaningless. But in reality, they are very important and can be the difference between you getting the job or not.
My first speaking engagement was back in 2004-2005, while I was still in college. I was speaking at Cougar Computer Science group for my university. I was excited about my first talk, which was on the topic of DataSet and DataTables in .NET. I prepared the talk for days and was ready to present in front of a large audience.
To my disappointment, only one person showed up to my talk. Instead of canceling the session, I continued with my presentation. In the end that single student told me that he enjoyed the talk and found it really useful. I thanked him for coming and wished him well for learning Microsoft.NET framework.
In my opinion, anyone can talk in front of a large audience. Your real test of nerves is when you are presenting in front of a very small group of people. You have to overcome your disappointment and continue with your presentation.
After that I volunteered to speak at Houston .NET User Group. I presented in front of over 100 people on the topic of LINQ to SQL. It was a great session and audience really enjoyed it. After the session, lot of members from the audience came to me and shared their contact information and even possible job opportunities.
It is not 1980’s anymore. You cannot lock yourself in your mom’s basement and code all day. You need to become part of the community and build relationships and connections.
If you are not able to find local communities in your region then find remote user groups. Most of the meetings are now held remotely. One such community is iOS Dev Happy Hour, which hosts monthly meetups. People from all over the world join iOS Dev Happy Hour and share their experiences about programming, technology, life, career advice and everything else.
Your next step is to find a community that meet your needs and then become an active member of the community. Most user groups are looking for speakers, so if you have an interesting topic then contact them and volunteer to speak.
I love speaking at conferences. Just few months back, I presented two sessions at 360iDev in Denver. Conferences is a great way to meet people and share ideas. As a new developer, you may not be accepted as a speaker but you can always attend as an attendee or as a volunteer. You still get to meet speakers and other attendees and learn from them. There are a lot of iOS conferences taking place all around the world. Here are few of them:
You can find a comprehensive list of conferences here.
One great thing about being a software developer is that you will never get bored. There is just so much to learn. Each year Apple hosts WWDC in which they announce new frameworks and improvements to existing ones. WWDC videos is a great way to keep yourself up to date with Apple technologies.
Apart from just learning iOS, I always encourage people to look at other platforms. For example, after getting comfortable with SwiftUI, you can look at React and Flutter. Even if you are not actively developing React or Flutter applications, it is always a good idea to learn from similar frameworks. React and Flutter are more mature frameworks as compared to SwiftUI. You can incorporate patterns and practices used in React into your SwiftUI applications.
You can also look into backend development. If you want to stay in iOS echo system then Vapor is a great choice. Outside of iOS, you have a lot of different choices including Node with Express, Ruby on Rails, ASP.NET Web API, Django, Go and many many more.
Knowledge is never wasted. Things I learned and used decades ago still play an integral role in solidifying my concepts even today.
Good things takes time. Follow the path, keep learning and have patience. Becoming a iOS developer is not a sprint, it is a marathon. Be the tortoise, not the hare.
A lot of content covered in this article is part of my book called Surviving the Coding Bootcamp - From no coding experience to earning a six-figure salary.