Podcast 057
[incomplete]
Intro, advertising
[01:19]
Spolsky: First of all, yes we got a lot of positive feedback from the Jason Calacanis podcast which actually sort of surprised me.
Atwood: That's good because you were very worried about that.
Spolsky: I was worried that our developers would be like, oh ick, he's one of those business guys.
Atwood: Yeah, Jason's pretty cool though, I vetted, I listened to a couple of podcasts he was on and gave him my thumbs up so.
Spolsky: Uh hu.
Atwood: My gut feeling was that it would be OK.
Spolsky: He's like one of the smartest people I ever talked to.
Atwood: Yeah, he's smart but you know I still don't agree that Mahalo is doing the right thing.
Spolsky: No, but that doesn't, you know, yeah.
Atwood: <laughs>
Spolsky: He's just a smart guy. I also, there's a couple of things about Mahalo. One is it sort of disturbs me their traffic seems to be relatively flat like, if it's really going to work it should be taking off. But you know maybe they'll change something and then it will go up. And also I totally, I still disagree with Jason and really don't think that they should ever, um, try to pay people for sex, so to speak.
[02:24]
[06:50]
Spolsky: Tell the listerners what Fizz-Buzz is.
Atwood: Well Fizz-Buzz is a simple test to count to 15, and I think, print numbers at intervals of 3 and 5, I believe ...
Spolsky: Right, so basically you print Fizz, if it's not divisible by 3 or 5, and you print Buzz if it's divisible by 3 or 5. Yeh, this problem is even easier than that.
Atwood: Really!
Spolsky: Yeh! 'Cause Fizz-Buzz has a loop, an if statement and modulo, right?
Atwood: Yep.
Spolsky: And print. This doesn't have print, this doesn't have a loop.
Atwood: Wow, this is even simpler! Wow!
Spolsky: Yeh! I don't want to tell ... fine I'll tell people. No, I'll give you an equivalent problem which is not the same problem.
Atwood: Giving away the secret! I don't think the people that you give the secret away to are going to matter for this one.
Spolsky: It's sort of something like ... is John older than Mary? <Laughter> It's a little harder than that! Uhm, anyway, uh, what happens when I ask this question is that everybody gets it, but some people take a long time to think it out, and they're carefully thinking it through, and they really are struggling, and some people just write really fast and they're done. And then we can move on to more advanced things. And, it suddenly occurred to me, that there was a very high correlation between the people that I hired, and the people that could solve this problem as fast as they could write.
[08:12]
Spolsky: I told this story to Gary Cornell, my publisher at Apress who used to be a math professor at University of Connecticut. Before he became the best-selling author of "Core Java" and started Apress he was a math professor. He said this reminds me of something Serge Lang said to him. Serge Lang is a math professor at Yale who is very interested in math education. Serge Lang at the beginning of freshman calculus at Yale, gave people for no credit, took out, told all the students to take out a piece of paper, and he put a fairly simple equation up on the board and said reduce this to its simplest terms. So this is basically 9th grade algebra. Then after like 30 seconds he said "stop!" and took all their pieces of paper.
Some students were able to reduce this algebra equation to its simplest form as fast as they could write, and some of them really had to think about it and really had to work on it. I would have been in that category, the second category. And he said that the people that could do it quickly was an almost perfect predictor of who would get an A in the course. In other words that was as good a predictor of math ability, as an entire semester in Calculus with problem sets every week and probably two mid-terms and a final. Was just like how fast can you solve a simple algebra problem that has nothing to do with calculus, it is using calculus but it is like a real simple algebra problem. The whole story is in my book "Smart and Gets Things Done".
Actually let me see if I can find what the problem... I can't remember the exact equation. Cornell, page 108, "Smart and Gets Things Done". Oh yeah, you basically had to simplify... our math majors will recognize this ....
[10:20]
[00:59:10]
Joel: So, anyway that was that question, I had another question here.
Jeff: Yeah go for it, we've got a little bit of time.
Questioner: Hi Joel and Jeff. As a recent recipient of Joel's Not-Quite-Ready-Yet rejection emails for the fogcreek stackoverflow position...
Joel: Uh-oh
Q: ... I'd like to know if there's any guidance you can give to an average / slightly-above-average programmer to help them make the leap to a Fogcreek-level programmer? Is a few more years experience really enough? What should I focus on? Does a good programmer without a CS degree really have a chance to get a job at Fogcreek? Thanks guys.
Jeff: I can answer that. Develop bug-tracking software that does exactly what Fogbugz does, sell it for a fraction of the price, and then become hugely successful, and then like, make a million dollars, and then throw it all in Joel's face.
Joel: Ah it's too bad Jason Calacanis is not here to tell you why that will not work.
Jeff: I'm just kidding.
Joel: That's gonna work about as well as that cooking StackOverflow clone that we saw that didn't have any visitors.
Jeff: [Laughing] I had forgotten about that. Now i'll have to link it in the show-notes.
Joel: I should answer this question to be fair. We do have a form-letter we give people that we reject, and the form-letter says "We see many excellent candidates", true, "and just simply, yknow, we are a small company and we simply cannot hire them all and we have to make some very hard decisions about who to hire." But occasionally I'll write a not form-letter, which I did for this person, and I'll either say something like "We think in the future you're gonna be a better programmer than you are right now, you're just not experienced enough". Usually it's that, actually. Sometimes we'll tell people we really want you to consider, basically if you upgrade your skills, we don't think that you'd never be able to do this job, we just think that you're not ready. And, one of the things, there is something, and I think this may be a good thing, it may be a bad thing, but there is going to be a bias in our hiring process, not having a computer science degree necessarily, but two or three courses in the computer science curriculum. Things like systems programming, that algorithms course, and like data structures, it's really like two or three most programming-intensive freshman-to-sophomore-level computer science courses. The whole curriculum is not really necessary. So I would say if you don't have a computer science degree and we rejected you, that is likely just - you know there is a certain class of programmer that comes at programming from a very practical perspective, maybe they learned how to program in a higher-level-language. Somebody whos first language was php, or visual basic, or html. And then they started copying javascript and then they learned a little bit more about javascript, and then they got really good at javascript, and that's all they've ever done, is probably going to flop very very quickly, because when you ask them to do anything moderately low-level like invent an algorithm on the spot to solve a particular problem that you give them, they just don't have enough experience to have done it. A common Fogcreek interview is, you'll be given a problem, some kind of data structure that nobodys ever heard of because we've just invented it, and asked to invent an algorithm that works on this data structure. And that's something that you can kind-of be taught, and you do sort-of have to to be a Fogcreek-level programmer, you have to be able to do that kind of stuff. What I would say is there are a few key things that are taught often in a computer science curriculum which are either courses that you can take or things that you can study on your own. A good start would be two books - "The Structure and Interpretation of Computer Programs", SICP, by Abelson and Sussman, and work through all that and learn Lisp, like really, the whole book. And then a couple of books about C and Unix programming, so I would start with "The C Programming Language", and then move onto "The Unix Programming Environment". If you did all that stuff, and let's say an academic Algorithms course, like "Introduction to Algorithms" - Cormen, Leiserson, and Rivest, and Clifford Stein. So if you worked your way through "Structure and Interpretation of Computer Programs", "Introduction to Algorithms", "The C Programming Language", Kernighan and Ritchie, "The Unix Programming Environment", Kernighan and Pike, you would fill in all those gaps. I don't want to say that's the computer science curriculum, but that's everything we need from the computer science curriculum to make you a good programmer.
Jeff: I like my answer better. Become hugely successful, buy Fogcreek and then just blow it up. Demolish the entire building. And then fire Joel. Make him walk down the street in shame. Then, and only then will you have achieved victory. I think my way is the easier way frankly.
Joel: Do we want to take it out, play the exit music?
Jeff: [laughs] Yes, let's do that.
Joel: [sings the exit music] I listened to Jason Calacanis podcast last week, it's called "This Week In STartups", and I want you all to subscribe to it, it's a good podcast if you enjoyed Jason Calacanis last week, "TWIST" it's called. But it has the stupidest intro music!
Jeff: What is it like?
Joel: I'm not going to tell you, because I want you all to listen to one episode. The intro music is just ridiculous, it's like such poser, Los Angeles, Entourage, B.S. It's just an absolute embarrassment to Calacanis' whole operation.
Jeff: I think Entourage started off with like Janes' Addiction didn't it? I think it is. I could be wrong.
Joel: It's not the Entourage start-up music. It's like Entourage wannabe, semi-rap, "I'm an L.A. rapper, rolling with my boys", kind-of. You've gotta hear it, and you'll just laugh. Jason, change your frigging music!
[01:05:55]
[01:07:51 ends]
Outro, advertising
[69:08]
Intro, advertising
[01:19]
Spolsky: First of all, yes we got a lot of positive feedback from the Jason Calacanis podcast which actually sort of surprised me.
Atwood: That's good because you were very worried about that.
Spolsky: I was worried that our developers would be like, oh ick, he's one of those business guys.
Atwood: Yeah, Jason's pretty cool though, I vetted, I listened to a couple of podcasts he was on and gave him my thumbs up so.
Spolsky: Uh hu.
Atwood: My gut feeling was that it would be OK.
Spolsky: He's like one of the smartest people I ever talked to.
Atwood: Yeah, he's smart but you know I still don't agree that Mahalo is doing the right thing.
Spolsky: No, but that doesn't, you know, yeah.
Atwood: <laughs>
Spolsky: He's just a smart guy. I also, there's a couple of things about Mahalo. One is it sort of disturbs me their traffic seems to be relatively flat like, if it's really going to work it should be taking off. But you know maybe they'll change something and then it will go up. And also I totally, I still disagree with Jason and really don't think that they should ever, um, try to pay people for sex, so to speak.
[02:24]
[06:50]
Spolsky: Tell the listerners what Fizz-Buzz is.
Atwood: Well Fizz-Buzz is a simple test to count to 15, and I think, print numbers at intervals of 3 and 5, I believe ...
Spolsky: Right, so basically you print Fizz, if it's not divisible by 3 or 5, and you print Buzz if it's divisible by 3 or 5. Yeh, this problem is even easier than that.
Atwood: Really!
Spolsky: Yeh! 'Cause Fizz-Buzz has a loop, an if statement and modulo, right?
Atwood: Yep.
Spolsky: And print. This doesn't have print, this doesn't have a loop.
Atwood: Wow, this is even simpler! Wow!
Spolsky: Yeh! I don't want to tell ... fine I'll tell people. No, I'll give you an equivalent problem which is not the same problem.
Atwood: Giving away the secret! I don't think the people that you give the secret away to are going to matter for this one.
Spolsky: It's sort of something like ... is John older than Mary? <Laughter> It's a little harder than that! Uhm, anyway, uh, what happens when I ask this question is that everybody gets it, but some people take a long time to think it out, and they're carefully thinking it through, and they really are struggling, and some people just write really fast and they're done. And then we can move on to more advanced things. And, it suddenly occurred to me, that there was a very high correlation between the people that I hired, and the people that could solve this problem as fast as they could write.
[08:12]
Spolsky: I told this story to Gary Cornell, my publisher at Apress who used to be a math professor at University of Connecticut. Before he became the best-selling author of "Core Java" and started Apress he was a math professor. He said this reminds me of something Serge Lang said to him. Serge Lang is a math professor at Yale who is very interested in math education. Serge Lang at the beginning of freshman calculus at Yale, gave people for no credit, took out, told all the students to take out a piece of paper, and he put a fairly simple equation up on the board and said reduce this to its simplest terms. So this is basically 9th grade algebra. Then after like 30 seconds he said "stop!" and took all their pieces of paper.
Some students were able to reduce this algebra equation to its simplest form as fast as they could write, and some of them really had to think about it and really had to work on it. I would have been in that category, the second category. And he said that the people that could do it quickly was an almost perfect predictor of who would get an A in the course. In other words that was as good a predictor of math ability, as an entire semester in Calculus with problem sets every week and probably two mid-terms and a final. Was just like how fast can you solve a simple algebra problem that has nothing to do with calculus, it is using calculus but it is like a real simple algebra problem. The whole story is in my book "Smart and Gets Things Done".
Actually let me see if I can find what the problem... I can't remember the exact equation. Cornell, page 108, "Smart and Gets Things Done". Oh yeah, you basically had to simplify... our math majors will recognize this ....
1/(x + h) - 1/xwhich is something you do basically to figure out derivatives, and you just have to simplify that to its ....
h
[10:20]
[00:48:15]
Joel: Do you want to take a listener question before we go away?
Jeff: Yes, let's do that.
Joel: Okay, right. I've actually got two that I want to do. [pause] Why is that one so much bigger than that one? Huh. Alright, let's do this one first. Josh Hunt.
[00:48:30]
Josh: Hi, I'm Josh Hunt, and I'm from Australia. Earlier this week, I asked a question—Question 895371—on Stack Overflow, and the first answer was the one that was voted up. It ended up being the most votes after a while, and it's still currently the highest-voted answer, but then, a couple commenters came in and said that the answer was wrong, and that Stack Overflow has kind of failed in this aspect, because it kind of seems to permeate this community that thinks that the first answer is always the best answer, and so people kind of don't read the question properly or don't understand it properly and go write down an answer that's inevitably wrong, but everyone just marks stuff as correct. It ends up as the highest-voted question. So, what do you guys think of this? A couple commenters went on there and stated that it was wrong and kind of thought that this would just be an interesting problem with Stack Overflow and the original author of that answer coming home admitted his fault there. And for the second part of this question...
[00:50:00]
Joel: Ah, wait wait. Okay, let me hold off. There's a good second part here which I'll get to in a second, Josh, but...
Jeff: What was the number of the question again? Do you have it up?
Joel: 895371
Jeff: 895...
Joel: No. Yeah.
Jeff: ...895...
Joel: ...371
Jeff: ...371. Okay, I shouldn't bring this up.
Joel: So, he's got a homework assignment that he plugged in here, and it wasn't working right, so he asked people to say what was wrong with his code, and the number one answer is a little bit wrong, but it's kind of in the right direction, just technically wrong. Now, I want to point out that these have already been resorted a little by the voting, so it's just a matter of time before people will come in and correct these things, so...
Jeff: Mmhmm
Joel: The first thing is: Josh, I don't see that you've accepted any answer. So...
Jeff: Yeah
Joel: Why don't you go in there and find the right answer and accept it. Problems solved.
Jeff: Yeah
Joel: You know what it is by now. And...
Jeff: Right, well, that's a good point though, because people are constantly criticizing the fact that the owner can accept any answer, right?
Joel: Yeah, So...
Jeff: This is a case where the owner actually improving the situation by accepting the correct answer, moving it above the highest-voted answer.
Joel: Sure. That's number one. Number two: there's some really good answers in there. If you scroll down a little bit, Wesley put together a really, really good answer.
Jeff: There are some nice answers in here.
Joel: Yeah. "The first problem is that your code is a little bit confusing because you have a variable named `unsorted`, and it should probably be called `sorted`," just because when you have a double negative, it just gets more confusing than when you have a single negative.
Jeff: [laughs] You don't not want that to... Yeah, it's wordy
Joel: You don't not not want to use double-negatives
Jeff: [laughs] Ohh, my head's squid
Joel: And a few people have pointed that out that you should probably just call it `sorted` and then your code becomes a little bit clearer and easier to understand, and that was exactly my intuition too, because I couldn't even understand what the code was trying to do exactly. But also, don't forget, there are comments in here. The fact that the right answer is wrong was pretty much discovered immediately. So, the truth is, if somebody else had this similar problem—I mean, you yourself could figure out the right answer, and we've done a better job of that, and it's only a matter of time before everybody goes in there and votes up the correct answer.
Jeff: Well yeah, now that we have—gosh, what's the name for this effect? That factory where they were doing that testing? They would adjust the lighting. Do you know what I'm talking about? I don't have the name...
Joel: Yes, the Hawthorne Effect.
Jeff: The Hawthorne Effect. This is what happens on the podcast. We talk about a question, it totally changes the question. It's a little frustrating to me.
Joel: Oh, because everybody zooms in there after the podcast.
Jeff: Yeah.
Joel: No, but even... I just want to announce that as of now, the wrong answer only has five up votes, and the next one after that has four—I haven't studied that to see if that's correct—and there's a pretty good answer here that has four, and what I think is the best answer currently is Wesley's answer, and he currently has two, but it's going to reshuffle pretty quickly, I think.
Jeff: Yeah, and also, kudos to Josh, because this is a good example of how to ask a homework question in a respectful and helpful and interesting way.
Joel: Yep.
Jeff: That's good, because we do get a lot of homework questions that are just gratuitously bad.
Joel: Sure.
Jeff: Kudos to Josh for doing it the right way.
Joel: Yeah, he said, "This is homework."
Jeff: Yeah, first, be upfront about it.
Joel: Yep.
Jeff: Make it useful.
Joel: Yeah, tag it homework.
Jeff: Because a lot of times some of the homework questions are so weird. It's like, "Okay, take these numbers and do this crazy thing to them." Who would ever do this?
Joel: And sometimes, with the homework questions, especially with ones like this, it's like: you just need to learn something, and somebody could teach it to you, and there's just no way to search for that thing that you need to learn on Google. You're like, "What don't I know here?" [laughs]
Jeff: Yeah
Joel: It's sort of like the old BC cartoon where the guy goes to take golf lessons and the golf expert says, "Alright, let me see your stroke." The student goes out and does a little golf stroke. The golf expert says, "Well, not bad, not bad." And he says, "Really, what am I doing right?" And the golf expert says, "Taking lessons!"
Jeff: [mildly forced but respectful and mostly plausible chuckling]
Joel: Ba-dum-bum. Okay, that's funnier in print.
Jeff: Nice.
Joel: So, yeah, sometimes you just want somebody to tell you what the heck it is that you did wrong, and then you show the code, and any expert could figure that out, and that's exactly why we have knowledge exchanges—and just because it happens to be for homework, if anything, that's probably a more legit cause than if you were posting some bug that you had because you had to do this for work, because, after all, you're getting paid to get that right, where the homework, you're just trying to help some students.
Jeff: Ooh, yeah, I had that discussion too.
Joel: Yeah.
Jeff: The work questions are even worse, where it's like, "Do my work for me." [laughs]
Joel: Sure.
Jeff: [while laughing] You're getting paid to do that!
Joel: [laughs]
Jeff: So yeah, that's not good either.
[00:55:00]
[00:59:10]
Joel: So, anyway that was that question, I had another question here.
Jeff: Yeah go for it, we've got a little bit of time.
Questioner: Hi Joel and Jeff. As a recent recipient of Joel's Not-Quite-Ready-Yet rejection emails for the fogcreek stackoverflow position...
Joel: Uh-oh
Q: ... I'd like to know if there's any guidance you can give to an average / slightly-above-average programmer to help them make the leap to a Fogcreek-level programmer? Is a few more years experience really enough? What should I focus on? Does a good programmer without a CS degree really have a chance to get a job at Fogcreek? Thanks guys.
Jeff: I can answer that. Develop bug-tracking software that does exactly what Fogbugz does, sell it for a fraction of the price, and then become hugely successful, and then like, make a million dollars, and then throw it all in Joel's face.
Joel: Ah it's too bad Jason Calacanis is not here to tell you why that will not work.
Jeff: I'm just kidding.
Joel: That's gonna work about as well as that cooking StackOverflow clone that we saw that didn't have any visitors.
Jeff: [Laughing] I had forgotten about that. Now i'll have to link it in the show-notes.
Joel: I should answer this question to be fair. We do have a form-letter we give people that we reject, and the form-letter says "We see many excellent candidates", true, "and just simply, yknow, we are a small company and we simply cannot hire them all and we have to make some very hard decisions about who to hire." But occasionally I'll write a not form-letter, which I did for this person, and I'll either say something like "We think in the future you're gonna be a better programmer than you are right now, you're just not experienced enough". Usually it's that, actually. Sometimes we'll tell people we really want you to consider, basically if you upgrade your skills, we don't think that you'd never be able to do this job, we just think that you're not ready. And, one of the things, there is something, and I think this may be a good thing, it may be a bad thing, but there is going to be a bias in our hiring process, not having a computer science degree necessarily, but two or three courses in the computer science curriculum. Things like systems programming, that algorithms course, and like data structures, it's really like two or three most programming-intensive freshman-to-sophomore-level computer science courses. The whole curriculum is not really necessary. So I would say if you don't have a computer science degree and we rejected you, that is likely just - you know there is a certain class of programmer that comes at programming from a very practical perspective, maybe they learned how to program in a higher-level-language. Somebody whos first language was php, or visual basic, or html. And then they started copying javascript and then they learned a little bit more about javascript, and then they got really good at javascript, and that's all they've ever done, is probably going to flop very very quickly, because when you ask them to do anything moderately low-level like invent an algorithm on the spot to solve a particular problem that you give them, they just don't have enough experience to have done it. A common Fogcreek interview is, you'll be given a problem, some kind of data structure that nobodys ever heard of because we've just invented it, and asked to invent an algorithm that works on this data structure. And that's something that you can kind-of be taught, and you do sort-of have to to be a Fogcreek-level programmer, you have to be able to do that kind of stuff. What I would say is there are a few key things that are taught often in a computer science curriculum which are either courses that you can take or things that you can study on your own. A good start would be two books - "The Structure and Interpretation of Computer Programs", SICP, by Abelson and Sussman, and work through all that and learn Lisp, like really, the whole book. And then a couple of books about C and Unix programming, so I would start with "The C Programming Language", and then move onto "The Unix Programming Environment". If you did all that stuff, and let's say an academic Algorithms course, like "Introduction to Algorithms" - Cormen, Leiserson, and Rivest, and Clifford Stein. So if you worked your way through "Structure and Interpretation of Computer Programs", "Introduction to Algorithms", "The C Programming Language", Kernighan and Ritchie, "The Unix Programming Environment", Kernighan and Pike, you would fill in all those gaps. I don't want to say that's the computer science curriculum, but that's everything we need from the computer science curriculum to make you a good programmer.
Jeff: I like my answer better. Become hugely successful, buy Fogcreek and then just blow it up. Demolish the entire building. And then fire Joel. Make him walk down the street in shame. Then, and only then will you have achieved victory. I think my way is the easier way frankly.
Joel: Do we want to take it out, play the exit music?
Jeff: [laughs] Yes, let's do that.
Joel: [sings the exit music] I listened to Jason Calacanis podcast last week, it's called "This Week In STartups", and I want you all to subscribe to it, it's a good podcast if you enjoyed Jason Calacanis last week, "TWIST" it's called. But it has the stupidest intro music!
Jeff: What is it like?
Joel: I'm not going to tell you, because I want you all to listen to one episode. The intro music is just ridiculous, it's like such poser, Los Angeles, Entourage, B.S. It's just an absolute embarrassment to Calacanis' whole operation.
Jeff: I think Entourage started off with like Janes' Addiction didn't it? I think it is. I could be wrong.
Joel: It's not the Entourage start-up music. It's like Entourage wannabe, semi-rap, "I'm an L.A. rapper, rolling with my boys", kind-of. You've gotta hear it, and you'll just laugh. Jason, change your frigging music!
[01:05:55]
[01:07:51 ends]
Outro, advertising
[69:08]