108 comments

[ 3.8 ms ] story [ 173 ms ] thread
Seems to invent new terminology. A more traditional term for "on-demand" learning is "just in time" - a kind of epistemology."preliminary learning" aligns with the "just in case" epistemology of factory-style education.
Agreed, but the terminology doesn’t seems to be the point. It makes some decent arguments about “on-demand” learning not being great for learning theoretical things.
Implicitly, on-demand is also rapid. I can look up how to use a library in minutes and hours. Most people don't have jobs where they can allocate weeks or months to learning theory that they didn't need before. But such situations do exist: employers send staff on courses, and people sign up for part time degrees.
As I see it learning “on-demand” is good enough for most programming tasks. But I agree with the blog post tat the situations you mentioned where a person can actually learn new theory and perhaps push the boundaries are increasingly rarer.
"Just in time" is a great expression. It resonates with me because there is an existing body of knowledge around doing things just in time to reduce waste, and I think that's a lot of the motivation for learning things just in time:

1. You don't invest in learning something you won't use, and;

2. Learning something you will eventually use, but not in the near future, has an opportunity cost: What could you be doing with that time and attention that will produce value now?

I will make a separate comment describing what I think the drawbacks are, but I wanted to focus on my support for your preferred nomenclature.

I do like the "just-in-time" label as well.

It seems like the article is lamenting the fact that many of these become "not in time" learning in practice.

True, but having had a number of my own musings make the front page of HN, the author must embrace the fact that just because they write about Y , doesn't mean the audience won't pull on a thread and decide the important thing to discuss is actually X.

:-)

The key claim of this post is buried in the middle:

> preliminary learning is quite bad for learning tools but is the only way of learning concepts.

This claim is not justified. Why must concepts be learned just-in-case (preliminary) rather than just-in-time (on demand)?

I can imagine you might struggle to get a good map of some territory, or a deep explanation of why something is true, without a teacher and/or setting aside some time. But what does this have to do with just-in-case versus just-in-time?

I agree, the article conflates several different learning dichotomies that are often only loosely correlated.

The specific quote you include isn't totally wrong, but it overstates the connection and ignores the contextual differences that maken it more or less true.

One of those contexts in the amount of time pressure vs. slack time you have. When you are under lots of time pressure, it's harder to take the time to learn concepts and easy to skip straight to tools.

To me, this indicates that the author has misunderstood the cause of the problem. The problem isn't that tool learning replaces concept learning, but that workplace/management cultures commonly don't value concept learning and as a result don't schedule time for it or reward it.

(comment deleted)
Yeah, it seems like the author is reasoning like "concept learning can't happen at work, it can only happen at school where there's time, and school is a just-in-case learning environment". I would hope we can reconsider whether concept learning can really never happen at work!
> Why must concepts be learned just-in-case (preliminary) rather than just-in-time (on demand)

Because you don't know which concepts you need unless you already know what they are.

It's unclear how just-in-case learning solves this problem. By learning more things "just in case" you might happen upon the thing you didn't know you didn't know, or you might not. It's a shot in the dark and could waste a lot of time.
I'm not so sure about the arguments here. Theoretical knowledge is more advantageous if things are soundly designed. If stuff is a cobbled together mess, as many modern tools are, it may actually block flow or lead to false assumptions.

Don't get me wrong, it's a valid pursuit, but I'm not convinced by the arguments presented.

Instead you can say it opens the door to more serious work such as say language design, operating system teams, things like that. It rarefies your skillset especially if you don't suck at it. You aren't likely to get an important position at say, nvidia, by going through bootcamps. The crack of that door is open much wider for those with a Stanford PhD in hand. I'm sure there's exceptions, but I'd imagine they're quite rare.

I think it's unlikely, however, to make you necessarily more proficient in the latest churn of frameworks to implement the latest churn of websites.

The article agrees with you that, for learning tools, "on-demand" or "just-in-time" learning is advantageous. This applies for the things that you point out as being commonly cobbled together. However, for learning whole concepts like "AI" or "cloud development," these things are rarely cobbled together and require one to learn how to think through a whole new lens. The concept is larger than any one tool, and the idea is that thinking more broadly will be advantageous in the long run
And that's what I'm fundamentally disputing. We're in an age where "trade school" programming is needed - someone has to do the work and there's no shame in a job well done.

