As makers, we’re always looking for creative new ways to keep our minds sharp and skills relevant. We live in an age where a vast sea of information is available at our fingertips. In this knowledge economy, information is king. When you take a step back to consider the possibilities this creates for personal and societal growth, it’s really quite inspiring.
But what are the ramifications of such boundless access to information?
The JavaScript community has been in a state of fatigue for some time due to constant changes in tooling, libraries and abstractions that seem to be popping up quicker than we’re able to absorb. While the growth and influence JavaScript has had on the development community is something to admire, it came at a cost. An onslaught of blog posts, books, video tutorials, online courses and boot camps, all claiming to teach you the latest and greatest in your field of choice.
Information overload is real and its negative effects will creep up on you.
As you begin your hunt for knowledge, you’re faced with some challenging questions:
- Am I finding all the information I need?
- Is the information I found reliable?
- Am I looking for the right things?
Instead of stretching your mind beyond its limits by consuming 100% of the information you come across in case you might need it, why not learn as you need it?
Just-in-Case vs Just-in-Time Learning
“Experience is a hard teacher because she gives you the test first, the lesson afterward” — Vernon Law
Most of us are accustomed to the format of education provided by traditional schooling. Teachers instruct classrooms of students using standardized material at a fixed rate. Changes to this material are infrequent, and students are often grouped without taking different styles of learning into consideration. You’re periodically tested on the materials that you’ve been taught.
This is just-in-case learning, and it’s the opposite of what you experience in life outside of school. You either acquire raw knowledge without knowing how it may (or may not) be applied at a later time, or you face challenges before you learn what you need. Life is full of twists and turns. You never know what you’ll face next.
If the information you’re learning is not immediately valuable or applied regularly, you end up forgetting the bulk of it. You’ll maintain some level of familiarity over time, but any detailed expertise will be lost.
This method of learning is comparable to the way we regularly consume daily tech news, deep-dive blog posts and lengthy Twitter rants. While the information may be valuable, internalizing it now before you’re presented the opportunity to make use of it is wasteful. At some point, you begin to experience diminishing returns on your investment of time and cognition.
I’d like to explore an alternative approach to learning by drawing analogies with a software program that embodies similar core principles — the JIT compiler.
Compilers translate the code you write to something a machine can understand. Traditional compilers work ahead of time to create an optimized translation of what we write. Modern JIT compilers, on the other hand, translate individual parts of your code as they become warm (ie. as they are used).
These segments of code are translated into stubs, which are then further optimized and re-translated in a more performant manner as their usage increases. If your code’s execution changes and the compiler notices something is amiss, it throws out the stub and starts again. In this manner, the compiler is self-correcting and only commits to working on a translation if the value returned is deemed positive (ie. usage vs effort to optimize).
At its core, just-in-time learning can be explained using the principles that are baked into JIT compilers.
Effectiveness > Efficiency
Traditional compilers are very efficient. They take their time, reading over the entirety of your code before translating in the most efficient way possible. You can become very efficient at reading and processing information this way by committing vast amounts of your time to consume as much knowledge as possible.
This isn’t the best way to learn.
Instead of focusing on efficiency, stop and ask yourself if you’re learning the right thing?
Too often, we focus our time on “getting things done” instead of “getting the right things done”.
Whether it’s personal or team productivity, take your time and make sure you’re heading in the right direction. Only apply effort when it maximizes value.
Delivery teams put a high emphasis on reaching peak velocity. Understand that velocity is the combination of speed and direction.
Correct Yourself
While translating, JIT compilers will immediately throw away existing optimizations if newly interpreted logic disproves previous assumptions.
As you learn “on the fly”, you will come across information that falsifies your previous knowledge. Heed these discoveries, as they could be an indication of questionable sources. Don’t let confirmation bias take hold and consider where you’re getting your information.
When you’re learning something new for work, you’ll likely be pressed for time. With a deadline looming, you’ll be tempted to rush your learning to get the job done.
Once again, direction matters. Validate against your network, filter out dogmatic opinions and do your best to ensure your information is credible.
Organize Information
As a JIT compiler parses your code, it segments logic and creates stubs that are indexed by line number and variable type. This indexing makes sorting, filtering and searching for relevant parts of your code a breeze during optimizations.
As you go about your day, communicating with co-workers, skimming newsletters and scrolling through your news feeds, you’ll come across some potentially interesting and useful information.
If you were to sit down, collect all that information and fully digest it on a daily basis, you’d be swamped. There is only so much time in a day. That being said, you wouldn’t want to discard what you found, potentially missing out on some key learnings.
Find a service, like Pocket or Instapaper, that lets you collect useful links for later. Like a compiler’s stubs, you’ll want your service to support search, categorization, tagging, sorting and filtering for easy access. Determine what groupings work best for your learning style and ensure they’re readily available when you need it.
Determining the value of an article often doesn’t require its full consumption. Most bloggers include the gist of what they’ve written in their conclusions. Skimming that will often give you enough context to decide whether or not the post should be saved for later.
There’s a Caveat
“The more basic knowledge you have … the less new knowledge you have to get.” — Charlie Munger
While the benefits are enticing, just-in-time learning does not replace knowing the basics.
Schools teach you fundamentals for good reason. They’re the building blocks used to develop a deeper, more specialized understanding of the subject matter at hand. Without that foundation, you’ll have a hard time ramping up on new material. Starting from something is easier than starting from scratch.
In addition to knowing the basics, you should also know the landscape.
Broad knowledge and surface-level understanding of the many edges and specialties of your field will help optimize your just-in-time learning. Otherwise, how will you know what to learn when you’re faced with an unfamiliar problem? You need to be aware of your options before you can decide where to invest your learning.
The more you know, the better primed you will be to tackle new challenges. Continuous learning is the key to personal development and success. Growing smarter every day will compound and propel you ahead.
What To Do When You Don’t Know
“Education is knowing what to do when you don’t know.” — Michael Lewis, The Undoing Project
At the end of the day, a good mix is key. Invest time in learning the fundamentals of your craft, while building a framework of resources and techniques to prepare you for when you don’t know.
Remember the core principles of just-in-time-learning:
- Focus on effectiveness by regularly asking yourself whether you’re learning the right thing?
- Correct yourself when you come across conflicting data. Validate your sources and avoid dogmatic opinions.
- Organize your information in such a way that is painless to access just as you need it.
Don’t invest the time and effort into learning something in case you’ll need it. Learn when you need it.
Thanks for taking the time to read this post!
Please ❤️ and follow if you liked what you read and subscribe to stay in the loop 😁
Originally published at www.igorbarsi.com.
Top comments (2)
JIT is a pattern for success across lots of domains: learning, documentation, process development, and on and on.
The hardest part to me is justifying JIT solutions to others. It's not obvious why in any moment it's the wrong approach to doing everything upfront.
Definitely... If the concept is foreign, it can be hard to determine when its use is and isn't appropriate.
Personally, I find it useful to compare it to WIP in Lean development/manufacturing. Putting loads of upfront effort into a single area of focus(ie. deeply studying a single UI library) can clog up other work you need to complete downstream (ie. shipping). It also lengthens your feedback loop, as you may realize that the library you've spent so much time learning doesn't end up being the right tool for your next 6-month project/engagement.
This style of learning isn't a silver bullet though, as you may, in fact, need detailed expertise in some cases... Perhaps you're consulting on a particular UI library, in which case it would be greatly beneficial to know its inner workings and nuances. Another example would be learning transferable skills and "first principles" (ie. software design patterns, effective writing, communication, etc). These are broadly applied skills that may be prerequisites for future learning. You could make an argument there that upfront investment would reap long-term benefits.
However, even those last 2 examples could be tackled at a lower level in a JIT-like way. As a consultant, you can schedule your detailed learning in a way that's reactive to real-time client needs. Prerequisite learning could also be matched up with immediate/future goals (ie. read a book on effective writing as you're planning on contributing to your company's new blog).
Anyways, lots to think about on this topic! I'd be curious to hear some more of your (or anyone else's) thoughts 😄