I have had a passion for programming ever since I wrote my first piece of code as a kid. I am not sure why. Maybe it is the absolute, god-like control over the behaviour of the machine, or losing myself in the details of the code. In any case, it is intriguing. When teenage play turned into a more serious academic endeavour and finally into professional work, I couldn’t help but wonder whether programming isn’t unnecessarily complicated; whether we are missing the bigger picture.
I also love physics and since high school have been fascinated by how the discovery of relativity theory and quantum physics drastically changed our point of view. These new theories didn’t invalid as much as open the door to a new, more powerful perspective. What if we could do the same for our understanding of computer programs?
When I first discovered functional programming, I sensed new possibilities. Finally, a programming paradigm that was geared to the reasoning process of humans and not just to the execution model of machines. It was different, but was it more powerful? The attraction was strong enough for me to decide to pursue a PhD revolving around functional programming and to strive to become a researcher.
There are no silver bullets in software development. Nevertheless, functional programming brings very significant qualitative improvements. Not unlike the theories of modern physics, it opens up a new perspective, a new framework in which we can understand and solve software problems. On a fundamental level, the same theories of mathematical logic that underpin functional programming are the basis of our modern understanding of all programming languages. The associated work on programming language semantics has directly led to the introduction of categorial concepts (such as functors and monads) into the toolbox of software developers. These concepts, pioneered in Haskell, are now used in industry languages, such as C++ and Swift. In fact, many of the new language features recently introduced in established and new languages are drawn from functional programming, whether that is parametric polymorphism (aka generics), lambda abstractions (aka block, closures, or anonymous functions), pattern matching, or a long list of type system features. Moreover, the adoption of not just functional language features, but of functional languages themselves has seen strong growth in recent years. According to a recent survey by JetBrains, Elixir and Haskell have the smallest share (blue dots), but the largest growth (ratio of red to blue dots) of the top 23 languages. It is the first derivation that counts!
In fact, if we assume the standard diffusion of innovations, things are just starting to get interesting. For me that means that I believe I can accomplish more in industry than in academia to help to improve software development by furthering the use of functional programming and Haskell.
Three years ago I started the development of Haskell for Mac as a side project to make Haskell more accessible to learners and work towards improving the dire situation around IDEs with Haskell support. I used the experience I gained in developing this application to help others adopt functional programming in Apple’s new hybrid language Swift — you can find some of the talks on my Speaker Deck.
Haskell for Mac has been very well received and users frequently tell me that it was key for them learning Haskell. However, one person alone can only do so much. Hence, I am thrilled to announce that I am joining Tweag I/O to work with an incredible team that shares my vision to improve software development by applying the functional toolbox at just the right places. (I will also continue to support and improve Haskell for Mac — after all, IDE support is still weak in Haskell land.)
At Tweag I/O, I will serve as our functional programming evangelist (see our earlier blog post). In addition to software development, I will write and talk about functional programming, to help people understand the impressive potential of this technology. I will also work with the wider Haskell community to improve the ecosystem and promote the language. In fact I have already started doing so. I’ve been hacking and working with GHC HQ over the last couple of weeks with one specific goal in mind: see GHC move to a calendar based release schedule, twice a year. One other concrete outcome is that you can expect much more regular posts on this blog. I hope, you will join me on this journey and, if you have got any questions about using functional programming to improve software development, reliability, and maintainability, please get in touch.