After observing so many learners over time I can say with certainty that a student’s success is not dictated by their personal characteristics. A person’s age, career history, location, and family circumstances all influence their learning journey at times but these factors do not ultimately determine a person’s capability to absorb new material and develop a new skill.* Instead, it is a student’s approach to learning that makes all the difference.
There are several identifiable qualities and habits about learners who tend to do well. If you’re not sure whether you are learning as well as you could be, ask yourself the following questions.
Am I asking (the right kind of) questions?
Asking the right kind of questions is a strong indicator of a person’s commitment to learning well, in my observation. Rather than being hyper focused on how to pass a test, students are better served by focusing on how to learn well. Students who ask questions clarifying nuanced concepts are often far better prepared than the students focused on “do I have to know ___ for the test?”.
When formulating questions to ask, come up with a code sample that demonstrates the source of your ambiguity. Often, this step alone will bring clarity. Make a habit of checking the documentation (such as MDN) when you have questions about syntactical issues, built-in functionality, or return values. Push your self to formulate your question using the correct technical terminology and be as precise as possible about the source of your confusion.
Not only does asking the right kind of questions help others to assist you, but it is often a mini learning process in itself. Formulating the right kind of questions and demonstrating them with code helps the student to build a better mental model of the concept at hand. In turn, after receiving an answer to their question the student can apply it to their mental model in a much more impactful way.
Am I engaged with my community?
Plug in to formal study groups, social meetups, or informal peer-led study groups. Find an accountability partner who will check in with you once a week. We are each personally responsible for our own habits, but having a study buddy to check in on your progress or encourage you during your plateaus is invaluable.
Am I participating or just showing up? This is key. Sitting silently in a virtual study group while others participate won’t get you very far. Real growth comes from participating actively in the group. Be willing to ask questions, write code, and discuss concepts verbally. Sure, sometimes you will answer incorrectly or write some buggy code. That’s okay! That’s how learning is done.
Can I explain the concepts I have learned to others? Participating in groups with other students gives you the opportunity to teach and discuss programming concepts to others. In doing so, you will develop a stronger and more confident understanding of the concept at hand. Discussing programming concepts with other students and answering others’ questions will help you to develop a deeper understanding of the topic at hand.
Am I taking ownership of my progress?
Each individual has unique challenges in regard to finding the time and energy to learn new material. Some are working full-time jobs and/or have young children. Some have a long commute or health struggles. These factors may be entirely out of your control, and that’s okay! If you are someone who has other commitments, observing the students whose only commitment is full-time learning can be discouraging.
The bottom line is that while you may not be able to control the above factors, you can still take ownership of your progress. Each person’s progress will look different. What does taking ownership of your progress look like?
Track your progress in measurable ways and set explicit goals. Your goal may be to work on the material you’re learning for 2 hours, 5 days a week. After setting a goal, track how often you meet it. If you’re struggling to meet your goal, spend some time thinking about how you can set yourself up for success. Can you review your notes on your morning commute? Can you work on an additional coding exercise each day at lunch? If it turns out your goal was too ambitious, it is perfectly acceptable to adjust it after some trial-and-error.
Regarding setting goals to track your progress, I recommend that your goals are related to your habits rather than specific benchmarks in the learning material. “Master node.js in 1 month” isn’t helpful and isn’t measurable. Instead, consider tracking the time spent learning each week or how many days each month you spend on the learning material. Track how often you are checking in with peers, or how often you review your previously-written notes. These goals are realistic, measurable, and achievable.
Take ownership of your progress within the limits of your personal situation, whatever that may be. Remember that progress is not always linear. It is okay to stumble sometimes. Don’t give up.
Am I taking my own notes?
It’s important to take notes on important concepts that you will run into again. Equally important is to find a way to organize these notes so that you can find them in the future when needed.
When taking notes, it is always best to describe the concepts in your own words. Merely copying down someone else’s words doesn’t demonstrate any real understanding of your own. A good measure of your understanding of a given concept is your ability to describe the topic on your own. In order to build a strong mental model of a new concept, we must have solidified our own personal understanding.
Find a system that works for you. Ideally, your notes should be organized, searchable, and written in your own words. Reviewing your notes frequently will help to cement the topics in your mental model.
Am I able to identify fundamental concepts?
If you forget the syntax details for the Array.prototype.splice() method, you can look it up on MDN in two shakes of a lamb’s tail. I don’t recommend becoming hyper-focused on syntax or implementation details that you can easily reference the documentation for.
Instead, focus on being able to identify and explain fundamental concepts in code. Are you able to recognize context-loss when it happens? Can you identify and explain implicit versus explicit invocations? These are topics that do not change. Misunderstanding the fundamentals can result in a lot of pain, especially when you begin to work on larger and more complex projects. Aim your focus at understanding the fundamental concepts that influence the way that code behaves, rather than memorizing syntax. Your future self will thank you!
Am I able to ignore distractions?
Blog posts. Podcasts. Social media. The hottest new framework. These are just some of the distractions many of us deal with each time we log onto our computers. Of course, each of these can be valuable in its own right. But do they serve our learning process? Not always.
If your focus is on deeply learning programming fundamentals, then you are bound to run into a myriad of distractions along the way. Define your goals (both short-term and long-term) explicitly. Then ignore everything that doesn’t serve them. There will always be a new hot framework. There will always be new hot-takes posted on social media. Those can wait. Spending time going down rabbit holes unrelated to your current goal may sometimes feel productive in the moment but ultimately it is a hinderance to reaching your current goal in a timely manner. If you are spending time on media such as blog posts and podcasts, choose topics directly related to the foundational topics that you are currently learning.
Am I using a variety of study techniques to absorb the material?
There are a variety of study mediums in which you can personally use to grow your understanding of topics you want to master. Don’t choose just one! Experimenting with a variety of learning mediums not only helps you to absorb the material more efficiently, but it also helps to keep you from becoming bored or disinterested.
There are so many ways to practice and review material that you are learning. Here are just a few: flash cards, verbal practice (try recording yourself!), taking notes and reviewing old notes, meeting peers for casual discussion, creating or solving code examples demonstrating the concepts you’re learning, writing your own blog post explaining a particular topic, making a video demonstrating a concept, hosting your own study group, and many more.
Don’t box yourself in to one style of learning — branch out and experiment with them all! Choose a few of your favorites and work them into your weekly study routine.
In order to become a more efficient learner, take some time to examine your current study habits. Ask yourself the above questions and consider what positive changes you can make to your own study habits in order to learn more deeply and efficiently. Remember that your path is not always going to be linear. Keep pushing!
*I’d like to recognize that not everyone has the privilege to study deeply over a long period of time. Factors such as financial stress, being the caregiver for a family member, or personal illness can of course impact someone’s ability to learn. However, I believe that if not for prohibitive circumstances a student is capable of learning well regardless of their age or background.