There used to be professions, and I suppose there still are, where one could complete a curriculum that would cover almost anything that they might have to do throughout their career. One could, for the most part, be trained to do a set of tasks and repeat them over and over until retirement. That type of work is rarer these days. Repetitive tasks tend to get automated and we humans are left to do the tough stuff – you know, thinking. I believe this is becoming true in most modern professions, but nowhere is it more in-your-face than in the world of programming.
Before I was an instructor at Galvanize, I was a student, and I remember the first day of the program, when our instructors informed us that the main thing that we would be getting out of our time here was how to learn. Preposterous!, I thought. (Of course, my inner dialogue sounds like an exasperated, 19th century, high society lady. Doesn’t yours?) I thought, It’s a nice sentiment, but I already know how to learn. I went to college, I read, I look things up, I can retain information.
Despite my cynicism, I started the program and at some point along the way, I stopped consciously thinking about that first day. I was just coding and reading and taking notes and listening to lectures and following tutorials and studying with my peers and watching videos and coding some more. More than ever before, learning became an integral part of my life. I wasn’t memorizing a few items to get by in my future day-to-day. I was, progressively, becoming fearless about approaching entirely foreign problems, systematically contextualizing new ideas and recognizing patterns in complex, abstract environments.
Six months flew by and before I knew it, I was certified by the powers vested in Galvanize to be a real developer. A prolonged period of intensive problem solving had given me the tools to investigate error messages, organize my thoughts in strategic ways, and ask better questions. Perhaps most importantly, I had gained the grit to investigate further when I literally had no idea what a piece of code was doing or was even supposed to be doing.
Now that I’m finished with formal training, you can assume that I’ve stopped using that learning-how-to-learn skill. I’ve seen a wide range of problems and I can repeat what I know pretty easily. There is just one catch. Coding is all about efficiency, so if you’re going to repeat something more than twice, you should probably write a script to automate it. Then a brand new problem arises. It is only my ability to learn that keeps me relevant.
And this is what I love about coding. It is filled with unique problems to solve and the technology and tools that help you solve them are continuously evolving. Every nontrivial thing that you do in your web development career requires you to learn something and that means that even though I call myself a developer, my real job is learning.
How Do You Learn How to Learn?
Your inner dialogue may be saying, That’s lovely, Elana, but it all sounds like magic. You just do a bunch of learning and then you know how to learn? I’m not that naive.
To be honest, that’s actually how it works. To get good at something, you have to practice doing it. However, there is a big difference between going through the motions and deliberate practice. Going through the motions is reading without understanding, showing up without paying attention, filling in the blanks without questioning the context.
On the other hand, deliberate practice puts you in a place of discomfort. To use a term we like at Galvanize, it puts you in the Zone of Proximal Development (ZPD). Your ZPD is that space between being able to do something easily, with no help at all, and being so out of your depth that you can’t even get started.
When you honestly identify what you struggle with, you can break down specific obstacles, fill in pieces of prerequisite information, and change other beliefs or habits that may be standing in the way of your proficiency. When you do that repeatedly, the process of practice becomes easier and then you can apply it to wildly different concepts.
There are four components of deliberate practice.
- Motivation – to stay focused on your performance and exert the energy needed to improve
- ZPD – the task should be sufficiently challenging, but not impossible
- Short feedback loop – you should consistently check your progress with data and outside resources like instructors, peers or mentors
- Repetition – do the task over and over again until the process becomes natural
If you continually apply these ideas to learning a variety of concepts in a variety of contexts, the act of learning will become second nature and that’s the goal.
Of course, the way we each learn is somewhat unique – a standard approach doesn’t work for everyone. However, from my own experience as a student, a teacher and a human, as well as from tons of research from people who study how to study, there are a few consistently effective themes. The best ways to learn are to do (practice the actual skill), teach (explain the concept or demonstrate the skill) and repeat (reread, rewatch, redo, reteach).
How do I start?
When I decide I want learn something – say a newer language like Elixir, with an unfamiliar syntax and a programming paradigm that I’m not used to – I start with exposure. I Google the most top level concepts – perhaps the only ones I know. I read things like ‘Introduction to Elixir,’ and ‘Getting Started with Elixir’. My initial reaction to brand new concepts tends to be, Those aren’t words! and I didn’t understand any of that. However, through the repeated process of deliberate practice, I’ve learned to forgive myself for not immediately understanding brand new concepts, and just accept that first exposure as part of a longer process.
My next step (which often happens in parallel with the first) is to try to do the thing I want to do. In this example, my goal is to be able to write Elixir code, so I try to solve a simple problem, something like finding the sum of a list of numbers. I’m bound to struggle with it and learn something along the way. I also go through a tutorial or two. I type out the code and follow the directions even if they don’t make sense to me. As I’m working through tutorials, I experiment with variations of the code. The beautiful thing about coding is that it is undoable so you can try out anything you can imagine.
As I’m doing all this, I try to put the new concepts into a context that makes sense to me. It’s either similar to or different from things that I’ve learned before. Either way, if I can compare or contrast it to my existing knowledge, the concept eventually becomes more clear in my mind.
At this point, partially because of the vibrant developer community that I live in, I usually have the opportunity to teach someone else what I’ve learned. This commonly happens in a casual conversation where my peers are genuinely interested in what I’m learning, just as I am interested in what they’re learning. Explaining a concept inevitably reveals gaps in my understanding, and then I have the opportunity to go back to deliberately studying and practicing the concepts that are not yet clear.
Now, this whole process is filled with repetition. After messing with code and trying to explain concepts, I tend to go back to those beginner resources and go through them again. Sometimes, I feel like I’m looking at them for the first time, because after all the other approaches I’ve taken, entirely new ideas pop out of the articles or videos. Things start to click.
There is not much more to it than that. Most of the time, I am engaged in learning more than one thing at a time and often weeks or months will go by before I can get back to deliberately practicing and repeating, but the benefit of that time lapse is that ideas have time to sink in. My brain is working in the background and my gears are turning even if I’m not totally conscious of it.
There are few big takeaways from all of this:
If your goal is to become a web developer, know that what you really need to become is a learner. Even if you think you know how to learn, chances are that you can improve that skill through deliberate practice.
The three best ways to learn are to do, to teach and to practice through repetition.