Learn a new programming language

As many of the luminaries of programming say, you should learn a new programming language every new year. That’s what I’ve been doing for several years now. Maybe not that strictly to start on January 1st with a completely new language and lose all interest in it on December 31st, but learning new things (including new languages) is one of my favorite things to do. And since I can probably list more languages that I think I “know” than I have spent years as a professional programmer (whatever that means), I think I’ve been true to above mentioned rule.

I’m not a big fan of New Year’s Resolutions — in fact I’m closer to the opposite of being a fan — but since the last language I learned well enough is now the language I use at work (Ruby), this would be a good moment to try to wrap my head around something new. That does not mean I’m going to stop learning Ruby. Working with it on a daily basis and subscribing to several Ruby related blogs is guaranteed to provide enough experience points.

Which language should I choose? I don’t know yet but I have some candidates. And I hope that some nice people will make some nice suggestions in comments. But first a list of languages I will certainly not choose, because I know them to such extent that I don’t think I need any more training (which of course does not mean I know them well): Ruby, Java, C, C++, SQL, Perl, Python, assembly languages. Another category is languages that I simply don’t like: C#, BASIC, PHP, Pascal. It should be practical and useful in real-world projects, so joke languages like INTERCAL, Brainf**k, Whitespace are right out (although I deeply admire their humoristic values). For obvious reasons I also reject to learn fossils like Cobol, Algol or Fortran. And APL is way too exotic.

Most of the other languages should be OK, provided they have some significant user base, working and free tools (preferably for both Windows and Mac) and some future before them. This does not mean that I’m looking for a language that will find me a new job, as it wasn’t the case with Ruby either. I first learned it, then started to look for a Ruby job.

So, my candidates are (in no particular order):

Scala

Scala may be too similar to Java, but it’s nice to see how much can be improved in Java. I’ve already read one book about it, so I know (and like) the basic stuff. Another language that is an improved version of Java is Nice (mostly concentrated on adding syntactic sugar, but nice anyway), but it seems that its development stalled in alpha phase somewhere around 2003.

D

D is C++ improved. It looks very interesting, enhancing C++ with a huge number of features known from higher level languages, e.g. garbage collection or closures while retaining its low level and speed. But it’s been such a long time since I’ve done anything in such a low level language that I’m not sure if I will like it.

Some functional language

Probably Haskell or Erlang. Functional languages are known to be mind twisting devices, but “a language that doesn’t affect the way you think about programming, is not worth knowing.” (Alan J. Perlis). Haskell is known for optimizing the code through lazy evaluation and similar techniques, and there are several known applications written in it, including application server. Erlang is mostly known for its light-weight concurrency support, so with the emergence of multi-core processors, some say it might be the language of the future.

Smalltalk

Another language that I know basics of. A language that both Java and Ruby were at least inspired on. The syntax is a little bit strange at first and the OO paradigm is implemented a little bit too tightly for my tastes, but those are not show-stoppers. My interest in Smalltalk returned, when I have read about Seaside — it really looks interesting.

Lisp or Scheme

If I could only get past the awful syntax (or: the awful lack of syntax)…

JavaScript

Well, as someone who has been creating web-based applications for several years now (I started in 1999), I know the basics of JavaScript. But I don’t really like it. In fact, it scares me. But there’s more and more evidence that JavaScript might be the Next Big Thing.

So, which one to choose? So many languages, so little time… I’d greatly appreciate any comments and ideas.

About these ads

