Ask HN: What makes a good software engineer?

22 points by kotrunga ↗ HN
In your opinion, what makes a good software engineer?

What qualities, what skills, etc. makes a software engineer better, and how do you recommend building those skills?

7 comments

[ 3.7 ms ] story [ 27.0 ms ] thread
don't be an asshole that's the best skill a lot of people in engineering can be assholes.
"It's easier to not do something stupid than it is to do something smart." A good software engineer knows most of the usual ways to write broken code, and doesn't do them.
1. Empathy, as April Wensel talks about a lot (e.g. https://medium.com/compassionate-coding/confessions-of-a-rec...). You need this for everything from gathering requirements to debugging.

2. Ability to gather requirements: why are you building what you're building? (More here: https://codewithoutrules.com/2017/02/19/ai-replace-programme...)

3. Focus on solving problems, and when you're more advanced identifying problems. This means coding becomes a means to an end, rather than your goal. (more here: https://codewithoutrules.com/2017/07/10/stop-writing-softwar... and )

4. A focus on productivity, which means a focus on doing less work, and specifically unnecessary work. This goes against the grain for many programmers, who want to code. Goal is to solve problems with as little work as possible, though. (More here: https://codewithoutrules.com/2017/10/04/technical-skills-pro...)

1. Grit - being able to slog through a tough problem for weeks or months with few signs of success or progress. Sometimes you are going to need to bang your head against the desk for a long time before you get answers.

2. Humble - as a software engineer you are going to fail at something most days. Most of the the time you will experience failure multiple times per day, perhaps even hundreds of times. A proud or arrogant engineer will waste time and calories being frustrated with failure. A humble engineer will start looking for help anywhere they can find it, and doesn't let constant failure impede their workflow.

3. Team player - the industry loves to idolize 'rockstars'. However software engineering is rarely a one man job, everyone has off days, and a team can move only as fast as its slowest member. Helping other engineers when they get stuck, even in little ways, is essential to the progress of yourself and the team.

4. Chops - software engineering is a multidisciplinary craft that requires knowledge, judgement, and implementation. Knowing what to implement, how to implement it, and whether or not you should / if there's a better way takes years of practice and training. Having a habit of building your skills, improving a bit every day is part of what makes a decent engineer into a great engineer.