From early in our careers as programmers, we begin learning specific techniques for solving artificial problems. We call them algorithms. In fact, a course in data structures and algorithms is generally part of the first year undergraduate curriculum in computer science. I have no quarrel with this. Learning to solve small artificial problems (such as sorting an array, or generating the first few Fibonacci numbers) is an essential step in learning to program. Beyond that, these skills are the same ones we will need when working on programs and systems that are designed to solve real world problems. To draw an analogy with medicine, algorithms are akin to to procedures. They are well rehearsed techniques that can be used to address very specific problems. Performing procedures is only one aspect of patient care. In the same sense, implementing (or even selecting) algorithms is only one aspect of software development.