I've been having conversations lately about topics related to the one in the title and somehow I got to an article titled The Computer Scientist as Toolsmith II (1994) by Fred Brooks (thanks to whoever recommended it, I wish we had better document/navigation provenance in our tools :)
Here's a summary, from now on it's all quotes from the article, emphasis mine (I wish we had Transclusion in our tools :).
I recommend you to read the whole article if you find the quotes below interesting.
When our discipline was newborn, there was the usual perplexity as to its proper name.
We at Chapel Hill, following, I believe, Allen Newell and Herb Simon, settled on “computer science” as our department’s name.
Now, with the benefit of three decades’ hindsight, I believe that to have been a mistake.
If we understand why, we will better understand our craft.
A science is concerned with the discovery of facts and laws.
Perhaps the most pertinent distinction is that between scientific and engineering disciplines.
Distinction lies not so much in the activities of the practitioners as in their purposes.
The scientist builds in order to study; the engineer studies in order to build.
I submit that by any reasonable criterion the discipline we call “computer science” is in fact not a science but a synthetic, an engineering, discipline. We are concerned with making things, be they computers, algorithms, or software systems.
Unlike other engineering disciplines, much of our product is intangible: algorithms, programs, software systems.
Heinz Zemanek has aptly defined computer science as "the engineering of abstract objects".
In a word, the computer scientist is a toolsmith—no more, but no less. It is an honorable calling.
A toolmaker succeeds as, and only as, the users of his tool succeed with his aid.
If our discipline has been misnamed, so what? Surely computer science is a harmless conceit. What’s in a name? Much. Our self-misnaming hastens various unhappy trends.
First, it implies that we accept a perceived pecking order that respects natural scientists highly and engineers less so, and that we seek to appropriate the higher station for ourselves.
We shall be respected for our accomplishments, not our titles.
Second, sciences legitimately take the discovery of facts and laws as a proper end in itself. A new fact, a new law is an accomplishment, worthy of publication. If we confuse ourselves with scientists, we come to take the invention (and publication) of endless varieties of computers, algorithms, and languages as a proper end. But in design, in contrast with science, novelty in itself has no merit.
If we recognize our artifacts as tools, we test them by their usefulness and their costs, not their novelty.
Third, we tend to forget our users and their real problems, climbing into our ivory towers to dissect tractable abstractions of those problems, abstractions that may have left behind the essence of the real problem.
We talk to each other and write for each other in ever more esoteric vocabularies, until our journals become inaccessible even to our society members.
Fourth, as we honor the more mathematical, abstract, and “scientific” parts of our subject more, and the practical parts less, we misdirect young and brilliant minds away from a body of challenging and important problems that are our peculiar domain, depriving these problems of the powerful attacks they deserve.
The computer enables software to handle a world of complexity not previously accessible to those limited to hand techniques. It is this new world of complexity that is our peculiar domain.
Mathematicians are scandalized by the complexity— they like problems which can be simply formulated and readily abstracted.
Physicists or biologists, on the other hand, are scandalized by the arbitrariness. Complexity is no stranger to them. The deeper the physicists dig, the more subtle and complex the structure of the “elementary” particles they find.
But they keep digging, in full faith that the natural world is not arbitrary, that there is a unified and consistent underlying law if they can but find it.
No such assurance comforts the computer scientist.
If the computer scientist is a toolsmith, and if our delight is to fashion power tools and amplifiers for minds, we must partner with those who will use our tools, those whose intelligences we hope to amplify.
Hitching our research to someone else’s driving problems, and solving those problems on the owners’ terms, leads us to richer computer science research.
How can working on the problems of another discipline, for the purpose of enhancing a collaborator, help me as a computer scientist? In many ways:
It aims us at relevant problems, not just exercises or toy-scale problems.
It keeps us honest about success and failure, so that we don’t fool ourselves so easily.
It makes us face the whole problem, not just the easy or mathematical parts. We can’t assume away ill-conditioned cases.
Facing the whole problem in turn forces us to learn or develop new computer science, often in areas we otherwise never would have addressed.
Besides all of that, it is just plain fun to look over the shoulders of those discovering how proteins work, or designing submarines, or fabricating on the nanometer scale.
Two of our criteria for success in a tool are:
It must be so easy to use that a full professor can use it, and
It must be so productive that full professors will use it.