I usually jump in straight away and start learning "on the job" but I realised that I forget too much and i do not have any notes to refer to later on.
Examples of specific skill: - How to write a good cold email - how to learn some snowboarding trick - how to store your bitcoin safely etc.
- a new programming language, especially something closer to a systems language, I have a standard set of things I’ll try to implement. Read/write a file. Turn a structured object into JSON, parse JSON to an object. Basic script that can be run from CLI, parses flags/args, reads stdin. Send a HTTP request. Implement the most basic web server. An embarrassing amount of my career has been just building on those fundamentals in various ways. So if I can get those under my belt with a new language it becomes feasible to make an informed decision on whether I might incorporate it into my day-to-day vs just leave it languish as a hobby on the side. - read read read until I find something that just doesn’t make sense. I mean in not just a “I’m a bit confused” but a more “I don’t understand how this even works. It violates my very understanding of how the world is meant to work”. That happens surprisingly quickly in fields I’ve absolutely no idea about. And then I just focus on understanding how that one particular thing could be true. I’ll often find it forces me to correct some previously held incorrect assumptions, which may have blocked my ability to learn more productively because of the subconscious second guessing and the baby steps not matching my world view. - I write notes, and then rewrite them in what is kinda like a blog post to myself. If this is interesting info that I’d like to retain, but am unlikely to be applying regularly or immediately, I’m likely to forget. So I write the post I wish I’d originally found. As brief as possible. In a style that makes sense to me. To try and short cut the time it takes to relearn this topic in the future.
Slow, perfect practice of component parts in all things is the only easy way to gain skills, IMO.
Long-term periodic repetition is the easy way to keep skills.
So, for instance, I can learn most generic country songs in about an hour. As with most skills I break it into smaller chunks...
I memorize and perfect a song's first line, Then I do the same with the second line, then I return to the first line and re-work it if I haven't got it full memorized.
When I have the first and second lines memorized, I turn to the third by itself, and when that's done, I turn back to the first two lines.
This process has a second level, in which I do the same for each section of the song (chorus, brides, variations): learn a small chunk perfectly, move on to another chunk, return to the previous chunk.
Learning a song like Willie Nelson's "Mamas Don't Let Your babies Grow up to be Cowboys" takes about 30 min or less.
By definition you return to the previous chunks less and less frequently. That's a structural part of this method; the second part is to play the song 20-30 times in the next couple of days.
However, once you've done that, if you start increasing the period of performance, I've found it's pretty reliable to double the amount of time you can go in between performances and still have the material memorized... if I do this process, then I only need to play the tune every couple of days for the next week or two, and then once every week for the next month or two, and then once a month over the next year.
Using that method, I've been able to call up stuff I haven't played in 2-3 years. And if I'm playing things even less frequently than that, well, I dunno if I really need to know it.
I've found my other skill sets, at least the ones that don't rely on being in a specific physical condition like rock climbing, generally benefit from this periodization.
---
I have a 3 step process for learning new frameworks and technologies in ~1 week with a 10-15 hr time commitment. This specifically works well for web development tech but it is easily transferable to other mediums.
Prepare: Spend 1hr Mon. - Thurs. watching videos
Plan: Spend 1hr preparing a small project idea on Fri.
Project: Spend 4-6 hrs executing the project on Sat. Repeat
---
Example workflow with learning React.
Prepare: The best way to start is to watch a ton of videos and sleep on them. This will build an internal mind-map of related technologies like Hooks, React Native, TypeScript, Class vs Functional Components, Redux, etc.
Plan: The worst thing you can do is not setup a project and do all the misc. work required to be productive. You want to keep that weekend timeframe to JUST code.
Project: This is self-explanatory. Just finish the MVP, google the "right" questions by utilizing your mind-map and build confidence to learn more the next week.
---
In-depth Video Explanation: https://www.youtube.com/watch?v=8HYvPQOTBNo
Revolves around Dr. Strange quote: “mastery comes from theory and practice”.
I start by finding books/resources for absolute beginners. Examples: (Salt fat acid heat [cooking] blenderguru [3d art] Murachs intro to Java [coding].
Next I go through the entire resource cover to cover, and as I learn I add interesting projects to an ongoing list. I find the more I learn, the more interesting the subject gets and the more I want to learn.
The key to getting this cover to cover completion to work though is habit building. I force myself to do the activity every day for at least ten minutes. It sucks in the beginning, but after 2-3 days it becomes super duper easy and I find myself working for hours over that ten minutes.
Once I finish the intro resource: I find the next resource that suits my level… rinse and repeat after that :).
Other stuff that helps/optimizes the process:
Focus on meta learning. Figure out what works for you as you learn. Reflect often.
Surround yourself with experts on the topic if you can.
From personal experience I would say that in most cases both goals are mutually exclusive. Learning slowly and repeating something often, which takes time, helps to form a lasting memory.
What also helps is an intense emotional context. It does not matter so much whether the emotion is positive or negative. For example, if I had to solve a sever IT problem under time pressure, I might remember the details quite well. But when I worked calmly for weeks on an implementation, may it be simple or complex, I start to forget the details almost immediately after shifting to something else. However, I discovered that I might often quickly immerse myself back into it again at a later time.
There is also this phenomenon that I can reproduce in detail knowledge that I learned decades ago at school or university, but that I am not so good in reproducing what I implemented in the last couple of years. On the other side, I am nowadays a lot faster in adapting new things that are somehow related to my old knowledge, such as looking at a piece of code in an unfamiliar programming language and understand the algorithm.
What also helped a lot in creating a lasting memory was writing explanatory essays or tutorials. I mean not quick notes, but really intense thinking and optimization of the writing up to the point where it would even please your enemy.
Often I try to skip this (rather tedious) process and go to someone who has knowledge in the area. Often I don't need an actual 'expert' but someone who's already intermediate. Asking the right questions can speed up the learning process tremendously! In addition, many people are willing to relatively cheaply (think: a meal; cup of coffee; etc.) let you pick their brain.
Maybe someone else has this skill and they can help you. Maybe there is software that does the skill for you. Etc.
The skill acquisition process is arduous and high opportunity cost.
It’s only worth going through the skill acquisition process if you are doing it for pure joy, OR you have no other way to get the benefit of that skill.
I find that by going after the hardest things first, you learn the most information in the quickest way as all supporting things must be researched on the way.
If you only go after easy basic things and try to work your way up, the pressure (and rate of growth) will never compare.
1. Remove time barriers. Understand that there are 24 hours in a day and that time is all your once removed from sleep, family, commute, and so forth. Understanding this may triple or quadruple your availability to learn.
2. Know your goal/mission/end state. This goal can be wrong, but at this point that correctness is irrelevant. This goal is where you need to be at the end of quick learning and you can pivot as necessary later.
3. Gather assets. Your team (if you need a team) should already be formed at this point. Gather your people, all necessary training materials, and a training location. The point is to cram together. Working with people like this slows your learning speed by about 20% but increases your comprehension by more than 40% and extends your focus further into fatigue. Remember rule 1 above.
4. Rehearse. Read and review all supporting materials. Frequently discuss things in the team openly. Practice and mind meld. With enough iteration the subject matter should transform from knowledge to muscle memory. Practice practice practice.
5. Eat. Focus on foods high in protein and fats to help with concentration. Eat good meals and have healthy snacks available while learning. Starchy snacks are a bad choice. Things like nuts, meat products, and fatty vegetables are better. Snacks also give you something to do while you study to help ward off drowsiness.
——
This is the pattern we use in the military. Having gone through numerous military schools and 5 deployments you do this so much the process itself becomes muscle memory. The idea is you have no idea what the actual technical requirements are until you get there but you have a vague idea of the skills needed. Buckle down, get pluses up, and keep an open mind.
It's not much of a "process" but it really works. In terms of more methodical things I do: checklists in markdown to keep track of practical steps I want to take, and spaced repitition flashcards with Anki for anything I need to memorize.
Beyond that, lots of coffee, physical activity and sleep to boost my performance and motivation.
I used the app TIPP10, a completely no-nonsense program that just presents you with progressive exercises, rates your performance, and crucially, shows how far you're from the end goal. So I just clacked at the keyboard and watched the progress meter steadily go forward. Had to change my approach once when I was trying to go fast and kept making errors, stalling in the actual learning—after I slowed down everything went smoothly again.
Now, I'd so much like to have a progress meter for when I'll be able to extract meaningful sounds from the piano or the guitar, or reason about electrics, etc. For the mechanical music skills, I'm putting some hope into Synthesia and Rocksmith. For knowledge, I guess actual courses and exercises are self-measuring: either I can remember and apply what I already learned, or I can't. However the measuring gets harder with topics that don't fit into one course or which require banging at them full-time for ages (like chess).
(I've already tried to learn touch-typing about ten years before that, and the combination of my youthful impatience with the woefully misguided approach of the exercise app I then used, turned the experience into a wreck. The app presented me with the ‘persona’ of the author as the sage teacher: his virtual remarks cooed and comforted me after the mistakes, encouraged me patronizingly, and offered bits of psychological well-being wisdom, all of which just made me hate myself, the app and the endeavor.)
This 20/80 mix works for me well and keeps me motiviated.
I'll also notedown in a .txt file in dot points things that seem important, especially things that I feel are important and would be easy to forgot.
Also if you want to level up your skills, and learn about learning in general, these are some books you should check:
- Practice perfect
- Peak
- A mind for numbers
- The inner game of tennis
- Guitar zero
- The art of learning
On the other hand I am happy to share what has been very successful method for me learning Python AND researching solutions for my scripting projects: Jupyter Notebooks.
Notebooks use Markdown which lets you cleanly collect links.
Code cells let you test code samples.
The success of Notebooks in my process has lead me to adopt Markdown in all of my personal notes (text-based).
A quick note on this last point—-a friend of mine recently commented they are developing on a Mac and using Notes app. I have a Apple laptop, so I’m familiar with Notes app.
There are just too many details making Notes app unsuitable to detail here. So, hear me now, and believe me later. Don’t use it. (except for convenience of notes between iPhone and other Mac products).
If I need to learn a specific product/tech, I build something with it. If I need to learn a library we're going to adopt, I'll take one of the ideas I have floating around implement using the specific product.
Not using any specific documentation, just try and execute an idea and figure it out.
Pretty much the opposite of "higher" level education.
Different skills will require a different blend. Learning a new snowboarding trick is going to be far more practice than study, where as learning how to store your bitcoin safely will be almost entirely study.
Study
1. Find the experts (this isn't always the most popular person in the field, but that's where I start)
2. Find books, blog posts, and courses
3. Read, and study them, and take notes while you do of all the important points
4. Transform notes in Anki cards
5. Study anki cards
Practice
1. Figure how the best way to get quick feedback on your skill. (this would be running a cold email campaign, practice the snowboarding trick)
2. Set a schedule to practice, then practice
Over the years, this is I have found that worked best for me, but it is not fast. :-|
Constraint/limitation/dogfooding: Replace any convenient tool, service, etc with what you are trying to learn.
Specific skill: Feel comfortable in a terminal
Example: Use Word or Excel? Replace with unix text coreutils, vim/emacs and/or perl/py library. When limitation is imposed, things get more concrete, less abstract and easier to process. Step by step self-enforced incremental challenges that layer atop one another. Chunk, Chunker, Chunking!
Emotion/motivation: What do you really want to learn that is so important? Things I really wanted to know add emotional salience. I was invested intrinsically, not for external gain. The more motivated I am and USE what I learn, made/makes the next learning step/challenge easier. I think this is underestimated. Otherwise what is the point? If you are compelled externally (such as a job) see the Constraint step above. Make notes (learning) yours: https://www.scientificamerican.com/article/a-learning-secret... Specific skill: Learn Jira Example: FTS! Use other tools that you enjoy more, ie VimWiki or another DIY issue tracker that maps to Jira fields then transfer to satisfy external demand.
Time: This is the glue that binds the above of constrain/limitation and emotion/motivation. The only discovery here is that we have more time that we think/waste we have. Small caches of time really do add up. I think the Duolingo IPO is onto something ;-)
It’s was written a decade or two ago written by the guy who started Princeton Review. If you can overlook the bits about school, the methods are rock solid.
Learning from videos is kind of tough for me as I cannot skip the content as fast as compared to reading
When there is no TOC, instead speed read the headings in a doc - hit page down (spacebar) a bunch of times as fast as you can to get the main keywords / concepts to stick.
For me knowing that a particular concept / tool / technique / thing exists and where it's documented if I need to know more is the primary technique. Go deep on a few fundamental things next, then work out what you want to do with the tool and work on that and the surrounding necessary topics to achieve that task.
Often ramping up fast is akin to finding ways to traverse the knowledge graph of prerequisite knowledge. Knowing how to speed up that is the best meta skill you can develop.
In my 20 odd years as a software developer, I've found it very rare that I'm working on a task where I start with the knowledge to complete it.
That approach works for me - it might for you too?
A general framework that has helped me a lot in the past.
You can skim the syntax on https://learnxinyminutes.com
Instead use a day or two on learning tooling and best practices and then try to implement a small toy project.
I think this incorporates spaced repetition and active recall well enough while not being entirely theoretical.
While learning a new language, I get my hands dirty, all you need is the logic, you can do a quick Google search oh how loops are implemented, how JSON parsing is done, etc.. After sometime you'll be familiar with it.
This is how I usually learn on the fly.
- deepis dive. Watch through videos, go down the wikihole, read many abstracts. Whatever, just lightly wash lots of information over yourself.
- read the thing: choose a limited number of key points per section you will remember as you go. Write a progressive summary, or map it out. Write quiz questions for yourself as you go.
- then: apply it. Compare what you learned with your predictions. Review your quiz questions and summary periodically.
That was a method I tried a few times.. it was a lot of overhead, but had its merits in terms of trying to work with the brain.
When encountering completely novel paradigms, like FRP, I experiment and play around with them until I develop an intuition. Not having an intuition for a concept feels quite bad, like an itch that needs scratching. The downside of this approach is that many concepts are very hard to learn because intuition requires deep understanding; the upside is that I rarely completely unlearn a skill.
Taking notes might speed up the process for me, but I’d never go back to them since I prefer to instead skim over another blog post and gain more insight.
* Proper sleep is highly important for memory consolidation and recall.
* Exercise (even walking) improves learning efficiency, mental clarity, and motivation.
* Pomodoro technique (I prefer 43-7) allows one to do sprints of learning and sustain the overarching session for longer. Unless I'm in flow, in which case I let it carry me forward without stopping.
When the time comes to use this new thing you will have a pretty good idea on how to handle it and you’ll only have to brush up on it a bit.
Last, but important: you never want to learn something just to learn it. Build something with it - understand why its’s useful and apply it, even on a small scale projecy
You could even write blog posts about these things you are learning, that would go a step deeper into helping you internalize these skills.
- read, read, read about the topic at hand. I find that finding a good book on the topic gives me a baseline of information even if I do not understand or retain it all.
- use the information. Play and build what I am learning about.
- as I work through day to day issues and find things I will probably need in the future, I save them as a page in a zettlekasten using vimwiki. Writing these things down is new for me and it has already paid off when answering questions.
Step 2: Practice It
Step 3: Do It
Step 4: Teach It
Step 5: Repeat
“If you don’t use it you lose it” has been true for me.
With each step you’re evaluating yourself and repeating steps as necessary until you feel like you’re ready to move on to the next steps.
So for Cold Emails, maybe:
1. Learn - Research techniques online
2. Practice - Send some cold emails to friends or marketing colleagues for feedback, or post to a marketing / sales subreddit.
3. Send cold emails to a real contact list
4. Write about what you learned and how to do it
5. Keep finding ways to improve and new optimizations
The process I learned is from video games in the 1970s and 80s. Do your reading. Learn from the experts, watch what they do. They're not your heroes, you're going to have to top them at some point. Practice, but don't even start to practice until you've done those other prerequisites. Losing is not failure if you learned something from it.
- read the manual and summarise as I go
- using the table of contents of my summary, I rewrite the summary in another document
- I repeat this rewriting the summary a bunch of times over multiple days
- this works for text, diagrams and code
For me, the act of trying to recall from minimal input (a topic heading) gets the job done.
It's really just a variation of the techniques already mentioned here.
Want to learn a snowboarding trick, set a goal or series of milestones to get there.
Want to learn a programming language, set the goal of creating a small application or plugin.
Want to learn how to pass interviews, set the goal of trying 4 interviews in the next month and get feedback.
It's one of several tools, but tangible goals always help learning.
2 pick a interesting project (if you're learning programming, create a software or an app, if you're learning an instrument pick a song, woodworking, a chair...)
3 have fun doing it
That's how I do it, not that I'm an example of anything, but people usually say I learn quickly.
Answer basic questions for every step of a topic: what, why, how, who, when, where
Sleep in it
Review with spaced repetition
There is no secret sauce nor magical technique to learning, memorizing, regurgitating information. Only repeatedly doing the thing is how you learn. And as always, "Use it or loose it" applies.
- Pick a technology/tool/language of my interest.
- Check Youtube videos about it.
- If I find I am able to grasp the gist of it quickly in 15-30 mins then I further explore it.
- Visit official docs
- Check examples.
- Come up with a use case and write a blog post that makes me to dig deeper because I am now serving as a teacher.
It forces me to understand the material because I have to actively recall it. I invent multiple ways to explain the concept which deepens the encoding.
I design and solve exercise of increasing difficulty.
The last step is the most critical, of course.
- ebooks: libgen ... other sites
- chatrooms: IRC, discord
- forums
- documentation
3 times watching somebody do the thing
3 times doing it supervised
3 times doing it unsupervised but with results checked
Fail again.
Fail better.
Now do a technological domain transfer to any new skill set.
Basic building block, work your way up, ???, profit!
In the middle of boot camp, all the madness stops for two weeks to focus on shooting a rifle (marksmanship is a religion in the USMC and some other military organizations); that is you live at the rifle range, and spend most of your time with marksmanship instructors (the DIs remain at the periphary). While there are lectures on interior and exterior ballistics and other related stuff, most of the first week at the range is hours of repetitive dry firing, where you pay attention to your body's form and function required to correctly pull the trigger. Your breathing sequence, your sight picture, your trigger pull become muscle memory. It becomes a zen thing. The second (live-fire) week on the range is very (mentally) stressful, so muscle memory attained in the first week is important because you have many other things to do and respond to during the indeterminate periods of live fire and eventual qualification(and if you do not qualify, you get re-cycled into another platoon or you get kicked to the curb).
Military technical schools tend to cover basic intro stuff using 'programmed' instruction; that is, self-taught, then subsequently tested by the instructor cadre. The tutorials must be approached methodically and incrementally. Never jump into the next session because you are bored. Most of the people that fail military tech schools fail the easy stuff because they do not have structure to their approach and do not have the discipline to operate independently. This also appears to be a common reason for people flunking out of the first two or three semesters of university.
Post-school house learning in the military (new systems, new techniques, updated systems, etc) is done independently by the first learners (NCOs) and is individually-based, with occasional help from the respective vendor's technical rep. I approached learning new avionics systems by first studying the spec, then reading the applied physics theory, then drawing block diagrams from the schematics for power and signal and control flows. So divide an conquer, then put the pieces back together to form the original system.
Learning new programming languages, after the 3d or 4th one, becomes routine. While it is ok to start with quick over-view of the language, the first hard study should be the syntax closely followed by structure declarations. For some languages, this is a good point to stop and look closely at low-level details for memory management and/or allocation techniques. After syntax, structure, and memory models become muscle memory, just dive head-first into solving a series of simple problems. Solving problems is the only way you will learn the libraries. The only language I did not functionally learn in a week or two was Rust. Rust was freaking hard for my aged mind, but it brought back the lost joys of my first two languages learned (Fortran and C).
Learning complex machine tools is similar. Get the basic muscle-memory stuff learned, then extend into the intellectualized stuff. Formal instruction, or pairing up with an experienced and skilled person, for welding and lathes should be done before you self-learn stuff. The same for computer security stuff - as you will probably hurt yourself if you go the independent-learning route for stuff such as penetration testing.