Ask HN: Is it worth switching from web development to native iOS dev?
hello everyone, hope you are having a good day, my background is CS in university after that worked on some agencies did many things, from back end JAVA EE to android apps, and recently (3 years ago) moved to do React and frontend mainly, I live in Copenhagen and have a decent job and a good pay
my question: is it worth it switching to IOS development and do that mainly for the next few years, my motivation is mainly investing more in the exclusive apple ecosystem, looking to expand my area and work in completely different constraints and runtimes
Also if you have a better career idea please suggest it
thank you
67 comments
[ 3.1 ms ] story [ 136 ms ] threadAnd learn native Swift, not React Native or Flutter or some other fad hybrid approach. It’ll be worth it in the long run.
How? Feels to me like I keep seeing recruitment for cross-platform devs more than native devs. And a lot of companies seem interested in pumping out cross-platform apps from a single codebase than developing separate native apps.
There will always be a need for expert native devs who can build high performance apps. There are things you simply cannot do with crossplatform apps, specifically things like low level OpenGL code and edge ML. Yes there are less of these jobs, but they tend to pay much better and are in heavy demand.
https://www.youtube.com/watch?v=1HYnrdKEVMU https://www.youtube.com/watch?v=LbcuLfrt8XA https://heartbeat.fritz.ai/image-classification-on-react-nat...
You're right there will always be a very high demand for native engineers to build the underlying bridge code to back these capabilities. As cross-platform tools gain new bridged capabilities and become faster (https://engineering.fb.com/android/hermes/), as they have been slowly, I think the use-cases where using something like React Native or Flutter is possible and makes sense will grow.
Maybe the lower bound might be higher, but from my experience working in FAANG/IB/HedgeFunds the pay for normal SWEs (web frontend+backend, fullstack, whatever you wanna call it) was always higher than iOS devs. (most of the time much higher).
And I wouldn’t include IB or hedge funds in those numbers, because building internal tools is rarely where the money is.
As a backend dev that has built a few mobile apps in Android and iOS, I hated wait for code to build and deploy to mobile phones. I hated trying to track down errors that only happen on certain devices or tweaking the UI for each phone screen. I hated the annual upgrade monkey dance to support the new version of iOS or Android.
If you switch languages or platforms, you may take a pay hit while you ramp up or you might can get lucky and find a company that will pay full price you to learn the tooling.
Typically, there will be an opportunity cost of learning swift instead of getting paid to do what you know. If it takes 200 hours of learning and you earn $50/hr, that will set you back $10k in lost time.
Don't change because of money. Change because you're bored of react.
After a lot of web and APIs dev (NodeJS, Go, Rust, VueJS) I'm now building the native apps of my project (https://bloom.sh).
I find mobile development (especially iOS) very frustrating, the ecosystems are really closed and platforms are not focused on empowering developers but growing their profits and closing more and more their walled garden.
The only 2 reasons I've not abandoned mobile development are:
1) Flutter, a fresh air in UI development, whether it be the simplicity, the tools or the ecosystem.
2) the possibility to build offline first apps.
Most jobs out there are fixing other people shitty code. If the company is mature enough to be making a lot of money, the chances are the code has lots of crap in it.
I did the opposite. I moved from native iOS to React Native for iOS only to React Native for iOS and Android.
It is definitely more complicated to do React Native for now, if you need to do anything that touched the native frameworks/hardware, so it definitely helps to have the native experience.
Finally, I would say that if you are into learning more iOS and getting the native feel, go for it, it will be a fun trip. And after a year or two, you can decide if you want to keep going with it, switch back to something else, or go with React Native (or anything else, I just have more experience with it to talk about it).
While a more senior developer could mentor you, once you understand the platform inside-out, you become more of an authority, and that opens you up to amazing possibilities irrespective of what language or framework you're using.
Recently, I switch to a role in ML and its been a change in my workflow so far - which is something I expected, but fun nonetheless. I don't get to do UI/UX in the visual sense but now I have to care about design of ML models and deployment so that other front-end clients can use them.
I would say give iOS development a go ahead because you want to!
If you would want to make a move to backend/full-stack, you might need to pick up skills like databases, queues, caching, building APIs, and DevOps. But good companies are willing to bet that you can pick up new skills on the job if you have some sort of foundation.
Proving that you can apply your self-taught knowledge and letting them know you can provide value as your time spent in the new field grows, will be more than enough for the company to let you make the switch.
- iOS will be around a long time.
- Big brands and startups are basically required to have an app in the App Store if they want to succeed.
- Every year a new version comes out that requires developers to fix bugs and sometimes adopt new technology.
Here are the cons:
- Extremely difficult to build an indie business on iOS given that there is a single distribution channel that you don't control.
- The learning curve is pretty steep.
Here are some other points:
- Good iOS developers are harder to find than good web developers (feels true to me, it might not be).
- You probably won't be on call as an iOS developer (this is important to me, it might not to you).
Developers are paid well across the board. I would pick a technology you enjoy working in and isn't in decline. I believe developers are more likely to succeed if they chase their interest over their salary.
I don't think that will continue to be the case for much longer. It's mirroring the web to an extent - for a long time every business needed to have a website, and now more and more don't bother with anything more than a holding page that directs users to a few social media accounts. Brand apps are likely to go the same way, especially as Apple are doubling down on rejecting apps that don't provide useful functionality now.
Having an app for your brand is worthwhile if you have something to say and something for users to do. If you don't it's painfully obvious that the whole effort was a waste of time.
Would this imply it is easier to build an indie business on Android?
Which makes it wrong to say iOS’s single distribution channel is bad for indies: it’s actually good for indies.
Unless you claim that walled garden and paying users occurring together is a sheer coincidence.
this is a huge bug in the ecosystem from a user perspective as you have to continue paying to keep your software working.
Upgrades on the web take time and resources too. So I don't think this is unique to iOS.
Thank you! This was the reason I went back to Android dev after trying web dev for 7-8 months. There were other reasons too.
As others said, play with different tools and do what you enjoy!
Understanding the tools and basic architectures and APIs will be useful on your CV.
Doing some React Native might be the way in for you.
Church-Turing yadda yadda
If Apple does Apple things, they might make it harder and more expensive to develop. You might be a great programmer, but your company may not want to build native iOS apps.
Obvious exceptions apply e.g. if you just build a widget as a lifestyle business.
Have you considered Flutter, at all for native mobile development? Not sure there is any demand for Flutter developers, per se, but since you are looking at mobile development anyway, might be worth a look.
If you're going all in, you'll probably be okay, but I'm nut sure how broad the audience will be longer term. It feels like the focus is going towards cross-platform (at least iOS + Android) as much as possible. There will always be a need for some custom glue to each respective platform even then though.
iOS isn't going anywhere, but Android is also here to stay, and a huge market share to ignore. Few businesses will fund two separate applications with distinct code bases if they can target both relatively well with a single code base. That's just my $.02
In my anecdotal experience however, frontend (React) and backend (Go, Java) devs are in much greater demand broadly across the market, rather than mobile devs.
I work freelance for more than 20+years and have done almost all: Windows Apps, Web Apps, Mobile (iOS, Android), Cloud, nosql, sql, utilities, etc.
Adding an extra to what you have make you stronger. Is a big plus for me to say "I know this and that and that...".
Of course, I have my preferences and strengths, but I can fit in almost any project.
Also, you might want to take a look at Flutter. It's a new(ish) cross-platform mobile development framework from Google. It seems to be getting some traction, and allows you to write truly cross-platform mobile apps. There are other cross-platform mobile frameworks (React Native, ...), but Flutter seems to be gaining momentum.
Anyhow, if you are interested in mobile development, give it a try! It's not you are locked into your choice for life...
1. I became "stuck" doing iOS development. I recently had to switch jobs, and even though I have some server and web experience, it was more scattered and dated than my iOS experience. I was looking for senior software engineer positions and with my track record of iOS development, the only positions that gave me an interview were the iOS ones of which there were a lot less. If I had a history of server work, I have a feeling I would have gotten a lot more interviews even for jobs that didn't use the specific stack my experience was in. At this point, if I want to get back into full stack dev, I would either have to convince my current job to switch teams, or take a cut in seniority and pay.
2. iOS development is behind on modern UI dev concepts. Developing for iOS feels like going back to jQuery or Backbone.js from React. Things like a declarative user interface, automatic DOM re-rendering and UI Bindings are in their infant state in iOS, while they have been core concepts of web frameworks for a decade. As a result, a lot of iOS code out there is very messy. While the web moved towards light user interface components and centralizing business logic in the Redux state, iOS stayed with the MVC pattern which in practice often results in giant, untested view controller files very reminiscent of the big jQuery script files of the early 2000s. You can try to fight this by adding your own architecture and external libraries, but such approaches will always be second class citizens, not the default.
(SwiftUI is going to address some of these issues. However, its a newer technology and most existing iOS apps will be slow to adapt to it)
3. It will be harder to pass a FAANG interview. One of the crucial interviews is the "system design" interview which is almost always server related. As opposed to the algorithm questions which are easy to study for from a book, the only good way to answer these system design questions well is by having experience in designing and building such systems. If you stay on the client side doing iOS or front end, you won't be able to answer such a question effectively.
The reason I moved to iOS from front end was because I wanted to get outside of the browser to a more full feature platform. In retrospect though, the obvious platform to transition to is not iOS or mobile dev, its the server. The server is a full feature platform which gives you the ultimate freedom to do whatever you want. And while frameworks like Ruby on Rails or React come and go, I found that job openings were pretty indifferent between the specific framework you worked on as long as you have server experience in general.
The ecosystem is amazing. I love the tools. Xcode is a joy of an IDE to work with. There's some room to improve, but compared to everything else... it's not even a question. The community is full of people who are full of wonder and excitement.
As a web dev, you probably already know some Ruby and have some familiarity with some build tools that I didn't when I came to iOS dev. That'll help. You won't be exclusive to Apple. You'll be using CocoaPods and Gradle and Bazel and Jenkins and Travis and god only knows what else. On any given day I code in Swift, Objective-C, Ruby, Kotlin, and Groovy.
At the end of the day, remember you'll be doing this 40 to 80 hours a week. Make sure you enjoy it.
1. What do you do to avoid massive view controllers? I have found that a lot of iOS apps I have worked on end up having the view controller be responsible for doing everything from fetching data from an API to setting the corner radius on some component. This leads to view controllers being really big and not unit tested.
2. Do you do anything to explicitly keep your application state in one place? I find that state in iOS apps ends up being scattered between a data store, singletons and view controllers. This is a lot more cumberesome than something like Redux where state is just in a single store.
3. I am pretty excited about SwiftUI as it addresses a lot of these pain points and brings iOS development into a more modern era similar to React. What is your opinion of SwiftUI? Are you using it on your apps? If so, what have been the challenges of introducing it into existing apps? If not, why not?
2. No. Again not helpful. This is a domain specific problem. I will say I'm waging a now multi-decade war against singletons. Dependency injection is the way to go. For Swift checkout Swinject, it really superpowers your testing.
3. Haven't touched it... yet. My primary projects need to ship and my secondary projects haven't hit the point of UI. Won't until later this year. Then I'll deal with SwiftUI. Combine, however, is my new hawtness and I recommend diving into.
Swift itself has made me feel a lot of enjoyment and productivity as a solo developer, I feel I'm able to produce a higher quality of software faster with far less npm noise and "busy work". There is a lot more work in React right now but with that comes a lot more competition and a lot of not very interesting jobs doing repetitive CRUD work. The community is much smaller but very friendly and welcoming to newcomers and beginners. With CoreML, ARKit, SwiftUI and Catalyst it's quite a fun time to be working in Apple's walled garden.
Keep in mind there is a considerable upfront time investment in doing this, there is a lot to learn. Swift itself should come fairly naturally as it's designed in a way that you can get by with a small subset of it and gradually add more. Learning the platform and it's APIs however takes some time.