Although you might envision software engineers as geeks who lack social skills and live in their mothers’ basements, these individuals actually require qualities that could make them suitable to run as president of the U.S. Visionaries who love code and attention to detail can fit into this field, but there are other skills and personality traits that can help snag that coveted job. And, looking in from the outside, the developers who share these attributes are the same folks who would make you want to quit your job to start a company.
- Basic Computer Science Skills: Hopefully, any software engineer will have these skills and more. Research skills, reading comprehension, the ability to know how to use library functions, and understanding computing problems, design patterns, and frameworks are other skills that are valuable to have. A great class involves students and helps them to develop skills in logical thinking, creative problem-solving and communication. Classes that incorporate a team approach, requiring clear communication among members as they solve a problem and explain their solution to others, enables graduates to work this way at their jobs.
- Passion for Code: Programming isn’t for the uninterested. You must have a passion for code, developing it from a purely scientific skill into a craft or an art. Building code is much like developing a painting, a sculpture, or a symphony. With the popularity of Open Source, you don’t have to be alone in code creation — the ability to work with software engineers and developers from around the world is possibly through the Internet.
- Fearless Refactoring: Refactoring is the ability to improve code without changing what it does. The ability to realize that no one should be a slave to original code is key here — that old code can become unstable and incompatible over time. Refactoring enables the developer to own the code, instead of the code owning you.
- Develops Quality: In a former era, engineers thought testing was beneath them. Today, experienced engineers know and understand the value of tests, because their goal is to create a working system. Exposing bugs and eliminating them is the best way to develop stellar code. But a good engineer also knows not to waste time writing trivial or redundant tests, instead focusing on testing the essential parts of each component.
- Willing to Leverage Existing Code: Why invent the wheel when it’s already working? Life is too short to continuously invent new codes and libraries. Reuse of internal infrastructure, use of third-party libraries, and leveraging web-scale services such as the ones offered by Amazon, are marks of a software genius.
- Focus on Usable and Maintainable Code: Software always works better then it is well designed and user-centric. Good engineers work hard to make the system simple and usable. They think about customers all the time and do not try to invent convoluted stuff that can only be understood and appreciated by geeks. A disciplined engineer thinks about the maintainability and evolution of the code from its first line, as well. Expressive names for methods and variables can make the code self-explanatory.
- Can Code in Multiple Languages: Writing FORTRAN in any language is just the tip of the iceberg. Just like a person who can speak several languages, an engineer who isn’t tied to one code language can think outside the box and is a more desirable hire. A willingness to learn new languages, new libraries and new ways of building systems goes a long way to creating a great software engineer.
- Vision: What is the use in developing code, when it won’t be applicable a year or two down the road? Visionaries create code and libraries that are open to refactoring, and easy to use in all code languages. Being able to see the impacts of present-day decisions is paramount to building great software.
- Attention to Detail: If you get angry about misspelled database columns, “uncommented” code, projects that aren’t checked into source control, software that’s not unit tested, unimplemented features, and so on, then you probably try to avoid those issues yourself. Bad installation packages, sloppy deployments, or a misspelled column name can bring down entire systems. Be obsessive about details, and you’ll be on your way to becoming a software star.
- Business Acumen: If you don’t understand why your software development is so important to your clients’ livelihoods, consider this NASA story. “This software never crashes. It never needs to be re-booted. This software is bug-free. It is perfect, as perfect as human beings have achieved. Consider these stats : the last three versions of the program — each 420,000 lines long-had just one error each. The last 11 versions of this software had a total of 17 errors. Commercial programs of equivalent complexity would have 5,000 errors.” The ability to understand why all the coding is done, as it the fruit for any customer or client.
- Curiosity: The best software engineers are curious about why something is done one way or another, yet with the added ability of being objective about the solutions. Many engineers we know got in trouble as kids for taking things apart to see how they worked. Putting together software is just a creative, and many software engineers also have artistic hobbies. This creativity and curiosity is required to think outside the box when designing programs. The thrill you get from making something work is what keeps you going.
- Experience: If you’ve been tinkering with software programs since you were a kid, your abilities as an adult will be quadrupled. Beyond hands-on experience, you might also be addicted to math and science, and the ability to stay organized. At the same time, great software engineers also realize that they don’t know it all…the ability to continue to learn is essential in a field where change is a constant.
- Discipline: Although you may have passion for your job, this love for your work and for the next project doesn’t mean that you can be sloppy. Attention to detail is important, but so is an ability to stay organized. So much bad code belongs to developers who don’t do what they know should be done.
- Patience: Bugs are natural. Design glitches are normal. Sloppy coding by other engineers occurs often. Patience is a key quality for software engineers who want to work in this field.
- Teamwork: Few projects are small enough or require so few skills that one person can do them well. Learning how to work as a team in college is one way to get over that “hermit” image…and working as a team online or in the office can only produce stellar projects. Successful engineers also become good communicators. They know how to write clear and concise reports and instructions, and know how to convey ideas to clients and customers.