A plumber doesn't need to master the mathematics of fluid dynamics or have an advanced degree in chemical engineering to do their job well. A hair stylist doesn't need to pursue a dermatology medical degree focused on hair growth.

Plumbers and cosmetologists have plenty of work and it's a good profession. They need to go to school, pass exams, get a certification, it's a real thing.

Similarly, getting an e-commerce site up or building a mobile app doesn't require an ability to say, demonstrate the correspondence principle of procedural abstraction in lambda calculus. There's jobs that do but that ain't one of them.

A bonus is theoretical knowledge is quite stable: there is usually some thought put into how to pace and structure the teaching of it (e.g. pedagogy). It builds on itself. And it doesn't expire at the same rate that frameworks do. Drinking from a deeper pool of knowledge (as it were) is a profoundly different experience than learning new tools.

If you're early in your career, focusing on marketable skills and getting experience is a smart move. Once you start thinking about progressing to intermediate and beyond, theory starts to be a secret weapon of sorts that lets you tackle bigger and harder problems.

Says the guy who right on his home page [0] says:

"I love making fun small projects and learning new things in the process. I’m interested in computer science, physics, math, and pretty much everything else."

[0] https://www.jernesto.com/

Sounds like the sort of on-demand learning he's criticizing.

[flagged]
For sure I read it. In fact, he defines On-Demand Learning as follows in that article:

"The second category is "on-demand learning", this is the act of acquiring knowledge when the situation demands it, not sooner nor later. "

Which seems to be the sort of learning he aspires to. Learn it when the situation demands it, not sooner nor later. Not-withstanding a definition of the term on-demand learning that conflicts with other definitions of that term.

You present a straw man argument based on the author's bio from his website. Of course that doesn't represent his full position. He clearly advocates for a combination of both approaches in the article
(comment deleted)
> Putting it bluntly, on-demand learning is excellent for learning tools, but it sucks at learning concepts.

This looks a false dichotomy to me. Concepts can be learned on demand as well. Talk to any professors in a theoretical STEM field (I assume their learning is as conceptual as one can get), be it maths, physics, stats, CS, or something, they would advise their grad students not to spend too much time reading through the tombs before starting research. Instead, they would ask their students to learn the concepts along the way when doing research. Of course, one needs to have solid foundation to learn concepts quickly along the way, but it does not conflict with the effectiveness of learning on demand.

What matters is what to learn on-demand and how.

The issue I have with on-demand/just-in-time learning is not when you learn, but rather that such learning tends to be self-directed. To repurpose a famous quip... The person who is their own teacher has a fool for a student. The problem is not whether you are a good student, the problem is that you selected for a teacher someone with no grounding in the subject and no time-tested curriculum to teach from. Sometimes it works well, but you may end up just like me:

I did a lot of self-directed teaching about programming, starting with boyhood explorations almost exactly fifty years ago (1972!). Yes, I also have had formal education, but most of what I have actually ended up using has been based on self-directed learning.

The result for my N=1 sample is a broken comb profile. I know much more about some things than others, and there are areas of our industry where I am completely ignorant! The reasons for this in my case are that I tend to focus on areas where I already have some exposure/interest, and ignore those that I may not understand or even know exist.

"On-demand" learning tends to reinforce this. You are trying to solve a problem, so you ask yourself questions, and then do research to answer the questions you posed to yourself. But this can create a serious XY Problem[1]. As a self-directed learner solving problems when I encounter them, I search for solutions using the knowledge I already have, and I'm completely ignorant of the possibility that I'm solving the wrong problem and ignoring a deeper understanding of what I'm trying to accomplish.

This can be fixed in various ways, the most obvious of which is: Ask questions of people with experience that differs from yours. If you are a self-made programmer, you will learn the most by asking questions of people with a formal education. If you are in a three-person YC startup, you will learn the most from people in Enterprise companies. That is true no matter how little you value formal education ("credentialism") or Enterprise businesses ("bloatware crystallized as an organization").

