What is your competence level as a software developer? To answer this, I come up with a simple framework that I call 'The framework of Competence'.
Being a software developer is a journey. In each journey, you are on different stages. So this framework will tell you at what stage you are in your journey.
Also, this framework is helpful in getting you out of overwhelm. In a programming career, you hear about new tech, frameworks, languages quite often. This can be overwhelming for junior developers. But when you know how will you look like after some experience then you will not feel overwhelmed.
This framework is not here to demoralize you. Once you know where you are you can easily plan your next move.
Stage 0: You are not a programmer-- obvious.
Stage 1: You can develop in a scripting language.
Stage 2: You are acquainted with writing apps in a real programming language.
Wondering what is the difference between scripting and programming language. Look at the answer in this post.
Easier than scripting languages are markup languages--examples are HTML and CSS.
Stage 3: You can write complete apps in a programming language and can design a simple API.
Stage 4: You have a complete grasp on developing API and you can write optimized code for the hardware.
Stage 5: You develop operating systems and drivers.
This is a very simple back of the napkin paper framework that you can use to identify your capabilities.
Use this framework when you see a more skillful developer. With this framework, you will know that you can get to his level of expertise or even ahead but it’s just a matter of time and hard work.
If you like this post then get the step-by-step guide to create your personal tool for fighting impostor syndrome.
This guide will help you to:
- Document your progress
- Make better software task estimation
- Keep motivated
- Authentic self-appraisal
This post first published here.
Top comments (4)
The difference should be how reliable your code is (and, maybe more readily seen, how reliable it needs to be). If all you are writing is one-off spreadsheet processing code, a) your code doesn't need to be very reliable, it just needs to work on the one input, and b) if it's slightly wrong (e.g., using population variance instead of sample variance), it probably wouldn't really matter anyway. Being able to write code that (mostly) works in simple cases is in itself a feat; but when you can write truly robust, reliable code, you have progressed.
Also, the apex of of programming ability also need not be towards the hardware. If we're going by activities that require a significant amount of specialized knowledge and experience, there are other extremely complex aims, such as building software systems that are extremely fault tolerant and/or consistent when distributed geographically, or solving extremely complex algorithmic problems effectively (such as graph isomorphism, schedule planning, and constraint satisfaction)
Hi Curtis, Great analysis.
With scripting, I wanted to imply No Filling work, No remote connections, No threading work and etc. Additionally, nobody is going to write 10000 lines of JS code that is going to run in the client browser. (Leaving semi-colons is a lesser concern).Also, reliability is a relative term. One can write an unreliable device driver and reliable input validation for a web-page.
I believe apex of programming is more geared towards hardware. How would you write or even choose for the fault-tolerant systems when there is huge technical debt of the underlying hardware.
Building a geographically distributed systems in only viable if one understands how to distribute tasks on a single system/OS and understand underlying concepts of scheduling and resource management.
The correct implementation of algorithms is it's own skill that requires significant experience and knowledge. Exactly because of what you said, being good at math does not mean you are good at programming, is why I called it out.
I believe that all great frameworks/products i.e Gmail are written by at least stage 4 programmers. Secondly, it is not the norm.
The last point is true. Correct implementation of algorithm is a programming/engineering skill. Not studying or analyzing. So, therefore, there is no 'Apex of Programming' if you only know the algorithms.
If one is good at implementing algorithms in isolation that would be level 3. If one is great in implementing algorithms AND integration of other systems that will be level 4.
Some comments may only be visible to logged-in visitors. Sign in to view all comments.