DEV Community

Umair
Umair

Posted on

What is Your Competence Level?

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.

For me, the scripting language is something that is easier to work. JavaScript is a good example (no type checking and easier on forgetting ';' )

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.

Great

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.

Oldest comments (4)

Collapse
 
curtisfenner profile image
Curtis Fenner • Edited

The difference between "stage 1" and "stage 2" should not be language. The fact that semicolons are optional in JavaScript has absolutely nothing to do with the competency of people who use it. (Neither does it, nor the lack of static types, make JavaScript any "easier" as you are implying; in fact, both of these make wielding JS effectively harder).

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)

Collapse
 
engrumair profile image
Umair

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.

Finally, complex algorithms problems can be solved, studied and analyzed without writing a single line of code and using the good old mathematics. As I know there are people who are good at algos/maths but could not implement bubble-sort in JavaScript!

Collapse
 
curtisfenner profile image
Curtis Fenner

nobody is going to write 10000 lines of JS

This is outright false. First, distinguishing between the browser and not is meaningless; you are singling out the language, not the environment. Second, projects like Google Maps, Gmail, etc, are hundreds of thousands of lines of client side JavaScript; Slack is definitely at least tens of thousands; etc.

Finally, complex algorithms problems can be solved, studied and analyzed without writing a single line of code

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.

Thread Thread
 
engrumair profile image
Umair

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.