 So I'm Johannes Brodbal and I'm here at Agile India and today we have with us Dave Thomas for an exclusive interview Welcome to India Dave. Well, thank you. Thank you. It's good to see you again after was it ten years or something ridiculous So something ridiculous like that. So I heard lots of good stuff about your talk today the keynote this morning and the title was Unknown knowns so things you don't know that you know, right? What's that about? well, that's about pretty much everything you know in fact because Over time as as you get more and more experienced with things You start internalizing things that you have to think about explicitly when you first start Just become part of you And it starts when you're a baby when you're a baby you learn to move you learn to talk You learn to listen you learn to speak you learn to hear and all of these things Become tacit they become inside your head. You're not aware of doing them But you still know that they're there and as you get more and more experience you build up layer after layer after layer of This tacit knowledge. So really it's The tacit knowledge is pretty much the majority of the knowledge you have and it's this kind of big Untapped mind of things that you know and so the talk was really saying that it's important to Recognize that the tacit knowledge is really the driver of all your knowledge and you should work to develop that tacit knowledge Right and then after you've developed it you should learn to trust it So you gave an example with language just to give a kind of clear understanding what that means so when you first start learning Language you first off by listening to sounds and and There's no point in even starting to think about the words and phrases until you start hearing the sounds I was in Holland for example and for the first couple of months there. It was just gibberish I couldn't I couldn't separate out syllables. I couldn't hear words and then gradually without working on it Just your brain learns to let that to hear and you start breaking those sounds down and then after a while you start hearing the words But even then when you just hear words, it's too fast I mean if you sit there and say that word means hello this word means cat this means dog It's it's too slow so you have to develop the next level down of being able to that Automatically in your head associate, whatever it is you as long as there's dog, you know, this is the thing that it means And so that kind of building of layers of tacit knowledge is is what happens every time you do something every time you Learn to the language you learn to drive you learn to do program and right obviously you cannot have a Conversation like the one we're having if you have to translate every word From your native language to English right right exactly. So how does this relate to programming? well, it relates to programming because programming is one of the most complicated things that we do and You have to be able to to program to some extent on autopilot Because you need a higher level looking at what you're doing as you're programming You have to say is what I'm doing correct or could be doing this better You have to be kind of monitoring yourself and they're even bigger layers of that you have to keep monitoring the monitor if you don't have me right to keep building these layers up of Capability so that you can do things without thinking about them right in the same way that for example You probably when you type if you have if you type a word you're not sitting there and say okay I now move this finger move this finger move this finger that would be a very painful way to program Well, you move that one up and you say okay, I need to type an assignment statement You don't sit there and say a equals one And then you move up to that. I need to type a function. I need to think about the class structure I need to think about patterns. I need to think about you know the overall structure of the code Why should the Curly's be well, that's that's a very yeah, let's not go there That's a very low level one compared to right even you know big architectural things to some extent become second nature Is this what the design pattern does a math actually yeah, it is in a way design patterns are an Attempt to crystallize some of that tacit knowledge to write it down so that other people can still share it Which is why they are both good and bad Because tacit knowledge really is only earned through experience and if you don't experience it If you just read about it second hand, you don't really know how to use it It's not really part of your your vocabulary if you're right, so design patterns were a great start But what happens is that people look at them not as Tacit knowledge they look at them as recipes right and so they sit there They have to write some code and they go I need three decorators and a you know singleton or whatever Rather than I should have this kind of just automatic. Oh, I'm gonna code it this way So that means that if you and I were working together about being Experienced programmers and I said I think we need them and after here then that would then you would automatically know what to do See that falls into the pattern of jargon It's good. It's good right because it it's jargon is a way of expressing tacit knowledge So that any two experts in any field or just people that know each other You know married couples can talk back and forth and express a lot of this low-level knowledge Down deep knowledge, which is simple words or even just expressions Yeah, you know and so if you watch a married couple communicate It could be just single syllables going back and forth which communicate a whole lot or her experience pair programming Oh pair programming exactly right. It's I mean that's the whole point is that when you start getting teams that share experience Then they can start using that jargon to to express things because they have that experience to use it All right, so how do you so what you're saying is that if you're struggling with? The syntax for how to write a class, let's say it's very hard to start thinking about the problem that you're solving absolutely right and How do you get to a higher level of comfort with writing those? Structures the same way you get to Carnegie Hall practice practice practice I mean honestly the only way you get you build that knowledge is through through through experience and experience does not have to be you know a dramatically complicated rich thing to do. It's just a question of doing it and doing it over and It's very variety isn't right so Variety repetition it's it's a question. I think of of Just getting in there and doing it If you're too critical about what you're doing, then it slows you down You mentioned the tennis balls. Oh, that's the inner tennis. Yes inner tennis. That was a thing back in the 70s where a Man called Galloway trained people to to play tennis by just basically hitting the ball over and over again and describing where the ball went and After a while their brains learned That if they do a certain thing the ball will go in a certain place, but it was not conscious They could not tell you what they were doing. They were just learning where the ball went So they were not aiming they weren't aiming They were just hitting the ball over the net and describing where it landed and then after so many hundred repetitions of this He could then say to them okay now put the ball here and they'll be able to land it there every time because at that point Their brain had learned You know whatever factors it was that caused the ball to go to a certain place So what's the programmer's equivalent of the tennis ball? Probably the failing test I would say or something similar I think that I personally for example, I love practicing programming Which means doing programming where it doesn't really matter. So I get the pressures off. I can just play an experiment I make mistakes and Sometimes deliberately, but always looking to say okay, what am I learning here? How's this taking me? so for example the last few weeks I've been playing around with the lixar, which is a functional programming language and I've been experimenting with some of my codecarta writing them in the lixar And in particular, I've been writing something fairly large for a carter, which is a mockdown puzzle Yeah, so to convert text to HTML exactly right exactly and that's big enough and complex enough that you get to try new things and I've probably now torn that down and put it back together again five times Oh, and each time it's better But also each time I get this these interesting interesting insights into different ways of programming And I've probably learned more in the last two weeks than I have for the last two years Just by doing this particular thing over and over and over again. I've had similar experiences with codecartas and Doing the same problem over and over again and the knowledge transfers is the That is the interesting thing because I think again your brain is not just looking at what you're doing Your brain is kind of this your brain is fundamentally a massive Parallel pattern matching machine right? That's what it does best And so once you can see the patterns and what you're doing it can make suggestions to you that You never even thought of that never were like Exposed made explicit to you and I think that's what expertise is expertise is the ability to make make these connections At such a fast and unconscious level that they just you know the answer just comes out You know the classic phrase of the expert is it's obvious. Yes Which basically means I have no idea how I got there, but I think it's right And I think that's that's what we're aiming for I think we're aiming to get that kind of expertise You you have it in many other disciplines from like Airline pilots for example have to have it Even just driving a car to the shops you have to have it You have to have this ability to to drive without thinking too much about it And you have to do the same with programming And you're you mentioned during your talk that you're actually a licensed pilot I am I am and Would you say that piloting or programming is most requires the most practice and knowledge? I think that I Would say that probably piloting requires the most practice if not the most knowledge You certainly in order to become a competent pilot, and I am not a competent pilot You need at least a thousand hours of experience and to become like a commercial Startpilot you'd need ten twelve thousand hours of experience, which is a lot particularly considering you pay for every hour typically and Good pilots have to keep flying if you stop flying for a while you get rusty so what about programming Good programmers have to keep programming as well But I think you can get by a bit the consequences of getting it wrong in programming are typically a lot less And I guess that's where our opportunity to practice comes in as well exactly because we yeah We can do things that are a lot safer than it is if you're a pilot you practice So I think it's an it's it's almost we have to practice I mean it's so easy to do it, and it's so beneficial to do it We just have to get out there and do it So what's the first step that someone should take to get to start to practice With a purpose okay, I think the idea is you make some time you say to yourself Maybe this week I will do half an hour, you know at a certain time each day And I will maybe do the same problem over and over again each day once each day I will do Corey's game of life or or a minesweeper or you know, whatever it might be something Self-contained that you can actually look at does not to finish it but just start it but then to make it worthwhile Various so you're not sitting there trying to create the perfect game. In fact, you're actually trying to make mistakes But just do it and what you'll find is as you do that your Fluency will start to increase I think all of these problems that you describe are are well described as how to attack them on the internet It's a good place to start googling. Yeah, although you don't necessarily want to do that. I mean the problem Oh the problem. Yes. Yes, definitely. Definitely the problems definitely and make up your own I mean it could be a simple as I need to write a simple shopping list application All right, it's not the world is not going to end if I get this wrong So maybe I'll do it a few times and just experiment or maybe I'll do it and then I'll think to myself Oh, you know, that's a different way of doing I'll do it again. I'll do it again. I'll do it again So, uh, let's go to the lightning round the lightning round. Yes So I have a few questions and the rules of the lightning round is that you want to answer these questions as quickly as possible And when you answer them, you will ring the bell Oh, that didn't ring well Oh, that's as good as we get we'll fix it in post Yes, all right. So the my first question, uh, what is your favorite programming language? C Very good. Um, what is the most important Value from let's say the agile manifesto the most important value that people should observe People and what's the drafus model of skill acquisition? It is a Model of uh, five levels with through which everybody goes from doing from a novice to an expert And I can go for about three hours on that. So you really don't want that. This is a lightning round Yes, uh, do you do test room development for new program? No Should other people do test room development when they program? Uh, maybe Thank you, Dave. Thank you