The Ferengi Programmer
codinghorror.com
codinghorror.com
From what I can see, the problem of "overly-rule-bound developers" is nowhere near the magnitude of the problem of "developer's who don't really have a clue."
Zed Shaw actually wrote a blog post about how these two guys were at a conference and he called him out on his shit. You can't talk tell everyone something like "real software is written by people who's income is directly proportional to their user base" when you've spent your whole life as a consultant to in house IT departments.
But still..."Ferengi Programmer" metaphors are unclear at best, terrible at its worst. There's a way to highlight the danger you're talking about ("religious adherence to coding standards / design patterns without comprehension") without being so gimmicky and still be entertaining.
The deeper problem is that developers who don't have a clue are immune to rules. Throwing a book of rules at a sucky programmer just creates a sucky programmer with a bruise where the book bounced off their head.
So, who, exactly are we writing these rules for, again?
But at the same time, often the only way to develop the intuition and experience to know when to follow those rules (even if it's hard) and when to break the rules is to blindly follow the rules for at least a little while so that you get a feel for them. How do they fit with your personality or problem space? Which parts seem to add value or prevent mistakes? Which parts are getting in your way? Which parts add value some of the time but not if you have to try too hard to follow them?
Any idiot can come up with a set of "rules" that other people should follow, but there are also plenty of incredibly intelligent, experienced people who have attempted to distill their knowledge for other people in that form. Dismissing them out of hand and then patting yourself on the back for it ("I'm an awesome programming precisely because I don't follow other people's rules") is not the way forward.
To me, part of being a good programmer is being able to temporarily put aside your existing notions of what's good or bad, what will work and what won't, in order to try out someone else's way of working so that you can truly internalize it and hopefully learn something new. That applies not just to following simple "rules" about how to structure your code, but to trying out new styles of development, new programming paradigms or languages, new toolsets, etc. All of those require the ability to temporarily suspend your judgment about what works and what doesn't and to just try to do something "by the book" for a bit in order to hopefully come out the other side an even better programmer.
Software engineering is fundamentally about trade-offs and it seems plain rules like IF context THEN follow_recipe are not expressive enough. Like a database engine, rules based optimizer will only take you so far, for better results you need to use cost based optimizer, and learning the costs associated with each option only comes with experience.
Rules are what you use to program programmers. If your aims are limited and it's a good set of rules, why not.
If you want to use your programmers to do something you don't know how to do, instead create an environment that evolves the right kinds of programmers and set them loose.