My name is Laurence Emms. These days I’m a programmer at a medical device company, but I used to work in computer animation. At work, we use only imperative languages and I work mostly in C++. Most of my experience programming has been in low-level imperative languages, like C, C++, Assembly, and CUDA. At university I studied computer games development and I did a Master’s Degree in real world computing (simulation and rendering). You don’t commonly find functional programming in either of these fields; at a glance, they look very stateful.
I discovered functional programming after leaving university by reading the excellent book The Little Schemer. I picked it up on a whim and I was fascinated by how different it was from everything I knew about programming. I spent some time dabbling with toy examples in Scheme before I stopped coding in Scheme altogether (maybe I’ll revisit it someday).
Some time after that, I heard someone mention that Tim Sweeney was talking about a programming language called Haskell. I did a little reading about Haskell and I couldn’t understand why he thought that coding with a functional language was a good match for a real-time system like a computer game. I didn’t think much more about it until I heard that John Carmack had been looking at it too. I decided that if both of them thought that you can code a real-time system efficiently in Haskell, it must be worth a look at.
Some time after moving into medical device software development, the benefits of a pure functional language became more obvious to me. Many of the challenges in producing medical software relate to handling invalid program states and recovering safely from unexpected inputs. Haskell seems like a potentially useful tool for improving the reliability and safety of medical software.
About 6 months ago (as of February 2018), I started learning Haskell, by reading http://learnyouahaskell.com/. Even while reading this excellent resource, I felt confused and frustrated with my lack of progress and inability to make real, useful applications. It took a long time reading before I could write even the simplest program I would code to learn an imperative language. Since I couldn’t write a program to do something useful, I felt that I was just spending my time memorizing theory without any actual experience coding.
I started this blog because I realized that I really enjoy coding in Haskell, despite my initial frustration. I want to share my experience learning the language, and I hope I can help people avoid the frustration I felt when I started.
I also hope that by writing this blog, I can continue to learn about Haskell too. In particular I want to learn more about the packages available in Hackage.
Follow @wtfunctional