Mastery --- Matt

Oct 11, 2012 • Matt Davis

Everyone has added a lot of great ideas! Like Ben I took a different tack and I tried to think of some of the common complaints I remember hearing in grad school:

  1. My program is crashing!
  • Novice: changes things at random, adds print statements
  • Intermediate: knows how to read a Python traceback, understands common error cases
  • Advanced: uses a debugger, logs program state, uses assertions to enforce program validity
  1. My results are wrong and I don’t know why!
  • Novice: changes things at random, adds print statements, spends a lot of time reading source code
  • Intermediate: keeps intermediate results
  • Advanced: writes code in small, functional units and uses unit tests to ensure correctness
  1. I don’t know if my results are right!
  • Novice: eyeballs things or assumes correctness
  • Intermediate: manually compares results to previous runs or other codes
  • Advanced: writes code in small, functional units and uses unit tests to ensure correctness. uses regression tests to compare to known results.
  1. I want my computer to do X, but I don’t know how!
  • Novice: guesses, googles, uses naive solutions
  • Intermediate: checks online knowledge bases like stackoverflow or looks in books
  • Advanced: asks colleagues/computing specialists
  1. I want to use package X, but I can’t get it installed!
  • Novice: try for a few hours, give up.
  • Intermediate: read the instructions, try for a few minutes, give up.
  • Advanced: re-write the install script and compile core libraries for days until it works.