Blog
Bio
The Technician
No Imperfections Noted
The Jeff and Casey Show
Jeff and Casey Time
Casey Muratori
Seattle, WA
Viewer Mail
Original air date: August 18th, 2014
Subscribe. If you’d like to have the latest episode of The Jeff and Casey Show delivered fresh to your computer every Monday, you can check out our list of RSS feeds and other subscription options here.
Transcript
Jeff:
Hey, everybody. Welcome to the Jeff & Casey Show.
Casey:
Hello, and welcome to the Jeff & Casey Show. Today on the Jeff & Casey Show, we are going to try to get through the letters that have been written to us.
Jeff:
Yes.
Casey:
Now, there’s a difference between letters and links.
Jeff:
Yeah.
Casey:
Sometimes people send in…
Jeff:
We’ll do links another day.
Casey:
Sometimes people send in links. Links, we can’t really do a speed round.
Jeff:
No.
Casey:
Because they… Often, we have to kind of go in-depth on those.
Jeff:
Right. We also don’t even know if we can do letters. This is… We may get through just one.
Casey:
[ What I was gonna say ] is letters, we can often do because there’s not as many of them.
Jeff:
Yes.
Casey:
So we may be able to get through the letter today. I don’t know if we will or not…
Jeff:
Yes.
Casey:
But we’re gonna start. We’re gonna try and trim it down. So we’re gonna try and do a Jeff & Casey Show where go… We cut right to the heart of the matter.
Jeff:
Right.
Casey:
Like [ Don Henley] says when he got the call today that he didn’t want to hear but he knew that it would come… That is kind of where we are at on the Jeff & Casey Show today. We're gonna start off with someone named Casey Brandt.
Jeff:
Okay.
Casey:
As usually, he didn’t send in how to pronounce his name but thankfully, his name is not too hard.
Jeff:
Yeah.
Casey:
So if it’s like Brondt, it’s fine. “Hi, Jeff & Casey. I've started listening to the podcast fairly recently and I'm enjoying it a lot so far. I haven't been through the entire backlog yet so apologies if what I'm about to ask is a question that you've already covered. I'm curious about what you consider to be a good programmer. That is, if you were to hire someone new to work at RAD or on a game with you, what kind of skills would you be looking for in that person. The second part of the question is do you have any advice for someone who would like to try to move towards that definition of good programmer. The reason I'm curious about this is that I've been making web apps with high level interpretive languages in a world where “fast enough” means the [ HTTP ] call returns within a couple of seconds for a few years now. And I want to start learning the concepts behind coding the way you need to for games and high performance tools. I started working on a little [ side project ] game. And so far, it’s going okay but I can already tell that the way I usually approach coding is not going to hold up once I get a few more things on the screen. I have a pretty clear picture of what I consider a good programmer in the problem domain I am most familiar with. But I know that picture is totally different in your world and I’m hoping that you guys can help me broaden my horizons. Thanks for the great show. Casey Brandt.”
Jeff:
Okay.
Casey:
Got it?
Jeff:
Mhmm…
Casey:
You want to start?
Jeff:
Well, I would say there is this general concept first that, like, there are magically good programmers in the world that are just, like… Know something that you don’t know…
Casey:
Okay.
Jeff:
That if you know that secret, you’ll be a good programmer.
Casey:
Okay.
Jeff:
Really, the biggest difference between programmers who get a lot of stuff done and who are all that are just people who’ve written a lot of code. And they’ve done it wrong and they’ve written it again in a better way. And they have experience with what they’re about to do. Anybody that is writing something brand new with absolutely nowhere to go from, their instincts are gonna help. And certainly, what they’ve learned along the way is going to help. But it’s gonna be kind of shitty the first time you write it. It just always is. You might get lucky. So really, the way to… The people who are good programmers in the world are the people that have written a lot of fucking code. And, like, hey, they really wrote a good renderer, it probably means they wrote 3 or 4 shitty renderers before. So I would just say if you want to become a good programmer, do a lot of programming.
Casey:
Yeah.
Jeff:
Easiest way… And not foo-foo like, “Alright, well, I kinda took this thing and kinda iterated a whole bunch on one small thing.” You’ve just gotta write a lot of code.
Casey:
So, I think that’s absolutely correct. Like, I would say the number 1 thing is you have to write a ton of code.
Jeff:
Yeah.
Casey:
The biggest difference I see between programmers who get stuff done and programmers who don’t is that programmers who get stuff done are always writing code.
Jeff:
Yeah.
Casey:
The reason that’s important is because most good programmers who perhaps do have a problem with writing lots of code, but they’re actually… Like, there are plenty of people who are capable of writing code but don’t get a lot of code done. In fact, that’s probably one of the biggest problems that exists in coding…
Jeff:
Yeah.
Casey:
Because smart people… There are smart people who don’t get a lot of code done and smart people who do. And so, it’s not the case that you’re dumb if you don’t get code done. It’s like a lot of very smart people don’t get any code done. The difference I think really comes down to one very specific thing which is the action that you take when you don’t know what to do. Good programmer — still writes code.
Jeff:
Right.
Casey:
They write the code and they see how it goes. They learn from it. They write it again.
Jeff:
Yep.
Casey:
Bad programmer — stops and talks to somebody.
Jeff:
Right.
Casey:
That is the difference. And like, talks to somebody either about the code or just on Facebook or shit, right, or switches to some other thing.
Jeff:
Right.
Casey:
And so, I think the biggest thing for… The number one thing is just 8 hours a day, you’re coding. If 8 hours a day, you’re actually programming, you are better than almost all programmers that are… You are in the 1% already.
Jeff:
Yep.
Casey:
If you are talking about the fact that… Because one of the things that he mentioned in his thing was, like, “Oh, but… You know, there’s different domains of code.” That is absolutely true. But I don’t think that matters. There’s enough resources on the internet that you should be able to find information about the kinds of stuff that you want to do. So it’s really just a question of still writing that code.
Jeff:
Right.
Casey:
So it’s like, “Alright, you want to become a game programmer? Great. You read some tutorials online. You follow some people, figure out who’s the right people to kind of look at what they post. And you go from there. I mean, you can fucking… You can get the source code to Quake for Christ’s sake and…
Jeff:
Yeah.
Casey:
There’s probably not very much that would be better learned from that which is like, “Hey, here’s how an expert wrote a whole thing even with the software rasterized,” right…
Jeff:
Yeah.
Casey:
So just learn…
Jeff:
And to be clear, if you spent 8 hours a day writing JavaScript code in your web thing, you’d figure out how to do that well, too. And…
Casey:
Exactly.
Jeff:
The idea that… Like, you wouldn’t worried about, like, “Oh, it’s not gonna scale for N number of things…”
Casey:
Yeah.
Jeff:
You’d be fine. It’s just… You just keep doing it, right?
Casey:
Yeah. And in general, for performance code, the crucial thing about performance code that you have to keep in mind is different from non-performance code, right? It’s basically just you need to have an idea of what could actually be happening on the computer. And this is something that I guess is worth mentioning because this might not be obvious to anyone. But basically, like… Actually, I learned this from Mike Abrash way back, way, way back when… Is basically just, like, do the back of the envelope calculation. You know… You know, look at the… Learn enough about the machine that you’re on and that you’re targeting to know roughly what its past performance is, its memory bandwidth, its past performance, learn about the CPU and how many [ ops it can go ], how many flops it can do, right, that sort of thing… Same with the graphics card. Just learn the rough numbers. And then go, “For whatever the thing is that I’m trying to do, what would be the max… If everything were working perfectly, what does that multiply out to?” So if you’re like, “How many triangles should I be able to draw knowing the rough throughput of this card, the rough throughput of this CPU?” And then, you’re never gonna get that. So that’s fine.
Jeff:
Right.
Casey:
That’s like, totally off the table because there’s a million things it’ll intercede. But then, when you go to actually look at your code and you write some stuff and you see how it’s performing, you start to know where you are relative to the headroom of that thing. Right?
Jeff:
Right.
Casey:
And if you’re lucky, you can also go out and find other people’s benchmarks where they have seen how close they can get. And now, you kind of all are looking at “here’s the maximum theoretical, here’s what other people seem to be getting, here’s what I’m getting”. That kind of allows you to start to be in the mindset of “Am I doing this right? If I’m not doing it right, what am I missing?” And you can start to think about it that way whereas if you never do that step, you never know how far away you are. And that’s probably something that you don’t end up doing in web that much because there’s so much latency, it’s hard to probably get into situations where it’s that big of a deal.
Jeff:
I think it’s still a think where I feel like…
Casey:
But high performance servers would have the same thing, you know what I mean?
Jeff:
Yeah. I would also feel like if you’re writing code for 8 hours a day in JavaScript…
Casey:
You’re going to be sensitive…
Jeff:
You’re going to have the list of things of…
Casey:
You’re going to be sensitive, [ first, yeah ].
Jeff:
Like, “No, you don’t do these things because when you do them on Chrome, it’s really slow.”
Casey:
Yeah. Right.
Jeff:
Or on…
Casey:
Yeah.
Jeff:
So you just… That’s why nothing is better… I mean, it’s the same thing writers tell writers. And it’s a similar thing of, like, if you want to write a book, you write. Like, you sit down and you write every day.
Casey:
Right. Yeah.
Jeff:
It doesn’t matter if it’s good.
Casey:
Yeah.
Jeff:
You just put something in.
Casey:
Yeah.
Jeff:
So writing a story about your…
Casey:
Yes.
Jeff:
Just get used to putting words into the computer and you’ll do it.
Casey:
Well, this is why…
Jeff:
Computer programming is the same way. It’s like, you get better because you learn from the act of doing it.
Casey:
And the internet’s bad, just in general, to have access to all the time.
Jeff:
Yeah.
Casey:
This is the reason I’m getting office space is my productivity is particular low now because I don’t have a place I can go where there’s no internet.
Jeff:
Right.
Casey:
So I’m actually getting office space specifically because that’s the way I’m used to working is I like to go somewhere where there’s no internet because if there is internet, I’m just gonna go check Twitter or I’m gonna do something…
Jeff:
Yeah.
Casey:
And that’s no good. So set yourself up for success. If you can afford to or if you have access to something… Like, let’s say you live alone in your apartment, fucking set your router to be off.
Jeff:
Yeah.
Casey:
Like, you know, they have those settings, to deny all access between, say, 8 in the morning and 5 at night.
Jeff:
Yep.
Casey:
Just set yourself up for success. Don’t allow yourself the ability to do things that waste time. And that will help you because nobody is perfect in these ways, right?
Jeff:
Yeah.
Casey:
It’s very hard to be… That diligence… So just help yourself by setting yourself up for success. That’s my opinion.
Jeff:
There’s little weird things like that that help. Whenever I notice, like, “Hey, I’m spending too much time on something,” Reddit or whatever… And then, hey, I put that block in the router…
Casey:
Right. Put it in, yeah.
Jeff:
And then, for the first 2 weeks, you just have the mental thing of, like, “Hey, this is [ taking long ]… Reddit…” And then, you type it in and then it blocks…
Casey:
Yeah.
Jeff:
And you’re like, “Okay, back to work.”
Casey:
Yep. It’s helpful.
Jeff:
And after 3 days, you won’t do it anymore.
Casey:
Right.
Jeff:
Because you break that stupid thing… So…
Casey:
Yeah.
Jeff:
Yeah.
Casey:
So yeah, don’t think of yourself as bad for checking Facebook. Think of that as something you need to solve, right?
Jeff:
Yeah.
Casey:
And so, it’s like, go figure out a way to solve it. But solve it totally. Don’t just kind of be like, “Oh, I probably should look at Facebook less and then you still look at Facebook all the time.”
Jeff:
Yeah.
Casey:
Okay.
Jeff:
Yep, next question.
Casey:
Hopefully, that has set it… And also, when he was like what are we looking for… So if I was going to hire a programmer, that is exactly what I’m looking for. Like, I don’t really get a chance to interview programmers anymore because I’m not really involved in the hiring process anywhere. But the two things that I absolutely look for are absolute shit ton of code, as much evidence that the person codes all the time as possible. And the second thing is that I can drill down into one of them and they can explain to me very clearly what they did and why.
Jeff:
Right.
Casey:
Right? Those are the two things that I look for. And I think if you can actually positively identify those two things, then you will have a very strong candidate there. And if you fail to do either of those two things, most interview processes don’t try to establish the person writes a lot of code. And that’s why they get a lot of people who don’t.
Jeff:
Yep.
Casey:
And it’s a problem. It’s something you gotta just learn from having done bad hires and stuff. But that’s…
Jeff:
For me, the people who put in code even if they’re not crazy, like, super programmer and they’re not… Or they weren’t like the lead somewhere else… If they put a lot of code in, they’ll work out.
Casey:
Yeah. And…
Jeff:
There’s enough things to do in a company…
Casey:
That’s right.
Jeff:
That you will be indispensable if you are the guy that can put in 8 hours and get 8 hours of code.
Casey:
Yes.
Jeff:
You don’t need to put in 14 hours, like… But if in those 8 hours, there’s a thousand lines of code at the end of the day or whatever…
Casey:
Yes. Well, okay… Yeah.
Jeff:
You will be a valuable employee to anybody if you do that.
Casey:
Yes. And there’s another way to look at that, too, which is that, in some sense, it’s like if I have a programmer who’s not that good but who can a lot of code, I feel like I have a better chance of working with that person to help them start writing that code a little bit better than I do with someone who’s really smart and knows a lot about how to write good code but never writes it because I can’t… What can I… Like, if you don’t write code, I don’t know how to get you to write code…
Jeff:
Yeah.
Casey:
I mean, unless I physically come in there and pull your Ethernet cable or other… I don’t know what else to do. Because a lot of times, they’ll go talk to everyone, too. And then, it’s like now there’s people who don’t code making other people not code.
Jeff:
Right.
Casey:
So I feel like… Yeah, if you can just be… Like, disciplined coding is the most important thing. If you can find it, it’s awesome. Like, that’s the best thing. So if you can teach yourself to do it, I think you’re… And…
Jeff:
Yeah. There’s a lot of tricks…
Casey:
But that’s about it.
Jeff:
When you’re good. When you become a good programmer, you learn all your own psychology and you have all the tricks of, like, “Hey, here’s the way when I don’t like to do start something new, here’s how you get past that.” But all of that, if you’re just starting out, doesn’t matter. Just start writing code for now.
Casey:
Yeah.
Jeff:
And you’ll figure those things out for yourself.
Casey:
Yes.
Jeff:
Yeah.
Casey:
Alright, thank you, Casey (and not me, Casey).
Jeff:
Yeah.
Casey:
Casey Brant, Casey. Okay. Moving on to Rob [ Tomsik ]. Also with no pronunciation guide…
Jeff:
Okay.
Casey:
So I don’t know if it’s [ Tomsik ] or something like this but Rob [ Tomsik ] says, “There’s been a lot of talk in both the software and non-software press about how to get kids to code. I’m assuming that you have the same reaction to this as I did, namely, ‘Hang on. I think we might need fewer programmers.’”
Jeff:
Yeah.
Casey:
“Can we please teach some people to not program? On the off-chance that you don’t, though, do you think this movement will end up being mostly harmless or do you think it will have a real positive or negative effect on the industry?” Jeff Roberts?
Jeff:
I don’t think it’s necessarily negative. I think it’s a no-op. It’s one of those things like “Dare to keep kids off drugs”. It’s like “Dare to keep kids programming”.
Casey:
Right. Yeah.
Jeff:
It’s not gonna have any effect in the real world or anything.
Casey:
McGruff the Code Dog?
Jeff:
Maybe if one guy tries coding or one girl tries coding that otherwise. I think that getting more women to code is actually a valuable thing to do. Period.
Casey:
Yeah.
Jeff:
And just because I feel like women are better at “butts in seat” working. So like, I feel like…
Casey:
Really?
Jeff:
If there were more talented…
Casey:
You think they are genetically predisposed to working more effectively…
Jeff:
No, I don’t think genetically…
Casey:
So what are you saying?
Jeff:
I don’t think genetically… I think that there’s nothing genetic about it. It’s just that it’s 50% of the population we aren’t using right now at all.
Casey:
But you said something about a “butts in seats” thing. What…
Jeff:
I think… Oh, just in terms… Oh, you mean in terms of the work ethic part of that?
Casey:
Yeah, yeah, yeah…
Jeff:
Yeah. And that could be completely the set of people I know but in general, I feel like the women I know who work don’t tend to do the 18-hour a day thing where they just, like, feel bad about themselves not getting anything done for the 1st 8 hours of the day…
Casey:
Okay.
Jeff:
And then spend another 10 and a half getting something done.
Casey:
Okay.
Jeff:
They’re like, “I’ve got 8 to 5 and I’ve going home.” And so, that seems to be better. That may just simply be the 10 women I know in the industry…
Casey:
Okay.
Jeff:
That are in our industry. But… And then aside from that, hey, we’re missing out on 50% of the big brains out there that could be doing good stuff.
Casey:
Okay.
Jeff:
So maybe if that helps that… Because certainly, we have a problem right now where when you look at the enrolment for computer science, it’s terrible for men versus women split. And so, that would be nice if that helps. But…
Casey:
I see.
Jeff:
I think the thing of, like, trying to get people to code… I think, A, the people who are pushing those programs have no idea what code is…
Casey:
Well, that’s true.
Jeff:
Right? So you’re like, “You don’t even know what you’re pushing here.”
Casey:
Right.
Jeff:
“What are you trying to say? Are you saying you want more engineers? You want more designers?
Casey:
Right.
Jeff:
You want more project managers? What are you even talking about?
Casey:
You know, code, Jeff. Like what you write in [ Unity ].
Jeff:
Right. So anyway… I don’t know. And to me, that part feels fishy but I don’t know. I think it doesn’t… I don’t feel like it hurts but…
Casey:
So in my mind, I would say that we probably do have a problem. And the problem looks something like this. In the old days, there were gonna be people who would look at something like a video game, and this includes myself, and go, “I want to make one of those.” That motivation would lead you to learn, like, fucking assembly language eventually, right? Nowadays, that leads you to download some fucking shit-ass engine and, like, fucking drop some sprites in there and be like, “I made a game.”
Jeff:
Right.
Casey:
Right? That doesn’t help, really. Like, we don’t really need any more… Anyone… Like, in my mind, anyone can make a game in Unity. I mean, if you can’t download Unity and make a game, you’re like some remedial person who needs, like… I mean, like, you have no business in computing. Like, just go away, right? Like, it’s like doing email. Like, anyone who’s relatively competent with a computer at all who can use Microsoft Word…
Jeff:
Right.
Casey:
Should be able to make a game in Unity. That’s just…
Jeff:
Okay.
Casey:
It’s not to say that people can’t. There are people who can’t use fucking Microsoft Word, right? That’s just… I mean… And, you know, I don’t necessarily want to disparage those people. I kind of do but like, I’m… You know… Whatever…
Jeff:
Right.
Casey:
I’m sure they’re good at something — playing basketball… I don’t know what it is. But I’m sure they’re good at something. It’s not this. I don’t think we need to go out of our way to get people doing that…
Jeff:
Yeah.
Casey:
Because this is… Whatever. It’s totally fine.
Jeff:
Well, it’s also people will do it if they want to do it.
Casey:
Making Unity… The people who make Unity. I think we either already have or will soon have a massive shortage of those people. And the reason is because now, people who might have, when they were young, gone, “I want to learn to make a game,” will just learn to fucking make something in Unity and will never take the next step of learning the hard things because it’s just easier for them not to, right? And that… So like, in the old days, like, if I look at myself, I don’t know. Would I have ever learned all the rest of the deep coding stuff that I learned if I didn’t have to, if I could’ve just made asteroids by dropping some fucking asteroids in and hit go, right? That’s just… It’s such an easy route to take. I don’t know if you go through all this hard work, all these hours of doing something much less rewarding…
Jeff:
Yeah.
Casey:
To get to the good place. And so, maybe it’s not true. Maybe I would have and it’s fine and anyone who would have in the old days will have now as well or something. But I don’t know if that’s true. So one thing that I do…
Jeff:
I think the people with those kinds of minds find it. But personally, I think…
Casey:
If we do, that’s awesome.
Jeff:
Yeah.
Casey:
Because if that’s true…
Jeff:
I also don’t think you need to do anything for those people because they…
Casey:
So if that’s true… That’s what I was saying. If that’s true, that’s fine. But I don’t actually know if that’s true or not.
Jeff:
Yeah.
Casey:
If that’s true, then we don’t have a problem. If it’s not true, then I think that the only real thing that I think needs to be addressed in the getting kids to code thing is that part — Needing to have role models and set examples and stuff so that kids will want to become engine programmers, not scripters. Because what I would assume would happen, in my pessimistic view, is that a lot of kids who would’ve become engine programmers become scripters instead and never learn the hard stuff until it’s way too late like when they’re 24 or something, you know?
Jeff:
Right.
Casey:
[ When it’s different at that age. ]
Jeff:
I think the people that are good at that stuff are just… Their brains are just a little different.
Casey:
Okay.
Jeff:
And their interests are different.
Casey:
Okay.
Jeff:
And they would… They’d script for a while and they go, “Okay, I’ve done…”
Casey:
It’s bullshit.
Jeff:
“I’d done… Okay. I did what I did and now I on”. That’s… But I mean, again, it’s an opinion. I don’t know… The few studies they do on programmers are always so bad…
Casey:
Yeah. They’re not particularly good.
Jeff:
On programmer psychology is…
Casey:
Yeah.
Jeff:
Yeah.
Casey:
Alright.
Jeff:
Yeah.
Casey:
So that’s the only thing I have to say about that.
Jeff:
Yeah.
Casey:
Teaching people to code in general, I don’t know if it matters at all. It doesn’t seem to me… Being able to understand how to use a computer is very important.
Jeff:
Yeah.
Casey:
And I wish that we had more education about people just understanding like, “Okay, what is the internet and how does it work? What does my computer do? How does it work on the internet? What’s my phone…” Like, if they just had a basic understanding of how shit worked and what was important there, that would probably be good…
Jeff:
Yeah.
Casey:
And it might lead to people making better decisions like maybe we would have only open [ phones ]… Like, you know, maybe we wouldn’t have such closed manipulative company behavior if people understood what was at stake in a lot of those places. So more educated consumers of computing…
Jeff:
Yeah.
Casey:
That would be good.
Jeff:
That’s interesting.
Casey:
But that isn’t really…. Code is not so important. Like…
Jeff:
Yeah.
Casey:
They only kind of need to understand the vague concepts of what the code does. They don’t need to know about what exactly is a pointer, for example. Like, I don’t know that that is ever… I mean, not that you learn that you learn that if you learn JavaScript.
Jeff:
Right.
Casey:
You know, stuff like that doesn’t seem that relative to me… What’s an object… What’s inheritance? Right? Like I don’t see why anyone would need to know that. You know, I don’t know I would need to teach kids things like this in general… Like, we teach them, say, history, you know…
Jeff:
Yep.
Casey:
Computing history might be the thing, in fact, now that I think about it. Much like they don’t need to know how to do actual diplomacy. They just need to know that there were these [ piece ] [inaudible 20:35] or something, right? Maybe we just need kids to learn computing history. Here’s what’s important about it. Here’s what sacrifices were made t o get to where you are. This is why maybe you buy a fucking Apple product, those sorts of things.
Jeff:
I think having… I think it actually would be good to teach algorithms… It doesn’t have to be into, like, “Alright, here’s how Bloom filters work and the crazy particles…”
Casey:
So it’s like a sheep or something…
Jeff:
Yeah, like the very simple things of… Because those are very abstract and not tied to any necessarily computer model.
Casey:
Okay.
Jeff:
Those, I think… And I’m also thinking about things that way is actually valuable to average people if they knew a little a bit of that stuff. So I think that could be interesting.
Casey:
Okay. Alright.
Jeff:
And that could not be in computer science. That could just be like, “Oh, hey,” it’s like your remedial algorithms… We talked about a bubble sort and what that kind of means. And we’re not talking a specific language or, like, “Here’s what it means. [inaudible 21:30]
Casey:
Right. We’re just gonna say… We’re introducing the concept that there is a reference from something to another thing…
Jeff:
Another thing, yeah…
Casey:
And then, we’re just going to say, “Here’s how we build all of these sort of…”
Jeff:
Yeah. It might be fun to do a lecture like that, like, try to be, like, for people who are programmers…
Casey:
Right.
Jeff:
Pick something…
Casey:
Right.
Jeff:
Like sorting…
Casey:
Right.
Jeff:
And then, talk about it and then see if you could do… That kind of would be kind of fun, to do that.
Casey:
Basically… So you sort of have been saying, like, introduce the concept of order notation…
Jeff:
Yeah.
Casey:
In a way that doesn’t really have anything [inaudible 21:58] So like, “Here is how to look at various ways we could organize this information that have different amounts of time… [ Real ]… Like, number of things a human would have to do to sort these items and why we might care about that as a thing in general.”
Jeff:
Because if you take Philosophy classes… If you’re not a philos--… You’d have to take one, usually, when you’re not a Philosophy major…
Casey:
Right.
Jeff:
And it talks about just general principles of thinking about thinking.
Casey:
Right.
Jeff:
And thinking about computing that way would probably be a valuable thing…
Casey:
Okay.
Jeff:
But… Yeah.
Casey:
Alright. Should we keep going?
Jeff:
Yep. Next.
Casey:
Okay. “Greetings from Iraq.” And this did not have a name associated with it.
Jeff:
Okay.
Casey:
“I listened for most of your episodes and enjoy the podcasts so I wanted to thank you guys.” Now, this is somebody apparently writing from a country that we have destroyed, who is still listening to our podcast.
Jeff:
Yes.
Casey:
I do not know why he didn’t write in, “Hey, assholes…” Maybe he’s listened to enough to know that we were against it. I have no idea.
Jeff:
Yeah, maybe. I don’t know.
Casey:
“I have 2 requests. I want you guys to explain how to address a bug that happens unexpectedly on a customer’s machine and the bug can never be reproduced with a known number of steps.”
Jeff:
Okay.
Casey:
That’s [ the question ].
Jeff:
So that’s the full question?
Casey:
Yes.
Jeff:
Okay. I thought there were 2.
Casey:
This is kind of for you because you get these kind of bugs more than I do.
Jeff:
Yeah. I mean…
Casey:
’Cos you write that kind of code.
Jeff:
Right. So you get… When you get stuff like that, there’s the standard way you try to do it which is you get a dump. And if you have a dump, you stare at it long enough, you can make some guesses about it.
Casey:
Okay.
Jeff:
And Microsoft makes that difficult.
Casey:
Of course, they do. It’s their job.
Jeff:
Right. It’s not as easy as it could be.
Casey:
Yeah.
Jeff:
But the bigger thing I would say is there is not a bug that can’t… And this is obvious to most programmers or good programmers…
Casey:
Okay.
Jeff:
There’s not a bug that you can not fail to find. And that seems silly.
Casey:
There’s not a bug…
Jeff:
There’s no such thing as a bug…
Casey:
That you can not fail to find…
Jeff:
Right.
Casey:
There’s a lot of negatives in there.
Jeff:
Right. Sorry.
Casey:
[ Can we say that a little differently? ]
Jeff:
There’s a lot of things where people go, “That is… That bug… Memory overwrite was in the middle of the subsystem in this thing. There’s no way to find it.”
Casey:
Alright.
Jeff:
It’s just like…
Casey:
Okay.
Jeff:
It’s just too complicated. We’re just gonna pad the memory or they’re just gonna do something stupid.
Casey:
Alright.
Jeff:
That is not true.
Casey:
Okay.
Jeff:
Given a crash, you can always find the problem.
Casey:
Okay.
Jeff:
And even in the darkest times…
Casey:
Okay.
Jeff:
You need to hold on to that thought because it is possible to find it…
Casey:
Okay.
Jeff:
And then, it is just a matter of deciding to what extents you’ll go to it.
Casey:
Okay.
Jeff:
I’ve gone to the point where, like, we have something that crashes on a customer’s machine. We never see it. I just had them FedEx the machine to us.
Casey:
I’ve seen… I remember Disney, one time, sent a whole fucking machine. I remember that.
Jeff:
I’m just like, “Just fucking send it to me. It’s $200.”
Casey:
“Just mail the machine. We’ll mail it back.”
Jeff:
“Mail the machine. We’ll mail it back.” Right?
Casey:
Yeah.
Jeff:
End users, I’ve had them do that because sometimes, they’re just like ,”Sure, if it’ll fix the problem,” right?
Casey:
Yeah.
Jeff:
And done it that way… Obviously, debugging should be better so that you’re able… Like, the concept that we can’t very easily connect to machines over the internet and debug them when we need to is kind of crazy, right?
Casey:
That won’t lead to any viruses…
Jeff:
Of course, it would. You’re right. But, I mean, we have remote desktop on all those machines.
Casey:
Yeah, exactly.
Jeff:
And we don’t have a way to debug [ the contents of ] those machines.
Casey:
Yeah.
Jeff:
Like, it’s kind of absurd that there’s not a systemic way like…
Casey:
Right.
Jeff:
“This is the way you unblock this thing. You allow…” like, whatever…
Casey:
Well, you see, I don’t know what you’re complaining about, Jeff. The person just buys a $1,200 license to Microsoft Visual Studio. Then you remote desktop to their machine…
Jeff:
Right. I will say that I’ve had bugs that were excruciating to find…
Casey:
Yeah.
Jeff:
And in the really bad ones, there were times when I had wished I had them run a mem check before I started because, you know, it turned out to be bad memory in the machine.
Casey:
Yeah.
Jeff:
When you have a lot of end users, especially in games, you’re gonna have machines that are overclocked and pushing the edge. And I’ve spent a lot of time on one before…
Casey:
That’s a good point. You don’t normally think about that because developers don’t often overclock their machines…
Jeff:
No, right.
Casey:
But end users do all kinds of shit you don’t want to know about.
Jeff:
Yeah. And so that’s good. You know, having good…
Casey:
It’s like, “Oh, well, I stuck the 4th video card in…”
Jeff:
Yeah.
Casey:
You’re like, “Okay…”
Jeff:
But most of the time, what I get back from customers is [ doubly indirected ] which is a little rough…
Casey:
Okay.
Jeff:
Where you get back… It’s a dump from a game that I don’t have. I don’t even have the symbols for the game.
Casey:
Right.
Jeff:
I have a stack that ends up at [inaudible 26:58] somewhere…
Casey:
Right.
Jeff:
And so, my method for that usually is given a stack, I try to get them to send me the assembly around it. I then load up that version. I copy back that thing to a new directory. I load it up in the debugger. And then, I literally just page up in the disassembly view, looking for the spot that matches…
Casey:
Okay.
Jeff:
And then try to figure out what was going on there and then give them some things to try.
Casey:
Right.
Jeff:
That’s usually what my hard bugs are.
Casey:
Okay.
Jeff:
Is user… People passing in bad data or bad things happening outside of our code that get passed in to us, blows up in our code, and then we have to figure out how that happened.
Casey:
Got it.
Jeff:
So…
Casey:
Alright…
Jeff:
Don’t know if that’s super helpful for his case…
Casey:
Yeah. I mean, the kind of problem with that is debugging’s one of these intuition sort of things. It’s hard sometimes to give…
Jeff:
Yeah.
Casey:
Concrete advice, I guess…
Jeff:
Yeah. And some people are just good at it. Like, I’m a much better debugger than I’m a coder. And so, some people are just good at that stuff and some people aren’t. And you do get better as you do it and the more stuff you find.
Casey:
Alright. You ready for the next one?
Jeff:
Yep.
Casey:
This one comes from Peter. “Hi, Jeff & Casey. You recently talked about Agile Scrum and various new methodologies floating around in the programmer world. And that reminded me of a recent experience I had. You don't strike me as interested in the open source software community beyond using OSS Libs, obviously, but I thought I'd relate a story about how even the OSS community seems to run somewhat mad with methodologies. So I sometimes contribute to a software project and I like the maintainer of that project. He's pragmatic, not dogmatic. And the code is largely C style. Everything's fine then some packager opens an issue on GitHub that he has a build error. Strange as that might be, since we have a constant integration server running and builds all commits, we look into it. Turns out, the online build service he's using doesn't correctly pull Git sub-modules. No big deal. So it's someone else's fault but the build system he uses is also OSS. I figure why not take a quick glance at that and see if I can't spot the error. The related part that calls Git based on the parameters provided is just a simple shell script. Seeing that, I think to myself, 'Why not just fix it real quick and send them a [inaudible 29:05] request?' That's where the trouble starts. It's an obvious bug but the maintainer is a religiously devout test-driven development design follower and requests a corresponding test. Having a test is a reasonable thing especially for a tool like this. You would think the test for a simple shell script would be written as another shell script but turns out, the tests are written in a python test harness — all object-oriented out the ass. So there I am, having fixed a simple error with a simple 3-line change to a shell script, looking at Python Code (which I’m not familiar with) that includes some test library and has a 5-level and deeper inheritance structure and about zero comments describing what is actually being tested. It was one shell script and the tests folder contains 18 Python files. I ended up actually tinkering for something like 2 hours to get the test code to do something barely useful which was testing [inaudible 29:51] case. I guess my question is — Any fun stories about TDD fanatics? I’m thinking those would be rather rare in the games world. Failing that, any fun open source stories in general? Greetings, Peter.” So not a whole lot of questions there, just a story about the majesty of submitting to other people’s projects. Other OPP…
Jeff:
Yeah.
Casey:
Is just bad in general because you have things that you do that other people wouldn’t like. And when you come on their project, they’re gonna have things that you don’t like. And oftentimes, those things are full banana cakes…
Jeff:
Yeah. I think you could probably…
Casey:
Like Master Jeff R, for example…
Jeff:
Yeah, we do have [ to see that ]… I think the thing that I would say about that is like, “Hey, people are people. Open source is no different than closed source in that regard.”
Casey:
Right. Yeah.
Jeff:
You’re gonna just run into that randomness. I will say… And you had a really good point about this.
Casey:
I did?
Jeff:
Yes. Recently. Which is…
Casey:
I’m just full of good points lately.
Jeff:
Any time you aren’t spending coding, you need to really think about what that is and whether that’s actually a win or not.
Casey:
Yes.
Jeff:
You know something’s gone wrong…
Casey:
Yes.
Jeff:
When you have problems building your build tools, for example. Right?
Casey:
Right. Right.
Jeff:
Like, getting the build up and running, like… If that can’t be done…
Casey:
Yeah.
Jeff:
Then you need to evaluate what got you there because what’s happened is you’re going to then be spending more time on the non-code getting the code working.
Casey:
Right. Yes.
Jeff:
And there’s a whole ton of stuff like this. Just programmers spending a lot of time…
Casey:
Yeah.
Jeff:
Tweaking the editors… Programmers spending a lot of time making crazy build tools…
Casey:
Right.
Jeff:
Because they, like, “Oh, it builds the minimal.”
Casey:
Right.
Jeff:
[ Men like ] building everything nowadays on modern computers. [inaudible 31:29] is not a crazy thing to do anymore. Like, there’s a number of things where you’re like, “Oh, I’m starting a new thing. I’ve got an empty directory and I start it. And I 1st thing I need to do is really think about the make system.”
Casey:
Right. Yep.
Jeff:
It’s like, no. No. No, no, no. It’s like…
Casey:
Yeah.
Jeff:
It’s a bad place to be. And so… And this is… Programming has just gotten so awful. It really is.
Casey:
Yeah. It gets worse every day. It’s true.
Jeff:
It’s worse. And it’s like… The tools plus the libraries plus the environments plus the write systems to even compile because you need this thing…
Casey:
Yeah.
Jeff:
And like, all of this stuff is stuff that’s making programmers be less efficient…
Casey:
Yes.
Jeff:
And programmers are the thing that cost you money and actually get you a product done. And so, it’s just… People should… Every time you think about stuff that is quite common knowledge like, “Oh, you gotta have a makefile.”
Casey:
Yeah.
Jeff:
Do you? Like…
Casey:
Right. Yeah.
Jeff:
Think about that. Like, this is a 50-file project…
Casey:
Right.
Jeff:
Just build them all.
Casey:
[inaudible 32:37]
Jeff:
Like, it’ll be fine, right? And you’ll never have a build problem again. So that little thing where you’re spending 15 minutes a day is gone.
Casey:
Well, so… Yeah, my whole thing is… Right…
Jeff:
It’s weird when you sit down and justify things like that. Like, it’s hard.
Casey:
It’s TCOC. It’s TCOC. It’s total cost of completion. That’s my thing, right. It’s like, everything you do should be saving you cost in getting to whatever the end goal is which is, like, a bug-free product that does these list of things, whatever it is, right, the total cost. And it is shocking… Like, programmers are the most superstitious work men I know. Like, I’ve never seen a construction worker fucking wave a dead chicken over his hammer before he nails shit in, right? But that’s, like… Programmers? It’s like, “Why are you putting const in there?” “Because it saves errors.” I’m like, “Really? Did you count them? How many errors did it save? You type const fucking 500 times a day. How many bugs has it saved. Tell me. If you can’t tell me, why not?” Right? Like, why are you doing this thing? And people don’t think of these things as superstition. They don’t think of the, like, 20-step build process as superstition. But that’s what it is. It’s like somewhere along the line, you got yourself into this thinking that good coding is X. It means having a test for everything. It means writing in Python. It means having const everywhere. It means having [inaudible 34:03] It’s like there’s all these things you’ve got in your head. None of them which you have evaluated to see if they actually are performing versus some other option, right? And you’ve got to just stop that shit because not only is it usually not helping you actually get the thing done. But oftentimes, it’s also making you miserable and forcing you to have arguments with people about stupid shit like 2 people arguing about what the fuck should and shouldn’t be in, like, the private section of a class. If that argument ever happens, everyone is fired. Everyone in the room is fired. Everyone in the company is fired. I’m just firing everyone, right? Never… These things should never happen because programming, at its fundamental level, is much more straightforward than that. And you’ve gotten yourself into a huge superstitious overloading operator equals to prevent the fact that it could be used in a situation where the person didn’t have… Owned the memory [ to that and ] you’re just like, “Stop. Everyone just stop right now. You have spent more time on this than if everyone in the company wrote code that had this bug and you had to bug it later. That is how much time you’ve spent focusing on preventing these bugs. It’s like, that is not productive.”
Jeff:
Yeah.
Casey:
And I think the sooner people learn to just focus on what is productive, the better, right?
Jeff:
Yeah. It is a hard thing because all the time you’re like, “Well, you know, obviously, we need these make systems because we don’t have to build all these things.” And, like, I make that same argument.
Casey:
Right.
Jeff:
I’m like, “Oh, we’ve got to have this big thing.” And you’re like, “Well, wait a minute. The build all is 14 seconds. The build everything is… Yes, it’s 2 seconds. So it’s 12 seconds less. But how much time keeping all those make systems working… How many seconds went into that?”
Casey:
Well, part of the problem…
Jeff:
And so, there is this weird thing of, like, how you balance this stuff and make decisions because, yes, it’s still worthwhile but probably for us… But like, you… It’s a terrible thing when you think about (at least in my day) what percentage of time is spent maintaining systems and processes that are already in place and are not necessarily optimal or even… Not even optimal but, like, non… Are just like we do it because we’ve always done it that way.
Casey:
Well, there’s other things, too, which is that the superstitions create… Like, there are… So bad behavior begets more bad behavior is the other thing, too. The example would be, like, recently the project that was using QT for example, right… As soon as you use QT, you need a build system because building a single file that includes QT takes, you know, 5 seconds or something. You know, just including QT means you’re never going to be able to do something like a Unity build.
Jeff:
Right.
Casey:
Now, maybe you could figure out a way to do it but I don’t know that you can even include QT that way. Like, I don’t think you could even really do a Unity build with QT but you certainly can’t do a [inaudible 37:04] CPP with QT. It’ll take 30 seconds.
Jeff:
Right.
Casey:
Like, that’s… And for nothing, for a minor project, right? So you end up in situations where, like, the fact that you’re using code that is already poorly structured because it’s got, like, 50,000 templates and stresses the compiler out in all these bad ways and has 800,000 H files and all these other sorts of things means now you’ve got to have a build system. So alright, that just went off the table. So alright, now you need a build system and you need an efficient build system, one that can track lots of dependencies quickly because, you know… And you just…
Jeff:
Right.
Casey:
Things build on each other in this way. And so, they sort of… They become, in some sense, self-fulfilling prophecies. It’s like, “Yeah, well, you did actually need a build system on this or you did actually need whatever…” And that’s unfortunate. And the same thing is true with a lot of C++ programming things. It’s like, “Oh, alright. Yeah, you made this thing so fucking complicated with so many objects and so many inheritance levels and all this sort of thing. Now you do…”
Jeff:
You need visual assist. You need shit…
Casey:
You need all this stuff.
Jeff:
Yeah.
Casey:
You need to overload operator equals because it’s now so easy for a user to accidentally fucking cause a giant deep copy of your hierarchy to, like, fucking allocate 60 gigs of memory that you need to, like, avoid this eventuality that could be catastrophic or whatever, right? Whereas before, if the API was just sane and you weren’t going nuts like, this, you wouldn’t need these things. So a lot of times, too, there’s like… Some of these things that are superstition and isolation become real when they’re compounded with all of these bad practices that sort of feed on each other. So that’s a problem, too, but…
Jeff:
It’s ugly.
Casey:
Anyway, for test…
Jeff:
Programming is hard.
Casey:
For test-driven development specifically, I usually actually like test-driven development. I think it’s ridiculous to do it in a different language. So that sounds nonsensical to me. But putting that aside, I actually usually like test-driven development. And the reason I like it is actually not so much for the testing as it is for the development mentality. And the reason that is is because I find personally and I’ve seen this with other people, too, so I think it may be roughly universal, like it’s not a “specific to a programmer” thing… Is that programmers get a lot more done when they see shit happening on the screen. So like, if I can run my code, it’s gonna get developed a lot faster than if I’m just staring at source files for 3 weeks, just working out how some really complicated thing’s gonna go. And so, one thing that I will intentionally do sometimes when I am having trouble getting some code finished because it’s very abstract and involves a lot of moving parts that won’t be doing anything interesting anytime soon is I will start doing test-driven development strictly to give me something to run because it feels more like I’m making progress and helps keep my morale up whereas if I’m literally only just gonna eventually… It may have nothing to do with finding bugs. I may be completely unconcerned about the debuggability of this product. And I may think that it will be trivial to debug later. So the tests are not about that but they will be about getting me to that point. So like, “Oh, I’m writing a new database system that’s gonna underlie some of my code.” I will just start writing test code for that to focus on like, “Okay, here’s a thing that does a simply query or whatever. And let me see if I can get that working.” That’s just a good goal. So sometimes, using test-driven development as goals, I think, is good. That’s what I will say about test-driven development.
Jeff:
Okay. I like it.
Casey:
Alright. Moving on. Now, this one is the first time, I think that I’ve ever had somebody write in… I’ve said many times, “Include how to pronounce your name. Tell us how to pronounce your name. We want to pronounce it correctly.” The first time I actually had someone who actually did it. They actually told us how to pronounce their name. So this one is from Sergio. I believe I’m saying that correctly. I’m not sure.
Jeff:
Okay.
Casey:
Sergio.
Jeff:
Right.
Casey:
I don’t know if I’m… I’m probably not doing it exactly the way he wants but I’m trying. And he says, “Hi. May name is Sergio. I prefer it to be pronounced with a soft G, pronouncing it Sergio is acceptable only if you pull off a sexy Spanish accent.”
Jeff:
Okay.
Casey:
So I think it may not really be that acceptable because my Spanish isn’t sexy.
Jeff:
Oh, I see.
Casey:
Because I haven’t… We need like… I don’t know. Do you think Daniel [inaudible 40:56] does a sexy… Can he do a… Is Argentinean a sexy Spanish…
Jeff:
Yeah, I feel like he can pull it off.
Casey:
You feel like he can pull it off?
Jeff:
Well, no… I mean, it’s just like…
Casey:
We need a guest voice.
Jeff:
Like that sexy talk… Like, we don’t have sexy English voices but we know the…
Casey:
Oh, I’ve got a sexy English voice.
Jeff:
Well, wait, but we know the joke like… You know, you just do the funny little thing.
Casey:
Jeff & Casey Afterdark…
Jeff:
So they would… So certainly, Daniel would know, “Here’s the tone that you use when you want to do Spanish sexy.”
Casey:
Okay. Alright. So, I’m sorry that we are not able to maybe sex it up as much as we should have.
Jeff:
Yeah.
Casey:
But here comes the letter. And this letter was pretty amusing.
Jeff:
Okay.
Casey:
“Speaking of sexy, I just spent an hour and a half of my life listening to Jeff & Casey talk about masturbation…”
Jeff:
Oh, boy.
Casey:
“And I thought that Casey’s analogy right at the end was spot on. There are masturbation enthusiasts.” And I like how we’re [ talking about masturbation ] and he’s talking about my observation right at the end.
Jeff:
Yeah.
Casey:
At the finish, if you will.
Jeff:
Yeah.
Casey:
At the climax…
Jeff:
So is he talking about the milky finish?
Casey:
I guess so.
Jeff:
Okay. Is that what we talked about? Is that when we spent an hour and a half on… We spent an hour and a half on masturbation many times.
Casey:
Maybe… He was not specific. It could’ve been about the Autoblow…
Jeff:
Okay.
Casey:
I think it was because I was talking about how the Autoblow… You were…
Jeff:
Can we just do a quick aside here just to, like, really tantalize the viewers?
Casey:
To prime the pump, if you will?
Jeff:
Autoblow has sent us an Autoblow.
Casey:
They…
Jeff:
They contacted us. . .
Casey:
Did you receive it yet? I don’t know.
Jeff:
It is sitting on the counter.
Casey:
Oh, yes. Okay. So we have a surprise that you will know if you follow Twitter.
Jeff:
Yes.
Casey:
The good folks at Autoblow contacted us and said, “We listened to the show. Would you like us to send you an Autoblow?” And I asked Jeff. And we said yes because we think, and we’re not sure…
Jeff:
Right.
Casey:
We think we know the exact right person to do an Autoblow review for us.
Jeff:
Yes.
Casey:
So we hope to have, some point in the near future, an audio review that we will play for you…
Jeff:
Yes.
Casey:
Of the Autoblow up close and personal because that is the kind of in-depth reporting that you have come to expect and respect from the Jeff & Casey Show and we are not going to disappoint.
Jeff:
Right. So anyway, that’s a little aside saying that…
Casey:
So that aside… A little teaser…
Jeff:
There is an Autoblow on my counter…
Casey:
Just the tip… That was just the tip.
Jeff:
Yes.
Casey:
But apparently… So you have received it?
Jeff:
Yeah.
Casey:
So in New York City right now, there is an Autoblow waiting for Jeff when he goes back.
Jeff:
Yes, there is an Autoblow. It came in one box…
Casey:
This Autoblow waiting…
Jeff:
And then, a box of lube came with it.
Casey:
No!
Jeff:
And I’m like…
Casey:
No.
Jeff:
Yeah. Dawn opened it. She said, “What is this?” I’m like, “It’s a podcast thing…”
Casey:
“I can explain that.”
Jeff:
“Don’t worry about it.”
Casey:
Yeah.
Jeff:
Yeah.
Casey:
She’s like, “Oh, we’re gonna be using that.” Okay. “So some context,” from Sergio, “I started masturbating right about when the internet was becoming a thing. I didn’t know how to do it and I felt embarrassed to ask someone to teach me. Naturally, I decided to do some research. And that is how I found HTTP://JackInWorld.com,” which I assume is jackin’…
Jeff:
Uh-huh.
Casey:
Like, you can’t do an apostrophe in a domain name but it’s just JackInWorld.com. “I just…”
Jeff:
What it should be is jackin%43world and you just have to, like…
Casey:
Yeah, you have to know what that is.
Jeff:
“Oh, yeah, that’s what that is. Yeah, okay.”
Casey:
“I just checked and it is still online and apparently has been since 1996.”
Jeff:
Okay.
Casey:
“There is a wealth of information for the masturbation enthusiast — different techniques to make the experience longer or more intense or with different sensations. I am not sure if this is a good place for an impressionable young mind to discover his sexuality. Sorry about the context. This might have too much information but when I share a like to a site dedicated to the art of masturbation, I feel the need to explain how the hell I found out about it.” You know what, this is the Jeff & Casey Show, you don't need to explain yourself.
Jeff:
You don’t need to explain yourself.
Casey:
Everything’s fine. This is a welcoming community.
Jeff:
That’s right. We don’t judge.
Casey:
We don’t judge.
Jeff:
Yeah.
Casey:
We talked about the Autoblow for, like, an hour and a half. What are we gonna be doing…
Jeff:
I’ve got an Autoblow on my counter.
Casey:
He has an Autoblow on his counter.
Jeff:
What can I say?
Casey:
Yeah. He has an Autoblow on his counter. “I guess I’m prejudiced that way. So anyway, I just wanted to share this with you. But while I’m writing this, I might as well ask a question.” Now, I was hoping, at that point in the email, that it was gonna be something about masturbation because then, like, “Okay, this is where this is going.” Nope. “I was following a conversation on Twitter a couple months back. Casey and Sean Barrett and some others were having a discussion about innate talent versus practice. I would like to hear you address that. Posing it as a question… If a reasonably intelligent person does nothing but real challenging programming work for 12 hours a day, 10 years straight, will that person reach or exceed the abilities of (insert famous super programmer). And by super programmer, I kind of meant John Carmack who just seems to have an exceptional brain on top of the thousands of hours of practice. Thanks.”
Jeff:
Okay.
Casey:
Got that?
Jeff:
Yep. So the masturbation was just like a…
Casey:
A tease…
Jeff:
Well, not a tease. A misdirection.
Casey:
Misdirection, oh, a red herring?
Jeff:
Yeah, a McGruffin.
Casey:
A McGruffin.
Jeff:
Okay.
Casey:
Nice.
Jeff:
So the question is practice versus talent.
Casey:
Yes.
Jeff:
Okay. So John would be the first one to say this…
Casey:
Yes.
Jeff:
John is a very smart person…
Casey:
Yes.
Jeff:
But he is an absolute fanatical worker.
Casey:
Yeah.
Jeff:
And he is good because he works every day.
Casey:
Yeah.
Jeff:
Certainly, he’s smart.
Casey:
Yep.
Jeff:
But he is not good because he’s smart.
Casey:
Yeah.
Jeff:
Like, that helps but he is a machine.
Casey:
Yeah.
Jeff:
And there are plenty of smart people in the game industry that I know who are smarter than John.
Casey:
Yep.
Jeff:
But don’t get as much done as him because he is a work machine.
Casey:
Yep.
Jeff:
So that answers the question. I mean, if you want to be better than John, the problem is that John’s still working 12 hours a day himself. So…
Casey:
Yeah, but fortunately, he’s not working on anything interesting…
Jeff:
That’s true.
Casey:
He’s got a fucking Oculus headset on…
Jeff:
Yeah, that’s true.
Casey:
And just looking all around at weird shit. So you can easily catch him if you start now.
Jeff:
If you start now, you’ll do fine.
Casey:
Yeah.
Jeff:
No. I mean… Hey, we already talked about this. It’s a “butt in seat” working, you will be a… If you are a person who spends 10 hours a day, you will be an absolutely indispensible, very well-paid person in 10 years.
Casey:
My take on this is actually a little different, I think. And that is that I think there is a lot more to this than people normally give credit to.
Jeff:
Okay.
Casey:
I don’t know how to say this exactly but basically, I think the talent versus practice is a non… It doesn’t really actually make any sense. The whole premise is flawed.
Jeff:
Okay.
Casey:
And basically, what I would say is that like most systems, I think… First of all, there’s a tendency to forward… To look at things in the forward instead of the backward process, right? So like, people would say shit like, “Wow, you know, humans got to where they were by constantly focusing on developing their brains as opposed to monkeys who didn’t,” or something. And you’re like, “No, that’s not how that works,” right? It’s like, until Darwin came along, people thought the same talent practice thing about animals. Giraffes got long necks by reaching up to the trees and stuff like that. It’s like, “Nope, that’s not what happened,” right? So I suspect that probably the talent versus practice thing conflates a whole host of things, some of which involve the fact that practice and talent aren’t separated. One part of your talent at something is the fact that you practice it a lot.
Jeff:
Yeah.
Casey:
Like, you probably can’t decide to practice cello a lot more than you normally would because that is how your brain is working now and you can’t change that, right?
Jeff:
Right.
Casey:
Like, one of the talented parts of John Carmack is the fact that he likes or will program for a lot more hours a day than you will. And there’s probably not a whole lot you will ever do about that because if your brain was in the way that it could do that, it would’ve already been doing it and you wouldn’t have to ask that question, right?
Jeff:
Yeah.
Casey:
So that’s one thing. The other thing is I think people often underestimate the amount to which your brain actually does have innate things that make you better or worse at something that make practice less necessary for you…
Jeff:
Easier… Yeah. Oh, necessary? I was gonna say easier. Okay.
Casey:
Less necessary. So there’s… I mean, an example of this would be taking really, really basic shit. Everyone has heard language spoken pretty much their entire life all day, every day and has had the opportunity to read all day, every day. There are people who still cannot fucking put together a sentence. I don’t feel like practice is a valid excuse for why these people can’t fucking figure that out. There are brains who, when they see things repeatedly absorb them. And there are brains that just fucking don’t. And I think to say that it has something to do with practice is actually just plain not true. There are things that you can have in your brain that allow you to uptake more quickly than other people for various domains of knowledge and behavior and whatever the fuck else it is. And I think saying that it’s only about practice sort of ignores some really fucking obvious shit…
Jeff:
Yeah.
Casey:
Like mimicry is a big part of getting good at things. And there’s people that can naturally mimic certain things and people who can’t. There are people who you will shoot a basketball and they will just fucking mimic you and it’s a beautiful shot. And like, they have this physical learning. Their brain just does that. And that’s a huge leg up. There’s people with language who they can hear someone say something, they can hear someone say a bunch of things and then they can say stuff just like that person would say it. And there’s other people who will never be able to do that…
Jeff:
Yeah.
Casey:
And it’s just… That’s not practice.
Jeff:
No, but I would just…
Casey:
It’s not.
Jeff:
Here’s all I would say about that, though…
Casey:
Yeah.
Jeff:
Is at the limit… And the way the question’s posed, he’s comparing it to the people who are the very best in this particular field.
Casey:
Yeah.
Jeff:
And the very best people who do impressions or whatever they are…
Casey:
Right.
Jeff:
All had that natural ability, too, and then still did the gazillion hours of practice, right?
Casey:
Exactly. Right. But that’s why…
Jeff:
You have to have something to be… Like, if he asked the question… I’m assuming he has a natural somewhat aptitude towards algorithmic thinking which is, of course, you just have to have. There are people that I could sit here and explain over and over the simplest procedure and they wouldn’t get the fact that, “No, this happens after this…”
Casey:
Yeah, the sequence and blablabla…
Jeff:
“It’s not all at the same time…”
Casey:
Yeah.
Jeff:
Like, that’s just different…
Casey:
Right.
Jeff:
So I’m assuming, like, hey, alright, you have the natural whatever that part of your brain is that is pre-wired somewhat that thinks algorithmically…
Casey:
Right.
Jeff:
That’s just not… That’s great that you have that because it lets you be in this field at all…
Casey:
Right.
Jeff:
But the only way that you’re ever gonna be indispensible is doing the work.
Casey:
Well, I guess what I’m saying is he’s asking how much talent plays into it. And what I’m saying is I think it plays into it a huge amount.
Jeff:
Yeah.
Casey:
And people like to downplay that…
Jeff:
I guess that’s true.
Casey:
And here’s the reason I say that…
Jeff:
Yeah. But yeah, I mean…
Casey:
You wouldn’t say it in any other discipline.
Jeff:
Yeah.
Casey:
You wouldn’t say that Usain Bolt is really fast strictly because he practiced. Like…
Jeff:
Yeah.
Casey:
Oh, Casey, you could go out and just run… If you had run in your life as much as he did [ you’d be as fast ].
Jeff:
Yeah, you’re right.
Casey:
It’s like, “No, you wouldn’t.” I will never be even fucking half the speed he is let alone close to the speed he is.
Jeff:
Yeah.
Casey:
And mentally, I think that’s all the same.
Jeff:
Right.
Casey:
It’s like, no, you have a… You can…
Jeff:
No, you’re right.
Casey:
Practice will let you hit your top limit that your talent allows. But there’s a big difference there and you may very well not be as talented as John Carmack as a programmer which is not to say that he is the most talented programmer even…
Jeff:
Yeah.
Casey:
It’s just to say that he is a talented programmer and he has a lot of practice. You could put in a lot of practice and not be as good as him easily.
Jeff:
Yeah.
Casey:
No question. And maybe if I spent some time with you, I could find out if I thought you could be… Like, “Okay, let’s see how you are,” or something maybe…
Jeff:
Yeah, that’s a good point. It is…
Casey:
But with no other information, no, I can’t make that assertion.
Jeff:
Right. Right. Yeah, that’s a good point.
Casey:
Yeah.
Jeff:
I’m looking at it more of…
Casey:
People don’t think of mental things as being analogous to physical things but I don’t know why because we don’t have any evidence yet to prove that they’re not.
Jeff:
Yeah.
Casey:
So it seems to me that it’s very logical that people’s brains differ in the same ways that their physiology differ. And that leads to certain performance criteria at the limit. Period. That seems very logical to me…
Jeff:
Yeah.
Casey:
And ‘til we [inaudible 53:23] the contrary, I would say we should assume it’s [ true ].
Jeff:
I would just say that most of the time… Like, to make a living being a runner, there are maybe a hundred people that get sponsorships in running…
Casey:
Right. Yes.
Jeff:
Everybody else is in the poor house.
Casey:
Yeah.
Jeff:
If you put… If you will be… If you’re in the top 50% of programmers, you’re gonna make a lot of money.
Casey:
Yeah.
Jeff:
And you will do very well. And you’ll be indispensible.
Casey:
Yes.
Jeff:
And you’ll be… You will have a… You will feel fulfilled.
Casey:
Yes.
Jeff:
And the only way you get there is… The talent doesn’t get you there…
Casey:
Yes, that’s true. So he was talking about John Carmack…
Jeff:
Yeah.
Casey:
If he was talking about… Let’s say you just want to get hired by Google.
Jeff:
Right.
Casey:
You can be… I mean, you can program at 0.0001 Carmack’s and get hired by Google and get a great salary.
Jeff:
Yeah.
Casey:
I mean, there are a lot…
Jeff:
Right.
Casey:
Of programming positions in this world. And most of them are…
Jeff:
And not even salary. I mean, just be like, fulfilled. Like, you’re doing work that is challenging…
Casey:
But you can do that at home. I mean, yeah, sure…
Jeff:
Yeah. But I think people need to work. Like…
Casey:
Okay. Yeah, maybe.
Jeff:
Yeah.
Casey:
But if you did… If you weren’t [inaudible 54:34] programming at home, I suspect you don’t have the talent for it.
Jeff:
Yes, that’s probably true. Okay, I like that.
Casey:
I have a surprise for you, Jeff.
Jeff:
Yes.
Casey:
That was the end of the letters.
Jeff:
We got them all?
Casey:
We got through them all in less than an hour. 5 minutes left.
Jeff:
Alright. Perfect. That’s awesome.
Casey:
What do you think of that?
Jeff:
That’s pretty good.
Casey:
Alright.
Jeff:
I keep looking over. You pulled out the book… Ocho Cinco’s book from season 1 or 2 of the podcast…
Casey:
Well, I feel like if I’m not very much in error that we covered Ocho Cinco in an episode called, like, “Planet Chad” that was part of the 12 days of podcast.
Jeff:
Oh, okay.
Casey:
I feel like it was part of the 12 days of podcast.
Jeff:
Yeah. I didn’t know who it was because it was just… It was facedown before. But now, we got Ocho…
Casey:
Ocho Cinco, he’s flipping you off just like I do at the beginning of the podcast.
Jeff:
No. Oh, god damn it. Alright, everybody, if you have a letter to write us, we will save them up and have a big old milky finish of…
Casey:
We will have a milky, milky finish…
Jeff:
Of letters… You can email us at Podcast@JeffAndCaseyShow.com…
Casey:
As always…
Jeff:
And next week is going to be links. We’re gonna try to do links.
Casey:
I don’t know what we’re gonna try to do.
Jeff:
Links are hard.
Casey:
We’ll do what we can. Links are hard because they take a long time and we get a lot of them.
Jeff:
Yeah.
Casey:
We will see what we can do.
Jeff:
Alright. Well, hey, thanks, everybody.
Casey:
Thanks for tuning in and we will see you next week.
Jeff:
Yep.
Site design and technology © Copyright 2005-2014 by Molly Rocket, Inc., All Rights Reserved.
Contents are assumed to be copyright by their individual authors.
Do not duplicate without their express permission.
casey muratori
the jeff and casey show - season 4 - episode 26
prev
next
mollyrocket.com