Competition
Scott Hanselman, Rob Conery, Jon Skeet, David Fowler, Aaron Jensen, Daniele R. Banks
Scott Hanselman: I play Angry Birds. And I've had my Angry Birds obsession. But, seriously, three stars on every level? I mean, I like marching through the hundred and eighty-five thousand Angry Birds levels as much as the next guy, but I don't know my score. I like X-Box, but I don't know my achievements. I like Stack Overflow, but I don't know my points. I know how tall I am. I know how fat I am. But that's as far as I go. Numbers like that... scores aren't my thing. I'm not competitive... like that!
Jon Skeet: Obviously, I keep an eye on the numbers. The current, um, number that I'm keeping my eye on is my number of silver badges. I think I'm at nine-hundred and fifty-four or something like that at the moment. So obviously I'm trying to get that to a thousand, so in forty-seven more badges time I will expand the number of digits in my flare. And that's always slightly exiting.
Rob Conery: I like to surf. And it's a wonderful, zen-like sport. Sit in the water, catch some waves. And I out here where I live in Hawaii they have the best waves in the world. And there's a spot right down the street from me that is one of the best waves in the entire world. Will I surf there? Not very often. Not much aloha in this line up.
Aaron Jensen: Whenever I get into something I get very intense about it and do it all the time. And almost to a, well, definitely to a detriment with poker. It was... I definitely played a lot. I don't necessarily like the person I become if I play too much poker.
Jon Skeet: Of course I'm right, I'm Jon Skeet.
SH: I'm just not wired that way.
Daniele R. Banks: I slept that whole next day. I was physically hurt.
RC: Some people just want a set of rules. They want to know the numbers, and they want to pound you right into the ground. That's what we look at this week, episode 13 of This Developer's Life. Competition.
DB: Anything it touches, ram it!
SH: Arguably, we're all competitive. We all want recognition of some kind: a raise, a promotion, a pat on the back for delivering an application on time. We sharpen the saw, we study up, we read books, practice, we watch videos, we compete against ourselves. But for others, it's not so easy. They need to compete against you. And they need to win. Believe it or not, there is a competition for coders. It's called Top Coder. As you might have guessed, it's the Top Gun for geeks.
Act 1: Top Coder
David Fowler: So, Top Coder is a competitive website where programmers of all ages compete for money, and for, I guess, pride, rankings. It's kind of like any other sporting site, but just programming instead.
RC: This is David Fowler, a developer at Microsoft.
DF: There are different kinds of contests. There's, um, algorithm contests, contests for designing software. And you know, you... you compete against a bunch of people online. And you have handles, um, that are also usernames. And, um, you compete and you can win money if you are good enough. So, there's division one and two. So, I mean, mostly, I think I've done algorithm competitions. And they're... they're kind of quick problems that you have to solve. And there are different divisions, there are division two and division one. And there are three problems in each... in each division. Two-fifty, five-hundred, one-thousand. And the way it works is you have a bunch of time in the contest, right. And from the time you open the problem, the score ticks down. So, so the max you can get for [a] two-fifty is two-fifty points. And then, every second you... you waste, like, trying to figure the problem out, your score is going down. So, you have to solve problems quickly and accurately to get the most points.
RC: I like writing code just like any geek. But, you put a timer on me, and a bunch of other geeks in the room that are staring me down ... I don't know, I just don't think I could do that.
DF: It's good to challenge yourself mentally. But, if you want to be brought down to Earth, like, do a Top, do a bunch of Top Coder problems. Because you may think you're a great programmer, right? But, it's a different mindset. It's... it's not like coding, you know, SQL, or... or you know, coding, like, an application where you have time to think. You kind of have to train yourself for these contests. So, you have to practice questions and... and just, you know, answer questions and, you know, know algorithms off the top of your head. You have to figure out how to identify, you know, based on the problem's constraints if you can use brute force or if you have to use, you know, a specific algorithm's technique or ... some people take it pretty seriously, like ... there was also the ACM competition at school. So, when I joined school, my first... my first year, um, I went with some friends to the ACM contest, and the top three from our school contest get to go through the regional. And it was me and two other guys. My friend from Romania, and one from Italy. And we competed, and it was.. it was kind of weird. Because, you know, we were all used to programming in, like, Visual Studio on Windows and C++. And in the contest, the first thing we had was, like, Linux and we were, like, totally lost. And we still managed to solve two of the seven problems. And it was pretty bad, but it was out first year so we didn't really care. But, it was... it was pretty fun. Because it was a new environment, you know. People sitting in their room together, trying to solve problems, you know. And then... So, you get about nine problems, I think. And, you have to figure out what strategy you're going to use to solve them because there's one computer, three people, and nine problems. Normally, you'd have people, you know, like, you split up the questions equally, and you read them, and then the easiest one, you let someone do it first on the computer. And then, while that person is... is figuring out one question, one other person is trying to solve one on paper so that when one's finished, they can, you know, move on quickly and switch and such. And you get balloons, when you solve questions. So, what happens is, um, you look around the room and you see a bunch of balloons of one color. There is one color per problem. And you end up seeing, you know, this problem is probably the easiest one because there's a bunch around me, right, so you try to figure out which ones are the easiest ones to solve. I don't think speed matters in the real world, like, so much as it does in these situations. I mean, you know, doing interviews, at Microsoft or any other tech company is kind of like doing these coding questions. Because you're constrained and you're in this, you know, room where you're nervous and people are kind of staring at you and you have to solve the problem on the spot. It's kind of the same way, right. You enter a competition, you open a problem and you feel that you have to just figure it out on the spot. A lot of the times the code in these contests end up being pretty nasty. Because they don't care about coding standards, right. I mean, like, there's macros ... I've seen people take, like, a bunch of prime numbers into an array and copy and paste, like, a big array into the top of a [unintelligible] just for speed, right. Or, you hard code a bunch of parameters, and they, you... you never need past a thousand, so they have a list that they copy and past around, you know, for every problem.
DF: On Top Coder, it's pretty interesting because there's a round of solving problems. I think it's an hour, an hour long. And then, after that, you get to challenge people's code. And what that means is, there may have been a problem that was pretty tricky and you have some inputs that you think people didn't handle correctly. So, you can actually open their code, right, and enter test cases that you think will break their code. And then if you... if they, if they failed... if your test case failed on their code, you get fifty points and they get zero points for that question. Because, you're like, "oh, this question's kind of tricky" but, you know, there's usually, like two edge cases. So, you mark it down. And then, in the challenge phase, you can, like, just build cheap points because people forgot to, you know, cover those edge cases.
DF: Answering questions, just trying to get points on Stack Overflow, you know. It's kind of similar in that you want to be a badass because you want reputation. You aren't constrained in the same way, right. You could... you could answer a question you know nothing about by Googling for something and then answering it, right. As opposed to Top Coder, like, it's a lot harder because of the constraints.
DF: I remember one time at school, my last year, we went to -- this is kind of embarrassing -- we went to Disneyland... Disney World, Disney World in Orlando. And we went there, not to go to the park, but to watch the Top Coder Open Final. The nerdiest thing I've ever done in my life, but it was fun, it was fun. I mean, I kind of knew it would have been fun, it was fine.
RC: So, why does he compete writing these algorithms? The part where he said he just copy and pastes an array of primes? I mean, that's kind of intense.
SH: Well, it's intense, but it's intensely brilliant, right? He knows that this is not a test of writing, uh, the tightest code, or making the computer work as hard as possible. This is a test of correctness. It's as much about math and algorithms and how the, the world works and how the laws of physics fit together. It's less about coding as it is about raw brain power and, uh, copy pasting an array of primes is not the hardest part of this competition.
RC: Well, the part where he was talking about, um, being able to torpedo someone else's code by writing a test where he, you know, he says "you're wrong! And here's a test to prove it." I love that part.
SH: It's almost like TRON except way, way more boring.
RC: [laughs]
SH: I mean, if someone were gonna do TRON, it would not be light cycles, it would be a guy writing a unit test to break another guy's code and then they'd be like "pew, pew, bsh" -- it would be like sound effects.
RC: When he describes going to Disney World to watch Top Coder, the championship, that just melted me. I thought that was... that was one of the geekiest things I think I've ever heard.
SH: That's what he does! It's like going out with your friends. You're Top Guns, you go to the bar and you hang out except the geek go to Disney World and watch other geeks.
Act 2: From Programmer To Poker Player
Aaron Jenson: Test, test. Uh, I can move, is that any better?
RC: So, who's this, uh, who's this we're, in the background we're listening to now?
SH: Alright, well, this, uh, this is Aaron Jenson. He's a well-know, uh, dot net developer, a Ruby developer. Just an all-around great developer, and he was really active in the, uh, dot net space, and the alt dot net movement, and he decided one day that he wanted to see what it would be like to be a professional poker player.
AJ: I think that the first time I ever played Hold 'Em, so not counting, like, five-card draw when you don't really need to know how to play poker, was in Havasu. We were there camping and one of my buddies was like "hey, check this out, let's play some poker." And we hopped in the back of his truck, in the bed of his truck, and he got out a deck of cards. And, I don't remember what we used for chips at the time, it might have been like pretzels or something. And, uh, he taught us the rules for Hold 'Em, you know, showed us what the flop was, and the turn, and the river, and... It was kind of confusing at first, you know, getting dealt two cards, and having to play with the community cards, but I quickly, kind of, got it. And, so we played that for a couple of hours, and drank, and traded pretzels, and whatever. And, it just kind of escalated from there. Uh, so, I went out and got books, you know, Sklansky Super System, and Theory of Poker, and Hold 'Em for Advanced Players, and all the, all the, kind of, classics. And, I started reading those, and started playing online, and just kind of ... escalated.
RC: To a highly competitive person, finding a good game, well, it's like finding a good drug. All that's left is to know the rules, and know them cold. Get the numbers down. Let's do this thing.
AJ: I started to realize, "hey," you know, this provides me some interesting challenges, over and over again. And each challenge is completely different. So, each situation is... is different. There's all these variables that I have to... that I have to take into account. And, I've got a fairly simple set of reactions that I can make based on those variables. But... but, they're very drastically different in their... in their effect. So... so, the decisions you make are very important. You don't have a ton of time to make them. And, it's just... it's just really, really challenging. So, I think that aspect of it kind of, uh, set off a light for me. And, whenever something does that, I'll go out and I'll go crazy and go get, you know, I think probably... I've read probably fifteen to twenty poker books, at least halfway through. And, uh, the first time I buy books, it'll be like five books at once. And, I did that with poker, and I think that's... it's just the challenge that interested me.
AJ: It is deceptively simple. I mean, it's... it's one of those things you hear people say, uh, see, what is it, like, uh, a few minutes to learn and a lifetime to master? Like I said, the rules are very simple. But, the depth and all the different people that you play against. I mean, first of all, in Blackjack, you're playing against a robot that does the exact same thing every time. So, there's no... there's no variable there. The cards differ, yeah. And, in poker, the cards differ. But, your opponents also differ, and the stakes differ, and the amount of money that each player has in front of them differs. And, the size of the pot differs with respect to your stack. And, the actual situations differ drastically. I mean, you could be looking at two pair, and you know that he's got a flush draw but he probably also has a strong pair, and... and, I mean, that's a different situation than if you just had a flush draw. And he's going to react differently in that situation. And you have to... you have to adjust for that. So, I think that to someone who's a casual player, yeah, you get cards, you either get a big hand or you don't. You win money when you do, and you lose money when you don't. And it... it's very, very simple. But, to someone who is kind of trained to see the nuances, they see them and not only that, but they can exploit those to create an edge. In Blackjack, the only real way to create an edge, is if you count, and uh, you get a very, very slight edge. In poker, those edges are much more drastic against players that you are better than. So, that's what makes it more interesting.
AJ: Programmers, for the most part, are very analytical. And can, kind of, understand lots of different variables, and, and solve the... solve that problem. And I think that they're particular way of thinking is... is beneficial in... in poker. For me, at least, I think that the way I think when I program and the way I think when I play poker, they're pretty similar. I'm definitely competitive in... in poker, and that sort of thing. But, I don't consider myself to be competitive in programming. So, I... I kind of have two different lives there, and two different personalities depending on what I'm doing. When you play online, you're playing ... you know, I would play, in the beginning, I'd play one, maybe two tables at once. Later on, I'd be playing eight to ten tables at once. And so, each online table, you're playing about twice as many hands as you are in live poker. So, if you're playing ten tables at once, you're playing twenty times the hands that a person playing live poker can play. So, internet poker players can get a lot more experience a lot quicker than a live game player. And, they get exposure to lots of different scenarios. Of course, none of the physical aspects. But, there are tells online. And, so, it's just practice. Whenever I get into something, I get very intense about it and do it all the time, almost to a ... well, definitely to a detriment with poker. It was... I definitely played a lot. Quite a while ago, I more or less left the scene and, uh, then I started back up again briefly about six or... six months ago or so when I got onto a TV show and so I'd decided I wanted to make sure I still remembered how to play if I was going to go up against Daniel Negreanu and Vanessa Rousso on national television. So, I practiced some and then did the show and played a little bit more afterwards, but I kind of fell out of it again. I don't... I don't necessarily like the person I become if I play too much poker.
AJ: Very emotionally draining game. Uh, it's probably the most draining thing I've ever done. And playing it for long periods of time is... it's physically tiring, it's emotionally tiring, and it... it can start to affect the rest of your life. And ... at least for me. I mean, other people can separate it well. I did a pretty good job of separating it, but after a while it just kind of eats at you. And I'd play it too much, or.. or, it would kind of... a bad session... a couple bad sessions in a row might ruin a day. And, in the end it just wasn't... it isn't worth it. Programming generally doesn't have the effect of winning or losing tens of thousands of dollars and... or more. And, uh, you know, those.. the... sort of emotional swings that come along with that. It's not as fairy tale as it sounds like. There's... there's... there's very few players that it actually is. I mean, most of the pros that you know about have been broke at one time or another. And, uh, those of my friends that played professionally for a long time, it was... I mean, they worked harder than I did. And, just playing poker, day in and day out. Generally speaking, in the long run, your... your skill will shine through. There are short run... especially up spikes. I mean, you win the world series of poker... I don't care if you've played every world series of poker -- if you win one of them, you got lucky. And, because there's such a big field in order for you to get there, I mean, sure you have an edge on everybody, but straight up, you got lucky. Um, but for regular cash game players and smaller tournament players where they have enough of a bank roll to play thousands of the tournaments at the same level, or, you know, tens or hundreds of thousands of hands at the same level -- that'll even out, and then the luck kind of disappears. And, you do start to see this... this even... this even curve or.. or line of revenue, one way or the other. Luck runs out, and like I said, you play tens of thousands or hundreds of thousands of hands, and you can be the luckiest person in the world and if you're a terrible poker player, you'll go broke.
RC: So, Aaron likes the shifting variables. And, I think it's safe to say the guy, well, he attacked something that seemed to scratch whatever itch he had.
SH: Yup, twenty poker books. He just didn't learn poker, he grokked poker. He drank it in until it became a part of himself. He got so good at it, he started to make money.
RC: So, it's back to the question we started the show with, what is this from? Is this a way for these guys to prove themselves? And, you know what's interesting, if you talk to developers long enough about reputation and competition, uh, there's one thing that they all bring up, in fact, I think Aaron even brought it up... uh, in fact, all of our guests today brought it up...
Cheesy Disembodied Voice: Stack Overflow
SH: Yup. And there is one guy, who is, by a massive margin, the king of Stack Overflow.
Jon Skeet: Of course I'm right, I'm Jon Skeet. Just saying that makes me feel dirty.
[laughter]
RC: That quote's funny. I... You know, I know Jon's gonna... Jon's probably not going to be happy that I keep playing that quote, but it's just wonderful. Because he is one of the nicest guys, uh, you could talk to. But, you know, you said something to me the other day, and I think it was after your interview with Aaron. And you said "have you ever talked to somebody that's so smart you just..." I think you said "shrink."
SH: By the way, I want to make that Jon Skeet my ring tone. [laughter] Aaron is... is... is one of those guys that is so smart. He does make you... ahh, well, you know, one of the, I think, great things about being in the community is that, uh, it reminds you that you're not the smartest guy in the room. And both Aaron and Jon are so smart. But, they're also nice guys, they're comfortable with it. They're not obnoxious, but they are okay being that smart. And they just know it.
RC: Skeet's the same way. And, uh, he doesn't, you know, he doesn't want to hit you over the head with what he knows, despite the little sound clip I'm playing. He was being facetious. I want to make sure that's clear. I mean, he really, just really wants to help you out. So, we started out talking about the idea of helping people. And, uh, turned into a discussion about a previous job I had as a lifeguard in college. So, I asked Jon: "Are you a C# lifeguard?"
JS: So, the great thing about Stack Overflow is... you said you saved four people in twelve years. In Stack Overflow, people post when they've got a problem. I get to help those people all the time! It's fabulous! There is such a high just from someone posting and, maybe they've been at the problem for two days or something. And you can solve it 'like that' because, not because you're the smartest guy in the world, but because you've been there before. You've seen exactly that problem. In some cases, you know... you know that if there's something saying "double arithmetic isn't working properly" it's, yup, you don't understand floating point arithmetic, you probably want to use decimal instead. Everyone's been there. We've all made the same mistakes. I can help you avoid that problem again. So, I get to help people all the time, and that's why I love Stack Overflow so much.
RC: Well, if you don't know what Stack Overflow is, it's a question and answer site where you can go and answer programming questions or ask one, if you have one. And, when you answer one successfully, then you get some reputation score. And, uh, well, it's kind of like a competition for coders to see who knows what. Well, Jon is blowing away all other users by, oh, by a healthy margin. He has two-hundred and sixty-eight thousand points. And the next closest users has only a hundred and ninety-nine thousand points and that's Marc Gravell.
JS: It's a healthy margin, but there are some people who, uh, quite often do better than me on a weekly or monthly basis. So, um, actually, it was one of my suggestions a very, very long time ago, um, that got implemented probably about a year ago, something like that, that... because, if you came new to Stack Overflow now, you might see my score or even, you know, other hundred k plus scores and think "there's no way I can compete with them. I can't get known, I can't do anything." So, we also have, uh, weekly, monthly, and quarterly leagues, uh, which show how much reputation you've gained in a week. You know, I think it's Sunday to Saturday, or over a calendar month, or over a calendar quarter. So, I can see that every week there is someone who is beating me, almost every week. Um, and has been for the last six months or so. Um, so, last year, it tended to be a guy called Nick Craver. And, fortunately, he's now been hired by Stack Overflow. He's busier, he doesn't have as much time. Um, so, I don't need to worry about him as much. He was gaining really quite quickly. And, now, there's a guy -- I'm just looking it up -- a guy called Darin Dimitrov, or Dimitrov [pronounces differently] -- apologies Darin if I'm completely mispronouncing your name -- um, who is also creeping ahead on a weekly or monthly basis. But, I know I've got quite a long way for them to catch up. Darin's one of the top users, certainly, but he's a hundred and twenty thousand behind, so if he gains, say, two thousand a month on me, which is quite a lot, then I've got five years to, sort of, get back into my stride. So, overall, I'm not too afraid of the, uh, of losing the total number one spot.
JS: But, I, uh, I try to keep an eye on things, and you see some people occasionally, uh, making huge efforts. And you can see some really immense scores on a per-day basis. It's interesting. There isn't a... a one-day league, so you can't see how well you're doing today compared with everybody else which, I think, would be quite useful and I might suggest that to Jeff as a feature request at some point.
JS: I tend to see -- on a Monday morning, you can see the week so far, which means what happened on Sunday. And then, I will often be, you know, number ten, something like that. Because, people have really good days. You know, the chance on any one day of me being top is very, very slim. Um, because someone will have said "right, I'm going to have hours" and they'll get a bounty of five-hundred -- I almost never get bounties. Um. So, on the first day there'll almost always be plenty of people ahead of me, but I'm kind of slow and steady, if you see what I mean. I gradually tend to get to number two or number three. Um, sometimes I'll have a really good week or a really good few days. Um, you know, it's rare that I get five-hundred on a day. Um, but if I get five-hundred for a couple of days, which I did in July or August, I think. I can't remember whether Nick was on holiday, and I thought "this is a chance to catch up! I've got a chance to really get ahead, at least for the week. You know, I can have one week where I'm beating Nick, hurrah!" Um, and I think I might have done. Um, and I had two or three days where I got over five hundred in the week which is almost unheard of for me. Um, so, I think competition's really healthy. And the fact is, Nick and I very rarely see each other on Stack Overflow because we tend to answer different questions. So, he's answered four and a half thousand jQuery questions. I suspect I haven't answered any, or at least not knowingly thinking that they're jQuery. And he's answered two-thousand Javascript. I'm almost all C# and Java, basically. I tend to answer questions that haven't got any other good answers. Because otherwise I'm wasting my time. If someone else has already answered a question well, then, it's not that I won't get rep for an answer, but it's providing something that someone else has already done. And the... the important thing on Stack Overflow is to get answers to people and disseminate information. Yeah, I'm not going to claim I'm some hugely, um, altruistic person who doesn't care at all about rep. Obviously I do. You know, it's a game. Um, but at the same time, that's not the main point of it. And, I would rather post an unpopular answer, um, that might make people think a bit than go for something that's... that I know would get loads of votes, whatever, but not actually do the world any good. All right, I guess the only evidence I have for this is that I... I used to post a lot on newsgroups where there wasn't any reputation.
RC: On Stack Overflow, knowledge is king. The more you know about different subjects, well, the more questions you can answer, and the more reputation you get. So, I asked Jon if he was ever tempted to do something like Aaron's strategy. Maybe kill two birds with one stone. He can go get a book about jQuery, answer some jQuery questions, put the hammer down on his competition.
JS: Oh, no, no, no! I have never... I've definitely looked up things. I've done some research, um, on the grounds that then I can answer a question on Stack Overflow. Definitely. But, only if it's something that's interested me, and it's there and then. I've never researched something in advance thinking "hey, this would be a popular topic." And, I guess, if you wanted a really good strategy, you would use the data explorer and find some tag that there are loads of questions and very few answers. Um, so, interestingly, the jQuery tag, where Nick Craver, um, certainly was posting a lot on is, you know, still very active. Um, tends not to get as many answers and not as many votes. But, um, after... after you reach two-hundred, the rep cap for the day, um, it's all about accepted answers. You don't care whether or not you get any votes, you just want accepted answers. So, in a way, Nick's doing well with jQuery where there are relatively few answers per question because not as many people have the knowledge, I guess. There are, obviously, fewer questions than for, say, C#. Yep. C#, huge number of questions posted, often many answers per question. And, because lots of people are looking at the C# questions, you'll get lots of votes on them as well, which is great if you're interested in votes.
JS: You could think of the nemesis for any particular question is the other person who's looking at it right now and knows the answer. Uh, because, for better or worse, Stack Overflow is largely time-based. If... if I see that someone else has written a good answer already, I won't bother answering. If someone else sees that I've already given an answer that they think is okay, then they will... they will not bother answering that one. So, largely, getting in first really does make a difference. Being able to type fast is really handy. Um, knowing that if just do a search of MSDN and the name of a class, you're likely to get a link quickly is handy. You know, the strategy of: write a basic answer that says "it's failing because you've done this wrong. Sample code coming." Post it. Edit it. Put your sample code in, fix up all the links, etcetera. That kind of strategy, I guess, maybe is what you were thinking of before. It's really about speed, so whoever happens to be looking at C# questions, or Java questions at the same time might be my temporary nemesis. There's no one in particular. As I say, Marc Gravell often posts at the same time as me in the morning. Um, but quite often we'll have a banter between two answers. So, just this morning we both answered on some Linq question and given, sort of, different sides of the same answer, and then both of us updated our answers to include some of what the other guy was saying but with a bit more detail as well. And, everyone benefits, really. You get, um... Even... even if you've got the same ideas expressed twice, just expressing the same thing in different ways can help different people get it. Um, one of the nastiest things to try to explain, I don't know whether you've ever tried to do this, is try to explain the difference between a reference type and a value type. Without... for someone who really hasn't a clue at the moment. You know, you've got no common points of reference, and the word "reference" is overloaded because there's "pass by reference" and "a reference" and "a reference type" and ahh. And, I don't think that any one person's explanation is universally good enough. Okay, I've tried to explain it, probably, hundreds of times. I've found metaphors that I particularly like. So, it's really good to have the same ideas expressed by different people in different ways, especially if those people then comment on each other's answers in a friendly and constructive way, and think of extra bits along the lines of the other guy's answer. Say, "ahh, but have you thought of this bit." It's fabulous. Um, so, the competition on Stack Overflow is generally, and, there are exceptions where things get a bit nasty, but, um, it's generally incredibly constructive. And, I... I don't know exactly what the magic sauce is with it... I don't think it's just reputation. It's not just badges. It's not just that the editor's really good at... They've got a magic mix of getting all of the important bits right. Enough of the important details are just really nicely done that it fosters this culture of friendly competition. And it is, by and large, incredibly friendly. People get a bit hit up on meta, meta Stack Overflow, but that's part of the point of meta Stack Overflow. Um, you know, and a lot of the insults traded there are not really meant seriously anyway. Um, so people can be incredibly rude and that's fine because it's on meta and so long as everyone knows that everyone's just joking, then that's fine. But, in general, compared with almost any other internet community I've seen, Stack Overflow is insanely positive.
RC: Jon has nothing but respect for the people he is competing against, Stack Overflow. He's got nothing but love for the site and its rules. Make no mistake, he may be a really good sport, but he really, really, really wants to win.
JS: This morning, I think I was on the bus, or possibly on the train when this happened. So, I was on a 3G network, and you have no idea how frustrating it is when you hit "post" and the network dies. And this happens several times a day, um, when I'm on the train either on the way to work or from work. The 3G network can be pretty flakey. You've got an edit, and it's spinning, and you think "well, quite often that edit gets there and then it takes a long time to refresh the page afterwards." So, you start up another tab and try to find out whether that edit's made it. So, there's the whole network is an enemy in itself. You're... if you're on a slow... slow connection, you start whatever queries you think you'll need in other tabs. Then start writing something. Um, expand the appropriate bit of browser so that you can get the code from the question, format that as quickly as you can, and really try to get an answer that will get to the heart of it but maybe not have all the details that you want, as quickly as you can. And as soon as you've hit "post," and you can see one answer, and it's yours, you know that you've got the oldest answer. Whatever else happens, even if you edit it, or whatever, however much you edit it, you've got it then. Now, that doesn't mean, in any way shape or form, that you're going to, uh, let's say, win the question. You know, get the accepted answer, get the most votes, whatever you want to think of as winning at the time. I will be absolutely drawn like a moth to a flame by any C# question that is genuinely about the language. So, it's not saying "what does this method do?", you know, "why isn't my HTTP web request coming back to me", whatever, but something that's genuinely about the language, um, and I don't know the answer. That will get me every single time. But, if it's something that's stumping me about C#, then unless Eric Lippert or Jared Parsons or someone like that, you know, someone from Microsoft, um, unless one of them is looking at it at the same time, chances are it's going to be stumping other people as well. And that's a real buzz. Um, I've just realized it is incredibly sad to say I get a real buzz from reading the C# spec. I was under no illusion that I was a cool kid, but that is the epitome of sadness, surely.
JS: I have huge amounts of respect for the compiler guys. They are... they do an outstanding job. So, it's really rare that you find a bug. One time, it was, you know, if you put the compiler into C# 1 mode, it doesn't always catch everything that you can't do in C# 1. And that's fair enough, you know, that's... that's not the point of it. So, I don't think that really counts as a bug but it was a surprise. Um, another time, I came up with something particularly weird with overload resolution using a generic method and a params array where we weren't passing any arguments, so it was going to end up with an empty params array, and that didn't do quite the right thing in terms of, um, overload resolution. So, this is incredibly obscure. Um, and I knew that the same thing worked, you know, worked properly using an optional parameter instead. And that's how I'd happened to solve this particular puzzle before. Um, but someone in the audience had suggested using a params array. And you... you're standing there on stage saying "I'm sure this should work." And it's... it's just a really bizarre feeling.
RC: Wow, he's found compiler bugs!
SH: He's Jon Skeet.
RC: It's not Human.
SH: Okay, well. It makes sense. That answer is two things at once, right? He likes validation that he knows something. Even that the very experts who wrote the language don't know. You know, it's like a triple word bonus, right, like in Scrabble. Uh, you know, you know this and you put it in the right place, get the triple bonus. He loves helping others, but when he gets a chance to help them and the people he really admires, it's a drug to him.
RC: Yeah, and it goes back to um, you know, when you're a kid, right, with your dad, or your big brother, right, scruffed up your hair, pat you on the back and genuinely says "Thanks! You know, that was a really good job!" And you get a glow, it feels really good.
SH: Yeah, absolutely, I mean, on top of everything, you get the approval. And, you know, honestly, I don't care who you are, whether you're the president or you're Jon Skeet, approval is good stuff, especially when it comes from the top. I wonder if he's ever been stumped. Did you ask him that?
RC: You... you know... you know what, I didn't, and it might be kind of hard to understand why, but pretty much Jon won't give up. I mean, we're talking about programming here. We're not necessarily talking about, um, you know, magic or voodoo, but it did bring up another subject, really. What happens when he's not necessarily stumped by the question, but what if he's stumped by the mechanics or the rules. You know, you get frustrated because maybe someone says or does something or maybe the site behaves in a weird way. We got into the discussion about the dark side of Stack Overflow.
JS: Oh, it can get incredibly annoying. If you know that, particularly, if someone has come to a question, so the, the questioner themselves has said "why do people say that Java doesn't use pass by reference when it clearly does and here's an example?" And you write a really, as clear as you possibly can explanation of "no, it's passing by value but the expression you're passing is a reference" and you go through all kinds of examples, but someone else, um, is under the same misapprehension that the first guy is, so they write an answer that concurs with the... the state of mind that the questioner has come to the question in. So, of course, he marks that as the accepted answer. And, I've seen this a few times, where the accepted answer will be, you know, minus ten or something because everyone else, the rest of the crowd is with you. And, they'll boost your answer, kick the other one down, but no, because the guy wants to be told that he was right to start with, that'll get the accepted answer. Um, so, yeah, that's slightly annoying. I've had another bit where the system has been sort of working against me. Um, it happened just, just now, where there'll be two answers, yours and someone else's, or mine and someone else's because I suspect this doesn't happen to other people quite as much "yeah, I like both your answers and yours is a bit better, but I'll accept the other one because you've got a lot more rep than the other guy." And to be honest, it's hard to get annoyed about that. Um, because that really is just, just a tick, just fifteen points. I really don't care that much. I would care somewhat more if the other guy in question was Nick Craver, or Darin Dimitrov, or, you know, someone else I feel is hot on my heels. But, yeah, it... it's something that can get you minorly peeved. I'd say actually the, you haven't quite hit the real dark side of Stack Overflow which is when you get to a question that you care about so much and you get into an argument with someone that you can't sleep properly because you've posted this answer just before you went to bed, and you just want to know whether... whether the guy has come around to your way of thinking or something like that. When it starts interfering with anything else in your life. So, I mentioned sleep, but, you know, if I won't come to dinner quite on time, ah, because I've got a Stack Overflow answer that I just want to finish. Um, or if I forget to get off the train at the right time, which I hasten to add hasn't actually happened due to Stack Overflow. Or, some other way in which it could actually interfere with your life. At that point, I think that's really the dark side. And that's really you competing with sense, sanity. So, yeah, everyone's got to be on the lookout for that to some extent, because there's... no doubt that Stack Overflow is somewhat addictive.
SH: Yeah, well, you know, Aaron actually said pretty much the same thing about his obsession.
Aaron Jenson: I don't necessarily like the person I become if I play too much poker.
RC: You know, it's interesting that Aaron seems to have found his off switch. Um, you know, his ability to reflect on the level of competition he reached and say "you know, enough is enough."
SH: Right, whereas Jon, on the other hand, seems to have the ability to stay a perfect English gentleman.
RC: Yup, that he is. But, I think, you know, there's still some missing pieces for me. Um, I actually called Jon back, uh, to ask him some more questions. Specifically what he said about finding a bug in the compiler that... that really just fired him up. That was his favorite thing. So, I asked him "what... what is it about that that is so enticing to you?"
JS: So, imagine you're watching a chess game between two master chess players. And you spotted, mate in three. But, the game went on for ten moves, twenty moves, whatever. Can you imagine the buzz that would give you? Here are world-class people, and you got there first. You found a mistake they've made. Well, it's a bit like that with me if I find a bug in the C# compiler because the amount of respect I have for these guys is insane. They're... the C# compiler is brilliant. I have no idea what it's like internally. It may be hideous code, I don't know. But, it works fast. It gives good error messages. The language is well-designed so that normally if something goes wrong you know why it's wrong. The specification is very, very well-written. There are hairy bits, certainly, but it's very, very well-written. So, just on the occasions where I can, effectively, find a flaw in the work of a master, that's what, particularly, drives me. Um, you know, it's... it's almost being cheeky. You know, I'll send a mail to Eric and Mad [?] saying "hey guys, I think this may be..." I, you know, I usually word it in a fairly, um, not fawning way, but... "let's assume that I've just read the spec wrong because that's quite possible, but maybe it's a bug." Being able to write an email like that, and eventually find out, and occasionally, um, even the language designers go "uh, yeah, that should, hmm, should it work? Ah, um, it's a tricky one, yeah. Ah. Yeah, it should, and it doesn't. Hey, nice spot!" And, oh, it's just beautiful! Beautiful!
JS: I'm Jon Skeet. I work for Google. I'm in the Android market team. Very proud to do so, but I don't speak for Google, I don't speak on behalf of Google, so anything I say in this podcast, or any other time you hear me, unless I've got something 'round my neck saying "I'm speaking for Google," I'm really not, it's just me.
RC: Do you speak for C#?
[laughter]
SH: You know, I would have loved to have met Jon Skeet before he was Jon Skeet. Like, when he was just getting started. Like, was he always this competitive? Or, you know, was he always this affable?
RC: You have to think of the kid in the Darth Vader commercial. Did you see that at super bowl, did you see that commercial with the kid in the Darth Vader outfit?
SH: Right, right, it's difficult to deal with because he's Darth Vader but he's also, like, a four-year old, cute, little kid.
RC: Right. I imagine Jon Skeet running around the house trying to use the force on just about everything in there, use his brain to move things.
Act 3: Career as a Competition
RC: Well, speaking about just getting started in your career, Sarah J Chipps brings us the next story from a student of her's, Daniele Banks, who's essentially attacking her new career as if it's a competition. Lining up all the pieces, taking all the classes she needs, including entering a twenty-four hour competition where she has to build out the most violent robot that she can.
Daniele R. Banks: Um, I am a part of a lot of the startup digests, email list serves. And so, every Monday, I get all my little emails, and actually, it, like, makes my whole Monday morning. But, um, so I read all of those and they talked about it. They had... it was on their list of things for the week, was this hack club, and there was a puzzle. And it was mysterious, and I was like "this is so awesome." And robots. I was just, like, floored. It was interesting, because, like, that was a big part of their sell, like, you know, it's not going to be like all the others. And I was just so happy to play with the robots, I didn't even care. The robots was kind of what drew my attention. And then the days before it, I started to wonder. I was like, "wait a minute, what is this now?" Like, I started to Google, you know, mindstorm. "Okay, what do you have to know?" And, you know, "kids build this, so I should be okay, right?" But, I think the more media I saw around it, just in my little world... blogosphere, um, the more I started hoping that it wasn't more complicated than I thought, you know. My friends were like "don't worry. Kids build this." I'm like, "okay, if kids can do it, I can do it."
DB: I'm not so apprehensive about it being an all male environment. I think I knew that going into software development. And in general, I'm kind of cool with the guys, you know. So, I don't remember being, like, you know, stand offish about it. Um, they said it wasn't going to be like, uh, a regular robot contest, but I thought... I thought that's exactly what it was. I don't know what they usually are, but in my general understanding of these things, two robots fight and whoever wins, you know, loses. You know, so, I don't know. I don't know what I thought. I think that's what I thought it was going to be anyway. And, I got there, I met up with my friends, and, you know, we kind of waited around to get the overall goal of the thing. And we were pretty anxious, and stuff, like. Everybody was really anxious. Like, "let's go, let's go, come on!" Like, you know, it's going to be a twenty-four hour thing, we need to hurry up and, you know, get moving. So, um, because neither me or Alexis had ever done it before, you know, we kind of cracked open the box, like, you know, look through the directions and... You know, we were trying to decide... we had, like, four different design ideas before we decided, you know. We were like "well, why don't we just make something really light because then no matter what, we'll win. Or, we should just make something that, like..." I don't know. I can't remember all of the different ideas we had, but in the end we decided to go with the prototype that was in there. And I remember feeling kind of... whack about it, you know, like "everybody's going to be just so creative, we're kind of just following this." But, I think as we made it, we decided we were going to, like, tweak it a little bit. It wasn't going to be, you know, the standard. Um, but, because, you know, in the very beginning we said to each other "this is just about having fun. Not gonna let the guys, you know, intimidate us and stress us out. We're just gonna, you know... we just want... we came here to play with robots, that's what we're gonna do." You know? So, um, you know that we kind of started it that way. As we started to build, you know, we definitely had to decide on a game plan and the overall design, and... I think everybody had the shovel idea, you know, of scooping and flipping, you know, was definitely going to be the best idea. A lot of people did that.
SC: But, so you mean, like a shovel on the front...
DB: On the front, yeah, that could pick up the other robot, you know. Um, I think, in the end, we decided, you know, our game plan was: anything it touches, ram it!
SC: Right.
DB: So, have that sensor, and keep feeling out, feeling out. And then, if you feel something, ram it. And don't stop until it's, you don't feel it anymore, you know. And that was simple, you know. The design was simple. And we got really far with that! Like, I was genuinely surprised how many other robots we beat with that simple design. These guys were out there drilling, and they... all kinds of monstrosities of robots. And our simple design was, like, knocking people off left and right, I mean, I was so proud. Okay, so, we made it to the quarter finals... we made it pretty far.
SC: But, what do you think was the most fun about that night?
DB: I was so, like... it was like, one o'clock in the morning... we had built it. We had done as... all we were going to do with it. We had checked it over and over. Took a little nap. And woke up. And then once the competition started, we were, like, riffed[?]. You know. We were like, "let's do it!" Because we had all these ideas, like, loops within loops, and... and "if" statements, and, you know, all these kinds of things, but when you actually would start the thing, it didn't move. And you were just like "everything seems so right." You know, it was live experimentation. I felt pretty cool. I was telling my girlfriend that, you know, that was the first time people laughed at my jokes. I've like... it was like, you know, such a geeky atmosphere, it felt so homey.
SC: What is your game plan, ah, as far as learning more about development and getting more involved? What is... what is your mission?
DB: Um, I think I have two kind of paths, and I'm open to either. Ideally, I feel like I want help. I feel like I can be someone's minion, if they would just let me, you know. Like, I... right now, I need a lot more hands-on experience. I need to work on something, like, and help to build something, like, from the beginning to the end. I don't necessarily have any ideas, um, but I'm a hard worker, you know. So, I definitely want to, um... if anybody needs help, you know, I... I want to find that opportunity. Um, so I'm just meeting people. Meeting as many people as I can, telling as many people my story so that they'll know, you know, there's this girl out there I heard who will help you if you want it, for free, on weekends and nights, you know, whatever you need, you know. And, so that's kind of my game plan, path number one. Path two is to keep learning myself. To keep... and they're kind of the same, you know. Um, read... keep on reading, keep on trying new things. You know, when I came across [unintelligible], I was just so excited because, I'm like, these are the kinds of things I need to be knowing about, you know? People are making things exactly like what I need. And that keeps me hopeful, you know. That I won't have to sit there and stare at this book and, you know, look at screenshots forever. There are other ways to learn. People know this and they're making things for people like me. And so, you know, I keep going. I just... I'm on, like, chapter six on my little Python book, you know, so, chapter seven is next, you know. And I just... that's what I do. And I just keep on reading, keep my ear to the ground.
SH: Just because you graduate and you have a degree, or just because you succeed on a couple of projects doesn't mean you're necessarily entitled to a job. There's so many young people these days that feel that, you know, "I just got out of school, where's my hundred-thousand dollar a year job?" I really like Daniele's attitude. She's treating this as a game. You're the other robot. She's got her rules down, she's studying them. She's about to ante in and get serious.
RC: Amen to that. It's really good to see someone working that hard to crack into this industry. So, what do you say we bring this home?
SH: Absolutely. I mean, what I got out of this is, uh, competition and drive are different things. I mean, when you're driven, you're headed in a direction. And you're really competing against yourself. Competition is much more... much more crisp. You're competing against others. But, ultimately, if you have the hunger, you should feed it. It's natural and appropriate to compete as long as you like who you are, during the competition. Okay, what do... what are you inflicting on me now? Seriously, what is it? Is this Yaz? Oh, come on. Is this another Lady Gaga and Yaz? I'm still recovering from the last one, it gave me pneumonia.
RC: [laughter]