Use this to fill in your current skills and to identify key areas of improvement.
http://sijinjoseph.com/programmer-competency-matrix/
Progression from Scripting to Developing
Move from “scripting” to “programming” to “developing”
Coder
- Coders understand how to solve immediate problems in a sometimes brute force way. Question -> Google -> StackOverflow -> Copy -> Paste is a standard method of development and problem solving.
- Lack algorithms or data structures understanding well enough to know when there may be an efficient solution to the problem
- Develop primarily in a text editor
- Write code -> compile -> fix compiler errors -> run -> fix runtime errors -> repeat
- Struggles to estimate coding projects larger than one month
Programmer
- Understands their IDE can use it for debugging
- Understands basic Algorithms and Data Structures
- Breaks problems into reusable parts
- Is comfortable with their programming language and the common libraries and frameworks
- Googling is still common, compiler errors are less frequent, runtime errors are less frequent
- Can break problems down to estimate more effectively
Developer
- Fluent with their IDE and all features
- Understand all features and components of the software (from DB, to unit tests, to OS, etc.)
- Knows multiple languages and when to do different things in different areas (for example when it’s best to let the database handle something vs. code)
- Understands Advanced algorithms and data structures
- Deeply understands language constructs, libraries and frameworks they’re using. Understands The Law of Leaky Abstractions.
- Understands performance tradeoffs
- Can reliably create time estimates, and track progress toward them
Architect
- Knows when to use different systems for best performance/security/logic
- Sophisticated knowledge of data structures and algorithms including space and time complexity analysis
Books to read:
- Code Complete - This is seriously one of the best Developer books I’ve ever read.
- Writing Secure Code - Security is a huge part of being a good developer.
- Rapid Development: Taming Wild Software Schedules
Posted By: Joe Basirico