Essential Developer

View Original

Should iOS devs learn Kotlin or other programming languages?

Have you ever found yourself wondering if you should learn Kotlin or another programming language?

This is a common question we receive from iOS developers. With so many different languages, frameworks, and platforms in the dev industry, it’s natural for iOS devs to wonder if they are missing out on big opportunities out there.

In this article, you’ll learn a simple framework for deciding if a new technology can help you accelerate your success and long-term fulfillment:

  • choosing between a generalist and specialist approach
  • setting up clear objectives
  • building up valuable technology-specific skills
  • building up essential technology-agnostic skills

Should I be a Generalist or a Specialist?

Of course, the answer is, “it depends!”

Some developers believe that “If I know both iOS and Android development, I should be paid double!” The problem is… Developers are typically paid by the hour (and how much they can produce!), and knowing two platforms don’t make you twice as productive (context-shifting, for example, can actually make you less productive)!

So, if you're an iOS dev, we believe you should strive to become an iOS dev specialist. Thus, Swift should be your specialist language.

It’s counterintuitive but, usually, becoming a specialist (e.g., “I am an iOS/Swift dev specialist”) pays off more than trying to be a generalist (“I am an iOS/Android/Swift/Kotlin/Obj-C/JS/PHP/JAVA/C#/... dev”).

The cost of dabbling with new technology may be small. But mastering many technologies and making them part of your success and long-term fulfillment is a whole different proposition (it can take decades!).

That doesn’t mean you shouldn’t learn other technologies. Quite the contrary. Absolutely, you should learn other languages. We know many highly-paid iOS developer specialists that use Objective-C, Kotlin, JS, Ruby, JAVA, etc., on their day-to-day. But when advertising themselves for a high paying iOS position, they show up as iOS/Swift specialists!

Let's illustrate with a real story. Caio had a serious knee injury practicing jiu-jitsu. Specifically, he had torn his meniscus and needed emergency surgery.

Imagine yourself in his position. Would you choose a "do-it-all surgeon" or a "knee surgeon specialized in torn meniscus sports injury"?

Of course, it doesn't mean the "do-it-all surgeon" can't do a great job. But we believe that most people would pick the specialist as a safer choice.

The same principle applies to your career. There are many outstanding iOS opportunities at the moment for iOS/Swift specialists. Because businesses deem expensive specialists to be a safer choice.

Certainly, there are generalist devs making a good living! However, in our experience, that’s not the norm. Simply because a do-it-all generalist dev often looks “less knowledgeable” to challenging—and rewarding—iOS projects.

If working with multiple languages, frameworks, and platforms is what makes your heart tick, go for it! Otherwise, becoming a specialist may be a better (and more profitable) alternative.

Setting up clear objectives

Learning new languages, frameworks, and platforms indeed open up opportunities to improve as a developer. However, you must clearly define objectives as it may not be the best choice for career progression.

For example, if your objective is to explore how MVC, MVVM, and MVP solutions are implemented in other platforms, learning how to build Android/Kotlin apps can be a great exercise. Or if you want to learn different programming paradigms such as Functional Programming, learning Clojure or Haskell would be fantastic.

In other words, if your goal is to improve your programming skills, you should definitely consider giving another technology a try as it can expand your knowledge and consequently your value as a developer (you can always translate what you learned to iOS/Swift development!).

Moreover, building an open-source side-project for learning a new technology can be extremely fun and rewarding. Ideally, you should document your learning in articles to increase your exposure online (always good to promote yourself!).

On the other hand, if you’re thinking about learning a new technology for professional reasons (e.g., increase your salary), consider your decision carefully. Before diving into learning a new programming language, make sure to research what would take (time, money, and effort!) until you can provide value in the workplace and start collecting rewards. Additionally, be sure of what kind of expected returns you’ll see from your investment and for how long these returns will potentially exist.

As we said previously, instead of learning many languages (generalist), it often makes more economic sense to master one first (specialist).

Building up valuable technology-specific skills

Many factors influence the popularity, adoption, and compensation for a technology-specific skill. Ideally, you should build up highly-paid skills that are currently hot and are expected to have high demand in the long-term as well.

A simple principle is: Scarcity plays a significant role in compensations.

Swift is an example of a new language with current and future expectations for high-demand and high compensation. Since there are not a lot of experienced Swift developers (scarcity), remarkable Swift developers can achieve very high compensations.

However, the demand for a particular skill and the compensation aren’t always aligned.

An interesting example would be technologies that don’t have a mass appeal anymore (low demand) but that have a potential for high returns. Take Objective-C as an example. For decades, Objective-C was the go-to language to develop apps on Apple’s platforms, but it keeps losing its appeal since the announcement of Swift. Sooner or later, professional iOS developers will have to jump on the Swift train, as Apple has expressed clearly that Swift is the future of their platforms. As a result, future iOS developers will most likely never learn Objective-C.

However, that doesn’t mean that there won’t be good Objective-C opportunities in the future. For example, as Objective-C usage fades away, there’ll be fewer Objective-C specialists in the market (low supply), thus there’ll be a massive scarcity for the skill. As long as there are businesses that depend on Objective-C, there’ll be the need to maintain those systems. In this long-term scenario, Objective-C developers can be so scarce that they could potentially land very lucrative roles to maintain or migrate legacy codebases.

With that said, we don’t recommend beginners or even mid-level iOS developers to master Objective-C as it’ll require a lot of effort and it may not pay off in the long-term. Such opportunities are more suitable for senior and veteran Objective-C developers (specialists) that already built the skills along the years.

In our opinion, you should avoid investing time, money and effort on legacy technology-specific skills.

Building up essential technology-agnostic skills

Ok, now you understand the importance of becoming a specialist.

But… “what if I become a specialist in a specific technology and later it becomes obsolete?”

Indeed that’s a legitimate concern. The tech landscape is continually changing, and with it, the technologies we use for developing remarkable products change as well (hopefully for the best!).

Placing all your eggs in one basket probably won't yield the best results for your long-term career fulfillment.

However… Instead of trying to become a “do-it-all generalist,” what if you build up highly-paid skills that combine extreme scarcity with high demand in the job market? And what if those valuable skills could also translate to any other platform, so you wouldn’t have to start from scratch every time there’s a new technology shift in the industry?

The good news is… such valuable skills exist, and you can master them!

The best long-term investment, in our opinion, is to develop essential skills that apply to any platform or language; skills that withstand the test of time. Such timeless skills are vital for generating business value and accelerating your career growth.

For example, the following highly-paid skills are independent of the language or platform you use:

  • modular design, for adapting to change with high-speed and low-cost.
  • automated testing, for quickly, reliably, and repeatedly asserting correctness in the codebase.
  • dependency management, for creating low coupling between reusable components.
  • effective version-control, for smooth continuous integration and deployment.
  • short release cycles, for easier and more accurate planning, gathering fast feedback, and delivering value continuously.
  • codebase health monitoring, for maintaining a sustainable codebase in the short- and long-term.
  • excellent cross-team communication, for a collaborative and knowledge-sharing culture.

Summary

Building up essential—and timeless—skills will give you a positive outlook and a comfortable attitude towards big shifts in the industry. That means you won’t have to worry about which language or platform you should learn next. Adapting to future challenges and changes will be easy and cost-effective. In fact, every shift will become a rewarding and quite profitable experience!

So… strive to get the best of both worlds: build up a foundational skill set consisting of scarce, highly-paid and timeless technology-agnostic expertise while specializing in technology-specific languages, frameworks, and platforms that are hot in the market.

In retrospect, go ahead and learn anything that is interesting and rewarding to you (it’s important to have fun!). If you are after success, long-term fulfillment, and a remarkable career, make sure also to master the timeless fundamentals of professional software development.