Signs you're a senior programmer

  • you know what you know, but more importantly, you know what you don't know
  • you are happy to degrade skills on your skill matrix and content about adding new ones
  • when debugging an issue from production: not only do you look at logs, but you can change your preconceptions about what could be wrong
  • you are T-shaped, and the broad part covers these areas: multiple programming paradigms, operating systems, formal languages, daily tools
    • programming paradigms: you know not only OOP/procedural, but also things functional or more “esoteric”; obviously, you also know multiple programming languages with various strengths and weaknesses which you've used to gain the practical knowledge with these various paradigms
    • operating systems: you've also written at some point your own multi-process, multi-threaded kernel; as part of an university curriculum also counts
    • formal languages: you've studied the dragon book and you've written small parsers and interpreters as practice
    • daily tools: you know a lot of tools which help with productivity and you use them well
      • you don't repeat clicks mindlessly, for each individual step you do, but you know all the shortcuts of your tools, and define your own shortcuts
      • you don't repeat typing out commands of codes mindlessly, but you know the shortcuts to do things quickly or even record your own macros to speed things up
  • you value simplicity in your software design and system design
  • you are emotionally detached from concrete vendors of libraries, frameworks or languages
  • you don't use features of programming languages just because they're available
    • most programming languages have language constructs which allow or encourage you do make a bad design; you know them and you refrain from using them