I start learn how to code around 5 years ago, and in the past 3 years, I have been focusing on focusing iOS Development a lot.
In this 12 months, there are many things to learn that I hope I know it at the first place. Let me tell you all of those things.
I had experienced make iOS code base from ground zero, to 1 GB of Xcode project size. At that time, I learn a lot about how important clean code, clean architecture is and design patterns. These tree things are really important if you are creating a project, wether it is an iOS, Android, Backend, and any others.
Personally, I like to think about the architecture of the software that I write. Combined with good clean code implementation, and some design patterns, your software is good. So I learn a lot about that on the last 1 or two years.
And I was partially right.
We, as a software engineer, needs to care about at least two things :
The first things is about how well the code can scale in terms of readability and maintainability.
“Clean code always looks like it was written by someone who cares” — Uncle Bob
I have been reading and researching about clean code and clean architecture stuff, and how we implement those things in detail mainly based on clean architecture and MVVM on iOS by Oleh Kudinov, It has been my primary goal to master.
The second is, how the code also can scale, in terms of performance, complexity, and stuff. This means algorithm & data structure, competitive programming, Big O notation and related topic as an important topic in software engineering field.
My mistake is, too much focus on these things and not really pay attention to the second point, which is seeing a good code in term of how efficient the algorithm and the performance.
When trying to applying jobs as a Software Engineer iOS, mostly, the first things that the company will test you is not the how well you can code iOS, or your iOS clean code or clean architecture. It is the algorithm & data structure stuff, competitive programming, understanding performance using Big O who comes first.
Right now we can learn anywhere at any website. Back then, I was learning from mostly YouTube about any iOS development. Then I start to struggle to learn about certain topic, and I got stuck.
If only I know the other way to learn, I wouldn’t got stuck too long. in 2020, I started to buy some good courses on Udemy about iOS Testing in iOS by Mohammad Azam, iOS Lead Essential from Essential Developer by Caio and Mike, and some courses related to Algorithm and Data Structures like Master the Coding Interview: Data Structures + Algorithms by Andrei Neagoie and Data Structures and Algorithms in Swift by Mohammad Azam. These are really good courses. Find some courses or instructors that match your way of learning. Investing your time and money to education is really good way to learn.
Reading non programming book is also important. One of my favorite book is Atomic habits by James Clear, with a great lessons. Basically, we can have a good habit If we already shape our identity. So If you want to be a professional iOS software engineer, then you should adjust your habit to fit the professional iOS software engineer role. See the author’s article.
Back then, I don’t really pay attention about the companies iOS job requirements. When I am about to finished my 10 months internship at Apple Developer Academy @ UC, Indonesia, 2 or 3 months before finished, I tried to apply some big companies. Then I realize there are things that I haven’t touch at that time, such as Unit Testing, UI Testing, Test Driven Development, Algorithm and Data Structures, CI Automation and so on.
I was kind of surprise because I was too focused on creating a scalable code base on the things that I already mentioned before. Then I started to run my personal learning sprint on 3 months by learning from courses, practice, and execute it.
Software Engineering is interesting field. In software industry everything is constantly changing rapidly. So we want to keep up with the industry, then we should research on tech stack of the industry, investing in education, and having a strong mindset as a professional software engineer.