Of course, not everyone will be an expert in every language. But having the ability to shift when needed to an unfamiliar language is what really makes a person a software engineer and not just a programmer.
Of course, not everyone will be an expert in every language. But having the ability to shift when needed to an unfamiliar language is what really makes a person a software engineer and not just a programmer.
I've been a desktop C++ developer for most of my career. I switched to iOS development for the last years. It was doable because Objective-C is native language like C++ and mobile apps work in similar fashion to desktop apps.
However I found doing Android development a huge barrier. The language Java was the easy part. The hard part was a completely different ecosystem, thinking and tools. With iOS it is easy, you got clang, xCode, cocoapods, homebrew and mostly apple tools and libraries to deal with. With Android there is a myriad of Java IDEs. There are several build systems. And each build system is seemingly huge and complicated, doubling and package or library distribution tools. Then there is a all sorts of testing systems, and the fact that Java is a world to its own. You don't use all the commands and tools a regular Unix guy might be used to like otool, nm, make, gdb, lldb, ld, gcc etc.
Still it was kind of doable.
Enter Java Script and web development. It confused the hell out of me. A completely different way of thinking of software development compared to what somebody used to native GUI toolkits running on one computer is used to. You got a client and server existing on different computers which have to synchronize. You don't debug in an IDE but in the browser.
And in some ways it feels like Java Script is harder for people who actually know a bunch of languages. You know there are common sensible ways of doing things which lots of languages do whether that is C/C++, Go, Java, Swift, Objective-C, Python, Ruby or Lua. But Oh no, JavaScript has the most odd ball nonsensical way of doing things. It is hard to get, because you can't figure out why on earth anybody would make the language behave this way. If you simply stopped thinking and didn't realize how stupid it was, you'd probably be better off.
In contrast, java with something like swing (not something that I would recommend learning BTW) would feel pretty familiar to you.
200 hours is a lot of time. It was worth it in this case, because Spark lets you do a lot of things that the Python environment doesn't (and vice versa), but I would be pretty hesitant to invest that time for something without an obvious benefit.
Programming is similar in that once you "get it" the skills transfer easily between languages. Learning a new language is much easier than learning the first one.
>Learning lots of programming languages is surprisingly easy. Eventually, familiar patterns appear that makes learning new languages easier.
From personal experience hiring programmers and dabbling in programming - the guy who devotes his life around being a Java programmer and grokking the entire ecosystem is far more effective at writing Java than the guy who is a stellar C guy who has been using Java for a year.
I think the "languages are just a tool! pick up the best one for the job!" trope is over evangelized. There are exceedingly few competent programmers who can pick up a language and be a true expert at it within a few months. Those guys are not who we're talking about in the article.
The more average programmer (e.g. guys who would let skills rust) is likely struggling with the basic concepts to begin with, much less picking up an entirely new syntax. These guys would take time measured years to get up to their same basic productivity as their first language.