A professor recently asked me, what makes a great software engineer?
Software engineers do not code all day. Most of the time, we’re listening and speaking. We’re solving human problems.
The level of technical competency required to become a software engineer is surprisingly low, compared to other engineering disciplines. That’s because machines are easy to deal with (they tend to do exactly what you say!)
Great engineers can explain technical problems and the value of solutions to their sales colleagues. They listen to feedback and prioritise the important features. They help their managers select the best projects to build. The proactively look for bottlenecks and solve them. They energise their teams and the wider culture around them.
Great software engineers are great listeners and speakers.
It is crucial to keep a cool head when everybody else is losing theirs.
Inevitably, something will break in production. The fastest way to put out a fire is to stay calm and quickly ship a patch, rather than freaking out or blaming a colleague.
Great engineers also extend patience to themselves and the people around them. Just as code inevitably breaks, a colleague will eventually disappoint you. Learning to be kind and patient with people is an extremely valuable skill.
If I had to choose between an enthusiastic engineer or a “talented” one, I’d pick the passionate one every time.
Many software engineers do not actively spend time learning after university. If you are enthusiastic about programming, you’ll will inevitably become the best through sheer effort. “Talent” in programming is useless on its own.
Some colleagues were surprised by how much I seemed to know without a Computer Science degree. I’ll reveal my secret here… thousands of hours of deliberate practice. I woke up early every day to code before work. In every lunch break, I read a programming book.
Nobody asked me to study, and I didn’t get paid extra for it. I was simply thirsty to learn more, and it always felt like fun.