Freedom from the desire for an answer is essential to the understanding of a problem.
How do these programming niches affect us? What do they make us do differently? To be a good programmer, a true craftsman, you must know:
What your discipline is—the kind of software you're producing.
How the discipline affects your architecture. (Is it a tiered enterprise system or tightly woven ball of embedded code? See Chapter 14.)
What is an appropriate code design in this field and what isn't. (For example, should you sacrifice clarity and elegance for performance, try to squeeze the executable image into the smallest size possible, or perhaps incorporate many hooks for future extensibility?)
The tools you use—what's available and ...