And the other thing I'll mention is to embrace the "XY Problem." I personally am just like so many people you see on the interwebs. If I ask how to solve problem Y, and someone says "Wrong! You actually have problem X, and you solve that in the following way," I often emotionally push back. "Just let me solve Y today," I think, "I'll ready up about X later."

But that is the glaring weakness of being a self-directed, on-demand, just-in-time learner. We chase solving problem Y, sometimes aggressively ignorant of X. To be successful as our own teachers, we must be open to learning about X even when our "priority" is solving problem Y. And this is why being respectful of people with different contexts (those with PhDs or those who attend 57 meetings a week) is especially valuable for us. JM2C, YMMV, and especially, if I'm blathering about Y while the real issue with on-demand learning is X, I'm open to your feedback!

[1]: https://en.wikipedia.org/wiki/XY_problem

The tech industry is ruining itself by expecting its employees to learn a bunch of new topics at breakneck speeds on their own time and on their own dime.
From what I have experienced(sample size of 1), the tech industry is more than willing to provide financial assistance in learning about a topic that is relevant to the work that an employee does...the time bit is the one that most people don't want to commit to and that is totally understandable. My company is offering 500$ to pass a certification, which comes out to be like 300 after taxes, they also cover the cost of the exam. It takes 2 hours to take the exam, 10-20 to study for it, and give or take 1 to get to the proctor site. Kind of meh.
I've worked at a few places and none of them have ever spent a dime on developer education. They've sent members of the "product core" team to events and trade conferences, but the devs are just expected to figure things out as we go.
Unfortunate, this is their loss, offering education is low hanging fruit for having more competitiveness in hiring.
This is only a problem for the incurious who stop when they solve the immediate problem.

The curious will often descend into conceptual rabbit holes and acquire conceptual knowledge as well. It's sort of anticipatory yak shaving for future projects.

So let's ignore the headline and most of the article's content, since it's really not relevant to the most interesting supposition of the article.

First, two definitions, from the author:

1. On-Demand Learning: Learning done to solve a specific problem as it is encountered

2. Preliminary Learning: Learning done for the sake of a broad understanding of a subject

I disagree with the naming, but we'll roll with them for brevity's sake.

The author worries about on-demand learning being applied to the exclusion of preliminary learning.

Put another way, too many people read tutorials without reading general information.

So, the solution is pretty simple, on the face of it - make sure you're regularly learning broad areas, not just specific solutions.

Read a variety of books. Acquire a broad base of knowledge.

Would have been better to use ahead of time (AOT) and just in time (JIT) as they have analogs in CS.
(comment deleted)
I think people prefer on-demand approach because

learning without purpose sucks, I mean it's still very valuable, but it sucks in that sense that it is "unpredicatbly effective".

It means that you may learn some stuff and be asked about it on a interview month later, or use it in your task a two months later. It's unpredictable.

It has one strong advantage - namely you're prepared when facing problem.

In both work and academia I've been doing things ahead - sometimes due to work, sometimes due to curiosity and when facing those problem during lectures or work then I've been prepared.

It's advantage, but the process sucks, is boring and unpredictable.

I think on-demand approach doesn't work well when the problems are getting harder and require more knowledge / exp and you gotta have solid foundations and proficiency to some point in your hands.

I think it'd be hard to do cryptography, reverse engineering, writing database, compiler, os, etc. when learning on-demand. It'd feel miserable, I think.

On-demand (as-needed) is handy for actually accomplishing things at work, but theory is the thing that doesn't become obsolete as soon as the trends of the industry sway once more. Being able to use react is one thing, but understanding why react (or angular, etc) works the way it does is highly transferable
> learning without purpose sucks, I mean it's still very valuable, but it sucks in that sense that it is "unpredicatbly effective".

Your presumption is that people are only interested in learning things that make them more effective. This is certainly true of many people at least some of the time, of course. This can be established by direct observation: How many times have you ever heard someone in a classroom ask, "Will this be on the test?"

Bt as a universal proposition, it can also be contradicted by direct observation: People learn things for "the pleasure of finding things out," the title of a Feynman book.

