Stages of Programmer !!

Beginner
- Understands keywords, data structures at a very basic level
- Hackish code: lots of copy-paste without any understanding at all
- Ultimate goal: make it run. Doesn’t handle exceptions, is untested, undocumented, doesn’t use version control or logging, and essentially unmaintainable.
- No attention to code style; inconsistent spacing, ugly and non-descriptive variable names(‘a’, ‘b’, ‘c’, …)
- Typical tasks: toy exercises that only require a couple of lines of code
Beginner-intermediate
- Starts to experiment with more serious projects, but because of the lack of understanding of the deeper concepts, often ends up writing terribly unreliable code. You eventually manage to make it run, but your code is an unreadable, unmaintainable mess.
Intermediate
- Knows how to build a reasonably reliable project using other people’s code (e.g. a Django website using their ORM etc.)
- Often ends up writing unnecessarily fancy code
- Knows the basics of TDD, but uses it inconsistently
- Knows the basics of properly documenting code, but does this inconsistently
- Often focuses on the wrong part of the code (e.g. refactoring code that is rarely used, thinking of algorithmic complexity while the code is only run once a day on 10 items, etc.)
- Has heard of different solutions to a certain problem, but doesn’t understand the underlying arguments and sticks to a certain solution religiously without really understanding why (“SQL sucks! noSQL is the future!”)
Advanced
- Builds their own stuff (e.g. ORM), but only when needed.
- Understands at a deep level how the language is implemented
- TDD, properly documenting code and properly using version control is second nature
- Understands what solutions are out there and ‘objectively’ choose the best solution
“Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.” - Martin Golding