However I'm fairly sure there's a simple set of urges behind the majority of software developers out there, and they are:
- We like being creative
- We like building stuff
- We used to play with Lego (other brands of build-it-yourself-toy are also available).
The Urge to Build Stuff
Under the surface though, we are all builders, and I suspect that we have similar mental models for what we're building that make it easy for us to adopt certain techniques, but not others.
Why OO is SO popular
OO is Lego you get paid to build
Admittedly the Lego set has become a LOT more complex, with pieces of all sorts of custom shapes and only a few guidelines for how to make good pieces that can be comprehended by other people, but still ... we're playing with Lego and getting paid for the pleasure.
Problematic for Functional Programming
- Functions are not easily analogous Lego Blocks
This is not to say that functional programming is not valuable and has some real potential in simplifying the software we need to write. It's just that the analog of having a thing, an object, hits out respective Lego-building buttons; having an activity, a function, doesn't so easily cut it in our mental model.
Aside from this, one slightly positive outcome of the friction between functional programming and Lego-building-mental-models, is that there is a certain smugness to having got to grips with functional programming. A smugness that transcends the language chosen. It is the smugness that comes from realising on some deep level that we've broken out of our original habits, and found a whole new set of Lego pieces.
We've jumped from Duplo to Lego Technics.
Lego does not equal Easy!
I suspect that the joy of building software comes from a similar joy that occurs when building something with Lego, with the same dangerous urges to build something overcomplicated to express our smartness.
My take is that the Lego analogy might have some deep ramifications for understanding why our software tends to surprise us in odd ways, which is one purpose of an analogy in the first place.
So, how's your Lego building going today?