My high school math teacher once assigned my class to write a paper that demonstrated a math concept and how it applied to real life. The paper was to be graded based on the complexity of the math concept and the detailedness of its applications. My teacher provided us examples of past papers along with their marks. As I read the examples, I came to notice a pattern: the papers with the most complex math concepts tended to contain vague applications whereas the papers with the easiest math concepts tended to contain detailed applications.

I hypothesized that this pattern existed because most high school students knew more math theory than would be necessary in daily life (eg, knowing Euler’s formula isn’t that useful in calculating restaurant tips) but not enough to build advanced mathematical models (eg, signal processing models). As a result, easier math concepts nicely related to math applications in daily life whereas advanced concepts were too advanced to be used in daily life but not advanced enough to explain mathematical effects, which led to students’ writing fewer applications of the concepts. Students made binary decisions of whether to focus their papers on presenting complex math concepts or detailed applications, but not both. Making this decision was strategic because the marks for these two criteria were weighted differently.

Strategic decision making applies to learning programming as well. We can deliberately choose whether to focus on learning object-oriented paradigm vs functional paradigm, or web technologies vs plain ol’ C and C++, or basic Linux vs advanced Windows Powershell. There is a choice and a sacrifice to make in deciding what to learn and what not to learn. But why does this binary choice exist, why not learn both paradigms, web and C-type languages, and both operating systems?

We can learn them all and this comes at a cost: time. With infinite time, we surely can learn almost all the concepts we want but time is not infinite and for some people, every hour carries an opportunity cost – what alternative activity could have been accomplished in that hour. An hour learning Windows Powershell represents an hour not used to learn the Linux command line; and an hour invested in learning one paradigm is an hour not invested in learning another paradigm. The vastness of programming concepts and finite time to learn them means that it is in our best interest to prioritize which concepts to learn, to choose to say “no” to the good and “yes” to the great.

How do we prioritize which programming concepts to learn? That will be the topic of my next blog post. Stay tuned!