3 Virtues From a Good Software Engineer
Introduction
I have been observing and clarifying what kind of “character” an engineer can possess, and summarizing a few problem-solving patterns based on my experiences in the general work environment and community, which also serve as my reference in daily life.
The excellent qualities that an engineer can possess include the following:
- Patience
- Communication
- Thinking outside the box
Patience
Software development is always changing; reality often diverges from ideals, and it requires immense patience to cope with it all.
As someone who solves problems, are you often trapped by them? Always chasing the latest technology? Suffering from severe impostor syndrome? Patience is your best way to deal with all of this.
We often see teachings and stories like “Learn Y in X hours” or “Become Z in Y months,” but we rarely see the stories behind them; the stories of solving real-world problems are more like: “Spent a whole week searching through every document just to solve a bizarre problem that only God knows,” “New technologies emerge every month waiting for you to learn, only to become useless years later,” “Maintaining code is like navigating a chaotic spaghetti built up over layers of historical factors.”
Having patience means accepting that trial and error is the norm; many imperfect attempts can sometimes yield good results, even if they seem meaningless at times. The process of solving problems is just like that.
Most of the time, only you know what you are doing, so give yourself more patience to try and fail. Anyone can become an expert in a field after a brief learning period, but maintaining patience is a truly precious virtue that requires practice to get; behind most achievements lie countless mistakes and attempts. This does not mean we shouldn’t seek better ways to solve problems; it means that any action is better than no action when you feel stuck.
- Get used to failure and cultivate patience
- Trying and failing is also part of the output
- Imperfect attempts are better than doing nothing
Communication
Communication is not limited to interactions between people; it can also be conveyed through documents or code to express intent.
Can you flexibly use different ways to interpret communication to solve problems? Can you interpret others’ intentions well? Can you clearly express your own intentions? We are not omnipotent, so we need to collaborate with colleagues, with people on the other side of the globe, and with our past and future selves, all of which require good communication.
Understanding product requirements, searching through documents for solutions, writing maintainable code… all of these fall under the broad category of communication skills.
- Learn to read documents to solve problems
- Learn to discuss and explain your ideas
- Respect others’ time and discuss in a matter-of-fact way
Thinking Outside the Box
As you advance in your position, the problems to solve are no longer just technical but how to enable the team to solve problems more efficiently.
Entry-level engineers usually start with assigned tasks, but as they advance, the scope of projects expands to developing features, projects, companies, and industries. As understanding of technology and products gradually broadens, the focus shifts from “solving problems” to “discovering opportunities and problems,” making the ability to think outside the box even more important.
- Be generous in cross-disciplinary collaboration and view problems from a broader perspective
- Lead the team to achieve goals (identify, quantify, execute)
Further Reading
- Stop postponing things by embracing the mess
- How To Out Code The Competition - bigboxSWE
- 7 Levels Of Engineers Describe Software’s Most Important Skill