…Or at least be familiar with.
As a student, I am constantly consuming as much information as possible. Since I have no way of knowing what company I will ultimately work for, and by extension what language or programming style I need to be familiar with, I try to pick up a variety of tools that may prove useful.
If I want to work for an established development company, I need to know C, C++, Java, C#, and all the libraries that come with them. I may even need to know some Fortran or Basic if I work someplace with legacy systems. If I choose a startup, I need to know a multipurpose scripting language like Python, Perl and Ruby or I may need to know more modern languages like Go, Scala, and Ceylon.
Application development comes with the Android API on top of Java (or a Java like language) or Swift and Objective C for the Apple family. If I want to go into penetration testing, I need to know everything I mentioned above and then some. I won’t even touch becoming familiar with various IDE’s, investing in a text editor, familiarity with the big 3 environments of Windows, OSX and Linux, etc…
I believe you get the picture at this point. Not knowing what to know equals knowing a little about everything. Bringing the focus back to programming languages, the sheer volume available can be overwhelming in itself. My solution was to focus on the types of languages I should be familiar with, and pick one language from each type to try and pick up.
Industry Applications – Java
I chose Java as my industry level OO language for a few reasons. According to several sites using various metrics to rate the prevalence of different programming languages, Java leads the pack on nearly every site. On top of popularity, the JVM which Java compiles to is extremely useful for its portability, and knowing Java gets you a fair bit of the way into Android development.
Scripting Language – Ruby
This was a hard choice between Python and Ruby. Python seems to be used in a larger variety of projects than Ruby, but my interest in learning Ruby for its Rails application has led to me using Ruby more often when given a choice of a language to use for school assignments. I don’t think you can go wrong with either language, I just enjoy Ruby’s syntax and feel a bit more. It also leads to a nice crossover in web development, and crossover was key when I chose to invest time in these languages.
Low Level / Performance Focused – C
You just can’t go wrong being familiar with C as a programmer. Nearly everything is built on C or C++ these days, and it is always wise to know a little about the system that runs the tool you are using. I focused more C because C++ takes a more Object Oriented approach. Going back to crossover with languages, if I have a problem requiring an OO language, I would rather use Java or Ruby at a higher level. I do intend to be at least a little familiar with C++ at the very least for its applications in game development.
Functional Language – Clojure
For a while, I contemplated Haskell vs Scala. Haskell is a “pure” functional language that compiles down to run at a machine level. It is gaining popularity with bringing legacy systems up to date, and is used in a Linux window manager I was intrigued with, named Xmonads. Scala seems to be gaining a lot of popularity as a hybrid language that compiles to the JVM. I have read about a lot of programmers switching from Java to Scala as an “easier” transition to a functional language. However, when I discovered Clojure I was sold.
Web Languages and Frameworks – HTML5, CSS, ClojureScript, and Ruby on Rails
To summarize, I wound up picking C, Java, Ruby, and Clojure as my go to tools for my various programming needs. As a programmer, you will always have a language or two that you know better than others, and feel more comfortable working in. However, it is my belief that being at least familiar in a language for each of these categories greatly expands your toolbox as a developer.
Is this a good way to approach learning? Do you think I should pick just one language to do everything in until I know what my employer uses? Should I focus less on cross over and learn the “best” language for each category? Maybe focus on just one category, and learn the most used languages in that category. Let me know your thoughts in the comments.
Featured Image from Pixabay. Edited by Brad Wilson.