10 steps to become a great software engineer

After working in the industry for over a decade, this is my personal summary of the key elements for a successful and satisfying career as software engineer (and a reminder to myself):

  1. Contribute to open-source projects – ideally applications or libraries you already use yourself. Don’t blame me, if you end up “working” in your spare time.
  2. Read and understand The Risks Of Stopping Too Soon by David Parnas. Do your best not to stop too soon. It is very tempting to say you’re “done”, if you got impatient colleagues or customers. Or if you got a lazy day. Fix things the following day then.
  3. Learn how to say no. If you always compromise and go with the flow, you will hardly find your limits. Stay professional, if you have a different opinion. Don’t force yourself to have the same opinion as everyone else because you think it’s professional.
  4. Join a professional association like ACM or IEEE Computer Society. I find the monthly magazines and the contact with other members very valuable.
  5. Be proud of what you accomplished, but don’t think you’ve done everything. Read books and learn from others. As a start, I can strongly recommend reading Clean Code and _The Clean Coder _by Robert C. Martin (“Uncle Bob”).
  6. Be organized. Be reliable. Write down important stuff. Know your commitments.
  7. Insist on specifications. In the worst case, you have to write them yourself.
  8. If you’re implementing some external interface, please Read The F**** Manual (RTFM**). RFCs are a valuable source of information for public internet protocols like SMTP. Don’t invent your own “standards”, if there is an existing one that works.
  9. Understand the specifications, before you start coding. Ask somebody, if things are still not clear.
  10. Write tests. Tell others to write tests. If it’s not tested, it’s not done.
The inspiration for this post came from an article I recently read on arstechnica.com:

Modern code does not equal well-written code. Experience in years does not either. […] Experience often makes us cynical and can compel us to resist modern methods. Fight that impulse and approach anything new with an openness to learning. The rest will just fall into place.