Fog Creek Software
Discussion Board

which language to learn?

which one you recommend to learn?

* haskell
* ml
* ada

i have few years of programming experience, and want to learn a new language which extends how i think about programming

Tuesday, September 30, 2003

read something called F# on microsoft's research website..

Prakash S
Tuesday, September 30, 2003

C# is the rage!

If you want to learn something cool, but impractical, try LISP or Python.

Jack "Destruction" Ken
Tuesday, September 30, 2003

* TinyC using the TinyOS... I don't know if it will furthur computer science if you study it, but someday when taiwan starts to put out Cat 5E cables with the processor, magnetic storage embedded in it you'll be first to bill 5000 an hour to the masses of bewildered programmers.

Li-fan Chen
Tuesday, September 30, 2003

>but impractical


Li-fan Chen
Tuesday, September 30, 2003

Give Scheme or Common Lisp a try.  Or if you really want a language to turn your brain inside-out and upside-down, try Prolog.  Personally, I didn't like it, but if it's a new experience you want working with something totally unlike the imperative programming paradigm that permeates most of the popular languages, Prolog delivers.

Matt Latourette
Tuesday, September 30, 2003

Consider APL (or one of its offsprings, A+, J, K, Glee) or Lisp. Both will definitely change the way you think about programming.

Also, don't think you really know C. Head of to [ ], and see if you really know C or still have a lot to learn.

And Python is super ultra practical.

Ori Berger
Tuesday, September 30, 2003


nat ersoz
Tuesday, September 30, 2003


Tuesday, September 30, 2003

I second Prolog

Matthew Lock
Tuesday, September 30, 2003

Of your original list:

Drop Ada. That's a procedural language with all the same stuff as every other procedural language, only with the DOD stamp of approval on top. There's nothing new there that isn't already in C++/C/Pascal/what have you.

As for the other two: dunno. They're both functional languages, so should give you a fairly equivalent "mind twist." I've thought about learning one of those two myself, but never found a decent way to get started.

Chris Tavares
Tuesday, September 30, 2003

>I've thought about learning one of those two myself,
>but never found a decent way to get started.

A couple years ago, I picked up L.C. Paulson's book, ML for the Working Programmer ( ) and worked through the problems. I found it a pretty good introduction to the fundamentals of functional programming.

Ken Dyck
Tuesday, September 30, 2003


Tom Vu
Tuesday, September 30, 2003

I would learn Ruby

Michael Johnson
Tuesday, September 30, 2003

If you don't know lisp or scheme I'd recommend one of those (scheme would be my preference) first. Of the three you list I wouldn't pick ADA as it's AFAIK a fairly standard procedural language. Between Haskell and ML I'd probably choose Haskell. It's such a purely functional language you have to start to think functionally, I think ML still let's you code imperitive code if you want to. On the other hand, Haskell is, IMHO, difficult to find practical applications for, that is it is difficult to interface with the outside, generally imperitive, world. If you go with ML you can use OCaml, which offers all sort of programming paradigms in one box. Personally I wouldn't bother with perl, python, or ruby if you want to learn anything beyond a new syntax. Sure they're all slightly different from each other but no where near as different as scheme or haskell.

Tuesday, September 30, 2003

Smalltalk !

James Ladd
Wednesday, October 01, 2003

Consider asking at Lambda the Ultimate too.  Ehud Lamm is a big proponent of Ada, and their audience is a bunch of people who love discussing different programming languages every day.  Although I'd imagine you know LtU since you're mentioning Ada in the first place.

Tayssir John Gabbour
Wednesday, October 01, 2003

I'd second Common Lisp, but it is not something where you are going to get to appreciate the finer points over a 2 week study period. You have to live it for some time. Remember that CL was a language designed to experiment developing new languages.

Just me (Sir to you)
Wednesday, October 01, 2003


I'm sure you'll agree.

caleb chang
Wednesday, October 01, 2003


Wednesday, October 01, 2003

I'm busy learning plt-scheme.

These guys have put together an excellent package including a good, easy to use, IDE (Dr Scheme) and some well written texts.

I'm reading through 'Teach Yourself Scheme in Fixnum Days.'  It is outstanding.

Ged Byrne
Wednesday, October 01, 2003

Lisp & ML will make C++'s templates make a whole bunch of sense.  Read Alexandrescu's book Modern C++ Design when you finish up on those languages.

H. Lally Singh
Wednesday, October 01, 2003

Try Ruby

Nigel Soden
Wednesday, October 01, 2003

If you work in an MS environment and have .NET then I'd go with SML.NET (Its on my todo list when I finally get a moment)

Has more details.

Peter Ibbotson
Wednesday, October 01, 2003


Most of the languages on this page will extend how you think about programming, although not necessarily in the way that you expect or want :)

My favourite is "Wierd", a variant of "Befunge". The Hello World program that comes with this language twists and turns like an earthworm tripping on LSD.


Author of "Comprehensive VB .NET Debugging"

Mark Pearce
Wednesday, October 01, 2003

i'm currently learning spanish and french, which i wholeheartedly recommend doing before learning ML or ADA. Out of the languages you suggested, I would recommend Haskell. However, if you have't already, I would suggest working through the Structure and Interpretation of Computer Programs.

Wednesday, October 01, 2003


Wednesday, October 01, 2003


Implement a language, don't just learn a langauge. Take the new language of your choice and try implementing it in a language you already know. or, take an existing language you know and try implementing it in the new language as an exercise.

