User Research, Design Methods, Education

»I'm always amazed at how beginning coders rely so heavily on tutorials. If your library doesn't have a tutorial, it doesn't exist.« Nolan Lawson/ ‏@nolanlawson (link to tweet)

Indeed: From my own experience it is nearly impossible to learn a library (or programming language or mathematical method or…) without a tutorial or something very similar to it: An typical »Tutorial for…«-called webpage, a collegue explaining the use in a real live example or a screencast of someone solving an actual problem.

Why not just the API doc?

What is the reasons for this? Could we not just get the API reference, read it and start coding?

Clearly, this would be less motivating. But even if someone is motivated enough to read the reference, I would guess that this person still is unable to solve even a basic problem that is more complex than two function calls.

Find the few ways that actually work

Why? There are many ways in which you can use all the bits and pieces you learned. But there may be better and worse ways to solve a problem. Particularly, if you consider that a beginner might forget or oversee information. Or just understand something differently than the writer intended: There are many ways in which the aspiring learner can be lead astray and be lost in a mess instead of applying methods that work.

These »methods that work« may be called »schemas« or »expert methods«. They are foundation of much cognitive psychology, in particular in the so-called cognitive load theory of learning.

Trial-and-Error as inefficient alternative

If no schema for solving a problem is available to a person, they have no specialized way to solve the problem and the need to use a universal method: means-ends analysis. What is that? Its a slightly more clever trial-and-error: Continue in a direction that works, if it did not work, try another solution and thus move closer and closer (but usually slowly and with many dead ends) towards the goal 1.

This introduces much cognitive load: Calling the function you just read about in the docs does not work? Indeed, because you can only use it in the context of a whaever other function of a certain type and it needs to be initialized (uh, what is that, again?) with a value, but not any value, but one of a certain type.

This is not fun nor efficient: You will be lost in an interdepended mess of thoughts 2. Tutorials can be sees as a way that spares beginners the many dead ends of a means-end-analysis, aka trial-and-error: Tutorials provide the learner with established methods to solve a problem 3.

Tutorials help to move beyond the mere examples they provide

Providing a way to solve a problem does not mean that the learner will never move beyond that example: They will rely less and less on them the more they learn. Tutorials will be less and less useful over time and can be gradually replaced by (self-set) challenges 4

And this is a good reason why tutorials make sense when one wants to learn a new language library or pattern.