Programming Throwdown - A Journey to Programming Mastery

Episode Date: September 14, 2019

Every interview we do is such an exciting and unique experience. Patrick and I had great pleasure in hosting Andy and Dave, authors of "The Pragmatic Programmer". We pick their brains on a va...riety of topics including rapid prototyping, the 10x engineer, tech leadership, and how to get your first coding job. Their new book, "The Pragmatic Programmer: 20th Anniversary Edition" comes out today! I hope that this interview inspires you all to grab their new book; it will definitely be a book-of-the-show for me. Show notes: https://www.programmingthrowdown.com/2019/09/episode-93-journey-to-programming.html ★ Support this podcast on Patreon ★

Transcript
Discussion (0)
Starting point is 00:00:00 programming throwdown episode 93 journey to programming mastery take it away jason i have andy and dave tech enthusiasts here to talk about their book, The Pragmatic Programmer. And this is a new edition of a book that's been around for a while, correct? 20 years. This is the 20th anniversary edition. Totally awesome. So why don't you go into sort of your background and what sort of inspired you to write the original book and then maybe what inspired you to revisit some of the things you talked about 20 years ago and we only have an hour right yeah that's true that's exactly you know dave and i could certainly give the the long
Starting point is 00:00:57 answer to that question and we'd be here all day so we'll we'll try and give the uh the quick the quick version because i think a lot of people have heard this by now, too, as we've been talking about the new 20th anniversary edition. But this whole book came out. We really didn't intend to write a book. It was kind of an accidental book. We really just wanted to write a white paper for our clients at the time. So Dave and I were out doing consulting and noticing things people were doing out in the world, out in the workplace that, wow, that really hurts. That's painful. You know, there's a better way. Have you tried thinking of it this way? Have you tried experimenting with
Starting point is 00:01:35 this? Have you tried using this technique? So what does painful mean? Is it painful in the sense that you paint yourself into a corner and now you have to rewrite everything? What would pain be when you're doing software development? Well, I think you have to think back to the 90s. And I know most of your audience probably wasn't born then. But the feeling in software in the 90s was one of really quiet desperation. Nothing seemed to be working. And the quality of software that was being shipped
Starting point is 00:02:07 was honestly pretty much abysmal. And that was assuming it got shipped in the first place. The majority of software projects were canceled before they even got to the end. And a lot of the reason for that is that people were kind of floundering. They were taking on things without really knowing what they were doing. And then they were following some pretty random practices. So we were finding clients who were shipping software out to their clients without testing it, or who were not keeping their source code in version control. And so as a result, it it was like whose machine did we use last when it comes to like trying to reproduce a bug um or we actually had one client who had i think it was like 15 developers and each one of them we actually asked them all to build their product and no two builds were the
Starting point is 00:02:58 same um you know this is kind of sad but but i've heard recent stories that sound just like this. Oh, yeah. It hasn't gone away. But I've got to tell you, I mean, compared to 25 years ago, we're in a much, much better state. We really are. That's good. So, yeah, we were working with clients who were in that kind of – I mean, typically you don't call a consultant in when everything is going well, right? So we were working with clients who were in that situation.
Starting point is 00:03:30 And we always found ourselves saying exactly the same fundamental things. You know, testing, version control, automation, talking to the customer. Taking small bites, not trying to take on too much at once just try this one little thing then try this next one little thing yep and that also means learning from each of those little things oh absolutely yeah it's no point in feedback unless you actually listen to it so uh we sort of we jotted notes down and it grew a little bit we got to i don't know 50 pages or so of notes. And the idea came through,
Starting point is 00:04:09 you know, we should probably write a book because this material is, you know, it's common sense, but it's not commonly used. So how do you go about, or how did you go about, because that's a completely different discipline. You have all of these notes, but how did you go about finding a publisher and things like that well so that's a that's a funny story um they were a little bit more than
Starting point is 00:04:32 notes even in the earliest version i mean we had kind of notes but we had started you know writing them up in kind of a uh you know prototypical tip format like, here's an idea. Here's how you should do this. Here's this other idea. So we kind of had, you know, a loose structure to it right out of the gate. And somebody recommended, I think it was my, one of my brother-in-laws at the time said, because we knew nothing about writing books. We had, we didn't know how to proceed with that at all. But somebody suggested, you know, you go to your bookshelf and see the books that you like, you know, what is, what's the publisher that you are attracted to for professional titles in your, you know, in your area. And so Dave and I looked dutifully, and we both had a significant collection of Addison Wesley titles. They were pretty much,
Starting point is 00:05:22 you know, the premier source for, premier source for computer science software development titles at the time. So we kind of randomly looked up the contact person and sent them an email and said, hey, we got this idea for a book. And they said, sounds great. We'll sign you up. That's awesome. I've heard so many stories like that. I think, I mean, one of the famous ones is I think Steve Jobs emailed the CEO of HP and asked for a computer or an internship or something like that. But yeah, it's fascinating that that really worked out well. You just you did some research, found the right person. And that's awesome. Yeah.
Starting point is 00:06:00 And then it took us two man years, two and a half man years worth of work. No, no, no, no. It was more than that. It was well more than that because it was actually almost two elapsed years. That's true. It was almost two calendar years of both of us working just about full time, not out consulting, not doing any paying gigs, just sitting there concentrating on, okay, is there a better way that we could explain this? Could we make this clearer?
Starting point is 00:06:31 Is there a better word we could use here? And literally, Dave and I would argue over individual words to try to get our point across as best as we could. It's amazing how often Andy was wrong. Amazing what memory does to you over time. So, yeah, I wonder if you had some metrics from 20 years ago. Maybe you could see, you know, maybe the coin is flipped now on the other side or something. Maybe he was right the whole time. It's interesting because when we started this rewrite project, both Dave and I
Starting point is 00:07:07 went away and said, okay, let's just make a list of what you think are the most important changes over the last 20 years. What are the topics that we have to revisit? What do we have to scrap? What do we need to introduce that wasn't an issue 20 years ago. So we each went off separately and made these lists and came back and put them together. And we were within probably 80% of what we had each come up with was exactly the same. So we were very much on the same pages. Yeah, this is a problem now. It wasn't a problem then. This was a good idea. We don't need to talk about that now, whatever it was. So we really had a great starting point to go through and begin to revise the text. Yeah, I definitely, I want to take a bookmark on that, but I think let's go into basically what is a programmatic programmer? What should people expect when they open this book?
Starting point is 00:08:01 They should expect to get better at programming. All right. So what does that mean? Okay. So the thing is that programming is something that you have to do consciously. And a lot of people fall into programming somehow and it becomes a job and they do their work and they go home and it kind of like carries them along. And it's one of those industries where you can be carried along. But if that's all you do, you're never going to, A, you're never going to really enjoy it. And you're probably never going to progress as far as you could have progressed in terms of satisfaction in the job. So what we are recommending is to be more conscious of what you do as you're programming with a view to becoming
Starting point is 00:08:48 a better programmer. And so we have a whole bunch of separate topics that we talk about. Some of them are people topics, some of them are team topics, and some of them are technical topics. And there's probably about a fairly even division between those. And with each of them, what we try to do is to say, not you should do this, but instead we list alternatives and we suggest that you should try things. And with everything we suggest, what we're saying is we aren't in your environment. We don't know what you're doing. We don't know how you're doing. We don't know how you're doing
Starting point is 00:09:25 it. But our suggestion is you might want to think about this, this, and this. And as you try them, gather feedback and work out whether or not that's improving or making things worse. And that's the pragmatic part of it because pragmatic fundamentally means doing what works. And so we have a list of suggestions and a list of, I guess, things from our experience. And then we say to people, you know, your mileage may vary, see if it works for you. Got it. But also your mileage may vary, but also you've firsthand, you know, tried a lot of these different strategies and policies in your consulting work, and you've sort of picked and chosen the best approaches? Well, no. I say yes, yes and no. Up until you said that last phrase,
Starting point is 00:10:13 then I would say, yeah. I mean, these are all things that we've done because I really, really dislike consultants, if you like, who go around telling people how to do things that they themselves can't do. I have a story I tell. I was on a bus going to a conference in India from the airport, and I was sitting in the seat behind two fairly well-known industry experts on agile stuff. And they were talking, and one of them asked the other, when was the last time you programmed? And the other guy said, oh, I think it's about 15 years ago or so. You know, the other guy said, oh yeah, me too. And it's like, these are people that are going out and telling programmers every day how to program better and they couldn't code their
Starting point is 00:11:00 way out of a paper bag. So, you know, that's really bad. But when you say best, we don't actually believe that there is a best practice. We don't believe there is a best way of doing things because best is always going to be contextual. And so, you know, what's best for my environment could be totally wrong. If I'm making pacemakers and you're making video games, then I very much hope that our two development methodologies are very, very different. Yeah. It's similar to, you know, my PhD was on playing computer Go, having computers play Go. And there isn't, I mean, technically there's a perfect game of Go, but it can't be found and it's not very interesting. But what's really interesting is starting from random or starting from a not very good player and being able to get better and being able to iterate.
Starting point is 00:11:53 And while you're iterating, continue to move in the right direction. I just feel like this is similar. Yeah, that's what it's about because I think one of the kind of foundational things that we misapprehend about the industry is just how dynamic everything is. You know, people tend to take a very static view of, you know, like you said, the best practice. Okay, I've learned this, now this is the best way to do it, this is what I'm going to do from here on out. That's a very static viewpoint and it's wrong because as soon as you say best practice, you're missing half the statement. Best for who? Under what circumstances? In what context? What are the parameters around that? We don't get around
Starting point is 00:12:35 that. We get this kind of static view of, oh, I'll just do this one thing or I'll just learn this one programming language. When the book first came out, one of the tips in it was to help keep your knowledge up and to keep learning and to appreciate different ways of solving problems, we advocated you should learn a new programming language every year. Just, you know, something random. Learn a new, you don't have to use it in your job or a project, but just learn a new language and see how they approach different ways of solving these sort of common problems, different techniques. And we had people come up and say, well, that's a great idea, I love that, but what do you do after the first three years?
Starting point is 00:13:15 Because there's only, I mean, the only programming languages are pick some Java, PHP, Python, whatever, pick some Java, PHP, Python, whatever, pick some subset. It's like there's hundreds and hundreds of, some of which are really quite bizarre and quite interesting. But even the, what's the TiOB, TiOB index there, the top 50 on that are pretty interesting. Actually, no, I would disagree. I mean, I agree up to the TiOB interest index thing
Starting point is 00:13:44 because what that captures is what's current in fact not even what's current it's what's was hot over the last six months and that is basically if you're doing that then what you're doing is you're aiming at a wave that's already crested well yeah it's a trailing indicator, but it's something. Yeah, when we... I mean, coming back to languages, it's not the language that's important. And, I mean, the point that we both make a lot is that anybody who says,
Starting point is 00:14:15 I'm a Java programmer, is actually saying I'm an idiot. Because you're not a Java programmer or a PHP programmer or a C programmer or a JavaScript. Or, even worse nowadays, programmer or a c programmer or a javascript or even worse nowadays i'm a react programmer right um it's like saying i'm a table carpenter right i just make tables that's it oh i'm a table carpenter slash saw division right yeah right i'm a hammerer yeah yeah exactly and so you're not you're not, you're a programmer. And so what learning languages
Starting point is 00:14:46 does, if you choose the right languages, is give you more depth in your craft. You get to experience different ways of thinking about a problem. So for example, right now I got talked into doing a, I'm doing a class down at SMU here in Dallas. So I'm teaching juniors and seniors. The class is called Programming Languages. And so I'm taking that as an opportunity to basically blow their minds by using languages from the 60s and 70s and showing them that, in fact, those languages were actually as capable, if not more capable, than 90% of the common languages today. Yep. You know, and it makes them think differently.
Starting point is 00:15:32 You know, so I've taught them Snowball, and that kind of blew their minds. This week, in fact, in about three hours' time, I'm going to teach them Prologue. Oh, yes. And I can pretty much guarantee that that is going to open a few eyes, you know. And then what you can do is you can then look forward and look at languages that have, for example, pattern matching today or languages that reify their parameters and say, oh, I see where that came from now. You know? You can look at comprehensions and say, ah, okay,
Starting point is 00:15:59 I understand now why a comprehension is useful. So I think there's a lot of history and a lot of depth that we ignore. I mean, if you're an English major, then you don't spend your time writing, you spend your time reading. I mean, yeah, you write, but I mean, 90% of what you do is studying great works and not so great works and learning to be critical. Whereas when you're a developer, you spend no time reading the history and you spend no time exploring the depth. There is nobody talking about the Jane Austens of programming. Well, and you know why that is? Because
Starting point is 00:16:36 most of the works that we see are not Jane Austen. They're more along the lines of, it was a dark and stormy night. But you know what? Suddenly, a shot rang out. Yeah. But even back then, that was 90% of the work, right? And what happens is history is a really, really good filter. And so if you've heard of somebody from the 19th century or the 18th century, then the chances are you've heard about them because they are better. They've risen to the top of that foam of noise. And the same thing is true for programming languages. I mean, Snowball and Prologue and Algol 60 and all those kind of things weren't the only programming languages
Starting point is 00:17:15 back then, but they're the ones whose names have lasted because they actually have something to teach us. Yeah. I think one of the interesting things about programming is it's a science and an art, right? So if you look at, for example, science, people aren't going back to, you know, eighth century theories on the universe and on physics because science just kind of marches forward and obfuscates things as it goes. But art is a bit more timeless
Starting point is 00:17:44 and people still refer to the best when they say the best poet they still refer to shakespeare who is you know so many centuries ago i don't know i mean so in this case you have both you have a science and an art but math see i got i got two things there first of all mathematicians do go back i mean people are still arguing about euclid's fifth postulate, right? And- Yeah, that's fair. That's fair. People are finding uses for Diophantine equations in quantum physics. There's all these kind of weird things that if you don't have the knowledge of the past, you don't know if you're missing
Starting point is 00:18:16 something. The second thing is, it always worries me when people say, is programming engineering? Is programming science? Is programming art? Because nobody ever says, is math basket making? It's math. It's mathematics is what it is. Why can't programming be what it is? Well, I think the reason for that is, and I agree, it is a problem because people are always trying to draw some kind of metaphor and say, oh, programming is, it is engineering, or it is just like building a house, or it is just like, you know, whatever, fill in the popular metaphor of the day. And it's none of these things. It has aspects of many of these things.
Starting point is 00:19:02 But, you know, fundamentally, if you think about it, the essential problem, I think, is that it's all, it is about thinking. It's about how you think of a problem, how you visualize it. You know, this whole idea of how do you abstract a problem and what parts you use and how are these parts going to cooperate to solve the problem, there's no physics that guides that. There's no chemistry behind that. There's no laws of gravity. There's nothing to sort of bound us in and say, well, you know, clearly it has to be this way or it's not going to work. You can do it any old half-assed way. You know, you can do it very procedurally in PHP. You can do it in a very OO style and in a real OO language like Smalltalk. You could do a functional style. And none of these have any kind of physical constraint or physical analog. It's literally just how you think about it. becomes really your time and your mental capacity of yourself and your team and how that evolves as the project evolves.
Starting point is 00:20:09 As the project evolves, does it get more and more just mentally demanding to the point where to change one line, you have to consult five people or have you sort of factorized it and has it become more elegant? But the constraint always seems to be a constraint of the mind and a constraint of the developer time it is it's definitely a constraint of the mind because one thing that happens the longer you're on a project and the more you're working with it the more you're learning the more you're realizing what you should have done in the first place right you, it's like this graph that starts off and at the very beginning of the project, you know, zero about it, you know,
Starting point is 00:20:49 absolutely nothing. Maybe there's a project title, maybe there's a name, you know, who else has been hired for the team, but you know, almost nothing about it. You know, the most about a project, about how it really should work and how it should have been done after you've shipped it, right? When it's all said and done, it's like, oh, okay, now I know enough about it. Now I realize, you know, maybe what we should have done better. So, okay, great. That's sort of how the real world works. Well, what can we learn from that? We can say that, well, you'd like to make your most critical decisions as late in the process as possible. Because the longer you wait, the more you actually know about it, the more you've learned, the more you can make an educated
Starting point is 00:21:30 decision about what you're doing. So we try to defer decision making as long as possible, because up front, who knows? We have no idea. We haven't done it yet. And also try not to make critical decisions. Yeah, ever. Yeah, a decision that's reversible is not critical. A decision that's small, so you waste a week and not a year, is not critical. So if you can try to make a series of smaller, reversible decisions, then a lot of that risk goes away. One thing I'd say is you talked about, you know, it's a failure of the mind. I'm not a hundred percent convinced that that's necessarily true because that implies that an infinitely smart developer would be able to write perfect code. And that's not true because
Starting point is 00:22:16 no one could. I think it's more, it's a failure of the spirit. It's a failure of courage. Because most developers actually know in their heart that they're hacking. If they're hacking, they know that they could be doing this better, but they're not willing to take a risk and to push back. So bootstrapping on that, this is something that's come up a lot personally.
Starting point is 00:22:44 And I have pretty strong opinions on this, but I'd love to hear what you guys think. How do you deal with, you know, there's a lot of uncertainty when you're building something. And, you know, my philosophy is when there's a lot of uncertainty, you sort of compensate for that by trying to iterate quickly, aka hacking. But then you always remember that you're accumulating this debt and you go back once you have the certainty, maybe you have the product market fit for your app, then you go back and rewrite the whole thing. And you do it knowing that that was the price that you were going to pay. Other people feel that you should never rewrite anything. You should have good standards in place to where you don't have to do that. What's your opinion on that whole tradeoff?
Starting point is 00:23:30 I think that kind of conflates a couple different issues there. You can certainly turn out something very quickly without hacking or having something low quality. You can very deliberately put something together that is a prototype, that you know is a prototype and its purpose is for learning. That's not a waste of time, that's not a waste of engineering, and that doesn't even have to be in software. You can do a prototype with wireframe diagrams for a website. You can use post-it notes on a whiteboard. The idea is to get in front of the user, the sponsor, somebody who can comment on this and learn what it is you're trying to explore.
Starting point is 00:24:12 So you don't have to write a crappy version of the product to do that, to get that fit, to get that information. You can very deliberately say, okay, well, we don't really know how the user is going to handle this or what they'll think about this. So here's a prototype. Let's try this. And then you can go in, you know, sort of armed with full engineering and do the real version. But you can kind of have both. You don't have to write crappy code just to get feedback. Got it.
Starting point is 00:24:38 That makes sense. The other thing is that prototyping is very different from end-to-end developing. In the book, what we do is we differentiate between something we call prototyping and something we call tracer bullet development. So prototyping is when you're unsure of a particular thing. And it could be a UI element. It could be an algorithm. It could be anything. And so the idea of the prototype is to maximize the amount you learn.
Starting point is 00:25:12 And so what you do when you start is you set an objective to say, you know, I need to know, is this algorithm twice as fast as that one or whatever it might be? And you basically ignore all of the niceties of programming just to answer that one particular question, knowing that when you finished, and this is the part that takes an incredible amount of discipline, when you finished, you record your results, and then you throw the code away because it's a prototype. Yep, yep. And that's very hard to convince the stakeholders, but that's something that a good tech lead should do up front.
Starting point is 00:25:40 Well, you can also make it clear that this is not shippable, especially if you're just doing PDF wireframes of a site. Clearly, you can't ship that. That's not usable. Think back to the old days of Detroit when they used to model cars, right? And if they were doing wind tunnel tests, they'd probably build a car out of plywood and clay, and they could stick it in a wind tunnel and see how it behaved.
Starting point is 00:26:03 No one would want to take a plywood and clay car out on I-95. So, you know, clearly that's a prototype and that's what we're aiming for when we do prototypes. However, the other side of that is sometimes you actually need a way of seeing how your whole development hangs together. So maybe you're using a new front-end technology you've not used before and a new backend web framework you haven't used before. And you need to know how that hangs together in your particular context. And for that, we recommend doing something different, which is to do an end-to-end thing extract, if you like, of your actual final application. And you don't worry about anything apart from getting the database
Starting point is 00:26:47 to talk to the back end, to talk to the front end, to talk to the user, whatever it might be. So there'll be no error checking. There'll be no anything apart from this, let's get a crack in this wall that's in our way. And you make that crack and you see if it's the right way of doing things and then you build from it and we call it tracer bullet because it's the same way that you know if you watch these old war movies when people are firing machine guns in the dark
Starting point is 00:27:14 they use you know every nth bullet will be a tracer bullet that glows and so they can see where their bullets are heading and that's exactly what we want to do in software development. Yeah, that makes a lot of sense. I think, yeah, as you kind of said, the biggest thing is when you have the wood and clay car, because with software, the wood and clay car, it's not as transparent, but that's where, as I said, a good tech lead will say,
Starting point is 00:27:44 no, this thing is being held together with uh with with clay you know we need to go back and rebuild it well that and that comes back to a matter of communications that we haven't really talked about yet but you know the biggest things that that you do as a software developer right the job is problem solving you know it's not coding java it's not coding javascript whatever it is problem solving. It's not coding Java, it's not coding JavaScript, whatever. It's problem solving. But in order to do that, there's an awful lot of communication going on. And it's not just talking to a user or interviewing a user, but it's communicating with the team,
Starting point is 00:28:18 communicating with the sponsors. It's about learning all the time from the system as it's evolving under your fingers, learning from the team as you work together and build this thing, learning from the users, because they may not know what they want before you show them something, right? There's that kind of like, you know, Heisenberg uncertainty principle with users. As soon as you put software in front of them, they realize what they really wanted was something else. So, you know, this is all, again, it's very dynamic, very ongoing process where you're communicating, you're learning, and you're solving problems.
Starting point is 00:28:52 That's what the job sort of comes down to, I think. Yeah, that makes sense. Let's jump to something else. What about another sort of, I'm going to go through basically a lot of the great debates that I've seen over the years and get your take on it. And I feel like a lot of them will relate to the book, but feel free to tell me it doesn't. But how do you handle
Starting point is 00:29:10 interviewing? We have this great debate where what we do is we bring candidates in, we ask them to invert a binary tree, solve some NP complete problem that has some trick to it that makes it polynomial. And then they never have to use those tricks ever again. And so you end up with almost this secret language. You have to come into the company, do the secret handshake that shows that you have this algorithmic genius from, in my case, I don't know, 10 years ago when we were in college. And then you get the job where you do nothing like that. How do you interview better? I think that's not, I mean, I think that approach in general is nonsense. Because again, you're not testing for competency
Starting point is 00:29:58 on what your actual expectation is. Because the job is not sitting around inverting binary trees or you know whatever the interview questions might be i think if if you can make the investment if you've you know identified a strong candidate and you want to see if they're if they have the the chops for it you invite them to sit with the team for a day and you watch them work and you see how do they get along with people how do they they work? What style do they have? At the end of that day, the team gets to decide whether they hire this person. Oh, interesting. Yeah, exactly. You know, ironically enough, we do exactly that for internal transfers where that's rather frictionless.
Starting point is 00:30:39 But at least in my experience, it's never been practical to do that with an external candidate. But yeah, I agree with you. For internal, that's definitely the way to go. I feel like that might be tough, right? I've done it for external. What makes it hard? Well, I mean, there's kind of a ramp up. Also, I guess it might be good as like a final round.
Starting point is 00:31:07 A lot of candidates might not want to come back for that day. I guess it depends on the job market and many other factors. If a candidate doesn't want to do that, then you don't want to hire them. It's true. Because a candidate who doesn't want to know what it's actually like to work there is like crazy if you ask me and you wouldn't want to hire that person that makes sense so but let's say uh you know i do think a lot of companies you know want to have the person in for one day um oh i guess so so if you could only have a person for one day that that would be the day they would just sit with you and then and you
Starting point is 00:31:44 would do that instead of in lieu of all the other interviews. I think you'd have one, maybe a 20-minute. Okay, so all the research I've read have said that you can pretty much sum up your feelings about a candidate in the first, it's ridiculously small, it's like two seconds or five seconds, right?
Starting point is 00:32:01 And they've had people actually record their opinion at those very, very small times and then go through the entire rest of the day. And it turns out their initial impression is typically the correct impression. So you have them come in and talk to whoever, you know, HR, someone in a suit, whoever it might be, just to weed out the clear whack jobs, the people who you wouldn't want to hire just because. And use your instinct, use your intuition. If you're good at this, then your intuition is the best judge, right? A programming test is irrelevant because you don't turn up at work
Starting point is 00:32:45 and have your boss say, okay, everybody in the team, here's an NP complete problem. You know, it's that way. So what's the point of doing that during recruiting? But instead, you know, what you do have to do every day is to turn up, learn new things, work with a team, not be a jerk, you know, and, you know, generally have hygiene. And to do that, the only way I can see to do that is you overcome the initial hurdle of being acceptable to HR, and then you actually work with the team. Yeah, that makes a lot of sense. You say there's a ramp up. Of course, there's a ramp up.
Starting point is 00:33:21 But the reality is the time of people that you want to hire, typically you want them to be able to ramp up. You want them to be able to go into an environment and learn what's needed to be learned. Now they're not going to be experts in the domain and the team is not going to throw them into the most mission critical part of it, but they are going to have to show that at the end of the morning, at least, they now know enough to be productive at some level so i mean i think this is fascinating i haven't thought about this you know this this method but to play a bit of devil's advocate um you know that um there might be some people who are sort of slow starters but sort of get in a good rhythm there might be other people who kind of have a lot of energy early on and then kind of get burnt out. Would you be sort of favoring that second group, which is not really a good thing? Well, it's a different axis because the, you know, solve the trivia question on the board isn't going to tell you that either. That's true. If anything, that favors the people who prepare to interview, which is probably worse. That's all it does. That's actually all it does. It's the people who found the cheat sheet on
Starting point is 00:34:28 YouTube or wherever. It said, okay, here's the questions. This is what Google asks, or this is what Netflix asks, or whoever. And here's the good responses. Here's the answers. So, okay, you can identify that they've got some initiative and some research capability that they bothered to look up the answer. But that's all it's going to tell you. Yep. I have a friend who has a pretty morbid view of this. His view is basically that you can't hire effectively. And so all you can do is fire effectively. And so there's some companies, I won't name any names, but there's some companies where that's kind of their strategy, where they're relatively loose on the hiring. But then there's a pretty, there's sort of some unwritten rules about, you know, firing what they consider the bottom 10% after a year or something like that.
Starting point is 00:35:19 Yeah, I've heard about that. And I think the problem with that is that a company has to be a safe place, I think, in order for a team to be effective. If a team is spending their whole time worrying about a set of performance numbers, then that's going to be their focus as opposed to solving the problem. I've heard about a company that does exactly as you described, that at the end of the year, the bottom 10% get culled, which technically is decimating, which is kind of fun. And I've heard of managers in those organizations that adjust their priorities in order simply to make something by the end of the year that gets them back up into whatever the performance goal is. And that totally destroys what the team was doing.
Starting point is 00:36:15 So, yeah, I think there's merit in that, and I think a company has to be able to reposition or fire people that just do not work for that company. But at the same time, I think this kind of like mechanical, you know, the slowest 10% we just, you know, leave behind is the wrong kind of motivation. It's the danger. It's the danger of metrics. And I mean, there's literally whole books written on how you can kill your company by slavishly following metrics. Because as Dave was indicating, any metric you set up, people will find a way to game it. And they will work only toward that metric and lose sight of the actual business value, the actual reason the organization is there. Just look at standardized testing in schools. Yeah. Yeah.
Starting point is 00:37:08 Teach to the test. Exactly. That's right. Yeah. I feel the same way that you do, Dave. I feel like my team is kind of my family. I wouldn't go and tell one of my children, well, you got an F on this test. Why don't you go down the road and live on that house over there? you're out of the family um uh and uh so yeah i totally agree um
Starting point is 00:37:31 so actually let me ask you this and there's this sort of idea of this you know pareto distribution when it comes to engineering talent like everyone says oh i want this mythical 10x engineer and so i'm going to hire like crazy fire like crazy do this this really bizarre thing because i'm trying to look for that needle and do you believe that that there is sort of that sort of Pareto distribution that some people are just you know coming in doing 10x there is but they're kind of looking at the wrong axis because the way that that's commonly interpreted is you're looking for the individual performer who can be 10x better than anyone else,
Starting point is 00:38:12 and that's actually not what you want because that person is probably a phenomenal jerk. Not easy to work with. For real, seriously. What you want is you want the performer who can come in and make the team work at a 10x level. So why is the 10x person a jerk? I mean, I know people like that, but just broadly speaking,
Starting point is 00:38:38 why are those people jerks? Because the slow people get in their way, right? They know that they could be coding really, really fast. But having to fill out all these stupid forms gets in their way. Having to, or even worse, having to answer all these ridiculous, stupid questions from people who could just look it up, right? That gets in their way. And quite often, there's actually a little hidden problem, and that is when someone gets to a certain level of expertise, the knowledge they have, okay, there's a whole bunch. I could go on for a long time about this, or Andy could better than I could.
Starting point is 00:39:14 But it's all to do with the fact that the real processing power in your brain is the non-conscious part of your brain. And the conscious part is just kind of like window dressing that lets you interact with the rest of the world. So when you're first starting, in a particular area, all of your processing is being done by your conscious brain because you're having to think about everything you do, like when you learn to drive or whatever it might be. And that means it's slow. And that's why when people first start to drive, they're very jerky and they're slow to respond and all that kind of stuff. But after a while, the information starts to get embedded in your non-conscious brain as tacit knowledge. And at that point, you start to operate more by reflex.
Starting point is 00:39:57 And that's why an experienced driver can drive without even thinking about it. Same is true for experts in any field. So if you become an expert programmer, then it's because you've put in the hours and you've used the feedback and you now make decisions, not at the conscious level, but down deep somewhere in the lizard brain. And as a result, when someone says, why did you do that? The answer is probably, I don't know. It was still a good decision, but it was made without conscious thought. And that is also very disruptive to a team because you have this person who can just basically do things and not know how or why, which means he can't tell or she can't teach the rest of the team what they're doing. But Andy's point is a really good one. If you want to make a team 10 times more effective, or sorry, if you want to get the equivalent of a 10 times increase on a person's performance, if you have a team of 10 people, all you have to do is bring
Starting point is 00:40:55 in a manager who can make each individual in that team twice as effective. And you can do that. So maybe just to recap, I think what you're saying is if you're off using your lizard brain, using your unconscious memory and writing code like crazy, and you're not taking it to the conscious space, that's what's giving you the 10x, but that's also just blowing up the people around you because ultimately you need to communicate and you need to be conscious to sort of work as a team. And also sometimes your unconscious is just going to do things because it has seen this situation in the past 17 times and it's going to say, okay, this is the way to do it. And it might not be appropriate the 18th time. Yeah. That's, that's the big risk because you know, you're the expert is relying on intuition and lots of the time they're right, but not necessarily, they could be very wrong and they could develop something now that no one else on the team can understand and can't fix.
Starting point is 00:42:01 Yeah. This is, you know, this is a bit of a tangible, bring it back, is I know somebody who was working in finance, and they were using rather old machine learning techniques. And I said, what about using some of these newer techniques? What they told me was that they tried it, and for six, seven months, they were making more money. But then the eighth month, they took a huge hit, just had some really bad decisions.
Starting point is 00:42:28 And there were decisions that were unexplainable. And so because of the lack of explanation, lack of interpretability, they ended up dropping back. They would rather make less money, but at least know what was going on. And so that's another example where, yeah, someone has to sort of really kind of communicate. Another thing is there's a lot of people who don't want to do good peer reviews.
Starting point is 00:42:53 And, you know, my sort of philosophy on that is if you read your code and the peer reviewer reads your code, right away that's twice as many people reading the code than writing it. So it's only going to multiply more than that. I would say, actually, if you read your code, that's an infinite number of more people reading it than typically happens. I don't know. No, seriously, how many developers stop and reread their day's output the next day?
Starting point is 00:43:22 Yeah, not very many. Not very many. Think how much, given that peer review or code review is the most effective way of finding bugs, just think how much more productive people would be if the first thing you did in the morning was get a cup of coffee, sit down, and
Starting point is 00:43:36 read yesterday's code. Yeah, that makes sense. With a clear head and fresh eyes. Fresh eyes can make all the difference. Yeah. What about, how do you sort of reward, you know you know this is getting more into the social part of it I guess maybe the corporate part of it but how do you serve reward good engineering you know like you could say that it rewards itself but then the problem is now assigning that reward becomes difficult right it's almost like the person who
Starting point is 00:44:01 manages the the nuclear power plant you know, it just becomes someone that doesn't really get thought of a lot. How do you sort of develop the right incentives and the right sort of structure to really reward people for taking that extra time to be conscientious? What do people want? What do people want? Yeah. See, I'm doing the consultant trick there. I'm taking your question. They want autonomy and mastery, Dave. Oh, thank you, Andy.
Starting point is 00:44:30 I mean, that's exactly right. I mean, if you want to give people motivation, you give them more of the stuff they enjoy, right? And you make it, you create an environment in which it's enjoyable to create cool stuff, good stuff, the stuff that you want created. And if that's the case, then you can reward people by giving them more of it. I think you have a bit of a tragedy of the commons where what people want is to sort of do things that have some impact. So maybe people want to use a new framework. Someone else wants to get more people to visit their website. And what happens is people might want to write good code,
Starting point is 00:45:16 but that want ends up becoming secondary to some of these other wants. Those motivations are all facing exactly 180 degrees away from where they should be right what people i believe what people really really want most people who go into software development do it because they want to produce something that other people can use they want to be useful right they want they want there's a thrill involved in shipping software and knowing that two people are using it, or in some cases, a hundred million people are using it. And you're making a difference. If you're a Twitter or a Facebook or whatever else, you are changing the world. People are organizing revolutions on your platform, right? People are organizing hate campaigns on your platform. Whatever it is, you're changing the world. And so people who are in those
Starting point is 00:46:10 environments should be given that feedback. They should get to know that, yes, you are making a difference in the users of your software's lives. Because once you know that, I can't think of anything more motivating than getting out there and helping out. You're in know that, I can't think of anything more motivated than getting out there and helping out. We are kind of like little godlike beings on this planet in that we're one of the few industries that can take nothing and create something from it. I mean, yeah, we use But it's sort of an opportunity cost. So piggybacking on that, someone can say, well, you know, I just wrote this this this prototype. I built it out of wood and clay assembly code and I can go and do the have the discipline to go and rewrite that. Or I have this new idea for changing the opinions or changing improving the lives of these hundred million people.
Starting point is 00:47:03 And I'm going to do that instead. And then a year later, the wood and clay thing falls apart, right? So yeah, Kent Beck, have you seen Kent Beck's talk on that? The three X's? No, but I'll add it to the show notes. Okay, because Kent Beck has a talk about his time at Facebook where he talks about the different cultures of the different parts of the organization.
Starting point is 00:47:26 And you have the people building the clay prototypes, right? And you have that high churn, high risk, high return kind of experimental side of it. And then you have at the other side of the curve, the we better not screw up because it will kill the business part of the company, right? And they have very different objectives, very different ways of managing it, very different ways of measuring success. And the interesting part is the curve that goes between the two of them and how things transition up and down that curve. And I think that that addresses what you're talking about. I think if you have a person or a team that really, really enjoys churning out ideas and are really, really bad at all of the polishing and everything else that takes place, that's
Starting point is 00:48:13 great. You have yourself a little factory of really cool ideas. Then you have on top of that people who can filter, who can do the A-B testing and all the other kind of stuff, at the end of the day say, you know what? That really was a really great idea. Let's make it look good or let's make it manageable or maintainable or whatever else you need to be able to do. So don't kill the team who's being imaginative just because they're using clay. And this goes back to what we talked about right at the very beginning.
Starting point is 00:48:45 It goes back to context, right? One size doesn't fit all. It's perfectly okay to have one team that is the imagination factory and one team that is the solid, reliable, engineering with Erlang never fail kind of, I mean, whatever. That's what's best for them is not best for the other. And that's as it should be, right? Every context is different.
Starting point is 00:49:10 That makes sense. So, I mean, with that in mind, yeah, you really need to have a good engineering discipline all the way up through the stack of, through the leadership in the organization, right? Because there has to be somebody high up that says, you know, we have all of these prototypes. Now we need, we need a team that is that has a different incentive to make sure that, that you know, that, that, we don't end up with just wood and clay when we're done that we have,
Starting point is 00:49:38 that we have the solid foundation as well. Well, unless your business is making wood and clay, in which case you're all set. Sure. Yeah. Fair enough. Fair enough. I mean, it depends, right? There are companies that do that. Like Xerox PARC, for example, right? Yep.
Starting point is 00:49:54 They spin off the skunk works and, you know, they spend their entire lives producing nothing more than prototypes. And then the rest of Xerox looks on and say, hey, we could productize that, you know, and do so. So let me ask you this. So what do you know, so someone who runs, let's say, you know, a lot of the people listen are, you know, fresh out of college or changing industries or things like that. And I remember when I first got into the software engineering industry, I kind of thought in my naivete, I thought tech leads were just people who didn't work as hard. And I thought managers were people who didn't do anything. And directors were people who posted on social media about the company.
Starting point is 00:50:41 That's obviously not true. But, you know, so we talked about one thing that, let's say, directors, maybe even vice presidents or CTOs have to do, which is sort of setting up teams with different incentives. What do you think, just more broadly, that tech leadership at a company does? They support their team. The point of a tech leader, I think, is to run ahead of the team just a little bit and sweep all the debris out of the way so the team can move smoothly and efficiently through to completion. It depends on what phase of a project you're in as to what that involves. At the very beginning, it could well be setting architectural overall directions. A good tech lead will act more as a referee than as a dictator when it comes to that. But then later on in the project, a tech lead will be running interference with management. We'll be making sure that the team is producing whatever artifacts are necessary and fighting back the requirement to produce artifacts that aren't necessary. Fundamentally, the tech lead is a servant of the team.
Starting point is 00:51:58 But notice, notice again, that's a very dynamic description. It changes over time. It's not a static, just do this one thing. You know, at this one point, the role changes depending on, you know, the life cycle of the project and even the organization. It's, you know, once again, it's a very dynamic approach. Yeah, that makes sense. What about somebody who wants to get into the industry? We get a lot of emails from people who, you know, they want to know, should I go back to college, get another four-year degree in some cases? Should I do this boot camp XYZ? Should I just go on GitHub and start cloning, you know, forking repos and learning that way?
Starting point is 00:52:42 You know, but ultimately the goal for most of the people who write in is to get a job, right? So with that as the goal, how could somebody, you know, get started if they didn't, you know, get a CS degree or they didn't go through that process? May I? So I think that there is a use for CS degrees, but that use is not preparing someone for a job in the industry. There is a theoretical side to computer science that you probably need to learn if you want to go into research and move the goalposts a bit further forward. For getting into the industry, I don't think you're particularly well served by a CS degree. I see people graduating CS degrees who have never written a unit test in their life. Oh, yeah, Probably the majority. Yeah. Who couldn't organize, you know,
Starting point is 00:53:48 who couldn't be part of a team to save their lives. So you hire someone like that, you know that they have the resolve to sit through four years and, you know, pass some tests, but you also know you're going to have to train them pretty much from scratch. I think a bootcamp is, if you're looking for people who you can actually employ, a bootcamp is a better bet. But I think you also, if you're just starting out and you go to a good bootcamp and you learn both programming and also project stuff, then I think you're way ahead
Starting point is 00:54:26 of the curve. The trick there is to realize that seven months does not count as experience or as, you know, it doesn't make you an experienced developer. And so once you graduate from a bootcamp, you get your job. That's fantastic. Don't forget that you now have to catch up with your colleagues who have a lot more experience in terms of a whole bunch of stuff, algorithms, languages, techniques, tools, all that kind of thing. And so your bootcamp is basically a way of bootstrapping you into the industry, but that only gets you so far and you have to keep learning after that. Well, and that's really the key right there. The chief ability you need to pick up, whether you do it on your own or from college or university or some other program, you need to
Starting point is 00:55:18 learn how to learn and how to do so fairly quickly, given the pace of our industry. So, you know, that's one of the advantages, I think, that getting any sort of degree, it doesn't have to be in computer science or information science or anything, but just the, you know, going through the process of getting a degree, you know, usually you'll at least pick up on your own if they don't explicitly teach you how to learn things.
Starting point is 00:55:43 You know, make yourself crib notes. Make yourself cheat sheets. Do whatever your technique is. And once you kind of have a feel for that, then the rest of it's much easier. Okay, here's a job you want, and they're using a language you've never used before. All right, well, let me go. Now let me go learn that. Let me go take a course on that or download some YouTube videos
Starting point is 00:56:03 or buy some books or whatever it might be. Because even once you've gone through that sort of that first hump and gone through the HR process to get you in the door for the first job, that doesn't mean the learning's over, right? You've literally just started. Now you've got to learn the domain and this framework that they're using and this other language that they're using that you didn't know about and on and on and on. So, you know, you really need to be prepared for the constant learning and the constant upkeep, kind of no matter where you start. That really is just the beginning. That makes sense. And I think it ties into the interviewing,
Starting point is 00:56:42 you know, discussion we had earlier where, you know where the sort of corollary to that is how do companies evaluate all of these different boot camps that don't have sort of this rubber stamp from, I guess, the government, whoever accredits the college accreditation board. board? And I think the answer is then that you have a better interview process so that if someone, if over time you learn that bootcamp XYZ is not really preparing people, you could learn that in the interview. Well, actually many bootcamps now will actually organize for their, typically the last iteration, whatever they call their kind of three or four week cycles, the one before the last will actually go out and work in industry. And they'll have like, you know, companies that are interested in evaluating people and also are prepared to like train them to some extent. And so that's actually a really good way of recruiting, right? So you volunteer, you know, you say to them,
Starting point is 00:57:46 I'm looking for whatever it might be, a Rails developer. And you go to the bootcamp and say, I'll take one of your Rails developers for three weeks and I'll give you a review at the end on how well they did. And you know what? If you like them, make them a job offer. Yeah, that makes sense. That makes sense.
Starting point is 00:58:02 This happens a lot with interns with interns so it's the equivalent of an internship where somebody is in their final year at university they spend a summer at company xyz and then they get a it becomes more frictionless to to get a full-time job there exactly yeah cool that makes sense what about um i had a topic on top of my mind. Oh yeah. What about working remotely? Um, does the book cover that or is that something that's kind of out of the purview of the book? I know there's a bunch of unique challenges there where you're sort of, you know, the only person in Kansas on your team. That's, that's not something we, we really speak to, um, by itself, but we've done an awful lot of it. Um, I haven't worked, I've not worked in an office for
Starting point is 00:58:47 25 years now or so. Okay. So, you know, that's, we're well acquainted with it, but we didn't, we didn't really address it specifically of, you know, here's the tips and the techniques. I mean, it kind of, it kind of falls under the purview of the other topics of good communication and, you know, those sorts of things. Yeah, that makes sense. Cool. Yeah, this, this is absolutely fascinating. I think, you know, we didn't do sort of this broad overview of the whole book, but I think actually, you know, anyone who sort of listens to this should be extremely inspired to go and read. This is a fascinating book. I'm about, I think, three chapters in.
Starting point is 00:59:29 My plan was to have read the whole thing. I said, oh, while I'm on paternity leave, taking care of this newborn, I'm going to have this book read by today. And that was a bad plan. I think by the end of the book, I'll realize, you know, how I actually messed that one up. Is this your first child? Second one. So. Oh, so you didn't learn the first time. No, that's right. Yeah. I didn't iterate fast enough there. Need to take a bigger, bigger step in the gradient. Well, well, the problem, the problem, of course, with a newborn is you start getting that sleep deprivation
Starting point is 01:00:02 hallucinations going on. So yeah, that's right. We'll give you a pass. We'll give you a pass on that. But that is an example of one of those irreversible decisions as well. Yeah, that's true. Definitely a critical decision. There's no going back. So is there a part of the book that you wanted to highlight? Oh, actually, we did want to talk about what's new.
Starting point is 01:00:23 So for people who have the 20th, who have the original version, what can they expect to learn that's different to the 20th anniversary version? Well, to some extent, really, it's a whole new book. We added, I think what we're saying, about a third new content, but there's changes literally on every page from the original, some small, some more major. But you have to consider that the world today of 2019, 2020 is really very much different from the world of 1999 or year 2000. So we tried to reflect that. You know, a lot of stuff changed in technology, a lot of stuff
Starting point is 01:01:07 changed in attitudes, how you approach certain things. So I, you know, of course, I would say, yes, go out and buy the new book. But and some people say, well, should I get that? Should I read that instead of the first one? And really, it's a it's a I think it's a different experience. I would say you don't need to go if you've never read it you don't need to go out and buy the very first one no i just got the new one but but it is it is not like you know a jack reacher book where you have to read them in order or something you know it's just yeah right it there's a lot of there's a lot of uh i guess let's come back to the original question you say say, you know, what would I learn from reading the book?
Starting point is 01:01:46 And the answer is really exactly what Andy and I learned over the last 20 years. Yeah, that makes sense. I mean, one thing that I think personally I've felt very – has changed a lot is open source. I mean, in 2000, there wasn't the kind of open source community that there is now and and some of these silicon valley companies like google um were just way way ahead maybe even a decade ahead of everybody else um now the open source um communities has gotten so big and now i mean most of the big companies are in the open source community so they're pushing it forward that i mean now it's a lot of looking at what's out there versus yeah in 2000 there wasn't that much out there well and it's funny
Starting point is 01:02:29 because yeah the net was still new there was no google we used alta vista we used lycos you know those were the search engines um and every time in the in the first edition of the book we would talk about the internet you know with a capital, because it was this new, you know, awesome thing. And so, yeah, we had to tone that down. It's like, oh, of course, just go grab this on the net. And, you know, little things like, you know, in the old days, we'd say, okay, if you wanted to learn this language, hey, this is great. There is an open source implementation of it. You can go and download it and do, you know, make, config, make, make, install, and play with it. And you don't need to do any of that nonsense now, right? You can go online and play in a REPL
Starting point is 01:03:09 in any language that you want. Yeah. Yeah. Yeah. It's just there. So yeah, there was a lot of that, those sorts of changes, you know, not having the build machine over in the corner, but being able to do a, you know, just push in your version control system and have a pipeline in the corner, but being able to do a, you know, just push in your version control system and have a pipeline in the cloud, do your continuous integration, build, test, you know, whatever it is. So yeah, there's definitely, I would classify that as sort of added almost attitudinal changes because it is a technical change, but it feels fundamentally different from having, you know, a build machine in the corner versus I'm just doing a commit in my version control and it's just happening. Yeah, there's a scalability or a scale-free nature to that.
Starting point is 01:03:52 I mean, we have one project I work on. Every time there's a commit on any branch where there's, I don't know, there's probably thousands of them or at least hundreds of them a day, it goes through and in the cloud does an integration test. That'd be totally impractical if you had to have the machines yourself by your desk. Sure. I think there's another side to it, though, and that is that the proliferation of open source has meant that choosing technologies has now become something of a nightmare. And many developers are faced with this.
Starting point is 01:04:24 It's the start of a project. What is the JavaScript framework this week? Yep, yep. And I think that in the face of this bounty, this like excess of opportunity, it takes a lot of discipline to say, I don't need to be using the latest and greatest. And the teams who are the most effective
Starting point is 01:04:46 are the ones that find something that works for them and obviously periodically review to make sure it is still working. But don't worry about the fads. Don't worry about this latest thing they read about on Stack Overflow or whatever. And just to keep thinking about the fundamentals. The fact that nowadays you can
Starting point is 01:05:06 put together a thousand node cloud computer system managed with a database and with an operating system and with compilers and with libraries and with everything else and not spend a cent apart from processor time. It's unbelievable. It's an incredible opportunity. And the trick to utilizing that, I think, is to be efficient and effective and really pretty intensely focused on what it is you're trying to do and not how you're trying to do it. Yep. I know personally, I get a lot of analysis paralysis when I start a new project, especially something in, let's say, web, where there's so many different technologies, and you could spend an entire day reading about React versus Angular, and people have probably a whole career based on writing about that. And what's even worse, I find, is that I'm in
Starting point is 01:06:01 the middle of a project, and it's not working. And there's this human reaction, which is, well, it can't be my fault, right? So it must be this framework. And it's really hard to resist that temptation to say, okay, I'm going to dump React and go to Vue and see what happens if I do that, you know? And I see a lot of people doing that. And I got to say, actually, I don't think that's a bad thing at a certain point. I mean, obviously, if you're far down the path and months and months into the project, maybe that's not such a great idea. But if it's early stages and you're prototyping and you're learning and you don't know, well, would Angular be best for this particular application? Or should I use Vue or should I use React or whatever today's latest entry is, you know, try something simple in each one. Try something
Starting point is 01:06:49 complicated in each one and, you know, give it a go. See what you learn from that. See which you think would be easier to maintain, which would be easier to, you know, to deal with. You know, too often, whatever we are faced with, whether it's an architectural decision or a design decision, we kind of go with whatever our first instinct is. Okay, well, here's a way to solve this. Let's do that. And that becomes the direction. So I'll leave you all with a challenge.
Starting point is 01:07:16 You know, when you're in that situation, think of at least three different ways you could do it. Think of three different frameworks. Think of three different algorithms. Think of three different frameworks. Think of three different algorithms. Think of three different approaches. And try as much of each one as you can and see what that tells you. See what you can learn from that. Yeah, that makes sense. I think also things are much more transferable than we believe. I think when we start out, we have this big fear of missing out. That if we don't do it and react then we'll get to some point we'll be totally
Starting point is 01:07:45 stuck and the reality is it never really works that way um you know most of the even if worst case you have to completely rewrite it in a different language that's going to be much much faster than yeah because because now you know what it's supposed to do and you know they call it software for a reason it is soft soft. You can change it. Oh, I thought it was because it was wearing. On that note. Cool. Well, this is amazing.
Starting point is 01:08:15 So if people want to, you know, get the book, where would they go? If they've read the book, how can they contact you folks? How does that part work so the ebook is available directly from us at pragprog.com which is short for pragmatic programmer you go to pragprog.com and that's our publishing business we've got hundreds of titles in print that other authors have written that we've published over the years. And you can get the 20th anniversary of the Pragmatic Programmer in PDF, Mobi, and EPUB format, all for one price, directly from pragprog.com. And then on September 19th, 2019, the hardback, we're going hardcover this time. Oh, really?
Starting point is 01:09:01 Yeah. Well, we figured so many people kind of complained that, you know, their books were getting all dog-eared from lending it out to folks and rereading it and reading it again and carting it around. You know, they were taking some heavy damage on the cover. So we figured, all right, we'd give it a fighting chance this go-round. So the 20th edition is a nice hardback, you know, suitable for stuffing in your backpack and kicking around the coffee table. Nice. And that'll be in all the sort of regular Dead Tree bookstores, Amazon, Barnes & Noble. If you've got a local bookstore, please patronize them.
Starting point is 01:09:37 We like to keep them in business. Cool. And how can people reach you and Dave if they want to talk to you folks? You can find us both on Twitter. Dave's at PragDave. I'm at PragmaticAndy. That's probably the best way to get a hold of us. Cool.
Starting point is 01:09:55 Cool. Thank you so much again for coming on the show. And yeah, everyone, so check out pragprog.com. And we'll put a link to that in the show notes. You can grab your copy of the book there or at your local bookstore. When does it, when does it hit bookstores? Uh, the, so September 19th is the official publication date. It'll be available on, uh, informit.com at least at that date. And I believe Amazon within a few days or a week after that. And then it sort of
Starting point is 01:10:25 diffuses through the ecosystem. So, you know, other places in the U.S. will have it within a week or so. Internationally, it might take a few weeks to get to your country. Cool. Cool. So for that for that for that boss you have who still wants people to invert a binary tree for the interview, you could give it to him for Christmas. It'll be there. Absolutely. Makes a great Christmas present christmas present all right cool thank you again for coming on the show thanks for having us the intro music is axo by biner pilot programming throwdown is distributed under a creative commons attrib Share Alike 2.0 license. You're free to share, copy, distribute, transmit the work, to remix, adapt the work,
Starting point is 01:11:17 but you must provide attribution to Patrick and I and share alike in kind.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.