Good Programmers are Master Architects
Good programmers understand that they are building a complex structure with layers stacked upon other layers. They think critically about their design, and they know they need a strong, reliable foundation to support their work. Since their systems have many interdependent parts, they design carefully to limit these dependencies so that failures and design changes do not cascade throughout the system. Their work may occasionally need repair but it rarely needs to be torn down.
Good Programmers are Master Negotiators
Good programmers understand there are always design tradeoffs to make between different parts of the system. When they are working with other programmers, they are able to work together to find the best interfaces between the different parts of the system. When dealing with competing interests, they do not take hostages; instead, they find compromises that work to the overall good. They are even able to negotiate with themselves.
Good Programmers are Master Gardeners
Good programmers know that programs grow organically. The first plantings will spread and define the shape of the whole garden, so they think ahead about the garden’s layout. Good programmers are always vigilant for weeds and remove them on sight, because spreading weeds can choke the garden and make it hard to tend to the plantings. At the end of the day, they survey their work with pride even if most people cannot appreciate how much work it was.
Good Programmers are Master Detectives
Good programmers know how to quickly find the culprit when things go wrong. They have a theory about how things are supposed to work, so they are also good at forming theories about what is wrong. They have a sharp eye for anything behaving in an unexpected way. They can summon the suspects to the drawing room and efficiently test their theories to remove suspicion from the innocent. Especially, they relish the feeling when the criminal is hauled away in handcuffs.