Knock, Knock ... Who's There?
Are you a software cook or software chef?
Gordon Elliot hosted a TV show on the Food Network in the 1990s called Gordon Elliot’s Door Knock Dinner. Most episodes followed the same pattern:
-
Gordon and a world class chef would knock on someone’s front door with the following offer: The chef would cook dinner for the family, but with one constraint – the chef could only use ingredients currently in the home. The offer was usually accepted by a stay-at-home housewife and/or mother.
-
The show progressed as the chef, Gordon and the wife scrambled through the house looking for any useful ingredients from leftovers in the fridge to a frozen leg of lamb in the garage freezer.
-
Once the scavenger hunt was over, scenes alternated between the chef narrating what he or she is trying to prepare, and Gordon interviewing the wife in a separate room.
-
In the last ten minutes or so, her husband would return from a day at the office with a dazed and confused look on his face as a television crew camped out at his house.
-
The final scene was the dinner reveal where the chef served the family always with rave reviews for the meal.
The family was often shocked with the caliber of the meal. A meal like that had come out of their kitchen, but how? Was the wife a bad cook? Probably not. She may have been an excellent cook. But why was she surprised by a meal for which she had all the ingredients?
She may have been a great cook and could follow any recipe well with the desired outcome. But she wasn’t a chef. Chefs don’t follow recipes. Chefs create meals. Watch any competitive cooking show on television, even one featuring children. They never consult recipes.
Chefs understand how food works. They know flavors, textures, and techniques. These building blocks allow them to design a meal with the resources at their disposal. They are not constrained by a recipe.
Becoming a chef requires expertise that requires additional training and/or experience. Chefs must devote resources to learn these building blocks.
Many software developers are good “cooks.” They can follow software recipes. But how well do they understand the building blocks to become software chefs?
Just as a chef knows flavors, textures and techniques, a software chef knows data structures, algorithms, and design patterns. These provide the building blocks to design a software product or feature with the resources at one’s disposal. Developers must devote resources to learn these building blocks to become software chefs.