- Quick Results
- Deep Mastery
The goal of this guide is to teach you exactly how to practice for rapid skill acquisition. There’s no shortcut to doing the work. However, what work you do, and the way you do it, is important. I’d even say it’s critical.
1. Start With Iterative Chunking
Break every new subject you want to learn into smaller pieces. You want to learn basic syntax? Perfect. Break down the primitive data types. These are:
- NaN (Not a Number)
Explore each of these, learn what they can do. Test them out. Then add complexity. Look at the reference-based data types that hold these primitives (Objects, Arrays, …).
The goal with every new area of learning is to deconstruct it into manageable pieces. This can be hard at first, so you need to do some web browsing. Look at the syllabus for a couple of online courses and see how they chunk. Look at a textbook or an eBook. Is there a common way they all approach the sections?
Take these parts and make them into a list. You’ll use this list to tackle each piece. When you begin to get deeper you may refine your chunks further. You’ll want to follow a consistent process for learning each piece.
- Data Types
- Data Type Manipulation
- Variables and Storage
- Control Flow
- Higher-Order Functions
- Object-Oriented JS
- Functional JS
- The This Keyword
- Async Code, Callbacks, and Promises
- DOM Manipulation
- ES6 and beyond
Feel free to tackle these in even smaller chunks. That’s the magic of this idea. Continue breaking everything down smaller and smaller. It’s like eating a big steak! You have to cut it into pieces, then smaller pieces, and eat these individually.
2. Test Assumptions Constantly
This will be a different state of practice for most people. When we kind of understand how something works we tend to gloss over it. Our ego says, “I sorta get this, and since I only sorta get it, it must not be that important.”
Let go of the ego and test your understanding. Whenever you are only sorta sure, test it. Make a small program to try out your assumptions. If you’re wrong, use the Chrome Debugger, console.logs, and console.dirs to find out why. Then search Google.
The key to quickly learning is to build new assumptions on top of older strong assumptions. We do this as children. If you stand on a cardboard box to reach the cookies, and it breaks, you won’t use the cardboard box again. You’ll try the chair next time. Code this same way.
3. Incrementally Build Small Things
The key word here is incrementally. Build a single function. Test that it works. Add on to it. Test that the addition works.
Following this process leads to large apps over time. It also leads to foundational knowledge of each piece. You want to grasp how the individual parts of a project are all connected.
This will force your brain into a building block pattern for future projects. We tend to think about an end project. It’s large, complex, and has a lot of unknown parts. This is scary. You’re much more likely to quit a scary project when you’re stuck.
Instead, create the smaller blocks and connect them all together.
4. Focus On A Repeatable Process
If you have a problem solving process that you use 100% of the time you’ll never be stuck. Create a strategy that you can use whenever you encounter a new problem. Regardless of the situation.
Think of the free throw in basketball or any ritual activity. Do you have a morning routine? No matter what the day holds, you start off the same way. You want to approach new technical problems the same way.
- Clarifying the problem and the data you have now – the inputs, outputs, and edge cases
- Sketch out a visual of what you’re going to build
- Write some pseudocode, try problem-solving at a high-level
- Write code
By the time you get to step 4 you should already have the answer. You don’t want to code without understanding the destination. This will feel awkward for most people. We tend to use code to solve the problem instead of using code after the solution is created.
Practice this and make it a habit to always use the routine. When you end up on a more challenging problem you’ll immediately know the areas to focus on.
5. Move Slightly Outside Of Your Comfort Zone With Each Step
The act of learning requires facing new challenges. The more often you do this and conquer these challenges, the faster you’ll learn. Your brain actually rewires itself from struggle, similarly to your body building muscle from exertion.
Seek out problems that require you to learn one or two new, smaller concepts. You’ll be able to overcome them and move on to a more complex problem using these smaller concepts. Repeat this process as often as you’re able.
There is a good amount of struggle and a bad amount of struggle. If something is too easy for you, there is no struggle. Avoid too easy when you’re learning.
Good struggle means that you have confidence in your ability to solve the problem. It means you’re making mistakes, but able to recover from them. It means that you have the foundational knowledge to solve the problem, but not the practical knowledge.
When you begin to tackle a problem spend a couple minutes deciding where it falls. Your ability to assess this will improve over time. If you’re wrong you can adjust later. Don’t quit because something is hard though — you want it to be hard.
Everyone has a different level of difficulty they are comfortable with today. Your mission is to increase this level over time!
6. Understand The Two Types Of Problems: Interview Challenges And App Based Challenges
An example would be to create a function that tests a number to determine if it’s prime. Or to shuffle a deck of playing cards.
An app based challenge is meant to test your ability to write a program that has functionality for an end user. These programs are great to practice your understanding of data flow, frameworks, and libraries.
An example of an app challenge would be to build tic-tac-toe, or to write a RESTful server that stores a list of todos.
Whenever you want to learn a new concept, decide which type of problem would be useful for the concept. You want to balance your time between both of these types of problems.
Early on make sure you don’t spend too long on any one project. I’d encourage you to spend less than a day, or two at max. Once you have more foundational pieces, you can build on your earlier projects.
It’s great to revisit your old code. It’s worth reminding yourself how far you’ve come!
7. Make Something You Want To Share With Friends, Always Be Creating
Once you begin to share the projects you’ve built with other’s you’ll notice the beginning of an internal shift. When I first started out my goal was to learn as many pieces of tech as I could. I started memorizing pieces.
After around a month I was completely burnt out. I felt like I was just learning for the sake of learning. I didn’t have anything to show for it. I decided to take a weekend off and try making something for fun. I did my best to copy the frontend of Twitter. It was a blast!
I felt proud and learned more doing this than I had in the past week. Whenever I was stuck I’d have to search for the right way to style something or how to set up a click handler properly. It was hard. But good hard. Like, really good hard.
I sent it over to my parents and it was like I had super powers.
I can’t stress how important it is to build tangible products. When you learn purely for the sake of learning, the knowledge doesn’t stick to your brain in the same way. Striving to make something activates a deeper part of your brain.
It’s the same reason it’s easier to learn a language by moving where everyone speaks the language.
Make a list of some projects you think would be cool to build. Start small. On your journey, when you feel like you’ve acquired the skills to make one of the projects, dig in! Even if you only know 2/3 of the things necessary, give it a shot. I follow this process today and I don’t think it will ever end.
8. Study With Others – Find At Least One Peer
Search for others on this journey to practice with and learn from. There are a few key reasons this is important.
- Work is collaborative. You’ll be working with others on projects there too. Start now and begin to develop a workflow that includes other developers.
- It’s a great motivator to help others along their journey.
- They can help you either technically or emotionally when you get stuck. It’s going to happen, a lot. Having someone who can make pull you out of this space will make it less painful.
- The job hunt is easier with peers. I can’t stress this enough. Don’t be on an island if you can help it.
Make friends and code with them. Find meetups, find an online community like the one I host. Just do something to meet other people on this journey.
9. Find A Mentor, Even If They Are Only One Month Further Along
One of the biggest challenges when learning something new is finding what to learn. And what to do when you’re stuck. The internet gives us too much information. It’s hard to parse through it all. My motivation in creating this blog was to share the knowledge I wish I’d had when I first started out.
How do you find a mentor? Great question! Don’t be pushy when reaching out to people. Start with your current network and reach out to developers. Ask if they’re willing to spend an hour a week helping you with difficult concepts. Take them to coffee or lunch.
You can also look for projects online to contribute to. A big part of open source software is the mentorship process. You can submit code to a repository on GitHub for feedback. Look at the “issues” currently open. Find one that seems good for a beginner, or ask for one that would work. Most projects are happy to help beginners out.
10. Explain What You’ve Recently Learned, Either Teach It To Another Developer Or Explain It To Someone Non-Technical
Teaching is the best way to cement knowledge. When you learn a new concept I recommend you do one of four things to make sure you’ve really mastered it.
- Tell a sibling, parent, or friend about how it works. Explaining something technical to a non-technical person is tough and requires you to have thorough knowledge.
- Write a blog post about it.
- Record a YouTube video explaining it.
- Search for a StackOverflow, Quora, or another website where someone is asking for help on the topic, and explain it to them.
Find a way to share your new knowledge. The medium isn’t as important as creating a repeatable process. Focus on the parts that were challenging for you to understand. This will make the next person’s journey a little easier.
11. Don’t Get Stuck On Youtube
The next three sections are all traps. Don’t watch hours of YouTube. Spend your time writing code and occasionally watch a video when you’re stuck. It’s too easy to watch something and think you’ve mastered the topic.
When you watch a video make sure you can recall the content later. Test yourself. As soon as the video ends create a small project. Make sure that the knowledge from the video has sunk in.
Try to use YouTube as a way to learn a concept when it’s fuzzy. Don’t use it to learn something from scratch.
Lastly, don’t watch back-to-back videos. Look at code before watching another video, even in a multi-part series.
12. Don’t Get Stuck On Blog Posts
Another frequent trap. Blog posts, like YouTube videos, can be a great resource. However, it’s hard to know how accurate the information is.
There’s a good chunk of homework to do before trusting a blog post.
- Look at the comments, see if people are complaining about it.
- Check the date the post was published, older posts may be using older versions of the technology.
- See how popular/shared the post is. You’ll usually want to use a more popular solution.
Be wary and use your judgment!
13. Don’t Get Stuck On Online Courses
The biggest trap of all is online courses. It’s easy to code along with the instructor and end up with solution code you don’t understand.
There are tricks to using a course effectively. First, you want to make sure you’ve got an actual problem that you’re using the course to solve. Don’t use a course to learn a topic at a high-level. It’s unlikely the material will stick.
Second, try tweaking the code as you work through. If you spend time making changes you can test your understanding. See a pattern here?
Third, try to map out the high-level concepts after you finish the course. See if you can teach someone else or create a blog post out of your new-found understanding. Make sure you take a step back and think at a high-level. It’s easy to get lost in the weeds of coding without a broader understanding.
14. Be Playful! Put Yourself Into This Mindset And Enjoy Being Stuck
Have fun! I always stress this to students. If you look at getting stuck as a chance to learn something new the whole process is enjoyable. If you look at getting stuck as bad, or a symptom that you’re not good, you won’t have fun over time.
My challenge to you is to play with code. Break things. Get stuck. Do your best to fix them, then break again. You want to embody this state of play. The best developers I have ever worked with rarely lose this spark. They always want to learn something new, and they know that this means failing.
Cultivate your beginner’s mindset. Make silly projects. Share them. Treat all of this the way you would as an 8-year-old. Don’t let programming turn into a serious endeavor. Life is hard enough without being down on yourself for anything code related! Smile while you type and take the steps you need to enjoy the learning process.
If you’re looking for a comprehensive guide to finding your first job as a software engineer, check out my blog post on the subject. Let me know what you’re struggling with now, and if there’s any tips or tricks that made a big difference in your learning!