What do you learn just in case you’ll need it in the future, and what do you learn just in time when you do need it?
In general, you learn things in school just in case you’ll need them later. Then once you get a job, you learn more things just as you need them.
When you learn just-in-time, you’re highly motivated. There’s no need to imagine whether you might apply what you’re learning since the application came first. But you can’t learn everything just-in-time. You have to learn some things before you can imagine using them. You need to have certain patterns in your head before you can recognize them in the wild.
Years ago someone told me that he never learned algebra and has never had a need for it. But I’ve learned algebra and use it constantly. It’s a lucky thing I was the one who learned algebra since I ended up needing it! But of course it’s not lucky. I would not have had any use for it either if I’d not learned it.
The difference between just-in-case and just-in-time is like the difference between training and trying. You can’t run a marathon by trying hard. The first person who tried that died. You have to train for it. You can’t just say that you’ll run 26 miles when you need to and do nothing until then.
Software developers prefer just-in-time learning. There’s so much out there that you aren’t going to need. You can’t learn every detail of every operating system, every programming language, every library etc. before you do any real work. You can only remember so much arbitrary information without a specific need for it. Even if you could learn it all in the abstract, you’d be decades into your career without having produced anything. On top of that, technological information has a short shelf life, so it’s not worthwhile to learn too much that you’re not sure you have a need for.
On the other hand, you need to know what’s available, even if you’re only going to learn the details just-in-time. You can’t say “I need to learn about version control systems now” if you don’t even know what version control is. You need to have a survey knowledge of technology just in case. You can learn APIs just-in-time. But there’s a big gray area in between where it’s hard to know what is worthwhile to learn and when.
19 thoughts on “Just-in-case versus just-in-time”
Training to run a marathon is very different than training professional (or scientific) skills because even if your professional (or scientific) goal is as clear as to be able to run a given quantity of kilometers, there are much more variables in professional (or scientific) success than in winning a marathon. For instance, a lots of variables disappears by the fact that winning a marathon depends just on you.
How funny, I used that exact example today – of COURSE you are never going to use Algebra if you don’t know it but in my case I use it every day of my life.
I think this dichotomy omits that ‘just in case’ learning can be useful for more than that ‘case’ – even if one never uses algebra again, the general idea changes one’s worldview. (This is more obviously true if you replace ‘algebra’ with something like ‘logic’.)
It sounds like you could help guide people to a very enlightened autodidacticism. The first part – much greater motivation when you are choosing what to learn – is a core tenet of encouraging self-direction.
I see in the comments to the linked posts that you’ve gotten the common objections from those who are still in the box, when you’ve posted about this before.
Walt, speaking of autodidactism, have you seen Secrets of a Buccaneer Scholar? I doubt many high school libraries are going to stock that one. The author’s message is “Education is important. School is optional.”
I’m not familiar with that one but I think I would agree with it. Interesting that the first review listed is by John Taylor Gatto – I was able to hear him speak just last month.
We’re already committed to unschooling, but the way schools operate also has implications for society in general.
I was a student member in an audit team for the CS degrees in Flanders (Belgium), and this issue came up in our discussions. One of the other members of the team comes from a university where they restructured the courses around just-in-time learning. This means that (for example) the math courses are lined up with the other courses, so they first see the problem, then get the math needed to solve it. This requires a lot of coordination by the staff, but improves the experience for the students.
Apparently, research shows that students are more motivated to learn when they first see the need for the new material. However, there is a difference between engineering students and science students: the latter are always interested, whether there is a clear use or not.
But even when you “have” to give stuff “just in case” (high school math), you can structure your lessons so that they start with a real problem, and become “just in time” learning. Like the approach Dan Meyer is using: be less helpful, create a “gap of knowledge”, then fill it.
It’s the difference between theory and practice. Details of an API? Just in time. Math? Functional programming? Good software engineering practices? Ahead of time.
I’ve been programming in various capacities for about a decade, and had been really making a living out of it for about 4 years. Even though I was able to perform all my duties satisfactorily, I knew I was missing something, so I started a Masters program in CS in my spare time (my undergraduate education was physics and mathematics).
I was told by a few people that I wouldn’t need a Masters and it wouldn’t be useful. However, just about every day I draw upon knowledge I’ve learned from it, and I’m only half-way done. Cache effects? Parsers? Automata theory? They’re all invaluable to me now, but I didn’t miss them before I had them.
It was a drive to learn that made me realize there were things I didn’t know I might benefit from even if they weren’t immediately necessary for my job. All these theory classes are immensely valuable.
This is why it’s so indispensable to read blogs as a developer. You don’t need to (can’t) be familiar with all your options, but you need to know what your options are. You can best do that by keeping tabs on what others are using.
I do not agree with this abstract classification of knowledge. Knowledge is interconnected, one piece relying on other. Learning a topic not only provides the knowledge to that area, but also develops certain expertise which might not be topic related.
For instance learning statistics as a mathematical science has nothing to do with a lot of stuff but once you learn statistics, you’ll gain a new perspective on looking at the problems and this perspective will be useful in problems ranging from medical diagnosis to software code debugging.
Thank you John for your article.
When I finished reading this I thought of the book “The pragmatic programmer”. It also has so nice truths. I love to collect those statements. They help me to get my “manual for a good programmer”.
In addition to learning ‘just in case’, or ‘just in time’, there is also learning ‘almost in time’. Let me illustrate this with an example. During the last 15 years I have done much maintenance on code that was written by other developers and left in quite a messy state. It was apparent that they had learned ‘almost’ enough about their tools/APIs/domains, but not enough to do their jobs adequately. The resulting work seemed to minimally solve their immediate problem at the time, but left lots of problems to be remedied by subsequent developers.
You have just invented a new word(s) “survey knowledge “.
I believe we need it before we embark on “Just In time”. Of course we have Google, but because of the “commercial” interest involved,we are always overwhelmed by the amount of data that we have to filter; to get a
“ONE PAGE SURVEY KNOWLEDGE”. Unbiased and to the point.
May be YOU can initiate such endeavour
Nice blog, as an aside…. you can run a marathon without training :-)
If you don’t learn algebra you’ll never get a job that requires you knowing it. Same applies to other skills as well. I think that it’s simple as that.
Funny, just a few days ago I was thinking of the same concept, but using slightly different terms: “ahead of time” instead “just in case”.
John, good point of view not only for programmer, but also for anyone who really want to do some “real” things.
I have translated this essay into chinese on my site.
I think the just in case has more in it than just some arbitrary knowledge. It also develops memory and eases learning new things when you need to do it just in time. For example learning dates in history helps you remember dates that you use in real life. Also logical/creative capabilities increase when you learn.
The real life use is a quite tricky. If someone never needed something means either he really didn’t need it or he needed it but didn’t know that he can use that there. So if you don’t know something means – you won’t know where to apply it as well. It’s like you’ve never needed to cook – somebody was always there to cook for you. But if you know how to cook you probably will do it sometimes yourself.
Totally agree you won’t know what you’re going to need. In highschool I was convinced that I won’t need biology. I was totally convinced about it. Yet now I’m doing my BSc thesis in population genetics. So yeah…
“In general, you learn things in school just in case you’ll need them later”
far too small scale thinking. fails to explain why eg programming shops love physics majors
something is needed along the lines of “aside from the utility (or lack) of specific items learned, a background set of knowledge is created on top of which a new current item of interest can rest solidly”