Walled Garden vs. Morton's Fork
Now, back to the ignorance part. What is Steve Jobs telling me to do exactly? What to write? How to create a true value exchange? No. Are there standards on what you can do in the ui? Sure. Do standards dictate every aspect and element? Of course not. Anyone who has ever done any of this knows how absurd such a bogey man is, conceptually. What is the opposite of being told what to do? Being ‘free to choose‘ as Milton Friedman used to say. The holiday bomb Nine (horrendous looking remake of Fellini‘s brilliant 8 1/2) had a scene where Dame Judy is saying to the cartoonishly dissipated Guido ‘being a director is greatly overrated, we all know that, what‘s so hard about directing? you just have to say yes or no. ‘Should we have more extras?‘ ‘Yes‘ ‘Does this look better in Red?‘ ‘No.‘ Yes, no, that‘s it, that‘s directing, what else do you do?‘
But does having choice really equal freedom? Define freedom. Historians tend to define freedom as a form of emancipation. Babies (and Frank Sinatra) define freedom as ‘my way‘ (btw, the Sid Vicious version redeems all of punk for me). It‘s not unlike the idea of making things data driven. A feeling of great power fills you up when you first think ‘I can make it so that the app comes up and reads in properties that configure every element of its behavior.‘ Shortly thereafter, most sane people realize, the configuration of a million data points represents a greater complexity with less flexibility that has no means of managing its sprawl than just using the expressive power of the language to capture what you need.
To me, freedom is freedom from things. Chief among those when engineering is having to worry about stupid stuff working or not. We have completely lost our way in this regard (favorite topic here). Eclipse is 6 years old and the only maven plugins are buggy messes. The vast majority of people who use eclipse for web development jump back and forth between it and the command line. AspectJ, a great idea, tremendous potential, years later, a buggy mess. No doubt one of the reasons for this is that the platform is not a collection of a bunch of choices that were made and then stabilized into one working whole. The platform is a huge jumble of diffuse, nebulous ‘components‘ where there are countless choices at each node and progress is at once speedy and glacial. By foregoing that final step of saying ‘ok, we have decided on these things, now let‘s make them work,‘ we have that being done by every group who wanders in. As I‘ve argued before, Rails was largely a reactionary revolt against choice. Unfortunately, it took another clichéd, immature tack: have the great leader (DHH) make the choices for us (cf. Freud on the differences between Christianity and the Cult of Mithras [the other dominant group in the Med at the time]). Apple gets accused of the same thing, cult of Steve, but none of us thinks for a minute that Steve is making the choices on how Core Data is going to do binding or whether serialization uses reflection.
Everyone has heard of a Hobson's Choice: that was a British guy who got sick of everyone wanting only the couple best horses at his stable, so decided, whatever horse is in the end stall when you come is the one you get, or you get none. I had never heard of a Morton's Fork. That's when someone is given a choice, but between two sucky options. Game Theory goes into these types of problems at great length. Perhaps the most elemental essence of game theory is the idea that all choices have payoffs, but most of them lead to stasis because of the tendency toward stalemate (equilibria in Nash‘s terminology). That is what I see almost everywhere I hear people in IT trumpeting the greatness of choice.
Finally, let‘s face the fact: a lot of the sense of progress that engineers have is in moving up the tool chain, which, if you think about it for a minute, is pretty pathetic. Surely everyone who has gotten to where they are using Maven all over the place feels like a more evolved ape than when they were pounding out their wares with Ant, but really, isn't that a sad state of affairs? I will be happy as Xcode delivers more features, but I would like to think that the pride of progress will be in honing my own wares, not mounting escapes from one hopeless hostage crisis after another.