Why else would anyone read a book like Raymond Smullyan's "To Mock a Mockingbird?" There are precious few occupations where you will become more effective if you know how starlings and kestrels can combine in various permutations to compute anything computable.

The first half of your sentence is correct: Learning without purpose sucks. But there are many purposes for learning, including fun (like learning combinatory logic via songbirds in forests) or a desire to understand the way things work or the desire to be viewed by our peers as a learned person.

Don't get me wrong, I'm not saying you should only learn for "material" "monetary" "measurable" value, fun/thought has value too, but I think that in the context of this thread we are talking about learning to get better at job/craft, so - languages, frameworks, concepts/theories/foundations, tools, and so on
Oh I totally get that, and as someone who likes to program for fun...

One of the ways you make more time available for the things you learn for fun (esoteric programming, rock climbing, ultimate, playing music, flying gliders) is by being very intentional about what you choose to learn for "your job."

Another comment made a good point: Perhaps we should call such learning "training." We expect automobile mechanics to know the basic physics behind ICE, but nobody expects the person changing their oil to learn about the computational fluid dynamics involved in designing fuel injection systems.

If you ask, "How can I learn about programming," I would expect the answer to involve a mix of both CompSci basics and practical direction for writing actual programs in a reasonably accessible programming language.

But if you ask, "How can I train to get a job working as a programmer in BigCo," I totally get that the answer should lean in, hard, on the practical and the currently marketable.

Your presumption is that people are only interested in learning things that make them more effective.

I feel like deep diving into conceptual things makes more effective. There's no longer dark corners in my mind when I think about certain problems. It helps me move forward with confidence knowing I've done the research and I know I'm on the right path, rather than following a heuristic.

> learning without purpose sucks

Learning can be it's own reward. Learning can give you new eyes to appreciate the world.

Hmm, isn't curiosity the purpose in this case?

I think that in the context of this thread we are talking about learning to get purely better at job/craft

This sounds like someone having the privilege of getting a formal CS education and only CS undermining those who doesn’t.

The authors should really look at many interdisciplinary domains, where doing preliminary learning each and every one of the underlying subjects is not only unnecessary, but unfeasible. This applies for domains such as data science, computational physics, and many others.

For most people, the reality is as simple and cold as: if you are not learning while doing, and doing it fast, you simply don’t get paid/funded and will go broke.

This is hotly debated in the natural sciences also. Big difference is that the core body of knowledge in, say, botany or ornithology, doesn't change that much over time. Unlike technology, which changes all the time.

"On-demand learning" is apps like iNaturalist and eBird. Folks are asking "What is this?" basically in a knowledge vacuum. It's good that people are curious. But learning the overall taxonomy over time, from combined classroom and fieldwork, makes it a much much richer experience.

Not sure this translates 100% to CS concepts. But I do understand the point being made in the article. Thanks for sharing.

Unlike technology, which changes all the time.

The core body of knowledge (in programming anyway) really hasn't changed all that much since the 90s, at least.

Sure, the languages and frameworks have changed, and maybe I'm not typing as many semicolons as I once did, but a function is still a function and a class is still a class.

True true. And the math underlying that, is even more enduring.
I don't think this really has anything to do with the two methods being weaker or stronger than one another.

I've seen plenty of the example that you give involving things like iNaturalist. These are people who just plain suck at learning on their own. Sorry, I know it's harsh, but I think that's usually the case. These are people who wouldn't be particularly successful in a classroom either, though they may do somewhat better in a classroom setting merely because it does away with the need for the student to exercise the skill of seeking the right information.

I am more adept at the on-demand side of things. It's not that I can't learn in a classroom setting, but a classroom can also be smothering to me because it doesn't permit much deviating from the formula. What I'm good at is getting the basic idea of something, ditching what I don't think to be relevant, identifying what I believe may be incorrect, and using that to go on my own learning journey and developing the necessary skills. Only after I have exhausted every other feasible option will I ask someone "What is this?" One reason I hated being in a classroom is that a certain amount of question-asking is expected of you, and you'll get singled out if you're not asking enough questions; I don't ask questions because, quite honestly, most lectures are redundant to reading material and taking notes.

