The Optimistic View
I think it’s funny that aspects were invented a while back to shield the masses from the full horror of class level meta-programming, yet with Rails the concepts are becoming commonplace and no one is flinching (yet). It's a measure of progress.
—
martoo on programming.reddit.com
There is a movement advocating throwing our hands in the air and banning all forms of “advanced” programming idioms in the hope that our code bases will be somehow more accessible. Everyone has horror stories about incompetent and downright dangerous programmers who somehow keep their jobs, and there’s an argument that code bases must cater to them.
But maybe, just maybe, most programmers rise to the occasion when challenged. Maybe instead of catering to the bottom 10th percentile we can be open-minded about what the 50th to 75th percentile are capable of achieving, much less the top quarter.
Maybe Rails and Ocaml and Lisp and
Factor and Haskell aren’t really advanced or scary or obtuse. Maybe they are a little unfamiliar at first, but no more unfamiliar than SQL or Regular Expressions or XML or JSON or Javascript. Maybe we should put these tools in people’s hands and let them show us what they can accomplish.
all programmers are equal, but some are more equal than othersThere’s always someone out there claiming that closures and expressive typing and meta-programming and all of these other “academic” or “hacker culture” tools are elitist, as if they are restricted to the privileged few that speak cryptically of
folds and unfolds being duals in category theory, or who argue whether homoiconicity is a requirement for a self-interpreter to be
metacircular.
The title really says it all: Squeak: Learn Programming with Robots. The modern dialect of the original pure-OO language, Smalltalk. Advanced tooling that still causes jaws to drop. And Robots!!!
But maybe that’s a prejudice foisted upon us. Personal computers taught us that anyone can operate a computer. Spreadsheets taught us that anyone can program. Maybe we should open our minds to the possibility that although not everyone does program in this manner today, they
are capable of it if we stop telling them that they aren’t.
And when we say “
Anybody can program,” we say that without reservation or disclaimer. We don’t mean anybody can program provided they are banned from using certain langauges, or anybody can program provided we hide the details of relational databases behind ORMs, or anybody can program provided they are not required to learn any idioms beyond those authorized by the local High Priest. We mean anybody can program, period, without being lashed to a heavy yoke and driven through the fields under the whip.
Maybe—just maybe—the person advocating the non-mainstream tool isn’t the elitist. Maybe they are the egalitarian, the one who believes everyone can program if given the chance. What if the person saying “No, no, that doesn’t scale to a team of one hundred hum-drum monkeys” is the real elitist? Maybe the elitists are the ones who are convinced that other, lesser programmers cannot be trusted to program.
I wrote a parser combinator library to support simple parsing and pattern matching tasks, and I used closures to handle constraints. Unfortunately, both ideas were shot down. Here are a few reasons my tech lead gave to me: Closures are just too hard and too complicated; Nobody will understand it. Nobody will understand that functions can be created, passed around, and destroyed like objects.
—name withheld for obvious reasons
Maybe all programmers are not created equally. Maybe some over come early disadvantage to make themselves great. Maybe some squander their gift. Maybe it’s just a matter of sweat and toil and dedication. We really don’t know very much about our brains at all.
But what I personally know is this: I have never met someone who desperately wanted to be great but failed to be at least decent. I have never met someone who applies themselves to the obvious means of self-improvement such as learning a new language every year but is still unfit to create a home page in HTML.
Not everyone is motivated to go against the grain, to study subjects that the vendors say you do not need to know, to gain skills that recruiters say are not in demand, to go against the technical leads in their organization who shoot their ideas down.
Why should they be motivated to swim against the current? Why are the incentives in business programming working against people fulfilling their potential? Are we surprised it is a self-fulfilling prophesy?
Maybe we should just stop assuming that any of this is unusual or special or exceptional. Maybe we should just start assuming it’s normal and everyday and part of the professional toolkit and just see what happens.
Maybe we should just try stuff.
We might get a very pleasant surprise.
This post was inspired by Think Big.