Just like some martial arts have a belt system to reflect your skills, I wonder if we could adopt a similar approach in programming. What would each belt represent?<p>I am a Brazilian Jiu-Jitsu (BJJ) practitioner myself, and in BJJ, there are generally five belt levels: white, blue, purple, brown, and black. When you spar with someone of a higher belt rank, you really see that there are levels to the game.<p>Similarly, even though our skills as programmers aren’t tested in the same way, it’s intriguing to think about what each belt might signify for a programmer.<p>What abilities should a “blue belt” programmer possess? How would that differ from a “purple belt” or a “black belt” programmer?
The belt analogy, IMHO, does not transfer to programming in general because each field where programming is useful or extremely required has different notions of milestones.
If you want to force me into having a general notion of tiers for programming I'd look into the required non-optional courses for a major in computer science and there you have it.
A blue belt should be able to work in a team and execute his part of the work well, integrating it right<p>The purple belt can do the same but alone, developing a whole project by himself taking care of the important things, scale it to commercial use<p>And a black belt will managing the work of multiple purple belts to do what they do well at a large scale
solely a technical progression:<p><pre><code> white: can write, [build, deploy,] and run a trivial program
coloured: knows how to trade space for time, time for space,
and will trade both for simplicity
brown: strong in either systems ∨ theory
black: strong in both systems ∧ theory
</code></pre>
(as a counterpoint, my understanding is that for kendō players, the All-Japan champion may be ~3 dan, but the elite are ~8 dan, with the idea that a 3 dan player may win solely through superior speed & physique, taking advantage of the opponent's mistakes, but an 8 dan player should be able to shape the game to achieve a superior position despite having neither superior speed nor superior physique, by inducing the opponent to make mistakes.)
One of the things that differentiate skill level in programmers is soft skills. The ability to navigate calls with stakeholders, apply pressure where needed to achieve certain results, answer technical questions for non-technical folks, etc., I think help stratify programmers.