Wednesday, January 28, 2015

What is a Master Programmer?


After seeing Bob Martin's talk on professionalism in computer programming, it got me thinking about programming as a craft.

We're all aware of the notion of a craft, and varying levels of proficiency within a craft.  The most intriguing level is that of the master.  The master craftsman has a level of knowledge worth revering, but what it means to be a master is different from craft to craft.


So, what does it mean to be a master programmer?  Here is an inexhaustive, slightly opinionated list of traits of a master in programming.  Feel free to add to this list, and share it around.  And if you aspire to be an expert in the field of programming, then set this list aside and reason about it and choose some of them to abide by.

Note that some of these bullet points are true of master in general, not about programming in particular.

A master programmer...

  • knows several languages and language paradigms and leverages each to inform the others and his/her overall product
    • i.e. imperative vs declarative, and functional, OO, procedural, etc., and various type structures
  • puts some effort into typing quickly
  • knows how long it will take to complete a project, or at least has some reasonable amount of insight
  • knows which of his/her beliefs are "opinions", and is versed in the tradeoffs of both sides
  • (optional) takes on an apprentice
  • is constantly learning and improving
  • knows the limits of his/her knowledge
  • can convert one problem into another
  • knows that tomorrow he/she may be proved wrong on any of his/her beliefs of the craft
  • knows where to get more information on almost any subject

In short, a master knows their tools, knows how to use them, and is aware of the right tool for the right job.  There are some things I'm hesitant to add to the list, but seem important, though I don't know how to word them or modify them to fit in:

  • is comfortable in a full stack
  • knows the O-times for various algorithms and their implementations

Do note that nowhere in either list is the master considered "professional".  This is not a mistake.  Professionalism is not a trait of the master craftsman.  Just ask this fella:


(Note that TDD isn't on the list either)  Finally, this list will not help you become good at programming.  For that list, check out this page.