5/21/2015

Which Programming Language Should I Learn?

It's college graduation season, so it got me to thinking a little bit about the important infancy of our careers. For many of us, that infancy starts in a university classroom where we don't get to pick which language we're learning, the professor(s) pick for us. When I was in school my first class (and first class I wrote) was in C++.  Every subsequent class after that point was in Java or C (except my programming languages class, which was in... a bunch).  My senior project was C# 1.5. So, even in the short amount of time (relatively speaking) I was in school - I got exposed to 4 languages while learning the craft.

Let me make something very clear - I do NOT think the right way to think about computer science or software engineering is to learn the syntax of a specific language. In some ways, programming and carpentry go nicely together in this regard. A carpenter can use a circular saw, a band saw, a handsaw, a jigsaw, and many other kinds of saws that I know nothing about because I'm not a carpenter. But if you were to ask a carpenter "What's the best saw to use to build these kitchen cabinets" he might look at you sideways, because a saw is a tool and he'll probably use several different ones building your kitchen cabinets. Languages are tools. Saws are tools. Let's make this point VERY clear.

Now that I got that out of the way - once you have a fundamental understanding of what a call stack is, how arrays work, what data structures are, etc. etc., THEN we can talk about programming languages.  On my current project/product here's our choice of tools/languages:

  • PHP
  • AngularJS
  • Ruby (Chef Scripts)
  • MySQL (Not really a programming language, but each flavor of SQL is a bit different too)
Is this the right set of tools for everyone? Absolutely not. But for my company in our current situation it's the set of tools that makes the most sense for the solution we're building.  In order to best know the direction in which most companies are moving for writing their software, there's several places to look to know what the most popular technologies in use are.
  1. ThoughtWorks technology radar - this thing does a great job of showing whats gaining momentum, what's losing momentum, and also explaining why you should care. Broken down into 4 categories (Techniques, Tools, Languages/Frameworks, Platforms) it really helps to zero in on industry patterns.
  2. TIOBE Programming Community Index - if you want to know if your favorite programming skill is in demand right now, this is a pretty nice place to look
  3. Indeed.com Job Trends Graph - What I really like about this is that you can plot it in relative mode or absolute mode. Relative mode is great for showing how strongly something new may be growing, even if it's current market share may be minimal. Here's a couple of neat relative graphs for your viewing pleasure. Just to get an idea of why relative and absolute are different, switch graph modes at the top right of the graph - you'll see what I mean.
    1. AngularJS vs. jQuery
    2. Java vs. Python 
    3. Java vs. PHP
I'd love to hear if you have any specific places you like to go to keep track of emerging trends in the world of engineering. It's nice to know what's coming our way, so that we can remain better prepared for whatever's coming next.

JSON Jason