http://www.cell.com/cancer-cell/fulltext/S1535-6108(02)00133...
I'll bookmark both those papers - and I rarely bookmark anything (instead relying on Google and the eternal onslaught of ever newer links and issues).
That paper is real fun to read, an excerpt:
> How would we begin? First, we would secure funds to obtain a large supply of identical functioning radios in order to dissect and compare them to the one that is broken. We would eventually find how to open the radios and will find objects of various shape, color, and size (Figure 2). We would describe and classify them into families according to their appearance. We would describe a family of square metal objects, a family of round brightly colored objects with two legs, round-shaped objects with three legs and so on. Because the objects would vary in color, we would investigate whether changing the colors affects the radio's performance. Although changing the colors would have only attenuating effects (the music is still playing but a trained ear of some can discern some distortion) this approach will produce many publications and result in a lively debate.
If you need a real good laugh, do read it now, it gets even more funny after the quoted paragraph! It's almost as good as that (much shorter) paper on PubMed where they examined the sterility of farts in operating rooms (http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1121900/).
>"Even if a diagram makes overall sense (Figure 3A), it is usually useless for a quantitative analysis, which limits its predictive or investigative value to a very narrow range. The language used by biologists for verbal communications is not better and is not unlike that used by stock market analysts. Both are vague (e.g., “a balance between pro- and antiapoptotic Bcl-2 proteins appears to control the cell viability, and seems to correlate in the long term with the ability to form tumors”) and avoid clear predictions."
Exactly! As soon as you start trying to attach numbers to this stuff you realize we haven't figured out much of anything about it, and these "theories" haven't ever really been tested. It is honestly a waste of time to approach the problem like that. Even assuming the info is accurate (yet vague), future generations will have to redo all of it anyway to see what is is really going on. In reality it seems to be both inaccurate and vague...
Worse, we don't seem to care a lot about this lack, largely because it isn't perceived. A lot of devs think that we're in the space age when it comes to software, instead of virtually the stone age. And then we wonder why our software tends towards the "big ball of mud" model oh so often.
I think the reason is that computer programs are documents -- things constructed in a language. Someone might conceivably write a good summary of, say, _War and Peace_, but a diagram of the book would only be useful for illuminating certain aspects of the story.
It's not immature, it's delivering serious value to most of the world.
Do not mistake the source code, for the program itself! The documents programmers spend all our time working on are really just specs; the actual program is an artifact produced by a compiler.
You see comp sci is so advanced we don't even bother writing descriptions of our creations, we allow the software we've written previously create those descriptions for us, along with the dictionary used to understand the description, and then use another program to understand that description for us.
Just as when building a car one would use a word like 'engine' rather than carry around a 5000 word description of an 'engine'.
By compressing highly complex machines into single words we're able to build much large machines by treating that complex machine as a single component of the much large machine.
Furthermore, I fail to see how whether one can describe nginx in 5000 words or less means that our industry lacks the vocabulary to describe components of more complex machines built from those components.
If your developer requires a 5000 word description of nginx to type
apt-get install nginx
then they are a tool and need to be fired.Most of the problems with our industry stem from exactly this kind of problem, rather than look at the vast array of components that do the exact same thing they are about to implement, they use something like nginx to make nginx, except instead of installing nginx they made a 5000 line nginx config file to reimplement most of what nginx already does.
If you've ever seen
{ "key" : "23", "value": "Michael Jordan" }
then you know what I'm talking about in regards to the stupidity of this industry using components to make the component it already is.This question is like when someone says they are intelligent then someone gives them a wrote memorization test about the agreed upon symbols we use to encode those words on paper. While memory is required for intelligence, not having memorized a particular encoding of a particular word is not an indication that one does not possess intelligence.
It's easy to have a formal language and tools when you start with the language and build everything on top of that. When you're trying to look at a complex system that was entirely built by some unknown process, according to unknown rules, and you have to figure out the language from observation, it's obviously going to be a very different ballgame.