There are many bad ideas in software and most of them aren’t going to work. Most software environments make it difficult to quickly and safely eliminate these bad ideas. Strongly typed functional programming reduces as many bad ideas as possible by maximising feedback and communication. With a friendly programming environment like Haskell or Elm these bad ideas can be weeded out as you type them and changes can be made with confidence, the tools are the guide and give positive feedback so you know when you're done.
We’ll also address some of the perceived negatives of functional programming: hiring experienced developers is less of a problem than most people would think and you don't need an army of algebraic astronauts in order to write functional programs.
We’ll show how we’ve found functional programming the ideal environment for treating software as collective understanding. It’s allowed us to:
- Clearly define the current intent and specification of the system,
- Incrementally improve our code and keep the interest rates down on our technical debt,
- Test our code through high level properties and reduce or eliminate low level, mechanical testing,
- Reason about what code is doing to data and how you can describe a program through the transformation of data from one structure to another, and
- More easily reuse code at different levels of abstraction.