Right now, if you want to understand the state of the art in computer programming, those are your choices as I see them.
Sorry to be so blunt … please don’t shoot the messenger.
My awakening started when I began searching for a better Java, and found Scala. Scala had these weird (in my ignorance) functional features and learned Scala people often talked about Haskell. A uni friend Bernie Pope raved about it too.
I took a look at Haskell. It wasn’t a pleasurable experience. Much of the code was almost incomprehensible. Half the concepts I’d never heard of before. It made me feel stupid, but actually what I was was ignorant.
I say ignorant, rather than innocent, because Haskell has been around for over a decade, and FP much longer.
I still struggle to read most Haskell, and I certainly can’t use it to build anything. But I am starting to get a sense of just how sophisticated it is, and a map of it’s concepts in my mind. I began by going down a rabbit-hole, and expected to find a burrow, a community of Haskelliers programming in their own unique way. Instead, bit by bit Ive realised Ive ended up in a vast cavern absolutely full of stuff I barely even knew existed.
- Monads & friends
- Typeclasses (see “Typeclassopedia”, a must-read for advanced programmers, if only to appreciate what you don’t yet know :) )
- Composability (Need a good succinct web ref here, please suggest)
- Higher order functions
- Functional Reactive Programming
- Software Transactional memory
- Point-free style
- Zippers, Finger Trees and other Immutable Data Structures
- Real World Haskell and Hudak’s book
The bit that stirs me up is that this “stuff” isn’t, repeat is not, Haskell-specific. Its rooted in the fabric of our reality, in our mathematics and our problem domains, and bits poke up like the tips of icebergs into mainstream OO languages, their true structure part-revealed. But rarely in the OO-world have I found such carefully abstracted and subtle techniques of programming in daily use.
Ideas from Haskell & Functional Programming will continue to flow into the mainstream over the next couple of decades. Innovations will be trumpeted, trends identified, features debated, technologies evangelized.
But personally, Im too curious (and too lazy a typist) to wait that long.,