For the preliminary learner, they need the classroom (learning on rails) because they don't have what it takes to be self-directed. They're probably not going to rigorously question the information being given to them. If they self-guide their learning, the process they'll go through will be one of frequent astonishment.

What I'm trying to say is that I think this really comes down to the individual and not so much the process. Certain personality types are better suited for preliminary learning, and others are better (and happier) with on-demand learning.

<using that to go on my own learning journey and developing the necessary skills. Only after I have exhausted every other feasible option will I ask someone "What is this?">

Yes this, thank you, this expresses much more accurately, what I was getting at. When I said "classroom" I think what I meant was really "research."

It also digs out the core of my concern, which is I guess the laziness fostered by these apps. They don't encourage the "learning journey" much. And that is so much richer and more interesting, than a jumble of disconnected names.

Mh, here "on-demand learning", in my poor English sound like "training vs learning", where you just show something to someone enough to get him/her able to something.

In a more broad sense: a specialist, too specialist and of low general culture to know/grasp "the big picture", so someone unable to evolve, who tend to have just a hammer and so see only nails etc.

I do not understand the "on demand" part. Beside the title the issue is very old and far older than the industrial era or modern time: the issue is that broad and skilled people know the big picture so are hard to master like famous Greek's "useful idiots", while "useful idiots" are... Useful, but not much a threat for a leader, anthropomorphic bipeds easy to chain and forge ad human-robot.

In some moment in history some leaders have tried a "more culture" path, like Peter the Great, and it does end not very well for him and just partially well, and at a very big price for the people. In some moment the opposite path was took and again it does not end well as well.

Probably the ancient Roman's "in medio stat virtus" (in the mean lie the virtue" is still valid, and find the mean is not so straightforward, NOR easy to keep since we are a living being not a static iron bar...

I don't do well with formal education and what this article describes as "preliminary learning", I'm 100% "on-demand". I've always learned through experience and practice of things. A lot of that is driven by a feeling of "what is this thing." It's kind of adjacent to "how does this thing work" but more abstract, as in fitting it into a system of existing ideas and concepts and building endless categories and subcategories.

I've found that this makes instant proficiency with a lot of things easy ("oh, it's one of these") and mastery fairly quick too ("it's one of these, but with these key differences/details").

The biggest downside is I learn (truly) new things slowly. Where most people note things down, remember them and move on, I can't learn until I've understood what the new thing is, in the sense of having some sort of complete idea of what it is (not necessarily with all the details, just enough for it to be coherent). But once that is absorbed I can move on fairly quickly.

So when I'm being taught "preliminary" I just can't get whole picture I need, and it all goes by too quickly for me to figure it out in classes and lectures. The other problem with this sort of teaching is that it tends to be bottom up whereas my mind tends to work top-down, not wanting to know most details until later. I'm more interested in why you would want to have this thing as it is or why you need it at all, because that reveals much more to me, rather than describing how it works or how it fits in with the next step up.

"Mastery fairly quickly" is a juxtaposition. Mastery of a concept or a subject is not simply understanding it, but being able to apply is to many scenarios(aka experience)...and this bit does take time.

I think learning through experience and hands on activities is totally valid, and in most cases I don't know if I would say that kind of learning is 'on-demand'. Preliminary learning doesn't have to be reading out of a book or having to do 10 years or school, but it should be a cohesive, prolonged effort to understand fundamentals.

Do you mean oxymoron? Juxtaposition just means 'side by side'. Every sentence is by definition a juxtaposition of concepts.
On-demand learning is popular because the general quality of documentation is awful due to mismatched incentives and rapid changes in the tech industry.

Programmers quickly learn that the presence of good documentation cannot be relied on, and bad/outdated documentation is worse than no documentation.

This is a very different paradigm from traditional schooling where almost everything is built on mostly reliable documentation (i.e. carefully curated textbooks).

There is one more reason why on-the-spot learning is prevalent in tech - tech moves fast. Faster than documentation and much quicker than courses or literature. Anyone trying to reach some finality in learning tech before practicing it will always fall behind. Not to mention that a lack of practice parallel to learning intrinsically makes learning ineffective.

