Watch, Wonder, Work

ยท 929 words ยท 5 minute read

I was recently reading a book on machine learning concepts, and of course it repeatedly highlighted the ways that machine learning researchers attempt to model human learning processes in code, which made me ponder:

How do I learn?

It’s not the first time that question has crossed my mind; I was recently asked by a coworker what techniques I use to learn new skillsets on the job, and in my response I focused on hands-on learning; as a programmer I’ll build a minimal version of a thing, and once it’s doing what I wanted it to, I’ll keep it as a reference item for when I’m trying to add a similar feature to a larger project. But that’s not the only way that I learn, and it’s generally not even the first step in learning a new topic. As I continued thinking this over, I came up with three primary ways that I like to learn new things:

Watch: Learning by Observation ๐Ÿ”—

When I’m learning something new, I often start by watching others. This could mean literally watching someone exercising a skill - youtube topic walk-throughs are a great example of this. Often it means reading documentation or studying existing code. There’s something fundamentally useful about simply observing how others approach problems, and genuinely powerful when they’re also explaining their though processes and reasoning; college lectures, conference presentations, and books are classical examples of this sort of exposition, but TED talks, social media posts, and even snippets of code on the internet are more modern incarnations of “watchable” knowledge.

Think for a moment about how children learn how to draw - before they ever pick up a crayon and start attacking the nearest wall, they’ve watched countless people around them write and draw, and they’ve observed the end results all over their world. They don’t yet have the skills or understanding that they need to translate a vision into recognizably reality themselves, but they have grasped an implicit knowledge of what both the process and the product “should” look like.

The same principle applies to adult learning. When I’m diving into a new programming language or framework, I’ll often start by reading through getting started guides, and perhaps poking at some code in a github repo. I’m not trying to memorize or even understand every detail - I’m just building that same kind of very basic mental model. What does code in this language look like? What patterns can I observe in their naming conventions and comments? What chutes and ladders do they highlight to guide learners away from pitfalls and towards greener pastures?

Wonder: Learning by Asking Questions ๐Ÿ”—

As a mental model starts to take shape, questions like those I just listed quickly become more prominent, and the next step in my learning is often focusing on those, and on finding the answers to them. Search engines (and Ctrl-F)have been my primary tool in this regard for many years, but recently I’ve found that AI tools are a powerful, if not always reliable, way to focus on finding the answers to specific questions. I do have to be careful about relying on the answers that they give, because they’ll present absollute falsehoods with the same confidence as a tenured professor, but often challenging them to explain their reasoning can lead to a much deeper understanding of the topic, even if they continue to be wrong after I do.

There’s no electronic substitute, though, for having a discussion with an expert on a topic. At best, as of today, the internet is good at collating and regurgitating human knowledge, but it’s not yet as good at actually helping someone understand it as a person who understands a topic backwards and forwards, and has the patience to listen to and engage with an eager learner.

Work: Learning by Doing ๐Ÿ”—

The final piece of my learning toolkit is doing. As I mentioned at the beginning of this post, I’m a big fan of hands-on learning, and building the simplest, smallest version of a thing that I can conceive of is a great way to demonstrate to myself that I have a certain level of understanding of a topic, and to start to shape more questions and the ability to make more complex observations on a subject. When I’m working hands-on with something new, I find that the process of debugging and problem-solving forces me to engage with the material in a way that passive learning never could. There’s something uniquely valuable about encountering and overcoming real obstacles - each error message vanquished or unexpected behavior encountered becomes a side-quest that brings me a tiny bit closer to my goal of attunement with a topic. I’ve also found that the muscle memory developed through repeated practice is invaluable; whether it’s memorizing keyboard shortcuts, mastering a new programming syntax, or learning the quirks of a framework, there’s no substitute for actually doing the work, myself, over and over. And perhaps most importantly, hands-on learning helps bridge the gap between theoretical knowledge and practical application. It’s one thing to understand how a concept works in theory, but quite another to successfully implement it in a real-world context.

Of course, these three way of learning are not at all linear ~ they build on each other continuously and harmoniously, and I’m not always able to pick up a new topic and immediately apply all three of these techniques to it. But when I can, I find that I’m able to learn and understand new things much more quickly and deeply than I would be otherwise.