You'll learn a ton about programming and you'll sharpen your knowledge of both languages at once. If you make it public domain, you may even win some street cred with the programming community.

FWIW, in 1998 Peter Norvig and I quite separately set about writing Scheme interpreters in Java. I knew Java and wanted to learn Scheme, and it turns out Peter knew Scheme and wanted to learn Java.

He's Director of Search Quality at Google, so his foray into free interpreter development doesn't seem to have harmed his career. In a less stellar but still satisfying development, I got a job developing Java tools in part because of my Scheme interpreter.

Why not set your sights high?

Reginald Braithwaite-Lee
Wednesday, October 01, 2003

>> Drop Ada. That's a procedural language with all the same stuff as every other procedural language, only with the DOD stamp of approval on top. There's nothing new there that isn't already in C++/C/Pascal/what have you

Sorry to tell you how badly informed you are... Ada 95 is object-oriented (although in a way a little different from most other OO-languages). In fact, it was the first OO-language with an international standard. It offers concurrent programming facilities second to none; type checking second to none, *solid* generics, strict interface/ implementation separation, good cross platform portability, compilers validated against the standard, decent exception handling, facilities for programming in the large and a wonderful GPL-ed compiler. You won't find these in the languages mentioned, or in any other language mentioned.

It is always good to study a functional programming language, no objections against that.

However, if you finally want to study a decently designed object-oriented/ procedural language that will really influence your programming for the better, than the game is just between Ada and Eiffel and their derivatives such as Spark and Sather.

programming language junky
Wednesday, October 01, 2003

If only you had listed which languages you *do* know, we'd have more ground to tell you which new language will better extend your knowledge.

That said, learn Eiffel.

Wednesday, October 01, 2003


I consider ADA and ADA-95 two separate languages.

Having said that, I remember when I was working on a Navy contract, and the base commander was showing off our work to some Admirals. They asked what the system was written in, and he said:

"The Ada project gave us a standard development language. That language is C."

Kinda sums up my entire opinion of Ada right there.

Chris Tavares
Wednesday, October 01, 2003

Haskell is very nice, albeit not too practical in my opinion. I like to dabble with it on occasions. O'Caml (a variant of ML) has syntax and constructs that are less capable, but OTOH is much more practical. You can easily learn Haskell, and then O'Caml will be very easy to learn.

As for Ada - sorry, don't know it yet. (and heard mixed emotions on it).

Also check:

for my recommendations for languages to learn.

Shlomi Fish
Wednesday, October 01, 2003

you want impractical but interesting?  Try forth!  :)

to be honest, learning any new language, its strengths, weaknesses, etc, would be of some benefit, but if you're looking for advice on what to learn, then throw out the "impractical" and look at a language that'll spark interest, save time, and/or further or expand your career, say, some scripting language, PHP, XML, Java if you don't already know it, C# if you're not an MS-basher, etc.

And, btw, definitely avoid Ada.  Though the DoD gave its seal of approval to it, most (if not all) new contracts are going to Java now.

van pelt
Wednesday, October 01, 2003

I second the recommendation for the Lambda the Ultimate weblog ( great weblog about programming languages, but they have a definite bias towards functional programming languages (like Scheme or O'Caml).

For impractical languages, I would recommend Scheme. For practical languages, I would recommend Python or Java.

Wednesday, October 01, 2003

Try Lingo:

Unlike some of the others, this is designed to be easy to use. It has compilable pre and postconditions like Eiffel, and the tech support is very friendly :) Also I should declare a vested interest - I wrote it.

On a more commercial level, the advice to learn C# is very wise.

Bill Rayer
Wednesday, October 01, 2003

Oh, just to throw another functional language into the mix, have you looked at Erlang?

This one's fairly unique in that it is actually used in real-time systems (it was invented by Ericsson and used in their switch products). I've heard good things about it, but never had a chance to look deeper.

Chris Tavares
Wednesday, October 01, 2003

Forget everything, learn Esperanto!!!

(Then check if you can program with it)

don't laugh
Wednesday, October 01, 2003

I'm surprised nobody has mentioned Dylan, which nicely combines the functional and OO paradigms, while still being a statically-typed language that can be compiled to C code.  And it's not a syntax-challenged ball of parentheses, like Lisp.

Phillip J. Eby
Wednesday, October 01, 2003

"And it's not a syntax-challenged ball of parentheses, like Lisp."

This sort of statement always comes up whenever Lisp is discussed.  You can write code with bad style in any language and Lisp is no exception.  However, it is also quite possible to write Lisp code that is easy to read and understand without ever having to count the parenthesis.

Matt Latourette
Wednesday, October 01, 2003

In regards to language syntax, as with many other things, I think the perception of the language depends on what's easy vs. what's possible.

Yes, it may be possible to write beatifully formatted, easy to read LISP. But is it easy? Not from what I've seen of LISP; most of it's been unreadable soup.

Python, on the other hand, makes it easy to get nicely formatted, readable code to the extent that you have to go out of your way to do it.

(All this is in IMHO, just me, not a flame, just a personal opinion.)

I remember when Dylan was being designed - it started out as a Scheme dialect - "Paren soup". The language designers switched to the imperative notation it has now and started a huge storm of protest among the community about syntax.

Of course, then Java took off, Apple pulled support for Dylan, and for all practical purposes it died. A real shame too, it looked like an interesting language.

Chris Tavares
Wednesday, October 01, 2003

From your list - I personally like ML the most.

But for weird languages, try Brainfuck :)

Thursday, October 02, 2003

*  Recent Topics

*  Fog Creek Home