What we do in computer science is not really about the computer, and it’s not really a science. Go figure. Computers are generally designed by computer engineers, and whilst computer science does delve into the world of hardware, it is not the core goal. Science on the other hand is described in the dictionary as: “the intellectual and practical activity encompassing the systematic study of the structure and behavior of the physical and natural world through observation and experiment”.
Computers have nothing to do with the physical or natural world per se. Science is driven by observation. Computers are driven by technology, and in as much as computer engineering helps build them, the discipline is not a engineering discipline. So, not a science, not an engineering. It may have the same dilemma as mathematics – is it an art of a science, or something in between? An earlier post of mine dabbled in the notion that it is a craft, and the longer I am in this field the more I believe that. It is belief that has been around since the early 1990’s when Jack W. Reeves’ wrote an essay titled “What Is Software Design?“. In it he postulates:
“Software development is still more a craft than an engineering discipline. This is primarily because of a lack of rigor in the critical processes of validating and improving a design.”
You can design a bridge and be fairly certain it will work on paper. The same can not be said of software. In this article, “Why Software Development is a Craft“, the author Doug Bradbury makes the point that “A furniture maker cuts a joint with his hands, then fits the two pieces together. If the alignment isn’t perfect, he sands and trims and fills until the joint is true. It’s a cycle of shaping and observing.”. Is coding any different? Code is a physical entity, like a piece of wood, which must be properly crafted to obtain the right outcome.
It should be time that we actually started treating “computer science”, as the true craft it is, and throw away ideas of it being a science, or an engineering.