How Many Programming Technologies Can You Really Master?
I keep seeing companies or their recruiters advertising they are looking for people "with significant experience developing iOS and Android applications from scratch and will have a mastery of modern mobile and web technologies, including Java, HTML5, CSS3, JavaScript, JSON and AJAX".
There is no such person. You can master one and be mediocre in the others; you can master one and then move on to another and forget a lot of the prior; you can simply fool enough people into thinking you can do it and hope you can figure it out just in time.
Programming today in any major area is highly complex, constantly changing, and generally done with a lot of time pressure. None of these allow you to devote a lot of non-programming time to learn even the most recent changes, much less master everything from scratch. You can really only learn a new environment by doing real projects, and how many people can simultaneously write large native Android, native iOS and responsive web clients all at the same time?
During my 34 years being a programmer I've only rarely worked in more than one major area. My first job was on a supermini and then 6502 assembly on Apple and Pascal on a PC, my two startups were for Mac in C, I worked some more for other people (including Apple) for Mac in C, a little C++ then Objective-C/WebObjects transitioning to web in Java on both client and server though only rarely both, some JavaScript, then C++ game programming on Mac and Windows and finally Objective-C and iOS. For each transition it was a lot of learning on the fly followed by years of mastering all the new stuff.
If for some reason someone can actually do both Android and iOS—much less web—at a real master level, they should be making way more money than most companies are willing to pay. What companies want is to hire few people who are then able to do everything and at the lowest pay level they can get. Yet I cannot fathom anyone being able to be an expert on so many things simultaneously and how they can write multiple apps in multiple technologies and keep up. I've known people who were incredibly brilliant but I can't remember anyone being so good they could actually juggle unrelated technologies at the same time and produce masterful applications.
Maybe there are exceptions. But I still think most people can't do it. People can of course master one thing then move on to master another but in the process you inevitably forget things from the first. Last year during my months of not having anything to do waiting for my layoff (I was one of the last layoffs for no apparent reason as all of our technology was already replaced prior to the final sale of the brand) I spent a month working on C++, then node.js and finally Swift. Going back to each this year (since all I had done in my new job was Objective-C) I found I had forgotten much of what I learned. If you don't use something regularly the memories seem to fall out the back of your head. In rewriting this blog engine in PHP I got all those languages mixed up in my head.
Now if you are writing in Objective-C and then Swift on iOS at least there is some overlap. But Android is not just a different language from iOS, everything is different from the tools to how you do layouts to supporting multiple major OS releases to the 24,000 or so different devices. Just keeping up with all the new changes in this years WWDC in June is taking a lot of effort; not helping is that sample code Apple released then is already uncompilable in the latest XCode beta. Even if you wrote no code and just watched videos and read documentation and sample code all day, how could you say you are an expert with a straight face?
Add to two different mobile OS environments all the complex mess that is modern web development, especially with Javascript frameworks that appear one day and then vanish the next. You'd need three heads to keep up with it. The Javascript programmers I worked with couldn't do more than keep up with one (in this case AngularJS).
So finding a single person who can write iOS, Android and mobile/desktop web in Javascript, using modern APIs and yet supporting older OS versions, understanding the plusses and minuses of different approaches to design and UI and the subtleties of all the different browsers and Android devices especially, and deliver bug-free results in record time, is fantasy. Oh yeah and work for less than market rates.
When I started programming things were extremely primitive and I only had to know one language and one OS and no frameworks at all. Even during my two startups I only had to master C, Inside Macintosh and some occasional 68K assembly. Today is not then. Yet we still only have one brain and brains aren't subject to Moore's Law. They can't be upgraded.
So if you (honestly) can do Android, iOS and mobile web simultaneously and deliver masterful results, I salute you! But I sure hope you are making 3X money too.