You know you’re not a beginning software engineer when…

You know you’re not a beginner anymore if at least ten of the following are true:

  1. When faced with a programming task, your first instinct is to think and draw diagrams before starting to type source code.
  2. You can work independently to complete a project, without asking someone else for help.
  3. The languages you are using are second-nature to you, and your full attention is on the problem itself and not on the details of language syntax.
  4. You can explain how your code works to someone with no experience, and they actually understand it. (As Einstein said, “If you can’t explain it simply, you don’t understand it well enough.”)
  5. Others come to you for help, and you’re confident that you’re leading them down the correct path (and not just making stuff up).
  6. You know where to find information you need but don’t have.
  7. You truly understand how the CPU works and how memory management works, even if your chosen language hides all this from you.
  8. You can understand warnings and errors generated by your development tools, and you can debug your own code.
  9. You understand data structures and algorithms, and how to choose the right ones for the task at hand.
  10. You are both willing and able to test your own code effectively.
  11. You can review another person’s code and provide them with constructive feedback.
  12. You are able to overcome the “not invented here” mentality, and embrace libraries and frameworks to make your life easier.
  13. You sincerely care about the next person who will have to work with your code, so you develop readable, maintainable, portable code.
  14. You recognize that it’s not about how many languages you know, but it is about how well you understand the fundamental concepts, and how easy it is for you to learn a new language and apply those concepts.
  15. You recognize and embrace the fact that the process of learning and improving your skills will never end.
  16. You actually want to write code, even though no one (an instructor or a boss) is forcing you to write code. In other words, you have developed a passion for programming and building things.

Of course, you should set your sights on all of these, not just the minimum ten. Some are relatively straightforward to achieve, while others require a good measure of diligence, patience, and humility.