Perspectives on learning and using Haskell
Graham Klyne
gk at ninebynine.org
Wed Dec 24 12:29:05 EST 2003
At 17:44 23/12/03 -0500, Derek Elkins wrote:
>On Tue, 23 Dec 2003 17:26:20 +0000
>Graham Klyne <gk at ninebynine.org> wrote:
>
>(moved to Haskell-Cafe as this reply might generate several more)
>
> > 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?
I think the view is good :-)
Others have written about the advantages of FP, and I won't try to repeat
that. My personal observations include:
(1) I notice that it's very easy to pick up and use third-party
functions; there doesn't seem to be the square peg/round hole effect that
one gets with third-party libraries in conventional programming
languages. I don't know why this is, but two possibly contributing factors
may be:
(a) many Haskell expressions are just values, so in some respects
they're closer to data than to code. There isn't a procedural aspect to
get in the way (e.g. no need to coordinate passage through the "von Neumann
bottleneck"?)
(b) the type system permits, even encourages, typing details that are
not relevant to some function to be left unspecified.
(2) I find that I spend a far greater portion of my time *thinking* about
what I'm trying to do than actually coding it. There used to be an adage
in the software industry that programmer productivity in lines-of-code per
day was independent of programming language: with Haskell, I suspect that
old rule breaks down, because it seems that actually coding has become a
relatively small part of the overall exercise.
(3) it has often been noted that despite the influx of "new" programming
languages, little is truly new -- the act of programming is pretty much
unchanged since, er, the 60's? I know the basic ideas of FP have been
around for several decades, but I do think there is some truly new thinking
being applied in the area of FP, compared with conventional languages. I
think I do see some truly different approaches being explored in the FP
community, and some of those do seem to have some real value. (e.g. the
way that Monads turn out to be such a flexible idea. I haven't yet started
to look at arrows.)
Related to this, it seems to me that Haskell's lazy functional model is
capable of subsuming many other programming models. One that I discovered
quite early was mimicking the test-and-backtrack style of Prolog. More
recently, looking at the like of "scrap your boilerplate" ideas, it seems
that FP is capable of tackling the separation of "cross-cutting concerns"
that seem to motivate the more recent Aspect Oriented Programming ideas,
without really adding any new language features.
(4) I have noticed that it's often very easy to write some inefficient code
(sometimes *very* inefficient) to do some task in Haskell, and then to
optimize it. My current project is currently riddled with horrendous
inefficiencies, but I don't care because I am confident that I can optimize
as and when I need to. (The GHC profiling system is one reason for this
confidence, and also the availability of off-the-shelf libraries to improve
many of my very inefficient data structures.)
(5) working as I do in the area of Internet and Web protocols, I like the
idea that I can (often) write code that is closely and "obviously" related
to a specification that I'm trying to implement. (This is an area that I'd
like to explore further.)
(6) I have found that Haskell seems to a particularly effective platform
for pursuing some ideas of extreme programming, and in particular test-led
development. (I do this very imperfectly, but I'm learning ;-) For
example, Dean Herington's unit testing framework seems to fit more
comfortably into the host language than, say, the JUnit framework from
which it takes its inspiration. Adding new styles of test-case has been a
breeze compared with my experience of using JUnit or PyUnit (and I have
found those frameworks to be very satisfactory).
(7) For the first time since learning Pascal, I'm impressed at how reliable
my Haskell code (messy as much of it may be by Haskell standards) has
turned out to be.
If I sit here longer, I will probably think of more.
But, in summary, I think a combination of:
- improved language implementations
- improved hardware
- new ideas about how to use/deploy FP
- the nature of some Internet/Web applications
mean that FP in general and Haskell in particular can be used to good
effect in real-world "industrial strength" projects.
There are some more of my comments about using Haskell here:
http://www.ninebynine.org/RDFNotes/Swish/Intro.html#WhyHaskell
(these are directed more toward an audience not familiar with Haskell or FP.)
> > 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).
I wondered about that... I'm more than happy for any or all of this
material to be served by the Wiki. As a relative outsider/newcomer to this
community, I wasn't sure if my offerings would be felt to be useful or
welcome there.
Your suggestion sounds good... if it's felt to be helpful, I'll ponder it
and think about how I might present it. The page you cite seems to have
the right kind of tone.
#g
------------
Graham Klyne
For email:
http://www.ninebynine.org/#Contact
More information about the Haskell-Cafe
mailing list