
On Tue, 23 Dec 2003 17:26:20 +0000
Graham Klyne
I've spent part of the past few months learning Haskell and developing a moderately sized application. I came to this from a long background (20 years or so) of "conventional" programming in a variety of languages (from Fortran and Algol W to Java and Python). For me, learning Haskell has been one of the steepest learning curves of any new language that I have ever learned. Before this project, I was aware of some aspects of functional programming, but had never previously done any "in anger" (i.e. for real).
Well, the obvious question is: after climbing partway up that curve, what do you think of the view? Was it worth learning? Is it worth continuing to use? Does the code seem 'better' than what you might produce in other languages you've used?
Throughout this period, I've been accumulating some notes about some things that I found challenging along the way. The notes are not organized in any way, and they're certainly not complete. I've published them on my web site [1] in case the perspective might be useful to any "old hands" here.
[1] http://www.ninebynine.org/Software/Learning-Haskell-Notes.html
When I saw this page earlier, I was thinking about suggesting to you to add it and any new thoughts to the wiki so that it's more readily accessible to other Haskell newbies and can be annotated with pointers to resources and comments; kind of like an annotated unidirectional version of "A Newbie's on-going tutorial" on the Squeak wiki (http://minnow.cc.gatech.edu/squeak/1928).
Also on the topic of perspectives:
In recent conversation with a colleague, he mentioned to me that the term "functional programming" has an image problem. He suggested that the term conveys an impression of an approach that is staid, non-progressive or lacking novelty, and is prone to elicit a response of "been there, done that" from programmers who don't realize the full significance of the term "functional". I've also noticed that when I talk about "functional programming", some people tend to think I'm talking about using techniques like functions in C or Pascal (which is course is very desirable, but old hat and not worthy of great excitement).
Yes. People often use the term 'procedural' to describe the C style break down of a problem. Of course, some people use procedural to refer to functional and others functional to refer to procedural. Then, of course, there are also dynamic typers who equate static typing with C/Pascal. On the OO side, there are the people who equate OO with C++/Java much to the chagrin of Smalltalkers and CLOS users. At any rate, functional programming is a pretty well established term so there isn't much Haskell can do about it. Perhaps throwing in 'higher-order' will help, and certainly laziness/purity can't be said to be lacking novelty.