## The Mythical 10x Programmer
[link](http://antirez.com/news/112)

- **If the design and implementation of a program are not linear abilities, things like experience doing abilities, knowledge, recognition of useless parts, are in my opinion, not just linear advantages, they work together in a multiplicative way in the act of creating a program.**
- This will happen if the programmer can both handle the design and implementation of a program.

#### Qualities that I believe make the most difference in programmers productivity

- *Bare programming abilities: getting subtasks done.* To deal with the subtask of actually implementing part of a program. In a team sometimes I observed very incompetent programmers, that were not even aware of a simple sorting algorithm, to get more work done than graduated programmers that were in theory extremely competent but very poor in the practice of implementing solutions.
- *Pattern matching.* Experience = the already explored solutions for a number of recurring tasks. An experienced programmer eventually knows how to deal with a variety of subtasks.
- *Focus: actual time VS hypothetical time.* Lack of focus: internal or external. Internal: lack of interest, lack of exercise, poor or little sleeping. External: meetings, interruptions.
- *Design sacrifice: killing 5% to get 90%.* It is very important for a designer to recognize all the parts of a design that are not easy wins, that is, there is no proportionality between the effort and the advantages. *A project that is executed in order to maximize the output is going to focus EXACTLY on the aspects that matter and that can be implemented in a reasonable amount of time.*
- *Simplicity.* I believe that the two main drivers of complexity are the unwillingness to perform design sacrifices, and the accumulation of errors in the design activity. *If you think at the design process, each time a wrong path is pursued, we get more and more far from the optimal solution. An initial design error, in the wrong hands, will not generate a redesign of the same system, but will lead to the design of another complex solution in order to cope with the initial error.* The way simplicity can be achieved is to reason in terms of small metal 'proof of concepts'.
- *Perfectionism.* Either the engineering culture or as a personality trait. This is actually a big barrier, these insert a design bias that will result in poor choices in order to refine a design only according to trivial parameters.
- *Knowledge.* You don't need to be an expert, but you need to at least be aware of the potential solutions for a problem.
- *Low level: understanding the machine.*
- *Debugging skills.* The sum of being being good at gaining state a bug, in order to fix it with a rational set of steps, and the attitude of writing simple code that is unlikely to contain too many bugs, can have a great effect on programmer efficiency.

Add article on the mythical 10x programmer.
Add article on the mythical 10x programmer.
