When I was a child, I wanted to be like Spock. For those few who do not know whom I mean, Spock was the science officer on the star ship Enterprise in the famous 1960's sci-fi television show Star Trek. His claim to fame was being half-human and half-Vulcan. Vulcans were an alien race who are so naturally violent that they felt themselves forced to renounce their emotions and turn to a life of pure logic, lest they extinguish themselves in endless war. A common misconception is that Vulcans have no emotions; they do, but they rigidly suppress them.
Spock's major character arc involved a conflict between his "human side" and his "Vulcan side", between "emotions" and "logic". During the television series, he had chosen to attempt being pure Vulcan/logical, but he met with less success than he would have liked. Something never made clear was whether this was purely a personal issue or if perhaps being only half-Vulcan made it somehow biologically more difficult to live with the Vulcan philosophies and disciplines. (Most likely even the writers themselves were conflicted over their interpretation of this.)
Spock's initial choice reflects a common view of emotions, that they are intrinsically opposed to logic, unpredictable and uncontrollable, that you are forced to choose either the cold, cruel world of logic, or the squishy, utterly irrational world of emotion and feeling, but that ne'er the twain shall meet. This is view can be seen in our most ancient literature, where the fiery passions of somebody's loins are routinely contrasted with their cold, austere logical mind.
What absolute garbage!
Some specific criticisms are out of date, but the gist still seems true.
On the off chance any Mozilla people ever read this, the feedback has uniformly been positive about the piece. If any of you still harbor delusions of platform-ness, it's not going to happen. The developer community has been burned. I don't think we'll ever trust the Mozilla team to promise us a platform again.
If I could say one thing to the Mozilla/Firefox project, it would be this: You are a browser. You will never be anything else. When you're not being a browser, you're being a web-app (Thunderbird et al). Start simplifying. Drop RDF. Stop pretending XUL is anything but a browser-creation DSL. Simplify XPCOM. Do this conciously, and go over every abstraction and ask if you really use it or if it's there because somebody, somewhere might use it.
But it's probably too late for that.
(To be fair, I haven't heard about this from the project for a while, but I still get the sense the heavy-duty design pervades the project, now with its reason-for-being lost in the mists of history.)
When we make a judgment, we are saying that one thing has a larger value than another. We have a value function in our brains that takes two arguments and returns whether the first is less than, equal to, or greater than the other. As cruel or as crazy as it may sound, that function can take any two things and compare them; we have to make decisions like Value(CoolJob, CloseToFamily) all the time.
What is programming?
When you first start programming, the answer is painfully obvious: Programming is making the computer do what you want.
However, if you have any aptitude for it at all, you will rapidly get to the point where making the computer do what you want really isn't that hard. Oh, you may be betrayed by your environment, your libraries, even your hardware sometimes, and you never get to the point where you are immune to the multi-day debugging sessions, but in general, getting the computer to do what you want ceases to be a challenge.
The true challenge of programming is learning to want the right things, and then how to obtain those things, beyond the mere first-order consideration of "does it run right now?"
When you work on the same product for three years, you will learn to want maintainable code. Writing code that works is easy; learning how to write maintainable code is a worthy challenge.
When you start work on a project that has fifty man-years already put into it, you will learn to want code that is properly documented. Learning exactly what "properly documented" truly entails is a worthy challenge.
When a project exceeds the size that one person can comfortably hold in their head, you will learn to want code that is conceptually clean and easy to come back to; a worthy challenge.
And so on, for a number of worthy challenges.
If only it were so easy as "making the computer do what we want"!
Programmers that can make computers do things are a dime a dozen. Programmers that have learned to want the right things are unusual.
The core point of the entire Programming Wisdom blogbook.
|<- Future Posts||Past Posts ->|