[Haskell-cafe] On the verge of ... giving up!
Peter Verswyvelen
bf3 at telenet.be
Sun Oct 14 15:10:08 EDT 2007
Or F#, if you know C#, which is the "OCaml for the .NET world".
Now I immediately went from C/C++/C# to Haskell, and yes, that was (is)
hard. For me, the book Haskell School of Expression did it... All you
need is a good book and lots of patience...
Brian Hurt wrote:
>
>
> On Sun, 14 Oct 2007, Andrew Coppin wrote:
>
>> Vimal wrote:
>>> I like learning by
>>> comparison with other similar languages. This approach worked for me
>>> when I tried learning Python+Perl together. The nicer syntax and
>>> easier object-orientedness made me leave Perl behind and pursue
>>> Python.
>>> I also tried it for Haskell (Lisp+OCaml+Haskell together).
>>>
>>
>> This probably works quite well for mainstream programming languages
>> (since they're all so similar), but is unlikely to work at all for
>> Haskell (since, as far as I know, no other programming language on
>> Earth is remotely like it - Miranda excluded). Even Lisp and Erland
>> are nothing like Haskell, and they're supposedly based on the same
>> ideas.
>
>
> I'm going to offer an opinion here that's likely to be controversial
> (in this forum): people new to functional programming shouldn't learn
> Haskell first. They should start with either Ocaml or SML first. If
> it makes it easier to accept this argument, you can consider Ocaml and
> SML as "Haskell with training wheels". And that the original poster,
> rather than giving up on Haskell, should instead put Haskell on the
> backburner and instead learn Ocaml (which is likely to be hard
> enough). Then, in a year or two, start taking another swing at Haskell.
>
> The problem is that Haskell has a lot of big ideas that all come at
> you pretty much immediately. Learning a new language in a new
> paradigm is a lot harder than learning in a new language in a paradigm
> you already know. If you know Java or C#, it's not that hard to learn
> Python or Ruby, because you already know how to think in objects. The
> problem with going from a C/Java/Ruby paradigm to Haskell is that
> Haskell isn't just one paradigm shift, it's several all rolled into one:
> - Purely functional
> - Lazy
> - Monadic
> - Strongly typed
>
> Each one of these has a huge impact in how you think about problems
> and design programs- I'd argue about as large an impact as Objects
> have. These are all good things (well, I'd admit to not being 100%
> sure about pure laziness), and knowing how to think in these paradigms
> is definately a good thing.
>
> And the situation is worse with pure functional languages. When you
> move from, say C/Pascal/Fortran to Java/Ruby/Python, you don't have to
> learn new data structures and new algorithms. A doubly linked list is
> still just a doubly linked list, still has the same properties, and
> still has more or less the same implementation. In addition to
> learning Haskell, you also need to relearn basic computer science.
> You need to learn what a realtime lazy catenable dequeue is, how to
> implement it, and why you need one, all the while struggling with the
> syntax, type errors, and all the other problems trying to learning a
> new language.
>
> I mean, contemplate this trivial exercise for a moment: write a
> program that reads from stdin a series of numbers (one number per
> line), and writes out the sum of the last n numbers. This is a
> trivial problem, and I have no doubt that someone who knows Haskell
> better than I will reply to this email with a single line of code that
> does it. But just think for a moment the number of different paradigm
> shifts that you need to make to write this program in Haskell.
>
> I'm not saying that it's impossible to go directly to Haskell, I'm
> saying that it's just very very hard.
>
> Ocaml, meanwhile, is in many ways the C++ of the functional world.
> C++ was needed for object orientation to take off, because it allowed
> you to continue to program in plain old procedural C when you needed
> to get something done, and to play with OO concepts and ideas as you
> have the time/inclination/need. Then, once people became comfortable
> with objects and OO thinking, they were ready for the real OO languages.
>
> In a similiar fasion, Ocaml allows you to write old fasioned impertive
> code when you need to just get something working. And as you have the
> time/inclination/need to, you can start playing with more advanced
> functional concepts, like purely applicative data structures, lazy
> evaluation, and even monads.
>
> Brian
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
More information about the Haskell-Cafe
mailing list