Polina Soshnin

Qualities of a good software engineer

To be a good software engineer is to engage in a creative, design-oriented activity that is done in a rigorous, systematic way. You are a code whisperer and you care about your end users and your current and future teammates! And yes, sometimes it’s confusing and scary and oh god, why is the server melting.

####You are comfortable working with complexity

Computational systems are machines involving immense complexity. That complexity can be mastered intellectually with one tool: abstraction. You should enjoy ignoring some of the details and solving higher order problems. Breaking down the complexity to a level anyone reading your code can easily reason about is key to being a good software engineer. You will be tasked with ensuring a system functions properly without understanding the implementation details of every part.

Since everything is complex, when you’re solving problems you must enjoy taking a logical and thoughtful approach to them.

####You care about good user-centered design

A user should not have to understand HTTP status codes to ascertain the state of your website. You must care about making something that a user wants to use. That means not repeating yourself, solving a problem once, write code that does on thing well, and focus on maintainability. That also means remembering that YOU won’t be using the software. You also care about writing tests, you fix bugs before writing new code, you do usability testing, you use source control, you have a clearly defined spec, and you use the best tools for the problem.

####You care about best practices

Dolphins cannot run in environments they were not compiled for. You must be passionate about seeking out best practices and contributing to a culture of good code review and better code.

####You are comfortable with uncertainty

You must always be learning from your mistakes and learning from others. The field is always changing and the inputs you’re designing for will never perfectly match the inputs in reality. You should enjoy solving problems with uncertainty in mind.

Becoming a good software engineer means:

  • Putting in the time and effort. You’re always learning and practicing.
  • Asking questions and learning the same thing from multiple perspectives. If you need to understand something to complete a task, scour the web for tutorials. Try different tutorials. Some will make it click more than others.
  • Being involved in the community. Go to talks, become a mentor. Work on puzzles and put them on github. Start a blog. Start a portfolio.
  • Imposter syndrome will follow you throughout your career, and the more you learn about programming, the further behind you’ll feel. That’s okay, you’re not being hired to know and do everything programming-related. You’re being hired for a very specific set of skills which add value to a company.
  • Patience. Do not be afraid to fail 100 times before getting something to work correctly. Keep trying and don’t give up!