Friday, August 19, 2005

Cooking and Programming

I do a good bit of cooking. I'll make muffins, bacon & eggs, macaroni & cheese, pancakes, or anything like that. But the thing about most of that: it's simple. Except for bacon and eggs, I get stuff that comes in a box or bag and is easily prepared by adding milk or water, or a few other minor ingredients. But by and large, it's "open box, follow instructions".

Some people might not call that cooking. They'll call it warming up food, heating up a meal, or "just add water" meals. To some, cooking isn't cooking unless you start from scratch, follow a recipe with 20+ ingredients, and add your own seasonings. But for them, the cooking and the meal is an experience, and they will not settle for anything less than the best they can prepare.

It hit me today that programming is much the same way. Computer programmers can either use Java, assembly language, or a number of other languages in-between. With Java, all you have to do is add a little business logic and the GUI, messaging, and object model are all provided. Whereas with assembly, you start with the basic of basic functionality and build up. It would be like growing grain to feed a cow to butcher a cow to have meat for your hamburgers. Not many people would be willing to do that, and it wouldn't be worth the effort, since programming at such a low level is largely unnecessary--not much can be added to it by doing it yourself. But if you buy your meat from the butcher, you can still do everything with it you had planned to originally. I would approximate that buying from the butcher is the equivalent of using C or C++. You don't have to worry how it got there, and you have complete freedom in what to do with it. It may take a bit of effort to get a GUI set up, but it can be done, and you can do it however you like. If you buy some microwaveable chicken tenders, however, that's like using Java...unless you do something special, it'll come out the same every time with a lot less effort on your part. You pay more for it (either in $$ for chicken or processing speed for Java), but to many people, it is worth the cost because their main goal is not to find the best way to prepare chicken or find the most efficient way to program something.

Therein lies the heart of capitalism. If you do care about the best way to prepare chicken, the best GUI, or the most efficient algorithm, then become a chef or C programmer. If you think you can do it better than the average, and that people will want the way you do it, then you have a market to which you can sell your work. If you can do it better but nobody cares because what they have is "good enough", then you'll be a starving artist. So we must all choose carefully our profession--if we want to push the envelope AND make a difference, we must be able to (1)identify an area that can be improved upon, (2) strive to learn about it, and then (3) push the envelope.