owen

I was struck again several times just this weekend by this idea that I’ve been having regarding levels of knowledge and learning. And when things come in batches like this, it makes sense to pay attention and think about them.

The basic example of the situation is this: When you first learn about a subject, you are by definition a novice. Depending on the topic area, there may be many books on the subject geared toward your knowledge level. As you become more adept though, the number of books on the topic that are worthwhile to you dwindle.

We were looking at books on home decorating over the weekend. There simply are no basic books. The books that exist all assume some fundamental level of interior design skill that we simply don’t possess.

As an aside, these interior design books are also particularly annoying in that there is no practical guide – all of the photos in the books are of well-designed houses that are configured nothing like the box of bricks the typical family lives in. I’m sure I’ll eventually discover a book that shows how to decorate a typical American cookie-cutter home, and I’ll be pleased when I do, but until then all I have to look at are books where every ceiling is vaulted, every entryway is parquet’ed, and all the woodwork is antique.

Programming is certainly this way. When I started to learn how to code, I was typing code from magazine listings and the scant few books that talked about programming. These were very basic. I don’t know of any analogue to those publications these days. Where are the true beginner materials?

One of the fundamental things I discovered about people learning to program is that everyone starts at a different place. When you get into programming, you don’t all get in on the “ground floor”. The building certainly isn’t a single high-rise, but a weaving Escher-esque nightmare of staircases that converge at odd angles, sometimes upside-down. As a result, many people are missing certain things that I find fundamental to know. For example, being able to “read” code - where you sort of “execute” the code in your head to imagine what it will do - is a fundamental skill that very few of the people I know practice explicitly.

But assuming you even obtain a basic layer of knowledge, everyone’s ground floor is different. And like a concept well-described in Vernor Vinge’s “A Deepness in the Sky”, as the automation of a technology increases, the layers of abstraction increase to the point that the truly basic underlying systems are understood by hardly anyone. Take for example the workings of the web. While practically anyone with a keyboard these days can produce a web site using software they stumble upon while browsing, just because you can do so does not mean you have the knowledge of how the browser works, or how your TCP/IP stack requests the information it gets, or how the routers between you and the internet move that traffic, or how your computer is able to turn the code it receives into something readable, or how the jpeg images are decoded for display, or how the code that displays the images received from those vast distances is dissembled into bits of assembler instructions that cause the microscopic components of that machine to execute anything. What few software engineers know anything about the low level functionality of a floating point processing unit, for example?

Yet, you can pick up a magazine at any bookstore that will explain how to build whole, useful web sites.

Is it useful for a web designer to know anything about assembler? Probably not. And I don’t posit that the art of compiler design is lost (yet) for all of them fleeing to build a new Facebook. But there is an interesting disparity of knowledge there. And my point here is that there’s no real connection to be made between.

Sure, you can pick up the knowledge of how to build web sites, but if you wanted to learn the next thing - maybe it’s how to build a browser - you’d be hard pressed to find a manual on that. And I think that’s the case with a great many disciplines. After you’ve learned the basics, and maybe a level on top of that, things tend to either get specialized to the point of requiring knowledge that you would have to have obtained externally, or simply don’t exist.

I wonder if there’s a place for these in-between classes. A class you could take to learn how to get from novice to advanced specialist that is more general than jumping directly to the specialist class. Because I think that the way we learn these days is different than most formal instruction. With formal instruction, you have a path from knowing nothing to specializing. These days, you start out as a specialist, not needing to know more basics or advanced techniques to survive. But a class or some books that I don’t think exist now to fill in the gaps to allow people to move laterally into related disciplines seems like something that could be beneficial.