Warning: this is a rant
Recently, I have made great progress in my journey towards Haskell
enlightenment. I finally see how many of the little pieces of the Haskell
puzzle fit together. At this point, I feel empowered to go forth and write
useful programs. I read through the source of Scotty the web framework
the other day, and I was very pleasantly surprised that I understood how it
works. I absolutely love Haskell. I love that it makes you think. One does
not simply open a text editor and start banging at the keyboard to write a
Haskell program. I love that Haskell encourages generalizations and
abstractions. One of the biggest heureka moments in my journey was
understanding the full implications of why a function of type
a -> a has a
single implementation. I’m addicted to running my program for the first time
(after fighting with the compiler for ages), and having it work. I think monad
transformers and lenses are really clever. By many criteria, Haskell is the
perfect programming language.
It has taken me four years to get here.
I used to get so discouraged that I took breaks for weeks or months at a time because I didn’t see the point of continuing. But I always came back. Now I have finally arrived. I would say I’m an intermediate Haskeller. Naturally, I’m thinking about writing some Haskell code at work which is going to be easy given our service-oriented architecture.
Another great example is the open source community. If you choose Haskell for your open source project, you might be productive, safe to refactor, write little code — but how many people will be willing to learn Haskell to contribute a fix or a new feature?
Many of my Haskell friends like to mock the Go programming language. Myself
included at times. Mind you, the language is objectively poorly designed.
The error handling, the lack of generics, the ridiculous package manager, the
absurd type system, the
range thing, etc. It’s almost exactly the opposite
And yet, Go is a lot more popular than Haskell according to GitHub. Yet, there are so many amazing projects written in Go, like Docker, Influxdb, etcd, consul, prometheus, packer, and many more. Unlike Haskell, if you ask your coworkers to learn Go over the weekend, everyone will come back with a little app they built. A clearly inferior tool is used by crowds of people to build cool things.
What should we conclude from this? The choice of programming language matters. Programming is a social activity. Fewer features seems to equal easier to learn. Generalization and programming language innovation seem to be out of favor. Creating software to solve real problems with blunt tools seems to be a lot more important than using a sharp axe. We’d much rather use an inferior tool whose manual we don’t have to read. We’d much rather snap a picture with our smartphone than to learn how to use a DSLR.