Fast-track to a new language for an experienced programmer
Ivan Dlugos Jul 15 Updated on Jul 16, 2018
OK, so you are a software developer/engineer/coder, whatever you call yourself, and you are having some thoughtful pause between the tasks coming in a never-ending stream…
"Yeah, I can write a pretty decent Java/Python/… (fill in your favourite) but so what? This stuff is getting boring! I need some challenge! I gotta learn some new tech!"
And there you are, searching the internet for the "Best programming language to learn in 20XX", checking out the TIOBE Index, comparing salaries those languages could earn you, etc. Been there, done that. And I'm not going to discourage you, quite the opposite, let me give you some hints to guide you along the way.
Make sure you know why you are doing it in the first place. Is it to sate your curiosity? Or do you feel your skill set is getting outdated? You really, really wanted to finally do some functional programming? Maybe you are even one of the pragmatics who just wants to have the best tool for the job :)
Whatever your reasons, remember them or write them down on a sticky note or something. You are gonna need this to steer you in the deep waters of choices ahead of you. You might come across, for example, this latest cool-kid-on-the-block which does everything c++ does, but much better, bringing a lot of new features, solving all kinds of problems. It might just so happen that they forget to mention all kinds of problems it's gonna bring (you know.. you don't know what you don't know).
There are all kinds of interesting languages and technologies that might seem very tempting at first, but be ready and remember what your original motivation was. Either stick to that or just update (aren't we agile after all?). Just have and keep some general direction or your noble journey to master a new language might end up like that failed project. If you've worked for some time in a company of any size, you know which one I mean.
Picking the right one
This is strongly tied to your reasons and expectations. Take a quick look at the few you are interested in. Check out their homepages. Scroll through the introductory tutorials/quick start guides. If you want to see the hard data, take a look at their popularity on Google Trends and TIOBE. Filter them on StackOverflow and GitHub to see the state and drive of the community.
After your quick research, you would ideally end up with a single language to tackle next. We all know it's not gonna be the last one so if you can't decide, just throw a dice.
OK, got it, whats next?
Learn by observation
Actually follow the quick start guide or tutorial. Watch a video on YouTube. For some languages, like Go, for example, you don't have to install anything to quickly try them out. You can do it online in the browser, on a site provided either by the language creators or by third parties (e. g. coding-challenges, tutorial sites, …).
At this point, you should get an idea what the language feels like, how it compares to what you have used before. In case you have any doubts, don't be afraid to revisit previous steps to make sure your reasons and expectations are met and you actually like your choice.
Learn by practice
Obviously, you can't learn to program in a language without actually doing it. Here are some tips to get you started.
use a coding-challenge site, e. g. Codility, HackerRank or similar. This is great for two reasons. Firstly, you have an online environment to practice in (no need to invest your time and set up a proper local environment yet). Secondly, you have actual problems to solve, with a proper specification, already defined tests, etc. This is a huge benefit because not only you are getting the syntax into your "muscle memory" in bite-size pieces, but you are also training and refreshing your algorithmic thinking (and that never hurts). Yeah, some of those live editors are not too good (though they are getting better each time I check) and if this is a stopper for you, just set up your dev-env, use ProjectEuler and do the scaffolding for each problem yourself.
create something, useful or useless, doesn't matter too much. There are many things the coding-challenges do not cover - databases, APIs, sockets, and rest of the real world stuff you are dealing with daily. So after your algorithmic thinking is up to speed, you should try to use the language on some actual project. Something that would keep you engaged consistently and provide you with much-needed practice and experience.
give back to the community, by working on open-source projects in the language you have just learned. There is always someone in need of a helping hand so if you can't think of anything to create yourself, why not code some PRs and make the world a better place? Take a look at this list of OSS projects (by language) looking for outside help.
Use it professionally
This is the real deal. Until you have used the language for a reasonable time on a (preferably larger) project, you are not going to cover its intricacies and really get to know it. Therefore, as soon as you feel comfortable, or sooner if you are a perfectionist, try to incorporate your hard earned knowledge wherever it makes sense. But please make sure you are not one of those guys with a big new hammer for whom everything looks like a nail :)
Time has passed, a few months, a year or more… You have finished a project or a few in the new language. You know how it ticks, you know what you like and don't like…
And if you are the ever curious guy like me, you are going to be asking the same question that got you here.