A while ago Ev challenged me to consider what makes a good engineer.
The obvious answer included characteristics such as smart, works fast, good architectural sense, thinks outside the box, excellent technical knowledge, great problem solving skills, etc…
While accurate, this list wasn’t very satisfying. Shouldn’t there be a deeper truth?
The question plagued me and I spent quite a bit of time thinking about it. I discussed it with other engineers I respect and eventually came up with four meta traits that capture the essence of a good engineer, from which other traits flow.
A strong desire to know or learn something.
Curiosity is important throughout the life of an engineer. It drives us to learn new programming languages, experiment with new systems, and to figure out novel ways to solve problems. It’s what causes us to question assumptions and seek to understand the architectural choices made by others. A lot of the traits commonly ascribed to a good engineer stem from a rich sense of curiosity.
Knowledge or perception of a situation.
When you’re self-aware and aware of your surroundings, you ask more questions and make more connections. You’ll understand the reasons you make technical decisions and be able to articulate them when asked. Awareness helps you identify why some code is particularly awkward to use, or when a pattern is emerging that can be standardized.
But, awareness isn’t enough on its own, it needs to be coupled with action.
Admirably purposeful, determined, and unwavering.
The best software engineers have a strong gut feeling about the right way something should be done, but they’re also flexible, open to other opinions, and know when to seek out additional information.
Resoluteness manifests as the ability to make good technical decisions amid uncertainty, to doggedly investigate complex bugs, and to effectively push a project to completeness.
The ability to understand and share the feelings of another.
It’s unlikely any engineer works entirely in isolation. Understanding people’s feelings and perspectives is an important part of working in a team.
But empathy can go beyond this: it can help you write better code. If you can understand how other people will use your code, and what it will be like for them to read it the first time, you’ll design better interfaces and write simpler, more logically structured code.
Yes… good engineers C.A.R.E.™