Chapter 16. Conclusion: Carrying on the Conversation

Programming is a unique behavior, no matter how much we torture metaphors to compare it to other activities and professions. It combines engineering and craft in highly coupled ways, requiring good developers to exhibit a wide variety of skills: analytical thinking; extreme attention to detail on multiple levels and aesthetics; an awareness of macro and micro level concerns simultaneously; and a keen, fine-grained understanding of the subject matter we’re writing software to assist. Ironically, developers have to understand business processes at a much lower level than the actual practitioners of the business. Business people can use their experience to make on-the-fly decisions when novel situations pop up; we must encode everything in algorithms and explicit behavior.
The original vision for The Productive Programmer was to provide a long list of recipes for productivity. It morphed into a two-part book, where the first part deals with the mechanics of productivity and the second concentrates on the practices of productivity as a developer. In its final form, this book still contains a fair number of recipes. But following recipes leaves you with tasty dishes, but no capability to create your own recipes. Identifying the mechanical productivity principles (acceleration, focus, automation, and canonicality) provided a nomenclature ...