Thursday, August 25, 2016

Who is a good programmer ?

I took it verbatim from Cristopher Burke.
  • Programmer: anyone who can write working programs to solve problems, given a sufficiently detailed problem statement. I have no use for programmers. 
  • Good programmer: a programmer who collaborates with others to create maintainable, elegant programs suitable for use by the customer, on time and with low defect rates, with little or no interpersonal drama. I can never get enough good programmers. 
  • Great programmer: a good programmer who understands algorithms and architectures intuitively, can build self-consistent large systems with little supervision, can invent new algorithms, can refactor live systems without breaking them, can communicate effectively and cogently with non-technical staff on technical and non-technical issues, understands how to keep his or her ego in check, and can teach his or her skills to others. I need a few great programmers on a team, but they're overkill for many programming tasks. 
The path of becoming a great programmer is to start by being a programmer, then develop the skills needed to be a good programmer, then practice those skills until you master them, then develop the skills needed to be a great programmer, then practice those skills until you master them.

The amount of time this takes depends on your personal skills, personality, and training. It also depends on the experience and opportunities that you have during your career, and how you react to them.

I would add a further category:
  • Outstanding programmer: a great programmer who also discovers new way of using programming languages, finds new algorithms, new patterns, push forward program's design, and/or with programming performs new tasks and solve new problems in a specific domain. There is the need of someone of them who give a reasons for programming.
Finally some opinions on programming that Cosma Shalizi shares with his students of "Introduction to Statistical Computing". Let's say that should be use to become a programmer. Great the first statement:

"Programming is expression: take a personal, private, intuitive, irreproducible series of acts of thought, and make it public, objective, shared, explicit, repeatable, improvable. This resembles both writing and building a machine: communicative like writing, but with the impersonal, it all-must-fit check of the machine. All the other principles follow from this fact, that it is turning an act of individual thought into a shared artifact — reducing intelligence to intellect."

No comments:

Post a Comment