Nebojša Stričević wrote this on March 23, 2012
Students, learn languages
When I think about it I actually learned bunch of programming languages in school: a bit of Basic in elementary school; Pascal, C, Delphy and Assembly in high school and C/C++, C#, Java, Prolog, more Assembly and Matlab at university. And I probably forgot one or two. Do I think that’s enough? Not even close.
Only when I started to learn languages outside the university I saw the size of the world I’m ignorant of. University maybe tries to teach students a few languages that are widely used in the industry, but it fails miserably in something that should be one of it’s greatest goals - to teach a corpus of programing languages concepts that would give them knowledge needed to learn a new language in a few days or weeks.
Looking at the list of languages above you can notice that many of them share similar concepts: they’re imperative, object oriented nature and use a static type system. What you as a young software journeyman should do, is try to expand your knowledge with languages that are based on different concepts.
Below is the list of the languages that can provide significant eye opening to someone with the past knowledge similar as mine. Although there are many beautiful and interesting languages out there, list is made of few that are both interesting and different than something usually taught on university, but also practical.
Python, Ruby, Groovy
These are the languages that I think you can benefit most of. They are all dynamically typed, object oriented languages with a few features from functional world, useful for scripting as well as writing large projects. They excel at gluing things together and automating your daily routine. When you are familiar with a few statically typed object oriented languages, knowledge of one of these languages will vastly upgrade your toolbox. They are also very popular for developing web applications and have a well proven set of frameworks and libraries for that purpose.
Python and Ruby are a bit older, more mature and more popular than Groovy. They are used by many strong players of the software industry and it is not hard to land a job coding in one of those.
Groovy on the other hand can be interesting if your university is mostly Java oriented, as it is designed to play well with the existing Java code.
When I first met Scala i thought: “Wow, this is Java’s younger, cuter, hotter and more intelligent sister. It is all Java should be!”
I used it to write few plug-ins for the existing Java project that used OSGi framework. And it worked great. I was nice to have an application written in two languages, calling each others code, that can play so well. I learned about many new concepts, even on a small student project.
Along the way, I realized that Scala is a bit too complex for my taste. Nevertheless playing with Scala was a great experience and it’s worth checking it out.
Clojure is a new star from the Lisp family of languages. (And you should really know what Lisp is. If you don’t, go check it out.) That means that it will probably look strangest of all languages from the list.
Roots in Lisp inspire beauty and simplicity extracted from mathematical principles and lambda calculus. But Clojure is a very modern language designed to be both simple and highly practical.
Since it is a functional language with immutability as default and not particularly object oriented, it can move you far out of you comfort zone. But, if you stick with it, it will blow you mind.
I don’t know much about F# besides that it is a modern, functional language from ML family. It’s developed at Microsoft and it’s designed to play well with .NET platform.
I think that it is worth checking it out for the people who want to explore .NET more, or who want to stay in that domain.
What language to learn first?
Any. Even those not on the list. You should not look for the perfect language. You should look for concepts and diversity. Learn as many as you can. If you find one that you like, try to do some serious job with it. And then learn something else. Get out of you comfort zone.
If you know some of the languages from the list, you probably know where to look (hint.:Haskell, Erlang, Lisp/Scheme/Racket, Elixir…).
Because it will make you capable to quickly pick up new language. In todays world, it’s more important to be agile and adaptable then to have very deep knowledge about single peace of technology.
When I applied for the job at Rendered Text I didn’t know Ruby well. I wrote only a few katas and koans. But because I knew few things about few other similar and not so similar languages, I was able to pick it up reasonably fast. And a few weeks later it doesn’t seem like something so new to me.