Mastering: Someone Else's Program

Feb 25, 2013 • David Jones

The date for this one totally passed me be. Sorry.

Today I’ll be talking about dealing with other people’s code, specifically, into what components this skill can be divided, and at what stages of competence we might expect to see these components being used.

Novice

  • Aware that other people write code.
    • Can only use other people’s code if it clearly and instantly solves the exact problem they have in hand at the moment they seek a solution.
      • Often overwhelmed by mass availability of 3rd part code on internet, and has no idea which ones might be a good idea to use.
        • Only uses other people’s code when supervisor has made it a condition of getting PhD.

          Competent Boot Camp Graduate

          • Assesses third party libraries / software components using a mixture of objective (has a README, has a bug tracker) and subjective (smells bad) factors.
            • Can identify which libraries are likely to be useful in solving a particular research problem.
              • Can sometimes identify bugs in other people’s code; adds bugs to bug tracker.
                • Has developed an intuition for when it might be time to search online to see if anyone has written code to solve this problem before.
                  • Can compile other people’s code. If it’s bug free and there is a well written README.

                    Expert

                    • Makes plans to minimise the risk of using 3rd party code in critical parts of an application.
                      • Can replace 3rd code by rewriting it where necessary.
                        • Is able to make the buy/build decision for 3rd party code. By “buy” here I don’t mean literally buy because a lot of code is gratis now, but by using “buy” I do mean to include all the latent costs associated with using someone else’s program.
                          • Contributes to 3rd party code by making pull requests.
                            • Can debug other people’s code. Sometimes even the grad student’s code that looks like it was designed by hamsters on crystal meth.
                              • Can package (apt-get, pip, npm) 3rd party code in order to make it more widely available.