Learning just in case vs. just in time

Recently, I stumbled across a short blog post about learning “just in case” vs “just in time” and it got me thinking about how much I learned and later didn’t need at all and how much I learned (consciously) and now use very often.

What is learning “just in case” and “just in time”? It is the idea of dividing learning phases into the ones in which you learn something new with the expectation that the acquired skills, knowledge and understanding are of later use, and the ones in which you learn something new, because you have immediate application needs for it.

John Cook (the author of the above mentioned blog post) gives an example of an advantage of having learned algebra early on. And I agree, that people who are unfamiliar with graduate school math often tend to think that they would never need to apply any of the learned math from school anywhere. This can be called a blind spot, which is a concept/idea/skill/understanding you would benefit from in a certain situation if you would have acquired it or at least know about its existance and how it is embedded in your situation.

I would, however, disagree that one might only be highly motivated in learning “just in time”. People are actually quite motivated learning “just in case” if their inner motivation is triggered and they have a notion of the benefit from learning. Grant Sanderson, the popular math YouTuber behind the 3blue1brown channel, quite recently gave a TED talk about what makes people engage with math. In general, however, John Cook might be right and people tend to be way more motivated learning things just in time. And similar to my environment, he mentions that this “just in time” learning is very prevalent in software developers, which also includes me.

Does that mean, we should eliminate all blind spots and learn everything we can .. just in case? Well, .. hell no! Our time is heavily limited and the amount of potential knowledge and very specific skills/concepts you could acquire grows way faster than one could keep up with.

When looking over some related articles about this topic on the web, there are various suggestions on what you should learn. Some argue, several fields in math are highly relevant and one should learn them to learn the abstract concepts behind them. Others, e.g. in software engineering argue to learn framework concepts or programming paradigms. These suggestions now are very restricted to math or software enginneering but one can easily extrapolate the idea.

But how to decide what or whether to learn something “just in case”? One has to keep in mind, that there are tremendous levels of abstractions. Usually the rule applies, that the more abstract a concept the easier it can be found applicable across different fields. But higher abstraction usually involves also more difficulty to learn or difficulty to apply without skills for a particular field. Less abstract but more applied levels on the other hand usually involve learning skills and knowledge instead of concepts, connections and understanding.

Just in case learning involves following a medium- to long-term goal. Someone, who wants to become a writer, certainly does not have to learn in-depth mathematical concepts. But most life plans are not designed as linearly as that and especially when some uncertainty is involved, it makes sense to acquire knowledge and skill on a more abstract level.

Personally, I found a bunch of stuff with today’s eyes pretty unnecessary to learn. Although I learned more general concepts on-the-go and in-application, a lot of “knowledge” is very ephemeral:

  • very specific framework details, like API names or function declarations
  • configuration specifications
  • certain programming languages (e.g. VHDL, php3, php4, delphi, visual basics, ..)
  • neural network architectures over the years

and this list could easily go further, while it might be noteworthy that each of those items were quite useful at that time.

Learning a particular programming language just in case does not make any sense to me nowadays, anymore, except for learning your first programming language .. to learn ideas and concepts of programming (side-effect-free programming, cohesion&coupling, recursion, separation of concerns, DRY, KISS, ..).

On the other hand, what I found pretty useful to learn and what I still use mutliple times a day/week/month:

  • healthy nutrition, sports basics and other basic medical aspects of my body – thanks to my parents and despite oh so much trends and wrong statements
  • learning to learn – did anybody tell you that you’d some day stop learning?
  • collaborative working in version control, e.g. with git – used for software development, scientific experiments, writing this blog, organizing ToDo-items, writing articles
  • software design patterns – just recently I had to quickly get into the ReactJS framework, which took me only few days to get desired features working, just by having experience with other frameworks and the basic concepts & patterns used in those frameworks
  • lots of fields in mathematics such as geometry or optimizations – oh my god, I get back to it almost every day and find that I didn’t learn it thoroughly enough
  • lots of concepts from computer science or other fields such as networking principles, markup and design concepts, data structures or data structure algorithms
  • lots of other tools for fast workflow experiences such as linux and command lines, image editing basics, editor ergonomics, software stack tools or latex for (almost) painfree writing
  • and last but not least basic starting points in philosophy and theoretical computer science as a constant companion of life

And yes, we can acquire quite a lot of skills and don’t need to only specialize in one thing. That’s for when you need to get things done: you learn the things just in the right time.