The Power of Unknown Knowns: PragDave Thomas on Intuition and the Beginner's Mind
•
UGtastic Archive
Full Transcript Available
27 Minutes
Dave Thomas was in town and took the time to speak with me about the GOTO conference and provide insight into the work he’s doing world wide to build broad spectrum technical communities.
🔗 Read the full structured forensic transcript with durable insights at: https://just3ws.github.io/interviews/dave-thomas-software-craftsmanship-north-america-2013
The Interviewer
Mike Hall
Interviewer, UGtastic
The Guest
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
The Conversation
Mike Hall
Interviewer, UGtastic
[Music] Hi, it's Mike with UGtastic. I'm at SC... Hi, it's Mike with UGtastic. I'm here at SCNA 2013. I'm sitting down with Dave Thomas. You might know him as Prag Dave on Twitters. And you're also the founder of the Pragmatic Publishers, am I correct?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
Along with Andy Hunt, the Pragmatic Programmer's Pragmatic Book Show. Yes. And he gave a talk, Dave gave a talk called Unknown Knowns.
Mike Hall
Interviewer, UGtastic
So thank you very much for taking the time to sit down with me. I appreciate it. Unknown Knowns, that's very philosophical, almost very meta. It's also hard to remember. Yes, Unknown Knowns. So, I mean, the inspiration, if you like, for the title came from Donald Rumsfeld. He gave a press conference back in 2002 where he talked about known knowns, known unknowns, and unknown unknowns, when he was talking about, you know, the hunt for weapons of mass destruction. And he left off the idea of unknown knowns. That is, things that are known, but you don't know that you know them. And that, to me, is a really important concept because the reality is that's most of our knowledge. Most of our knowledge, the ability to do just about anything we do, talk, for example, is really buried way deep down below our conscious level. And so that's an unknown known. And the reality is, if you want to do something proficiently, perhaps surprisingly, you have to do it without conscious thought or without conscious intervention, I guess is more accurate. So, the question is, how do you become proficient at doing things through intuition?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
And there's a fair amount of research on exactly how you can do that and what I want you to present. Like Blink, would that be an example of... Blink is, along that lines, Blink is the idea of using your intuition. And I think Blink is good at a high level. And it certainly makes a good, strong point for using intuition. I think Blink is a little bit simplistic, probably because it's a mass market book. But the idea of, like, the five-second decision and all this kind of stuff, it's not a bad idea, but I think it can also lead you to be quite lazy. The reality is that intuition, there's a process to gain intuition. You don't just say, oh, I'm an intuitive person, you know, and therefore I'll make decisions without research. The reality is that to get to the point where you can make intuitive decisions, you first have to go through the work of learning all the stuff that you're going to be deciding about. And only after you've learned that and internalized that are you then in a position to make those intuitive decisions. So, you know, for example, a baby learning to talk is not going to learn words or sentences first. They're going to learn sounds. And then they're going to internalize those sounds, get to the point where they can make them when they need to. And only then can they then start learning words. Right, and then they start getting that feedback cycle.
Mike Hall
Interviewer, UGtastic
Exactly.
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
The, oh, when I said, yeah, daddy got really excited, you know. Right, and that's how we learn meaning. We learn meaning not by being told that, you know, this object is daddy. It's by having that feedback, that tacit feedback. And that's a really big part of this learning theory is that you learn things subconsciously by looking at the response that happens when certain stimuli occur. You know, if you can associate pain with touching a stove, for example, then you're going to avoid heat in all circumstances, sometimes without even thinking about it. Right, and that's the kind of thing we're talking about. I think what, there's a few things that came to mind listening to your talk. And I'm a parent, I have three children, and I'm going through, my youngest is nine months, and she's nine months old. And watching, you know, the three children as their, as their emergent consciousnesses are starting to try to figure out things that I take for granted. For example, my five-year-old is learning how to spell, and we're sitting down, and she was creating a list for me of my checklist to pack for the conference. And very sweet, she's like, all right, daddy, we have to make a list. So she knows that there's a list, and it's important.
Mike Hall
Interviewer, UGtastic
And she says, well, what do we need?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
And I said, okay, we need a computer.
Mike Hall
Interviewer, UGtastic
What does she write?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
K.
Mike Hall
Interviewer, UGtastic
Right.
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
And, okay, K, well, that one has a C. And that, when we sit down to write, and I felt so bad, because she ran into C, the F, P, H, because we had to have a computer, a microphone, and a suitcase. So poor thing had a K for computer, an F for the microphone, and the O, sound, she wanted to write S, O, O for suitcase.
Mike Hall
Interviewer, UGtastic
Right.
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
Quite reasonably, too. Yeah, reasonably.
Mike Hall
Interviewer, UGtastic
And that's when you're able to teach, and that's why I really appreciated your talk later when you mentioned about going to the user groups and teaching, that's when we're in these situations where we are just living in our tacit state, where we're just kind of complacently in our own thoughts and our own day-to-day experience, working through the machinery that we've built up in our minds, we don't think about those things that have just become rote. And then when you go back and you teach somebody who is completely naive to the entire concept of spelling or the entire concept of programming, that breaks you out of your little bubble. It's like, yeah, that doesn't make any sense. I think one of the things that I love to do, and I don't get to do enough of, is pair program to teach people a programming language. I used to do that a lot with Ruby. So if someone would say, I want to learn Ruby, so we'd sit down just for an hour, and they would drive, and we'd program Ruby. And the reason I loved it is because they would, you know, I would say, well, actually, that's probably not the way we'd do that. They'll say, why? Right.
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
And it forces you to re-examine all of these, like, habits that you get into, and to, you know, dig back into that conscious side to work out why things go on. But to your point, though, when you're talking about being, you know, sort of happily oblivious in your tacit state, I think that's actually one of the big mistakes that people make, is they get to a point where they can live life tacitly.
Mike Hall
Interviewer, UGtastic
And that's easier than having to think about everything all the time, right? Yeah.
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
So you kind of, like, start getting onto autopilot. And it's not just in terms of career, you're autopilot in terms of your rest of your life as well, you know, maybe even your family or relationships, whatever. It's just kind of like it's all handled for you somewhere in your subconscious. And I think that that's dangerous. I think it's very dangerous to become stale. Sounds very boring to you. Well, it's boring. But I think you could also miss so much. So one of the things I think that's really key is to always start, always to build on those tacit layers that you have. And one of the theories about this tacit learning is that you have to learn it in layers. So in the same way that babies learn sounds, then words, then sentences, you know, we're learning programming languages or whatever else, techniques, whatever works for us. These are all layered. And so once you have one layer mastered, you owe it to yourself to then to go to the next layer, to push and build on that. So maybe you've learned a programming language. Okay, so now learn how to do certain things with that language or learn how to use certain libraries in the language. Once you've got that nailed, go off and look at different problem domains or learn a new language or whatever it might be. But always keep learning. It's interesting. My wife and I travel to China a lot. And so she decided last year, Christmas time, that she wanted to learn Mandarin. So she started learning. She's doing really well. And obviously the pressure has been on me to do the same. Now, I, my, my brain is really bad at hearing sounds or differentiating sounds. And so it's very, very hard for me to, uh, listen to Mandarin and then try to reproduce it. Um, and it's been very, uh, interesting and humiliating for me, uh, to go back to being a beginner speaking. Um, and it's, in a way, it's actually been very fun because what it's done is it's kind of like, um, reminded my brain how to be a beginner again. And I found that in some ways that's kind of freed me up on the programming side as well.
Mike Hall
Interviewer, UGtastic
Right.
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
And it's interesting you say that about, I, I, I have members of my family who are from Europe and their English is my father's second language. Uh, and, uh, uh, you know, we've had discussions about Polish and English and, and trying to get them to explain why is the lamp female.
Mike Hall
Interviewer, UGtastic
Right.
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
It just is.
Mike Hall
Interviewer, UGtastic
And then, but then again, why is, why is microphones built with the pH and all that? Exactly. Exactly. Yeah.
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
And it's just the things that we've tested, they accepted. We just, that's just the way it is. It's just, it is. But, um, it also reminds me that when you're the beginner, sometimes when you're, one of the scary things, and I think one of the scariest things for people when they're, when they're looking at learning something new or making a, a massive career change. Like a few years ago, I went from being a . NET developer on a Microsoft platform to being a Ruby developer with a Mac and, you know, a terminal. And I went from being competent in being able to be strong and, and just come in and execute on the problem to, I don't know what, how to change directories.
Mike Hall
Interviewer, UGtastic
You know, I mean, like, I'm not going to, but I, you know, how do I clear the screen?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
I don't know, and, um, it's incredibly humbling where you're completely hobbled. And then if you're able to even take a further step back and look at that and say, well, how are other people sometimes hobbled? Thinking about the people who, uh, you know, like an immigrant who was, uh, uh, coming to America and is driving a taxi here, but was a doctor back home. You know, for whatever reason they've chosen that, you know, this, this path or were forced on this path, but you never know where somebody's been in, in a humbled state themselves. So, it, it can be, uh, a key step towards empathy by becoming a learner and completely stripping yourself down almost to the bare bones and, and, and feeling that pain and then being able to look at somebody else and try to reflect that in them. There's another side to that too. Um, I mean, you're absolutely right.
Mike Hall
Interviewer, UGtastic
But the, um, again, the theory says that, um, beginners of things, uh, require guidance, right?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
It's not just, you know, they get it wrong if they don't have guidance. They actually require it in order to learn.
Mike Hall
Interviewer, UGtastic
Um, they need to have context-free, uh, instruction, right?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
So, whereas, um, an expert or even someone who's got moderate experience, um, would be able to fill in all the gaps and, you know, understand that, okay, you've said this, but it doesn't really matter. In this circumstance or whatever else, for a beginner, you have to be very directive and you kind of like get out of the habit of directing people. I mean, you do it a little bit with little kids because, again, they're beginners of things, you know, um, but really you feel bad or you feel like you're being rude, telling people do this, then do that, then do the other. The reality is if you're dealing with a beginner, that's exactly what you should do. It doesn't matter if they're nine months old or 90 years old, if they're a beginner, they need to be told. I mean, if, if, if you're learning to parachute, right, you really don't care about the physics of, or the aerodynamics of the shoe or anything else.
Mike Hall
Interviewer, UGtastic
You just want to be told what to pull and when, right?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
That's the sum total of what you want.
Mike Hall
Interviewer, UGtastic
You want rules, yeah?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
And that's what beginners need. And so, although, yes, the empathy side is important, I think it's also important to understand how to interact with people as they're learning. And the interesting thing about that is it implies that your interaction style is going to change over time. It's going to start off being very directive, but as they get experience, it's going to become more and more collegial. And so, I think you can see the good managers are people that do that instinctively, who are directive at one, one day, and then six months later, they're a bit more back-slappy, kind of like, you know, you know how to go do that, go do that. Right, right, yeah. And in your talk, you talked, you described the Donald Rumsfeld quote that probably every American has heard already, but about the, you know, things that we know that we, you can look it up. But the, that quote, though, you said there was one aspect missing.
Mike Hall
Interviewer, UGtastic
Right.
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
That was the unknown knowns. And I just wanted to say that there was, it made me think about this quote that what's, I don't know if it's ever been established that Donald Rumsfeld was quoting this, but there's an old, or at least it's attributed to it as an old Arabic paraphrase. But I really enjoyed it, excuse me, proverb, and it was that he that knows and knows not that he knows is asleep, waken. And that just makes me think about what you were just saying about being on autopilot and trying to find somebody who can wake you and question what you. Yeah, but, you know, I think that's part of it, but it's, and yeah, you're absolutely right. And that's part of the larger feedback loop, which is don't get complacent, you know, make sure you're still conscious of what you're doing.
Mike Hall
Interviewer, UGtastic
But on a day-to-day level, being in that state of not knowing is actually the most important thing, right?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
If I was to throw a ball and you were to try and catch it by thinking about, I have to catch this ball.
Mike Hall
Interviewer, UGtastic
So let's think, where's it going to come down?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
Probably over here. I've got to move my hand like this and then open my fingers up. If you tried to do that, the ball would be on the ground long before you'd even got the hand out, right? Because you have to, at the conscious level, you're just too slow.
Mike Hall
Interviewer, UGtastic
But if I said to you, how do you catch a ball? You wouldn't be able to tell me, you know?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
Baseball players' entire career is based on being able to do something that cannot tell you how they do it. And people have tried to study how they do it. And there's like little tricks that they do do, like try and keep a constant angle and a descent and this kind of stuff. But it's very, very difficult to describe. And the thing that I try to get across to developers is that's a good state to be in, right? Getting to the point where you operate, autopilot is maybe not quite the right word for it, but where you can operate instinctively. Means that you can be coding and another part of your brain, the conscious part of your brain, is looking at yourself coding.
Mike Hall
Interviewer, UGtastic
And it's that looking at yourself that's giving you the feedback to do it better, right?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
And fine-tune things. So I'm not saying that you become an intuitive coder and at that point it all freezes and you're an expert and people genuflect. What happens is that you get to that level and now you finally have the ability to improve yourself by monitoring yourself. You're now using two parts of your brain, the intuitive part, which is kind of subconscious, below the level of conscious.
Mike Hall
Interviewer, UGtastic
And then the conscious part can look at what you're doing and say, hey, you know what?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
In the future I could do this differently. And then try to train the subconscious part to do that. And that's exactly the same process. You're going to train it by repetition, by reminding yourself to do this, by giving yourself feedback. So I think it's good to reevaluate and never to do everything just on autopilot the whole time. At the same time, you have to accept that the only way to be effective in any real-world activity is through this tacit knowledge. And so in a way it's a very programming your brain that you, like we sit down and we write code that it automatically goes and runs. But we do some thought so that way it can do that. And then we train ourselves to do a certain activity so that way we can just let it go sometimes and just let that automation run to an extent. I don't think it's quite that scientific. It's closer to living to drive a car, for example. I mean, when you first living to drive a car, you're a white knuckle clenching the wheel. You are, you know, there's too much going on.
Mike Hall
Interviewer, UGtastic
It's simplified down to, you know, a couple of pedals on a steering wheel and that's it, right?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
And if someone says, watch out for that pedestrian going over there, I mean, you freak out because you can't think about that pedestrian. You're still too busy steering and everything else.
Mike Hall
Interviewer, UGtastic
Right.
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
And after a while, as that experience starts to build, gradually the number of factors that you can take into account grows. And I think it's the same. I learned to fly a plane and amazingly, you can actually solo. Typically, most people will solo a plane after about five or six hours instruction. And that's a really wild thing. I mean, you fly around a little bit and then, you know, at some point your instructor lands you, gets out of the plane and says, okay, go do a circuit. And you do that circuit and it is the most tiring thing you've done in your life, I guarantee, because you are thinking constantly. I mean, there's no spare neuron. Everything is thinking about it. And probably your adrenaline level is. Oh, yeah, yeah. But it's like, you know, I have to do this, I have to do this, I have to do this, blah, blah, blah, you know. And it's like, it's a miracle anyone survives it, but everybody does. Then you don't get your license for probably another 50 hours. And that 50 hours is spent doing these things over and over again and getting to the point where you can sit back and look at the bigger picture. And it keeps going. I mean, airlines hire pilots with 10,000 hours. You know, senior pilots go up 20,000 to 25,000. And that's because they have, basically, they've seen it all, but not just that, they've internalized it all. And interestingly, the best pilots are the ones who don't necessarily follow the rules. They write the rules, but they don't have to follow it. Well, yeah, if you can write the rules, then you've already established yourself at a certain level. But you're starting to think beyond the rules. Well, and you can deal with situations where the rules no longer apply. There's a famous case of a pilot. It was a U. S. Airways pilot.
Mike Hall
Interviewer, UGtastic
What's his name now?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
Al something or other. And he was flying cross-country, and the engine in the tail blew up. And that's, in theory, not a big deal, because you have two other engines, and the plane was just flying. Unfortunately, this particular blow-up sent fan blades through all of the hydraulic lines. Oh, sorry, hydraulic lines for all of the hydraulic systems. So there are three hydraulic systems at a minimum on a plane. This actually disabled all of them. So he had no hydraulics. So that's literally the worst case scenario. Yeah, and he could not control any of the control surfaces on the plane. There was no manual control. So the plane was basically unfliable. According to the book, nothing he could do. But he had, you know, 25,000 hours or something. He happened to be flying with another instructor pilot in the jump seat, and his co-pilot was very experienced. And between them, they worked out a brand-new way of flying airplanes using the throttles. And they did that. The rule books did not apply. I mean, none of the manuals. I mean, basically, if you open the—every plane has something called the Pilot Operating Handbook, which is kind of like instructions. And if you go to the red tab, which is emergencies, and look for total hydraulic failure, it basically says, kiss your ass goodbye.
Mike Hall
Interviewer, UGtastic
Right. Have you brought a parachute?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
Yeah, right. And they basically didn't even bother. They just said, okay, we'll work this out. And they worked out, and they got this thing, and they landed the plane in Sioux City, Iowa, simply using the throttles. And they saved, I don't know how many hundred lives. I mean, there was a crash, because at some point, you have to turn the throttles back to land.
Mike Hall
Interviewer, UGtastic
Right.
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
And at that point, they lost control of the plane. But they managed to get the thing down on the ground, which is stunning. And that's only because they had the experience and the intuition to be able to predict or—to be able to, yeah, initially predict and then learn very quickly how the plane reacts when it's flown in a totally unique kind of way. And, you know, just coming towards the end, but I'm thinking about the levels of mastery. And that sometimes when you get to a certain level of mastery, it's hard for maybe what you might call a layperson to be evaluated the difference between different levels of mastery. And I'm thinking about—I went and saw a dance performance, and I just thought it was beautiful. But then I heard the person who was a dancer next to me saying, well, that person over there wasn't totally with it. And, you know, I've watched—you wouldn't know about this, but I used to skateboard extensively. And now when I watch videos of skateboarders, I can tell, like, oh, my God, that person is amazing, like, what they're doing. And then others, oh, he's, you know, he's just doing rudimentary stuff. Yeah, sure, it's big, but it's very common stuff. And in programming, sometimes I think because what we do is so much in our head and then into code and then really the interface that you can have with that is very limited. It's hard to tell. When you're looking at books or at open source code or at another program and trying to evaluate where they stand as far as professionals, do you have—have you put any thought into how you evaluate what is good? And this is kind of reflecting on a panel talk you participated in earlier, but towards what is the metric for being able to evaluate whether or not either another individual programmer is competent and what their level of mastery is? So when you're sitting down to teach somebody or looking at somebody who's going to be working with you, you kind of have to have that, like, okay, where do they stand in the continuum?
Mike Hall
Interviewer, UGtastic
Do you—have you—have you ever thought about how you look at somebody and evaluate their skill level?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
Yeah, I mean, first of all, I've got to say that I am possibly the world's worst recruiter. I have a habit of either recruiting perfect people for the job or absolutely, you know, the devil incarnate. It's like one or the other. I can't hit the middle point. Kind of like the maniac. Yeah, kind of like that. But it's just like—I don't know why it is, but maybe I just trust my intuition too much. But I think there's a couple of things you can look for, particularly face-to-face if you're talking to somebody. One—and it's not binary. There's a combination of factors. One thing I look at is how they respond to mistakes.
Mike Hall
Interviewer, UGtastic
If you are a beginner, then a mistake is like a serious thing, right?
Dave "pragdave" Thomas
software craftsmanship and the pragmatic programmer
They panic, they—oh, you know, I made a mistake, and they apologize or whatever else. If you are more advanced, then you realize that mistakes happen, and you're just going to have to fix it, you know? And so a more advanced person would just kind of laugh it off and get on and fix it, and ideally, you know, comment on how it happened, why it happened, and how you'd stop it happening again, you know? Similarly, the more advanced people are capable of doing one or one thing at the same time. So as they're coding, they may be talking to you, you know, and ideally giving a commentary on what they're doing. And so I look for that a little bit, you know, can I sit there and chat while they're coding or whatever else. So I think those are the kind of external indicators. You can also look at the code and see—I don't know how to describe it. It's one of these, I know it when I see it things, but it's good code has a kind of simplicity, a kind of cleanliness, a structure, and small things. Like, good developers, I think, my experience is that good developers will care more about not just the logic of the code, but also the presentation of the code. You know, they like producing things that look nice. And there's good reasons for it, but it's typically a kind of like third-order effect, so you only start seeing that with the more experienced people. I don't have an exact answer, but I mean, those are the kind of things that I'm hoping to see.
Mike Hall
Interviewer, UGtastic
Well, thank you very much for taking the time to sit down with me. I really appreciate it. I really appreciate the opportunity. Okay. [Music] tastic. com Thank you.