July 9, 2012.
I recently became obsessed with declarative programming, and functional programming in particular. Languages such as Haskell, Erlang, Miranda, and Mercury fascinate me, although I often get a kick out of esoteric, experimental, or otherwise “hipster” languages like Unlambda (based on combinators), INTERCAL (originator of the come from construct), and Charity (which sacrifices Turing-completeness for guaranteed termination).
My roots are in imperative programming (C, C++, Java), which means the space of declarative languages is a whole new world for me. It may be cliché, but learning to think functionally has influenced my programming style for the better. In languages that allow me to express my ideas with closures, types, maps/folds, and recursion (with proper optimization for tail recursion), I’ve noticed a significant shift in the way I write software.
I’d like you to join me in my journey of computer science as we explore new and elegant ways to express computations. Occasionally, we’ll digress into pragmatic concerns like Unicode standards, portability across operating systems, time and space performance, and low-level details. Other times we’ll dive deep into the ocean of theoretical computer science to discover how mathematics can give us the insights we need to make our programs more elegant and our languages more expressive.