The computer is the most remarkable tool that we’ve ever come up with. It’s the equivalent of a bicycle for our minds. - Steve Jobs
It’s easy to confuse goal with means. I find myself get caught up in this trap every other time when pondering on what really motivates me and what really brings me that sense of fulfillment.
I’ve been doing iOS development for the past a few years ever since out of school. It’s been such a delight to build something beautifully functional, see how data flows from persistence layer to user interface, ship it and observe it makes the world around me a little bit better. That probably explains why those Objective-C brackets didn’t scare me away back in the early days. Then here comes Swift, followed by various tools that further optimize the developer experience. Apparently, I enjoy doing this, I’m proud of doing this and I want to keep doing this - I bake my identity as an 「iOS Engineer」without any doubt.
Until one day I wanted to build one of my ideas but found this identity just can’t get me there. Yikes, it really threw me in a loop. Is Swift still a delightful language? Yes. Do I still enjoy iOS development? Yes. Do I want to keep doing this? Errr, probably not. To be more precise, it depends. Why?
Because it’s not the goal.
I don’t work on iOS for the sake of working on iOS. I work on iOS because I enjoy building great products with great people - and iOS happens to be the means that helps me achieve this goal. I think this applies to being a 「Full Stack Engineer」or a 「Generalist」as well. People don’t do it for the sake of doing it. It all comes down to the desire deeply rooted in the human nature: we want to realize our ideas 1. Most of the time with only one tool in the belt, we’re less empowered.
React has earned its popularity in web front-end development, which inspires other platforms to adopt similar concepts when building user interface rich applications. ComponentKit is one of the counterparts on iOS, and is used in my current job. I’ve heart many complaints around this abstraction making iOS development less iOSy. Also, developers tend to get away from tech stack that only serves limited use cases, fearing that the expertise is not transferrable. Then here comes Apple’s own SwiftUI, with its data flow and layout system almost exactly mirroring the concepts behind React, and ComponentKit.
Aha, we’re entering a very interesting time.
As mentioned above, we strive to achieve our goals by acquiring as many means as we can. But yeah talk is cheap, show me the code - it’s not always that easy. Here is an iOS engineer who tries transplanting her app from App Store to Play Store. Here is an Android engineer who’d like to launch a web version of her app. Here is a web front-end engineer who wants to design the user interface of her website by herself. And here is a designer who is just eager to bring her static mockup to life. Sadly, many of them end up giving up halfway. The insanely diverged complexity underlying each platform fails them.
Our creativity is blocked, not ideal. But fortunately enough, evolution is always driven by such dissatisfaction. Here comes Swift and Kotlin couples, who bring iOS and Android tribes closer compared to their Objective-C and Java parents. Here comes React, ComponentKit, Litho and SwiftUI, which all embrace the uni-directional data flow and declarative layout. Here comes design tools like Figma, which makes it easier for engineers to do mockups and for designers to transform pixels to code. I could envision a world where the boundaries defining what we’re able to do are teared down, and all those identities just lose their significance - because we’re all accomplishing our goals by leveraging various means easily. We’re more empowered.
We don’t necessarily need to be a computer nerd to post on Twitter or Instagram. We also don’t need to master assembly language to launch an exciting product. Every corner of today’s world is experiencing democratization in some format, and creating softwares is no exception. Humans are tool builders. It’s fascinating to enable anyone to build the tools that meet their needs. To hop on the bicycles that carry their minds.
Yep FOMO detected.
I used to narrow it down as entrepreneurship, but turn out it’s not exactly the same. Back to the goal, is it really entrepreneurship or simply being a creator who bulids stuff? One thing that distinguishes the former from the latter is you’ll want to leverage every resource to help you get there instead of getting your hands dirty on everything. 2 ↩
But yeah collboration and leveraging are important in general even without entrepreneurship. ↩