This has nothing to do with this topic,
>>140, but please listen to me! I wasted almost ten years writing C, and got pretty good with it. I also made the mistake of thinking that this is pretty much all there is to programming. Then I read SICP and understood I sucked. Period.
I started heavily using Lisp, Ruby (years before it became big outside Japan, mind it) and a few years later replacing the latter with Python for purely practical reasons (more users -> more libraries -> less work for me, also, too bad Ruby *really is* slow as fuck compared to even Python). All this time I naturally had to write some C to support whatever I was doing. Also, Java, C++. They sucked very badly and still do, and I want them to go away. I wasn't having very much problems with what I was using, or so I thought, after all, I used unit testing, wrote functional, clear code whenever possible and otherwise avoided all kinds of asshattery.
Then I found out about Haskell. Or not really ``found out about''; more like I had read enough blog entries about it and wanted to say ``fuck you idiots, Lisp has been around for 40 years and you're reinventing the wheel without noticing'' or something like that.
When I started learning about Haskell, I immediately recognized two things: it's *purely* functional, which was completely new for me (but turned out to be a very good idea), and it was statically typed, but this time static typing didn't mean spelling out the obvious for the compiler but having the compiler spell out the obvious for me before I tried to make my objects quack, just to understand they don't even have a fucking mouth. I also understood that it would solve a large subset of the problems I'd had with Lisp and Python. Alone, even static typing with type inference would be very restricting. What makes it shine is:
- The lack of effort needed to create new data types
- Type classes and generalized types, which give me almost all of the shut-the-fuck-up-and-just-do-what-I-mean properties of dynamic typing (with no extra work!) and compile-time type safety, which means that my variables are guaranteed to quack the right way when I want them to. I've not turned into a static typing fanboy, but right now I see properly implemented static typing as a HUGE improvement over any kind of dynamic typing.
And that's why you,
>>140, should stick with today's special.