Types of Programmers by Skill Level
In my 27-year programming career (including the time when I was 13), I could say that I've encountered almost all types of programmers by their skill in programming, here's a list including the rarity (or ordinariness) of their class in the Philippine industry.
Apathetic
The apathetic developers are individuals who took up any programming related course but have totally no idea of how a program works or they are uninterested in programming. Most of them are working on CMS websites such as WordPress and Drupal. It is important to note that they don't do customization and hate program customization because they are incapable. After failing software development, they are reassigned to tasks such as Content Uploading, User Training, Documentation, HTML, and CSS work. However, their incompetence extends beyond programming, even with menial jobs such as content uploading, they require a lot of assistance from their colleagues. These type of developers are slow learners and does not contribute or have very little contributions to the project assigned to them. It is recommended that they change careers to something that they could excel as early as they've learned they're apathetic.
A quick test to know if you belong in this class is to answer the question below without Googling it:
Write a program using any programming of your choice to print all the odd numbers between 1 to 1,000,000 in descending order.
You belong to this class if
- You've been learning to program for more than a week and you can't provide an answer mentally as soon as you've finished reading it.
- AND/OR, you consider yourself as a programmer and you can't provide an answer mentally as soon as you've finished reading it.
This population of programmers comprises about 60.x% of the Software Development Industry in the Philippines, based on experience.
Wannabe
This type of developer seldom missed a YouTube video of their favorite programming channels. They're also always updated in the latest programming framework and trends, i.e. Python. They often present themselves as Game Developers, Hackers, AI Experts, and Lead Programmer of a certain development team. But in actuality, they couldn't even code without resorting to Stack Overflow and other similar sites. These wannabes devote more time in watching YouTube videos and playing video games than actual coding. They manifest the will to attend seminars (or have attended several seminars already), thinking that it would improve their skills but lack the motivation to do the actual programming is the real impediment in learning.
Wannabes are upgraded version of Apathetics, they too are hard to learn and seldom contribute to projects. However, their potential can be maximized if proper frameworks to validate and automate their work are in place.
You belong to this class if you can answer the question posted above and you exhibit any of the characteristics of a Wannabe. This class comprises about 4.x% of the population.
Mediocre
Mediocres are below average programmers but are a lot better than Wannabes. These types of programmers are normally oldies who did not bother to improve or learn anything new. Although they can also be millennials who exhibit the same attitude towards programming. They can solve simple problems, but not the odd ones. They normally work on linear programming problems such as for loops starting from i to max, they find it hard to debug code, implement their own function of sort and adapt to new frameworks and/or concepts when presented one. Mediocres often avoid programming tasks such as SQL Databases, Java, C++, and other programming tasks that will make their head ache. A great example of Mediocare would be, not learning functions such as random() and concepts like OOP. They don't think much about programming and prefers socializing than tech. Mediocres are like Wannabes and Apathetics in terms of their socializing skills, they have a life after work and most of them are irresponsible and will not lend a helping hand after working hours.
You belong to this class if you cannot answer the question below. This class comprises about 25.x% of the software development population in the Philippines.
Without Googling, implement your own pseudo-code version of outputting 100 unique integers at random.
Also, they would reason out that they have no need to understand or to check the random function ever, as it does not have a real-life application, and so they cannot answer the question above, even in pseudo-code.
Mid-Level
This type of developer is the least we expect a programmer to be. Programmers at this level can implement their own version of any elementary function and knows SQL databases well. They can very well adapt to new technologies and they learn faster than the Mediocres. Most Mid-Level Developers update themselves on the latest tech and frameworks but not on the fundamentals. And they for one have already developed and/or have conceptualized their own framework. They are very good at linear programming and can almost solve most of the client requirements. They also think highly of themselves and pride themselves of their work by posting it to GitHub. However, their waterloo is dynamic programming. Most data analysts, hardware-system integrators, hackers, framework developers, game developers and bright graduates fall under this level.
If you think you're above this level, try to solve the following problem without googling it:
Write a program to generate and print all the letter permutations of any given string. You may assume all the letters in the strings are unique. Example: string str = "abcdefg"; Note, str may contain any length and any string.
Sample output:
abcdefg
abcdegf
....
gfedcba
Mid-Level comprises 10.x% of the software development population in the Philippines. Most of these programmers work in Central Business Districts like Makati, Ortigas, and Bonifacio Global City.
Almost all of Mid-Level developers do not advance to being a Hardcore, because they're already contented with their knowledge and skill of programming. Advancing would mean affecting their social life.
Hardcore
Hardcore developers are way beyond Mid-Level developers. They don't update much themselves about the latest craze about programming and tech because they concentrate more on understanding the minute details of the fundamentals and mastery of a given concept. They can explain well the theories and equations behind certain concepts they've mastered. They don't have much life outside their own little project and work. They devote about at least 10 hours of programming every day, including holidays and day-offs. They are very good at dynamic programming, optimization, and can solve any hard problems presented. They can singlehandedly win a programming competition without googling any of it.
They don't think of themselves as good developers, because the more they know, the more they need to understand deeper. They prefer books or online books than YouTube tutorials. The P = NP or P != NP may have crossed their mind and interests them although they may have not attempted to solve it.
Some projects of hardcore developers are abstract algorithms, kernels, compilers, game engines, frameworks. Knowledge in C, C++, Assembly Language, and a good command of maths are pre-requisites at this level.
Although Hardcore developers comprise less than 1% of the programmer population, it has a wide range of spectrum depending on the number of masteries, and I seldom meet programmers at this level.
God-Level
I have never met a God-Level Programmer in person. I for one do not consider myself to be even close to this level but I aim to be in the future. There are a lot of things I do not know and a lot of things I need to learn. God-Level could be a myth in the Philippine Software Development Industry.
I would say that you're on this level if you've mastered several mathematical and programming concepts and maybe, have submitted a paper on the P/NP problem.