10 responses to “Learn a new programming language

  • solnic

    It’s really weird that you’ve been creating web apps for so long and you still don’t like JavaScript, I’d say you should give it a try, especially when there are many helpful JavaScript libraries out there (I’m sure you know Prototype, now don’t you? :)).

  • zickzackv

    IMHO Common Lisp has nice features, not many (none?) other languages can offer.

    * (real) macros
    * different Object System
    * powerfull Meta Object Protocol for defining new Object behaivior
    * different exception handling with restarts
    * a REPL. An interactive Prgramming Experience. A bit like ./script/console
    * fast open source implementations (sbcl, clozure)

    If you realy want to learn a new language not a new syntax than Common lisp is the right language.

    Buy or read http://www.gigamonkeys.com/book/ and get used to the lack of syntax.

    Have Fun!

  • szeryf

    solnic: it might be in part because my first contacts with JS were in times when it was synonymous with crappy, lame, disastrously unusable webpages made by amateurs. I know that the situation changed dramatically since then, but I can’t get over the first impression :)

    I remember that I was truly shocked when I read an article a couple years ago showing how to do inheritance and mixins in JS. That was the first time I thought there may be more to JS than document.write and alert().

  • szeryf

    zickzackv: I should have mentioned that I had read Practical Common Lisp quite thoroughly and one or two other books rather quickly, so I know that Lisp is really powerful (and why). But when I tried solving some simple tasks with Lisp, it was really tiresome. So I’m not sure if I will be able to get to the advanced stuff before I get tired with the easy stuff :)

  • Daniel Bernier

    I can relate…I’ve been teaching myself for a while, also not on a strict schedule.

    If you’ve already read PCL (even quickly), this may not be useful, but it’s an interesting read…and it’s short, so you can be more thorough, in less time:

    The Nature of Lisp: http://www.defmacro.org/ramblings/lisp.html

    Have you tried reading The Little Schemer? It’s fun…find it at a book store and sit down for half an hour, see what you think.

  • szeryf

    Daniel: thanks for advice. I will definitely have a look at The Little Schemer. I’ve heard much good about this book.

    I have read the Naure of Lisp article and it’s quite interesting, that’s true, but there not much new for me. The main point (at least in my understanding) in this article is that Lisp makes writing DSL’s very easy by treating data and code the same way. Which is correct and I know that it’s very useful, but it’s not a big win over Ruby for example. Ruby also makes DSL stuff easy and it also has much friendlier syntax.

  • hm

    How about a hardware description language, such as Verilog or VHDL, in combination with a suitable FPGA development board? I am a software guy myself and I started learning Verilog recently, and I truly found it changing my overall approach to computers. People talk about exploiting parallelism these days, but once you sit in front of an FPGA development board with several hundreds of multipliers available, you really start questioning the way you have been developing software up to this point. At least, that’s what happened to me…

  • szeryf

    HM: learning a hardware description language is sure to change the way one thinks about programming the most, but for me there are a few “but’s”. First is that I’m also a software guy, but with a strongly developed disregard for hardware twiddling :) Second, the FPGA board doesn’t fall into the category of “free tools”. And third, this would probably take much more time than “software” programming languages and free time is something I sadly don’t have too much :(

    But I have a friend that is making a living creating hardware boards with VHDL and FPGA’s (or something similar, I’m a total layman here) and I’m certainly going to ask him what is needed to start playing with those.

  • Bill

    * Asynchronous JavaScript and XML, a.k.a. AJAX :D
    A 2-in-1 “package” that’s very practical

    * Any Hardware Description Language would also do, but I think you’ll have to fresh-up your logic design knowledge ;). For a more C-Like approach, you could try SystemVerilog, but then you’ll miss the fun!!

    *
    - Common Lisp is a good choice, aspect-oriented…
    - What about Eiffel?
    - I would also suggest ML or OCalm!

    * For something different:
    - A declarative one such as Prolog.
    - Functional languages like Haskell are a totally new experience, you actually “let the problem solve itself” hahaha

    *** BUT ***
    D is an excellent choice, seems to be a very powerful language and it has a small but creative community!!!

    Good luck and I hope you’ll enjoy whatever you choose and improve your way of thinking

    P.S. you could always learn Fjölnir or Aheui, that way you’ll also learn Icelandic or Korean accordingly hihihi

  • troels

    I just picked up Lua, recently. It has much of the same syntactical elegance as Python and Ruby, but it has semantics, that resembles lisp (Or perhaps more Javascript). A really nice thing about it, is that it’s such a small language, that it’s fairly easy to learn.
    Have a try.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: