Functional programming (especially Haskell) taught me way more about programming than all the other OOP languages put together. It is optimized for developer efficiency. You can get a lot done, have a high degree of confidence that it runs reasonably without having to do too much thinking or ass-covering. We move fast & need things to be reliable. Rather than hand optimizing Doom 2 for ___, FP is the opposite. The computers serve us. Code is for humans to read, and only incidentally for computers to read. Code is how humans express themselves to each other and computers, and it’s up to computers to run it in a reasonably good way.
Haskell is really an underrated super power for building backends and web apps. The ecosystem has improved quite a lot over the recent years. With the Haskell Language Server and the Haskell Plugin for VS Code there's now really nice editor support. The language itself is also improving at a good pace, e.g. the latest release of GHC (The haskell compiler) added support for dot-notation, so you can now write someValue.someField as you might know from other languages.
I led the Haskell team at Conde Nast, and have trained groups at various companies professionally. From that experience, for a normal developer with working experience in Java, Python, or C++:
It takes 2-3 weeks of full-time onboarding (half with a coach, half self-study) to work on a typical industrial Haskell project. It takes around 3 months of full-time participation in such a project to know a wide array of libraries and feel ready to tackle almost anything. The companies involved were happy to make this time investment for increased productivity over the time they expected their employees to stay with them.
On an individual level, it makes sense that if you're just getting into programming, and you have the choice betweeninvesting 2 weeks into Python to be productive, or 3 months for Haskell, you pick Python. It's rational. But after you'vebeen in it for a few years, and you realise you want to do it for another 40 years, investing 3 months for life-longincreased productivity (even if it's just a few percentage points; most feel the effect is larger) suddenly becomes a greatdeal.
- How to Design Programs
- Software Design for Flexibility: How to Avoid Programming Yourself Into a Corner
- Crafting Compiler
- CS 6120: Advanced Compilers: The Self-Guided Online Course