Intro
Whenever I work on something, say a personal project, and I need to learn how to use a new tool (a framework, programming language, whatever) I find myself asking the same question. Do I learn the tool before proceeding or learn as I go?
Sometimes I find my answer easily, just by identifying what I need from the tool for the project or via the requirements…Sometimes you know. But at times I feel tugged between.
For example, when Learning Rust I keep feeling the urge to start several projects, and build every little idea I get in Rust so I learn by doing, i.e. projectbasedlearning (PBL). However, the consensus in the Rust community is to go through the Rust Book first and then start doing exercises and projects or do them in parallel. // This is what I want to d.
So I finally caved and decided to look into what’s best and if there are different approaches for different cases. Are there any studies on the topic?
Here’s what I found.
The Two Camps
In my line of work there are many that would advocate for PBL and learning by doing, and this is sound advice most of the time. However, it does leave room for massive oversight and knowledge gaps that a structured approach (course, book, etc) would cover.
The other camp, would be the study first, read the book(s) and docs first before even initializing a repo. Very few advocate for this approach, myself included, as it’s a very efficient way of killing motivation and momentum.
My Findings
The approach that works for me is to find something I’m interested in, find its reliable source of knowledge be it a book or the documentation, and then read it for a bit, skim through, understand how it works on a general level, cover the terminology, etc. Then start working on a project to apply what I’ve learned, bouncing back and forth between the two.
Getting stuck will eventually lead you back to the docs anyway…
I should state, that for me it’s usually that I already have an idea for a project and have a vague understanding that a tool or framework lends itself to it, rarely do I think of a project specifically to learn a tool unless I really want to learn it.
The learn by doing paradigm works best when you’re familiar with the underlying architecture or design of something. For example, jumping from one modelviewcontroller framework to another.