In his article “Teaching coding from the Metal Up or from the Glass Back?”, Scott Hanselman describes two ways of learning computer science-related topics: learning “from the metal up” starts with low-level concepts and builds up to high-level abstractions, while learning “from the glass back” starts with the user interface or other final product, and delves into low-level concepts from there.

I find this distinction really interesting, although I have one objection: Hanselman says he thinks people are “wired a certain way […] just like there are kinesthetic learners and auditory learners and people who learn by repetition”. As Ted M. Young pointed out on Twitter, learning styles are not a thing. Also, saying people are “wired” a certain way implies that it’s somehow biological, which can’t be true when we’re talking about a modern invention like computer programming.

While I don’t believe that people are wired for learning either way, most people probably prefer one or the other, and I think it’s a useful distinction to think about for anyone who teaches programming.

I like learning from the glass back

I definitely have a preference for learning from the glass back. It’s why I’m glad I did a code bootcamp and worked as a Rails developer for a year before I went back to school for a computer science degree. I was able to get comfortable building applications using high-level tools before I had to wrap my brain around things like linked lists and the system stack.

At the time when I started at my bootcamp, most of my experience coding was with HTML and CSS. The “glass back” approached worked for me because it built upon my prior knowledge. If I had started with a traditional intro to computer science class right away instead, I’m not sure if I could have maintained interest in writing command line programs in C++ for a whole semester or longer without ever getting to work on something with a UI. But since I started learning lower-level concepts after working as a software developer for a year, I had the perspective to understand them and the motivation to learn them.

And now that I am more familiar with low-level concepts, I still think from the glass back. I always want a clear understanding of who’s going to be using a system and how it’s supposed to behave, before I start thinking about implementation.

But sometimes “metal up” works better for me

On the other hand, my post “Roll Your Own, Then Learn a Framework” is basically an advertisement for learning from the metal up. The thing is, when I’ve learned that way, it’s been because a teacher led me to do it. When I’m on my own, I will usually choose to learn from the glass back.

Perhaps, whichever style you prefer, it’s best to learn in your preferred direction most of the time, but occasionally be pushed out of your comfort zone to learn the opposite way. Or perhaps certain topics are best taught from the metal up, while others are better approached from the glass back. Or maybe research would reveal that one way of learning is objectively better than the other and learner preference is irrelevant!

The “glass back” vs. “metal up” distinction is new to me, and my thinking on it is sure to evolve. However, I will certainly be keeping it in mind as I continue to study at OSU, and the next time I am teaching coding.