views:

311

answers:

3

Not best to learn, but easiest to learn. Not easiest for programmers, but for non-programmers (as a first language). Not opinions or anecdotes, but are there any studies?

I think that functional/declarative programming (Haskell, Scheme, Lisp etc) is more powerful and more abstract than imperative programming, and therefore is intrinsically harder to learn. I wonder if there is any actual evidence, one way or the other.

+2  A: 

No, it's too hard to come up with a meaningful study that controls for all the variables. See also

http://stackoverflow.com/questions/354124/are-there-statistical-studies-that-indicates-that-python-is-more-productive

Brian
+1  A: 

The best language for beginners is going to be the one with the fewest things to understand.

Neither Functional nor OO languages are particularly easy in that way--completely straight-forward to grasp (although both can reduce to something pretty simple, but the fact that all that other syntax and functionality is hanging out there is actually an issue--it makes people want to understand it, they feel like they are missing something when looking at more complicated code, etc.)

I hate to say it, but the best languages were probably the old Basic and Pascal. Very few tricks--heck, basic didn't even have functions at first!

This lets you concentrate on understanding variables and program flow before being hit with stuff like objects, pointers and immutability.

That said, if your question wasn't just theoretical you might look into BlueJ. It's a Java IDE made exclusively for training. It doesn't require the hardest java syntax such as "public static void main()" and "System.out.print"--They are unnecessary because of the unique way it deals with objects. It also introduces students to UML and gives an instant understanding of Objects.

Bill K
+1  A: 

Matthias Felleisen and his colleagues have assembled some very convincing evidence that the easiest language to learn is a language that is designed for beginning programmers and has tool support aimed at beginning programmers. They have actually designed and implemented four such languages, each a subset of the next, and all subsets of Scheme. They have some very convincing papers, pedagogy, and software. Also, their results have been replicated in Germany as shown by impressive published results in the latest FDPE workshop, as well as many good but unpublished work in high schools.

The take-away message is not that Scheme is good for learning, but rather that beginning programmers need tools and languages (they call them "language levels") designed just for them. I believe this language-level concept could be applied to other languages, including C (which I teach at the introductory level), but unfortunately Felleisen et al have not published a set of principles or guidelines that would allow someone to replicate their work using a different language.

So if it's evidence you're looking for, the only available data conflate the use of the functional language with the use of language levels and a custom-designed programming environment. You'll have to judge for yourself which factors are most important. I know that if language levels and a "student's programming environment" were available for C, I would choose that in a heartbeat over, say, full Scheme and the Bigloo Scheme compiler.

Norman Ramsey
Thanks! That first link seems to be down, here's his homepage http://www.ccs.neu.edu/home/matthias/ and a similar link that is working http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html
13ren
Link is up as of Tue Mar 17 01:39:38 UTC 2009
Norman Ramsey
yes, it's up now. BTW: this interview http://www.northeastern.edu/magazine/0301/programming.html makes me suspect it's the inspired lecturer, not the material - but the replication you mention in Germany counters this.
13ren