I’m trying to be a better programmer. I have been writing and learning as much code as I can, the benefits are a threefold positive feedback loop:
- Learning is, in itself, very pleasurable (it makes you feel clever, which is nice)
- New knowledge transfers to, and enhances, existing skills
- New tools and skills provide a greater resource for providing solutions
But, how does a developer know which skills to learn and which languages are best to learn with? (Assuming that you’re learning for fun rather than as a work requirement.)
If Google is a good bench mark (assuming that they can take their pick of the best developers), one requirement (taken from an ad for a Software Engineer) asks for:
Fluency in two or more of C, C++, Java, Shell, PHP, Perl or Python.
If you are specifically aiming for a career at Google then making sure you are fluent in two major languages is probably the way to go, and there is certainly no downside to a developer broadening their skill set. In my experience, each foray into new languages has improved my PHP, and in turn, I feel pretty comfortable in Ruby and Python.
When deciding to learn something new: you could argue that PHP, Ruby, Python, Perl etc… are pretty much different brands of the same tool (procedural, interpreted languages). It’s great to have the option to use each, but these languages are not necessarily complimentary. It is unlikely that you would write a system with a combination of PHP, Python and Ruby. But, it is conceivable that you could have a project requiring C, PHP and Erlang skills.
Rather than learning interchangable skills, complementary languages might offer the opportunity to become a more rounded developer:
- Interpreted, procedural (PHP, Ruby, Python, JS)
- Compiled, procedural (C/C++, Java)
- Functional, concurrent (Erlang, Scala, F#)
Assuming that side stepping between similar languages is easier than picking up a completely new concept: it would seem learning these varied skills opens up more possibilities.
Sometimes I worry that by learning a particular, none mainstream, language (like Erlang) I could be backing the “wrong horse”. However, bearing in mind my earlier ramblings, there’s little downside to picking up a new way of doing things, for example Elang may not prove popular, but the functional approach will give me a head start learning F# or Scala.
This slide from Painless Payment Processing by Erik Stenman points out other benefits of learning more “unusual” languages:
Nice paradox:
The lack of Erlang programmers makes it easier for us to find great programmers.
- There are many great C and Java programmers, I’m sure, but they are hidden by hordes of mediocre programmers.
- Programmers who know a functional programming language are often passionate about programming.
- Passionate programmers makes Great Programmers
Or am I talking nonsense?