This blog has moved here and this post can be found at

… This is a personal message address to me in future …

What is my next programming language?

Scala , F# , Haskell , OCaml or Erlang?

Yes, my next language will be functional, and I will focus on improving my skills in concurrent programming and distributed applications. And here come the reasons for the choice of the above shortlisted languages:

  • I just experimented the threading system of Python … that really not fair guys, so I quit Python!
  • Scala use the Java threading model, that’s good as far as I know (and Scala looks fine!);
  • F# enable to use all .NET library so I could experimented Tao on Mono (.NET threading is also good, IronPython rocks);
  • Haskell is pure … I’m curious to understand those mysterious monads;
  • OCaml mixes functional and imperative … really efficient and yet simple;
  • Erlang embed asynchronous model inside the language … concurrent and yet simple.

Why concurrent programming? Why distributed?

Nowadays computers aim to solve complex systems: large amount of data to process, large number of interactions, or naturally distributed systems. Parrallelism and distribution seems to be in the pipeline with multi-core processors and clusters supported onto a network more and more efficient (optic-fiber at home by example). Without looking at language theory (see Future of software design?), my next language has to enable a software design with those intrinsic features: parallelism (data or computing) and distribution.

And why functional?

I don’t really know … for the fun??? I read a lot about Haskell recently; I just want to change my mind with another programming paradigm, and I secretly hope that my functional code will be better optimized on multicore machine. If you want real justification you may have a look at Functional Programming For The Rest of Us or Everything Your Professor Failed to Tell You About Functional Programming.

Final choice of my future language

Still have to choose one in the shortlisted choices, but with which criteria?
Type inference is a must (coz above all, any good programmer has a special quality: he’s lazy). But I don’t see a strong typing as a must-have: it sure solves problem, but not all, and in the end you still rely on unittesting.

Let’s do a first cut in the shortlist based on personal assumption: .NET is a better platform than Java (wow!). So:

  • remove Scala: F# offer same kind of possibilities using .NET;
  • remove OCaml: shares a common ML-like syntax with F# but F# offer .NET platform access where OCaml offer efficiency.

Haskell is pure but I prefer easy development aiming at concurrent and distributed programming, which is not part of the Haskell language itself. Then I have to choose between Erlang or F#: let’s go for Erlang, let’s concentrate on distributed development embedded in Erlang language. If later I really need/want .NET platform, it will still be good time to review all those choices adding new languages progress!