“Science is what we understand well enough to explain to a computer. Art is everything else we do.” –Donald Knuth
I have always thought of a computer scientist more as an artisan who works with marble sculpting and chiselling the marble into a perfect form, and less of a lab “scientist” trapped in a stuffy, dark laboratory. Just as the artisan knows her marble, a computer scientist knows his, his…errr…what could be said here? “Computers” certainly doesn’t work here. A quote famously misattributed to Edsger W. Dijkstra is that “computer science is no more about computers than astronomy is about telescopes.” Whether he said that or not, it is definitely true. Just as the artisan works abstractly, so does the computer scientist. Increasing the level of abstraction in this case takes us from the tangible to in semi-tangible: a computer scientist knows his compiler (or other part(s) of the toolchain). But that doesn’t still fit quite right. Continuing our metaphor, the artisan is now intimately aware of her Mazza. We’re still looking for the basis upon which all computer science should be built on, and what our raw marble is. Taking the next logical step, a computer scientist knows his algorithms. There! Much better.
Algorithmic design and consideration is something not to be left out in this fast paced world of “get it done yesterday” environments. When I am crafting code, I always step back and consider the implications of the algorithms I am using. I remember working with a genetic algorithm and how remarkably slow it was. I had linked lists of data that was in a state of evolution and used quick sort to sort the objects. Each recursion of quick sort was copying objects as the sort progressed, leading to gobs of wasted memory. I then re-wrote the sorting to use an iterative merge sort and voilà! The program’s speed gain was significant and took a reasonable amount of time for the large dataset and stopped running out of memory.
When a computer scientist accomplishes this, he steps from the realm of getting things done and into the realm of doing things right. Just as the artisan can refine her marble working technique to increase the elegance and finesse of the sculptures, a computer scientist in touch with his craft can increase the elegance of finesse of any program he writes or designs. Happy crafting!
“Anyone who has lost track of time when using a computer knows the propensity to dream, the urge to make dreams come true and the tendency to miss lunch.” –Tim Berners-Lee