I’ve long argued that UI design, programming, and product strategy should be learned apprentice-style with your hands and through experience, not through school and pedagogy. That can sound anti-academic, but it’s not. I recently got around to reading The Design of Everyday Things, the classic by Donald Norman (himself an academic) and he has this to say:
People function through their use of two kinds of knowledge: knowledge of and knowledge how.
...
Knowledge how [is] what psychologists call procedural knowledge.
...
Procedural knowledge is difficult or impossible to write down and difficult to teach. It is best taught by demonstration and best learned through practice. Even the best teachers cannot usually describe what they are doing. Procedural knowledge is largely subconscious.
I couldn’t have asked for a better statement of the problem. It’s really darn hard to take all the physical and mental processes going on when you do something like design an interface and boil them down to declarative statements like “do this or that.”
When I learned design, I was partly self-taught and partly mentored by Jason. When I learned programming—as much as I’ve learned—I didn’t make progress until I got personal explanations from David and Marcel.
When I go to conferences about design I see a lot of declarative knowledge. Knowledge of. The latest CSS rules. The new JavaScript syntax. Ten ways to make users happy (supposedly) or whatever else. What I don’t see are procedures—somebody standing up there with a pen or a text editor and making things happen and showing how it’s done. That’s what I want to see and that’s what I think our industry needs more of.
––
Addendum: Some examples of showing ‘how’:
- A Tour of the Design Process at 37signals, my presentation from FOWA London 2010, demos the mechanics at each stage of a design: modeling, sketching, coding, Photoshopping and implementing in Rails.
- Tom Preston-Werner sits down with a laptop and teaches the fundamentals of Git by actually typing commands in Mastering Git Basics.
- Kent Beck’s screencasts on TDD show how test-driven development is done by a master with real code.
Christopher Hawkins
on 07 Jul 11I agree 100%. Apprentice-style learning is highly effective. It is also, unfortunately, relegated to second-class status compared to classroom learning in the minds of most.
I love it when someone smarter or more learned than I am can show me the “how” of something I’m interested in. It’s so much more real than book-work.
Cameron Stitt
on 07 Jul 11Great post Ryan. I agree with the apprentice-style learning also. I have learnt more from mentors both in the work-place and online then I did from 3 years of banging my head on a desk at University.
Luke Holder
on 07 Jul 11Wow, absolutely agree.
I am self taught, but have being doing it long enough that I have now learnt more from the people around me.
I recently moved from Australia to a great job here in the USA, and was excited to attend my first large dev/design conference. I thought I would learn soo much but I was sorely disappointed – not because I am that advanced, but because the speakers where only speaking about knowledge of all the html5 and css3 features, and nothing was actual problem solving or practical application of features.
I was blown away when someone doing a presentation on css3 animations and gave a great demo actually said during the Q & A session: “I am not an engineer so I don’t know about that” to a question on browser support for css3 animations!
Sometime I feel like the smartest and most talented are too busy in the trenches to be on stage.
Sawyer
on 07 Jul 11I’m currently attending college for Web Development and Design and agree 100% that an apprenticeship would be the way to go. The issue though, is that finding a quality mentor to apprentice under is pretty difficult. I’m actually attempting to do exactly that. (sawyerhollenshead.com/apprentice)
Do you have any recommendations or resources on how to find a quality apprenticeship?
Chris
on 07 Jul 11The same can be said for how people learn. This reminds of a first year university module I took while studying for my Software Engineering degree. The class was essentially matrix and vector mathematics, and I failed.
Luckily freshman were allowed to retake failed exams in the summer so I was stayed with a friend who happened to be an Architecture student. After sitting with him for no more than two hours I finally understood what 12 hours of lectures couldn’t get across.
It can be difficult to grasp concepts when someone is just spouting knowledge at you in a lecture theatre or conference presentation. Sitting down and working through the problem with someone experienced is far more effective in my experience. Also explains why I’m a far better programmer in my profession than I ever was at school.
Mark
on 07 Jul 11I agree 100% also. One of the most frustrating years of my career was spent “teaching people how to think like me” when it came to debugging CSS and JavaScript (pre-Firefox, meaning IE6 with alert statements).
The problem was that many situations were unique, and a trial and error process was king for discovering the subtleties of client-side coding and recognizing recurring scenarios. I couldn’t simply do a mind dump, walk through a few examples, and send someone on his way. But 90% of our developers were taught to “program” in one- or two-week lecture-style classes and this is how my manager thought it should work (if I was any good).
Now we work in a more collaborative, agile fashion and it makes all the difference. We learn from each other, and the background chatter always lends itself to accidental discoveries and teaching in a much more effective way. As romantic as it seems, the days of someone building The Next Killer App alone in a basement are gone if they ever existed in the first place.
Éric Chamberland
on 07 Jul 11While there is often clearly not enough hands-on practice in academic settings, there is a need for declarative knowledge in all trades. Just as there is a need for procedural knowledge, and a need for conditional knowledge too (knowledge when, as in “under which conditions should I…”). All three kinds are required to some extent for competency in any line of work.
There is a lot of overlap between procedural and implicit knowledge (the knowledge you can’t quite express with word), but that doesn’t mean all procedural knowledge can’t be explained. But even when it is explainable, procedural knowledge sets in with practice. Ditto for conditional knowledge : while it can sometimes be explained, it is often implicit, and you mostly get it with practice.
In sum, we should not ditch declarative knowledge; we should just make sure we don’t stop there, as it is required but insufficient.
Alex Humphrey
on 07 Jul 11There have only been a handful of times where I’ve had the opportunity to work with a master at something that I was just beginning at. I have learned more from those brief experiences than my entire time at University.
There is a lot to be said for “how to” learning (I read several books a month for that very reason) but I completely agree that there is something special about doing that can never be taught in a class room.
Cory
on 07 Jul 11Pedagogy is not anti-academic
Marc
on 07 Jul 11@Sawyer
There is a college major in Web Development & Design?
What a waste. Much more cost-effective to learn on your own … or instead, attend university for computer science
Neal Sales-Griffin
on 07 Jul 11This does not have to be a black and white/either or issue. I think there is a way to create an environment where a duality can be established.
And rather than theorizing about it, I decided to create that place, because I need it more than anyone I know.
It’s called Code Academy. It’s a 12 week bootcamp that provides apprenticeship as well as formal instruction for ‘pure’ beginners to learn Ruby on Rails and entrepreneurship. We are starting in Chicago but are hopeful that we can expand to all the locations that would benefit from what we are providing.
If you’d like to know more feel free to message me at [email protected]. We can use all the help we can get as it relates to getting the word out about our fall launch. We are looking for mentors, supporters, and we’re going to be accepting students!
:)
- Neal
Adrian Edwards
on 07 Jul 11The rise and rise of video tutorials in our industry is going some way towards helping address this issue.
Rasyadi
on 07 Jul 11Appretice-style method has been practiced by the great scholars a long time ago and it has proven as the most effective method of learning. For example, look at the Socratic method practised by the Greek scholars, Talaqqi method practised by the Islamic scholars and the Oxford Tutorial Method that are still practicing until now.
Sawyer
on 07 Jul 11@Marc
Hence why I’m looking for an apprenticeship.
Technically it’s called New Media Interactive Development...it’s a mix between design and various programming languages.
Kathy Sierra
on 07 Jul 11Yes, yes, yes. Another angle: in most text and tech books, the (mostly) declarative knowledge is Just-in-Case, but we’re more motivated to learn when we really NEED to do this thing NOW, which is Just-in-Time. Both have strengths and weaknesses, but our goal in helping someone learn should be to make just-in-case FEEL more like just-in-time. A flight simulator would be the best example, but for tech/design, just letting relevant, meaningful, use-cases and scenarios drive the learning would make a big impact.
So much of what we learn in advance (just-in-case) is decoupled from how/when/why we would use it… then we find ourselves months later needing to actually DO that thing, and think, “if I had known THIS might happen, I’d have paid attention…”
Apprentice learning does not scale, but it is the best. Still, we can do a better job with what we do create for learners, and that includes our end-user support materials as well. They are learners too, or could be.
Gwyn ap Harri
on 07 Jul 11Knowledge of = Learning Knowledge how = Experience
Experience = Learning * 1,000,000 (give or take)
Great post Ryan.
catwell
on 07 Jul 11Programming classes, especially for beginners, should always have the teacher write code live at some point. A good example of that is Julie Zelenski’s Programming Abstractions class at Stanford: http://www.youtube.com/watch?v=kMzH3tfP6f8
I was taught C++ in a similar way at Cranfield University (UK) by Peter Sherar. Courses with live code in the morning, hands-on afternoons. It is probably the best class I’ve ever had from a teaching methodology standpoint.
Kevin
on 07 Jul 11Ryan, I agree very much and in fact I am going to do exactly that by joining a rails consultancy to become (much) better at building products. I have been learning by myself but it has just been too slow and isolated.
Gerard Kelly
on 07 Jul 11Totally agree with this – teaching programming using slide after slide of code is like teaching carpentry without allowing the student to pick up a tool. I wonder if there is a need for programming “lectures” at all?
I discuss this a bit more on this blog post:
http://themodernprogrammer.com/post/attention-programming-lecturers-let-the-boys-play/
Atle Iversen
on 07 Jul 11The art of programming should be learned at school.
The craft of programming should be learned at work/home.
(or replace art with science if you prefer that)
You learn the BIG ‘knowledge why’ at school, and all the SMALL ‘knowledge why’ while practicing.
Kurt
on 07 Jul 11Excellent post Ryan. I’d like to get your thoughts on a service like lynda.com. Does their approach to teaching (online screencast demonstrations of software) qualify as “somebody standing up there with a pen or a text editor and making things happen and showing how it’s done” or is the direct interaction with the instructor (missing from Lynda) essential in your opinion?
Courtney
on 07 Jul 11Kurt,
I tought you were dead. Call me, we need to talk.
Love, Curtney
el
on 07 Jul 11The most important thing in this quote is how they relate to each other. Capitan is ones soldiers are thousands. Of-s should be ones how-s should be thousands.
Sadly, all education systems in every topic, including technology are working exactly the oposite way. 500-1000 page techical books, video tutorials, screencasts etc. All of them are just shit and unnecessary garbage.
Einstein wrote ~100 page book and changed everything in humanity and that’s the max amount of pages in of books shoud be.
Leonardo da Vinci said this two quotes about 5 hundred years ago, but nothing learned yet :/
Ka Wai
on 07 Jul 11Great points Ryan. It’s a bit like the Dreyfus Model of Skill Acquisition – which I will bastardize and simplify—people learn by understanding what before the higher level ‘why’.
“How I do this” is really showing what you do. It’s easier to get from that to the higher level why’s by showing how first, then vice-versa.
Ryan Austin
on 07 Jul 11Completely agree Ryan. Showing how is the best way to teach and doing is the best way to learn. If only public schools would wise up to this principle we might enjoy a Renaissance of education.
I’ve personally benefitted from the lynda.com and Rails Tutorial videos which helped crystallize many important concepts which cannot be conveyed in procedural language. Nothing beats being able to look over the shoulder of a great teacher.
Hrishi Mittal
on 07 Jul 11Ryan I’m in the process of designing a new product, and I was wondering about how the good designers do it. So, this is a very timely post for me. In fact, I was already thinking I wanted to watch your old talks again.
This article by Paul Stamatiou is also quite useful – http://paulstamatiou.com/startup-web-design-ux-crash-course
Bryan Sebastian
on 07 Jul 11I believe Codeschool.com has done a wonderful job of creating an online teaching by doing website. I also think the Khan Academy is also amazing. Sal does what Ryan mentions, gets the pen out and shows you how to do whatever it is he is teaching you.
Phil Coffman
on 07 Jul 11I completely agree Ryan. I too have grown tired of “knowledge of” resources and presentations. While I believe they have their place, I yearn for the “how” of design: learning from others’ processes and methods.
This is why I set out to create Method & Craft. One thing I’ve noticed while working with our authors is it’s extremely difficult for them to put into words how they do what they do. I’d say the majority of us suffer from that, because I feel design is as much about education is about responding from our gut. Naz Hamid spoke about this a little on his site. This is why with Method & Craft we’ve opted for more of a “show & tell” model rather than focusing on the psychology of design as there is plenty to be gleaned from watching someone work.
Craig Willis
on 07 Jul 11I left school at 16 and embarked on a 5 year apprenticeship in the electronics industry. At 26 I went to University to study politics. While I agree that hands on is a ‘better’ way to learn I have seen other apprentices completing the so called ‘apprenticeship’ without learning what they really needed.
I studied politics because it was a topic I was personally interested in but outside of my degree I have always worked in tech. What university taught me, that may be a product of the fact I had real work experience first, was ‘how to learn’.
I see this day to day now, I see some colleagues that work at something until they find the answer and others that will ask everyone until they are ‘told’ the answer. The chances are the later will come back and ask the same questions again. As with everything there is a balance somewhere.
Fake Kathy Sierra
on 07 Jul 11100% disagree. Exposing someone to the procedural ‘how’ knowledge without first giving them solid declarative ‘what’ knowledge will in the best case not amount to anything, and in the worst case end up being totally confusing, even harmful for them as well as potentially for many others.
However, a person in solid possession of profound knowledge of ‘what’, that is, declarative knowledge, will almost always be able to deduce the best way to go about ‘how’ to implement it.
I’ve seen that when teaching guitar. I can show my students hands-on how to play improvised solo lines over John Coltrane’s “Giant Steps”, and this will only scare and confuse them. Instead, I teach them the declarative side of music—what does it all mean, what is the lay of the land, what makes the chord changes work. Once they grasp that, they’ll figure out on their own how to navigate the tricky waters of playing along the Coltrane’s changes on “Giant Steps”.
So you’re blowing hot air in your post here.
RS
on 07 Jul 11@Fake:
What works for guitar doesn’t necessarily work for interface design or programming. Music theory is totally comprehensive and well-understood. We don’t have a body of theory like that for interface design. I think they are very different cases.
Maureen
on 07 Jul 11We do have bodies of theory to draw on for interface design. The principles of human perception, memory and learning could be seen as analogous to music theory in teaching guitar no?
RS
on 08 Jul 11@Maureen: No. Those principles are nice but they don’t help you to actually create software. You can create nice harmonies purely mechanically by following principles in music theory, but I’ve never seen such a thing with software or UI.
TVD
on 08 Jul 11@Ryan: I’ve gone from Lead Developer to Starter and everything in-between. As an industry we have plenty of excellent resources on Knowledge Of. Everything from Douglas Crockford’s JavaScript: The Good Parts to Andy Budd’s CSS Mastery. Yet, we are missing a key element of greatness. Fundamentally, I too believe that missing element is Knowledge How. My passion, in particular, is mentorship.
We need to value that connection between the inspired youth among us. There is benefit in mentorship – both people learn something. But, as you point out, mentorship isn’t the only venue. Presentations coupled with break-out sessions is a happy medium – one I’ve seen executed with quite some success.
@Sawyer: I’m not going to mix words – I believe your skill level is superb! That said, nothing beats the kind of experience you get working for another person. I’m going to be a contrarian here and recommend you work for a high-profile Advertising Agency. Two things will happen.
First, your skills will multiply (which, for me, it’s hard to see how better you can get – but you will and that will be a defining moment for you). Finally, they will work you to the ground! I know this last one is a bit puzzling as to how it is a benefit, but hear me out…
You can’t hope to lead a great team if you have no idea what it’s like to be managed by lesser men. You have to be able to see things from your employee’s point of view. You have to be able to empathize. Most importantly, it will build your character.
Feel free to drop me a line anytime. Take care.
Brett
on 08 Jul 11Sometimes you just can’t apprentice to anyone – you have to learn on the job, iterate often, improve quickly.
But as for the declarative and procedural, I agree that I’d like to see a lot more procedural examples, tutorials, etc. I want to see how a specific person got to a specific solution. Sure, they worked within a specific set of rules (declarative) but I want to see how their mind worked, step-to-step (procedural). I want to try and discern the inspirational insights that steered the process.
The more ways we have of working towards a solution, the more opportunities we have along the way, the more creative we can be.
sean wood
on 08 Jul 11Great examples. Thank you for these.
Matt
on 08 Jul 11College (Computer Science) gave me a basic foundation to build off of, but I didn’t actually blast off and LEARN until I dove in and coded/designed.
There’s a big difference between archiving tons of information in your head from a class or book, versus actually getting in the mud and physically getting dirty.
Mattias
on 09 Jul 11It all comes down to that we all have different learning styles. The best way for you to learn something can be the opposite for someone else. So never draw the conclusion that whatever works the best on you must be the overall best solution for everybody.
Want a start? Google “Kolb learning styles”
Chris
on 09 Jul 11Thanks for this post. I just watched your talk at the “Future of Web Apps”. Really, really good. Thanks for that resource.
Paul Montwill
on 11 Jul 11Wow! This is a kind of post I’m visiting this blog for. Great insight, Ryan.
This part was really good: ” Procedural knowledge is largely subconscious”
Manuel
on 11 Jul 11Hi, I´m late…
I think this is crucial. The Mentor-Apprentice method of teaching-learning is just the best, no matter what. It´s just that, in order to educate massively, the modern world broke this method in favor to our current way: one teach by lecture and while other learn by repeat, most of the time, repeating out of context.
Another crucial thing is how we approach learning. If you do it the right way, the need for a mentor is reduced. the best example I can tell for this is: http://es.wikipedia.org/wiki/Luis_Zambrano (in Spanish) Luis Zambrano deduced on his own the value of PI and invented an electric turbine back in 1940 without any help or instruction. His approach: Don’t wait to know. Do in order to know. Learn by doing If you are doing something, finish it.
Sjoerd Luteyn
on 12 Jul 11There is a difference of beging INFORMED and having KNOWLEDGE.
In my personal opinion many people are informed about something (e.g. de rules of interface design or music theory) but few people have kowledge (the capacity of moving people with it).
Emir Bukva
on 13 Jul 11Ryan,
This is why most college-level design classes are studios. I.e. limited to about dozen students at most. The idea is to make it a semester-long apprenticeship as much as possible through a fair deal of one-on-one critiques. Demos are also a crucial part of art and design instruction.
@Mattias has also got it, different people have different learning styles. Which is why no class (or conference) size instruction can really match a one-on-one apprenticeship.
This discussion is closed.