Back to Homepage

Credit: public domain

Complexity

Andrew Begel

One of the most important attributes of a great engineer is their ability to reason about software complexity with agility. This means comprehending the smallest detail in a software implementation, all the way up to its impact on the highest level architectural detail, linking everything between, and explaining all of this complexity to other people. This skill is central because it not only demonstrates a mastery over how complex software systems are built, but also helps others acquire that mastery through communication.

Your task today is to practice acquiring knowledge of software complexity and communicating that complexity to others. To do this, you're going to choose an line of code in a file in an open source project and write explanations of the following:

To do these, you need to be savvy with program comprehension tools. Get good at searching code to find calls to functions, instantiations of classes, uses of variable names. GitHub's search features aren't as powerful as a proper IDE's search features, but they're good enough for today's practice.

Ready? Pick one of the following:

When you think you know the answer, find someone else who is done but analyzed a different line. Try to explain the four details above to them until they understand.

When you're done, choose another until the end of class.