Peering through my RSS feed today, I read an article by Jeff Atwood titled "Monkeypatching for Humans", where Jeff talks about monkeypatching in languages. While I agree with some of his points (namely that people will come up with nasty stuff), he does seem to think that monkeypatching is some demon from hell sent to destroy all of our coding projects. His quotations talk about Ruby monkeypatching, but his descriptions talk about PHP (a language I don't consider capable of monkeypatching, especially when you compare it to Ruby), so there is a bit of inconsistency that indicates Jeff doesn't really know much about either language.
Then I get down to the R's, and read Reg Braithwaite's predicted1 response to Jeff's post: My analyst warned me, but metaprogramming was so beautiful I got another analyst. Here, Reg states that things like monkey-patching and programmers being allowed to tweak their tools results in many failures, but in some successes. Basically the successes brought to us from the freedom are well worth the failures.
I've written on this dichotomy before. In Reg's post, he draws a parallel between this and the Renaissance-age church vs. science debate. Another example from more recent history is the comparison between Soviet authoritarianism and Western capitalism. Jeff takes a more conservative, communist style approach that allowing people to do what they want is bad, and that we should be given orders (or guidance, depending on how you look at it) from up high (aka language designers, super smart computer scientists). Reg takes the other side and says that given the freedom, people will write horrible things - but people will also write beautiful and useful things.
The idea that change is bad, leaders should be the one's taking charge, etc. is an excellent short-term solution. The people who know what they're doing can take charge and lead the rest of us to a good end, provided we just shut up and follow. If you look at history, Stalin accomplished wonders using this approach with the two 5-year plans from 1928 to 1937. He took charge and turned the USSR from a backwards farming nation to a world superpower in 10 years.
Of course, none of us remember Stalin for that.
We must remember that although the people up high are smart, they are still human. They are subject to the problems that come along with being human, like being prone to errors.
The free market outlasted the Soviet's block. Why? I am no historian, but my guess would be that giving people the freedom to pursue what they want, without telling them how to do it allows for a society that is much more adaptable to the change.
The same parallel can be drawn back to programming. Lisp and COBOL came out at roughly the same time. Where is COBOL now? As legacy software on machines for companies too stubborn to get it re-written with something more modern (I'll say with good reason, since they'd probably just use Java or C# or something that will be obsolete in 20 years). Nobody learns COBOL nowadays, unless they have to. Where is Lisp? Being taught to first-year undergrads at one of the most well-respected technical institutes in the world. It seems that the more flexible language has outlasted the not-so-flexible one.
We can lock programmers in boxes all we want, but they will constantly find ways to work around it. They come up with improvements, or replacements, and that is how things evolve. You think we would be doing object-oriented programming if we just kept listening to the up-highs? You think we'd even be using higher-level languages? One thing I like about Ruby is it gives you the opportunity to explore new things, to experiment with new ideas.
Sure. People will come up with bad ideas. Even really smart people. Remember that last time you went out drinking and thought it would be a good idea to keep drinking more? Probably didn't seem like such a good idea the next day.
The bad ideas will usually get ignored, and fade into time. By telling programmers that they probably won't be able to come up with good ideas and shouldn't bother trying, then you are dooming them to a life of programming mediocrity. But if they try something new and fail, and you just "tousle their hair and encourage them to keep trying", then who knows? They may come up with something neat.
The good things however, produced by the nobodies of the computer world (who ever heard of David Heinemeier Hansson or Bram Cohen before they put out their good ideas), that help better the rest of us. There are lot's of things out there that are produced by famous people, however I think that with the vast majority of cases, the good idea is what brings them out of the masses (ie. all of us) to stardom. What's keeping the rest of us from doing the same?
1As I was reading Jeff's post I was wondering what Reg would think of this if he read it.