Trying to learn in advance is a waste of time. Most people learning for tech roles agree, and the industry agrees. It might be helpful to step back and look at the big picture when you learn or to backfill knowledge gaps to understand a topic better. But if one avoids learning on the spot or on the job, they just put themselves at a tremendous disadvantage.

Learning how to learn effectively is probably a great ROI for this space.
That's why everyone should read A Mind For Numbers to learn how to learn.
I guess even in web development it might be a bit of a vicious circle. The tools are maybe short-lived due to a lack of understanding of fundamentals and concepts - leading in turn to more „on demand“ learning and so on.
I like to think of this in terms of JIT and AOT for learning. Somethings you'll learn just-in-time and somethings you'll learn ahead-of-time.

It's a bit too far to say one is ruining the industry. I think you could however argue that it is robbing people of an education. Most people take the extreme of only doing JIT learning and that makes us lazy. Some people take the extreme of only doing AOT learning and they get nothing done. A balance is definitely needed.

https://jondouglas.dev/jit-and-aot-learning/

I think the article might've started with something like: The current practice of software development has a lot of duct-taping together of off-the-shelf components by people who don't sufficiently understand what it's doing.

There certainly are important points to be made there, and the article makes some of them.

I didn't understand all the terminology choices and definitions. For example, where does Papert's theory of Constructionism fit into this dichotomy of "preliminary learning" vs. "on-demand learning"?

I learned a lot of low level things starting out. As the abstractions piled on it became clearer and clearer that I had mechanical sympathy that other people did not, but the world changes underneath you, especially when it's all abstracted away anyway (how would you know if the foundations have been swapped out underneath you?). I got a refresher course about ten years ago working on embedded software, and I'm overdue for a booster.

I'm kind of hoping that IoT or open source firmware for SOCs and BMCs will give people some more fodder for learning systems thinking concepts that are currently being buried behind giant frameworks and stackoverflow.

“It is when we are using what we have learned that we wish we had studied more” - Chinese proverb
Hm, I think the author has got the causality wrong here. The direction of the tech industry is not a result of learning style. Rather, the tech industry goes in the direction of the incentives presented to it, which are largely capitalist in nature, and secondarily due to aggregate preferences and tastes of the various practitioners (which include UX, domain interest, taste in technology, etc). I believe on-demand learning naturally dominates in this environment because the goals are very pragmatic and short-term go-to-market concerns. Of course, when expand beyond the narrowly defined "tech industry", goals could be completely different. For example, pushing the boundaries of mathematics or astrophysics obviously requires a huge amount of preliminary learning to even start to make a dent.

But this brings me to where I really disagree with the article:

> Putting it bluntly, on-demand learning is excellent for learning tools, but it sucks at learning concepts.

I could not disagree more about this, in fact I think it's borderline gibberish. First of all, you can absolutely learn concepts on-demand, and in fact a concrete use case can often make the concept much clearer than if you learned it from first principles. Secondly, of course tools are easy to learn this way, since a tool is a thing which was already thoughtfully designed for a purpose—if your goal is to quickly get something done, and a tool is available, of course that is likely going to be your first choice.

Overall preliminary vs on-demand is just about time horizons and they are not mutually exclusive. For example, I don't see any shortage of programmers continuing to learn over the long-haul and develop new concepts and practices inductively based on years of short-term focused work.

To add weight to the merits of on demand learning, on the Tim Ferris pod cast, Martine Rothblatt describes how she was able to learn enough to start her own pharmaceutical company to save her daughters life using what sounds like an on demand learning approach. She was also a very well established engineer in unrelated fields, but this was truly inspiring nonetheless, and showed me that you don't need formal education to make a huge impact. https://tim.blog/2020/12/17/martine-rothblatt-transcript/
I’m the author. I wasn't expecting for this to spark such an interesting conversation, but I’m very glad it did.

Thank you all for the thoughtful and eloquent comments.

Although I agree with most of the arguments in this article, I think that tools vs. concepts is a false dichotomy. Concepts are built on small pieces of knowledge and small pieces of knowledge can be learned via on-demand learning.

The problem is that it’s hard to build the concept from the ground up. For example, everyone knows that it would be best to learn linear algebra before learning machine learning, but no one, in practice, has the time to learn linear algebra from the ground up.