[QUOTE=Rysto]
I would emphatically not suggest trying to take up Haskell. I’m an experienced programmer and I still never been able to fully wrap my head around the concept of a Monad. If you’re going to go the functional language route, ML is quite similar to Haskell in terms of syntax but I think that it would be much easier for a beginning to pick up.
[/QUOTE]
I don’t think Haskell’s IO system is truly hard to use*, especially if you don’t come into it with a lot of baggage and preconceptions from other programming experience. Though Rysto is probably still right that Haskell isn’t exactly what you’re looking for here (and the crows is probably right that Python is what you’re looking for here), who knows? If you give Haskell a try, you might find that you really enjoy it anyway; it’s really quite a beautiful system, very mathematically elegant and cleanly motivated in its way, and though the perspective and approach to programming it engenders is somewhat different than most other things out there, it’s often extraordinarily natural, useful, and convenient (one small example which impressed me highly in my first exposure: you want a variable to store the Fibonacci sequence in all its infinite glory, and be treated and manipulable just the same as any other more plain-vanilla list? No problem!). At the very least, I think experience with Haskell and the ways of thinking it trains you in makes you a better programmer elsewhere as well. At the very, very least, you shed some biases about what seems obviously the only way to do things in programming, and get a better appreciation for what’s necessary vs. what is simply contingently mainstream.
- (further details for those who might care): Apart from preconceptions of “The only natural way to do thing X is way Y, since that’s what I’ve seen and am used to” which arise from other programming experience, the thing that trips a lot of people up with Haskell, I think, is all the talk about “monads”, making them think they have to understand the abstract concept of a monad to use Haskell’s IO system. You don’t have to know anything about monads to use Haskell’s IO system, not even what they are, any more than you have to know about commutative rings to use C’s integer arithmetic. In fact, one works with monads all the time in C, Java, Lisp, assembly, whatever; people just don’t talk about them as such (lists (arrays, stacks, queues), trees, and other ‘container class’ type things are all monads; you could say “monad” is just a fancy word for a particular concrete technical notion of “container class”). The best way to learn to write programs in Haskell which do nontrivial input/output is the same way a complete beginner learns to do it in C or Java or any language: someone shows you the basic syntax and concepts, you play around with some toy programs, and eventually you get enough practice that it just seems the obvious way to do things.