Haskell, NJ or Haskell, TX?
on February 09, 2012

Neither, Google! You know I am like teh 1337zors h4xx0rz so why do you keep auto-suggesting these towns to me when I start typing “haskell”? Yes, I am impressed by your location awareness, but also kind of creeped out. You basically know how often I go between NJ and TX and that’s not cool. But what you might also know about me is that recently, I’ve found a programming language I finally identify with.

Ever since I first started programming in QBasic as a kid and felt the productivity boost going to VB6.0 (and then the subsequent drop when switching to VBA *shudder*), I’ve been acutely aware of a concept that I only later learned was called “The Blub Paradox.” Accordingly, I realized a few years back that I’ve continually been on a search for the “ultimate” programming language to wield, and that’s probably why I’ve tested the waters with so many languages to this day. More interestingly, my language of choice at each point in life seems to have progressed with my general knowledge of CS and overall intelligence; or perhaps a better way to think about it is that each successively higher-level programming language has in turn expanded my mind with its worldview.

And as I’ve learned more about the world we live in, it seems to me that our human history has been especially defined by those who had the best tools at the right time. And so as Paul Graham argues, there’s much to be gained by choosing a better Blub. My Blub for the past few years has been Ruby, which I got to know pretty well by virtue of having grown up with Rails since it’s pre-1.0 days, but I’ve realized over time that I am perhaps not cut out for dynamic languages—the total freedom often comes back to bite me at unfortunate times and my mind craves guarantees.

But if “dynamic” is one side of the coin, then the other side is “strict”; and with strictness, one often thinks “functional.” I fell in love with functional programming languages when I took CS312 in the spring of 2007 (forever enshrined here), and then even more so when I took LING 4424 in OCaml with John Hale in Fall ’08. I went ever deeper into OCaml when I used it for my honors thesis, but the unrelenting strictness ultimately annoyed me—it felt like the language was protecting me a bit too much.

And then there was Haskell. I first heard of Haskell in the context of being “that language”; namely, “that notoriously difficult language used in that high-level CS class on programming language theory that you’ll probably get a C in.” That reputation was enough to defer my attention indefinitely, so it wasn’t until the OCaml/Ruby dichotomy grew unbearable to me last year that I started looking for answers again.

I gave Haskell a real chance in April of last year, but it wasn’t until recently that the core concepts really started sinking in and taking hold. Lazy execution took a while to get used to, and reasoning about it is still hard, but overall, I haven’t found much to complain about. I use it in my day-to-day work now and the amount of computation I’ve been able to orchestrate in short order has been mind-blowing, and it seems like the “next” language feature—having been there all along—only presents itself when I’m finally ready for it, allowing me to up the ante for the next round. It’s a language that you truly grow into over time; in fact, I hope I never reach its bottom (or should I say undefined?! Yeah, that joke was so high-level… like my programming language! ey-ohhhh… Yeah, never mind).

So while I can’t actually claim that Haskell is the “best” Blub out there, it has definitely changed the way I think about programming, computation, and abstraction in a radical way. It’s so significant that I would encourage you to learn it too, if it weren’t for the fact that I want to keep this secret all to myself! (Reverse psychology, or reverse reverse psychology??)