Version française
Home     About     Download     Resources     Contact us    
Browse thread
Re: [Caml-list] poll - need for a good introductory OCaml book (LONG)
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Sergey Goldgaber <sgoldgaber@y...>
Subject: Re: [Caml-list] poll - need for a good introductory OCaml book (LONG)
--- William Lovas <wlovas@stwing.upenn.edu> wrote:
>
> What do you mean by "go to waste"?  If learning language B was the
> key factor in your learning of language A, did language B really go
> to waste?

Of course not.  It's not a complete waste that I once learned BASIC
and Logo.  But I haven't used them in twenty years and am probably
never going to use them again (well, I might use Logo again if I am
to teach programming, but that would really require relearning it
anyway).

> I know you've heard this before, but let me restate it again in this
> context: to really learn O'Caml, you have to learn the core ideas of
> functional programming, and these core ideas are nearly identical in
> all functional programming languages.

Yes.  I recognize that.  But why can't I learn those ideas in OCaml?
Why must I learn yet another language?

> So if you happen to find the perfect beginner's Haskell tutorial out
> there, don't fret -- have a look!  You'll have to learn a bit of new
> syntax here and there, but when you come to understand O'Caml -- and
> i mean *really* understand O'Caml -- it will be more than worth your
> while.

I am open to just such an approach.  In fact, I have been slowly
going through the SICP, which teaches Scheme, and am going to have a
look at Noel Welsh's recommendation as well.  Nonetheless, I know it
will take twice the time and effor to learn two languages than one
(well, maybe 1.5 times the effort), and one of them I'll likely
never use again once it's helped me to learn the one I'm really
after: OCaml (at this point).  So while it won't be a complete
waste, there will be at least some redundancy involved.

> Unfortunately for O'Caml's popularity, people who want to learn
> O'Caml have to, in essence, re-learn programming, because the
> basic concepts of functional programming do not map cleanly onto
> the basic concepts of typical imperative programming.

Yes, I think part of the reason is that functional programming is
"just different" from imperative programming.  However, an
additional reason may be that imperative programming is just
intuitively easier to grasp.  I have yet to hear about or from
people for whom a functional language was their first and they found
learning it as easy as do people who learn an imperative language as
their first language.  That is, unless they are already familiar
with Lambda calculus, which seems to figure greatly in functional
programming.

> Maybe i'm being too idealistic here, but i think a "perfect" tutorial
> for O'Caml should focus on the ways it's different from other
> programming languages, not the ways it's the same.

I think those distinctions are definately crucial to really
understanding OCaml.  In fact, it is precisely in those aspects of
the language which are very different from the imperative style that
I'm used to, that I am having the most trouble.  So a tuturial that
did a great job explaining and teaching those aspects would be
great.

But I'm not sure that those difficult aspects should be the very
first thing that a newbie should encounter.  I think a more fruitful
approach would be to show them first that the language can be useful
in very similar ways to ways they are used to (OCaml's imperative
features).  They will thus more quickly grasp the syntax, become
comfortable with the compiler/toplevel and should be able to slowly,
one at a time start to apply what they learn concerning the more
difficult aspects.

Not that any tutorial jumps right out and tries to teach the newbie
difficult idioms, but they usually leave the imperative aspects
of the language 'till later, which I think is a mistake.

I don't share your, implied, fear that someone might get turned off
if a tutorial starts off by showing only language features which
will be familiar to imperative language programmers.  If they're
learning OCaml then they know the language is different and they
know it has all of these magical features.  Just because they don't
learn the magic right away doesn't mean that they'll abandon the
quest.

In fact, I think they'll be heartened to see that the language is
learnable, in contrast to the reaction they'd likely have to a
trial-by-fire, throw them in the deep-end approach that would show
them the language is different, all right...  But it will be
frustrating, and they'll have a very hard time making sense of it,
and especially applying what they've learned.

> Perhaps such a tutorial (if it doesn't exist already) could be
> prefaced by a number of "O'Caml for the X programmer" hooks,
> for each conventional popular language X, just to
> get programmers well-versed in X excited about O'Caml, at which point
> they can segue into this "perfect" tutorial and learn what functional
> programming is all about. :)

Yes.  In fact, there's already a short "C++/Java programmer's
introduction to Objective Caml".  I don't know either language, so I
can't really comment on that.  But I think the important thing is to
go from imperative to functional style, rather than a particular
language.  I just picked C in my earlier post because it was so
widespread and most everyone will be able to understand if OCaml is
juxtaposed with it.


  --Sergey


__________________________________________________
Do you Yahoo!?
Yahoo! Web Hosting - establish your business online
http://webhosting.yahoo.com

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners