COMP 211, the first computer science course I ever signed up for, was taught in the Racket programming language. If you haven't heard of it, you're in the majority. You may have heard of functional programming or Lisp; Racket is one of the more obscure members of the Lisp family of functional languages.

As a college freshman, I had certainly never heard of Racket. All of my programming experience (limited as it was) involved imperative languages, and the professor had his hands full teaching us the basics. At the end of the semester I moved on to 300-level courses taught in Java. The department retired COMP 211 and my knowledge of Racket began to fade.

From time to time, though, I would come across a discussion of functional programming on the internet. The postings were full of mysterious words like “functor” and “monad”, and I couldn't help but be intrigued. What are monads? They sound pretty cool. I want to be in the monad club.

So functional programming has been on the back of my mind for a while. This spring, I finally sat down to learn it, settling on the Haskell language. I was prepared to slog through lots of esotericism, but I found Haskell quite accessible. In fact, I recommend it: It's given me a fresh perspective on the day-to-day problems we tackle at work, and though I'm hardly an expert, I'm certain it's made me a better developer.

Here are highlights of my experience. It turns out that monads have been thoroughly covered by other people—we've got blog posts about blog posts about blog posts about monads—but I've put together a walkthrough of two other Haskell features that are powerful and easy to understand.

Last year, I told myself I should take a shot at writing. Of course, that meant putting together my own blog application—first things first—and I promptly got lost in the weeds of web frameworks, content management systems, static site generators, etc. Next to those weeds is another patch of weeds involving CSS, and next to that is the matter of deployment. However, I'm happy to say that I made it through, a little more knowledgable for it. The site has support for prose and math and code and not really images, which are still popping up at full resolution and breaking my layout, but I think it's in an acceptable state for launch.

On the back end, I'm using Django and the Wagtail CMS, then rendering a static version of the site with wagtail-bakery. Using static content means I can throw it in the cloud for cheap and not worry about maintenance, but if I want to transition to something dynamic down the road, most of the work is done.

On the front end, it's just hand-written markup. There are plenty of UI frameworks out there, but I wanted the presentation to be entirely my own. I'm also taking inspiration from a talk on website obesity by Maciej Cegłowski: Many client-side frameworks include rarely used components that are sent to the client nonetheless. I hope that most of the bytes I send will contribute to the reading experience. (I'm making an exception for Google's analytics script, which looks relatively unobtrusive.)

I have a few posts planned for this summer, so all that's left do to is write.