Since the beginning of 2021, I’ve been considering tech areas that I’m going into for the next few years. As I roughly decided them, let me share my thoughts about it :)


Context

Back in 2015, I decided to focus on iOS app development, and since then, I’ve been working mostly on iOS apps. To keep being a good iOS developer, I had to keep up with so many topics around Swift/iOS and wasn’t able to make enough time to catch up with things outside of them.

However, I gradually started to feel the limitations of focusing on iOS. Even though I can make normal apps (e.g. write business logic with reusable codes, make relatively complex UI, use various iOS frameworks, utilize architecture patterns, etc), I couldn’t go deeper or broader than that. When I was thinking about the reason for it, I realized that engineers at the frontier of Swift/iOS community are not doing only them, but they often incorporate concepts and techniques from other languages and platforms. That’s how they expand Swift/iOS area. Knowing outside seems very important to go deeper and expand the area.

Since the time I became self-employed at the end of 2020, I’ve been able to use some of my time to think about my interests and career. I wrote things I’ve learned in my previous blog posts such as Learning Again, Nov 2020-Mar 2021, and Report - April to June, 2021. After looking around some areas, I picked three areas that I’m going to go into for the next few years.

By the way, looking back at the time of the decision to focus on Swift/iOS, expanding my tech stack has been a part of my plan since then. At that time, I had two options in front of me: becoming a creative coder who mainly uses JavaScript, or becoming an iOS developer, and I thought like “Let’s go deep at first, then broaden it.” Apparently, JavaScript is a very versatile technology, whereas iOS development needs knowledge from a variety of layers, from the surface such as UI to the bottom such as handling System APIs, device sensors, database, network, and so on. After focusing on iOS for 6 years and learning a variety of things, now I feel the time has come to broaden my area.


Tech areas

I’m going into these three areas:

  1. System Programming
  2. JavaScript Ecosystem
  3. Functional Programming

System Programming

While making many apps for end-users, I’ve come to think that I want to make “tools to make apps”, rather than apps themselves. Here, “tools” mean libraries, frameworks, SDKs, software that support development, or ultimately, programming languages themselves.
I’ve made more than 10 apps from scratch during my career, however, just making apps didn’t bring me to this field. There seems to be a gap between making apps and making “tools to make apps”. Also, Swift and iOS are not that strong to make “tools”. It took me a while to realize this as I used to think there’s a natural career path between making apps to making “tools”.

Therefore, to get knowledge about making “tools”, I’m going into an area, so-called System Programming. It includes making CLI tools, SDKs, compilers, databases, operating systems, and so on. Linux environment seems more suitable in this area, especially for learning purposes. I may need to learn C++, as it’s very strong in System Programming, however, Rust sounds great as well. Rust seems to have the potential to replace C/C++, which is a great trend to follow anyway.

JavaScript Ecosystem

Trends around JavaScript (JS) are really fast and things are always changing around it. The evolution is very interesting to follow. TypeScript, PureScript, Elm, React, Vue, Svelte, XState, webpack, Electron, just to name a few. Especially, I’m interested in build tools like webpack, and some frameworks like Svelte and XState. JavaScript ecosystem has influences on other platforms as well. For example, SwiftUI is apparently influenced by React.

Also, JavaScript is a very versatile language. It can be used almost anywhere: web frontend, backend, mobile using ReactNative, desktop using Electron, etc. Learning JavaScript will open doors to more job opportunities.

Actually, as I had been writing NodeJS applications before I switched to iOS, I feel familiar with JS and it would be fun to learn more.

Functional Programming

It’s extremely interesting to learn Functional Programming. Especially, I enjoy learning pure functional languages like Haskell, Elm, and so on. There are a lot of interesting ideas, concepts, and ways of thinking about programming in the FP world.

This year, I attended several Haskell events including ZuriHac and a Summer School at Utrecht University. Although some topics were quite difficult to understand, I learned that the FP world is vast, and there are numerous interesting things to learn.

Moreover, since lots of modern programming languages are more or less influenced by FP, it would be beneficial to learn FP also for the purpose of understanding programming languages deeper.


A few concerns and answers

I’m going into these areas, however, I have a few concerns about it.

Job market?

I’m not sure how these interests fit the current job market.
System programming seems to be niche, the same for functional programming. There are a lot of web frontend (JavaScript) positions, however, my experience of it is not long enough yet.
Also, a lot of significant software components in these areas are open-sourced and I want to contribute to them, however, making money by contributing to OSS seems to be very difficult at the moment.
I think I need to look for opportunities that fit my expertise and interests well. If you know any great opportunities, I’d be more than happy to hear from you.

What about Swift/iOS?

For people who know that I’ve been working as an iOS developer for a while, this question might arise. I’m writing Swift and making iOS apps at work, and it’s an important part of my activity. I don’t want to throw them away, nor actually, I can’t because knowledge, skills, and experience remain in me.
Although I’m not sure how I can fit Swift/iOS in these circles well, Swift should relate to all of them. It has functional features, it can be used for system programming (though it’s not popular at the moment), and iOS app architecture patterns are largely inspired by the web frontend JS world. Going into these areas doesn’t mean I will lose Swift knowledge and experience. Learning other fields will definitely be beneficial for me, even for writing and understanding Swift.

Too many areas?

Covering these areas for one person might seem too much, however, these areas seem equally important to me, at least at the moment. I’m going to dive into these areas little by little. I think knowledge which crosses multiple areas is important anyway.


Conclusion

I’m going to go into these areas, which are System Programming, JavaScript Ecosystem, and Functional Programming, in the coming years.
In the future, this direction might be adjusted or changed because “The only constant is change” in the end. However, as these are quite fundamental and significant for overall programming or software engineering, it won’t be a waste of time to go into these areas, for sure.


Thank you for reading! If you have any questions or comments, feel free to reach out to me @yoshikuni_kato.