Why I decided to become an iOS Developer
I come from a non-technical background, having graduated with a bachelor’s degree in Business Administration and a master’s degree in Public Policy Management. My career journey of the past ten years with the Brazilian Federal Government has seen me transition from business management to data analysis and data engineering. This unexpected career shift introduced me to the fascinating realm of software development.
My initial days were spent honing my skills in Excel, but as the need to analyze larger volumes of data and communicate my ideas effectively grew, I found myself turning to tools like R and Python. This eventually led me to the role of a data engineer, where I learned to appreciate the intricacies of performance, data structure, and algorithms. It was during this phase that I discovered my interest in clean code, design patterns, and software engineering.
After a while, the constant immersion in the data field made me long for something different. I enjoyed the coding aspect, but the rest felt somewhat repetitive. I began looking for avenues where I could continue coding and simultaneously engage more closely with user experience. Mobile development emerged as the perfect solution for my career aspirations and, in 2020, I dipped my toes into the mobile development waters. Thus, I started exploring the three major technologies available: Android Native, Flutter, and iOS Native.
- Android Native
- As Apple devices are quite expensive, the Android market in Brazil is massive, with Apple accounting for less than 15% of the market – according to websites like Statista and Statcounter. It was logical for me to start with Android. As a professional primarily familiar with Python and R, I found the process of learning and working with Kotlin to be quite enjoyable. However, as a regular user of iPhone and MacBook, a sense of disconnect began to surface, stemming from my inability to personally use the applications I was developing.
- Flutter (or, why not React Native?)
- Flutter, a rising technology, caught my attention next. Its ability to develop cross-platform apps seemed promising for my goal to create my own products. Unlike React Native that bridges to native components, Flutter directly draws its own components on the screen. This opens up a realm of creative possibilities, allowing for stunning animations and extensive customization, all while maintaining solid performance. Transitioning from Kotlin to Dart – the language used by Flutter – felt a bit awkward at first, I initially missed several features I’d gotten accustomed to in Kotlin. But the language is still evolving with the framework and I even started to enjoy it.
- iOS Native
- After a while on Android and Flutter, I felt like something was still missing. The developer experience on those two platforms wasn’t great. People seems to love Flutter for its hot reload – especially Android developers – but SwiftUI drives the same amount of amusement without having to deal with all the external dependencies to build a full-featured app. Don’t get me wrong, iOS development has it’s pain points too. But the cohesive and intuitive ecosystem of iOS, coupled with its rich software business model and loyal user base, resonated with my desire to create my own products, prompting me to invest my time in understanding Apple’s platforms.
Embracing the Apple Ecosystem
What stood out for me in the iOS world was the strength of Apple’s business model. Unlike Android, which is mostly ad-driven, Apple’s App Store encourages users to invest in apps, thereby nurturing a healthier software market. When I switched from an Android phone to an iPhone, I found a significant difference in app quality. Even ad-supported apps on the App Store frequently demonstrated superior quality, which might be attributed to the comprehensive array of technologies and APIs provided by Apple to its developers.
This noticeable difference in app quality and the stronger indie developer community within the iOS realm reinforced my belief in iOS development. Considering my aspirations to be an entrepreneur and develop my own apps, the thought of being part of this vibrant community was highly motivating.
Enjoying the Developer Experience
As I dived deeper into the world of iOS development, I appreciated the supportive and well-organized ecosystem provided by Apple. Despite the complexity of the iOS framework and the Swift language, I found the developer experience to be much smoother.
Let’s make no mistake, iOS development is hard and complex. It can, at times, be daunting. The framework is vast, as is the Swift language. Yet, the same could be said about Android and Flutter. The significant difference lies in Apple’s stewardship of its ecosystem. For better or for worse, Apple can be highly opinionated about how things should be done. For instance, Android’s documentation was until recently notably unopinionated on which architectural approach developers should follow or the “right” way to build an app. Conversely, Apple has advocated for MVC since the beginning. Another example is Apple’s introduction of the Combine framework and the SwiftUI-based state management, while the Flutter community grapples with selecting from a plethora of state management libraries.
In the episode 234: More Product. Less Architecture? of the Fragmented Podcast I felt personally represented. It’s almost like Donn and Kaushik were talking about all the pain I suffered to learn Android and Flutter. The amount of time lost thinking about architecture, dependency injection, state management, etcetera, while learning Android and Flutter is humongous. These are crucial topics, but they can often overshadow the goal at hand: building an application. A real one, full-featured, and addressing a problem. For newcomers, the freedom to concentrate on the app and the problem it solves gives them an advantage, and I believe this is why developers on Apple’s platforms consistently deliver better apps compared to other platforms.
Also, through my learning journey with Android and Flutter, I realized that cross-platform development seems to be moving towards a same-ecosystem future. With technologies like SwiftUI, providing a seamless experience across all Apple devices has never been easier. Maybe Flutter will be more valuable for developers inside the Android ecosystem than Apple’s, with Android’s components being integrated into the framework at a much faster pace. If you are not a bank or another industry in which your product is not the app itself, you are in a much better place sticking with the native technologies.
Of course, Apple’s ecosystem has its own flaws as well. Some frameworks like Core Data are beginning to show their age, and their business model has its critics. In the end, the choice of the development platform is akin to choosing the right tool for the right task. My choice of iOS stems from my desire to create quality apps that directly impact users while being part of a vibrant and thriving community. It’s an amazing time to be starting as an iOS developer and I look forward to the exciting journey ahead.