[Joel Spolsky and Jeff Atwood chat about stackoverflow.com in their second podcast.]
Spolsky: We are on the air and welcome to episode number two of the StackOverflow podcast - we have a name. Coming to you from the bright lights of New York, New York, I'm Joel Spolsky.
Atwood: And I'm Jeff Atwood, from sunny El Cerrito, California.
Spolsky: Alright, how are you doing Jeff?
Atwood: Doing great, doing great, I'm excited, the first podcast I thought went over very well.
Spolsky: Cool. And did anybody listen to it? I know my dad said that he did, so that's one.
Atwood: Well, I did actually read all the comments. There were comments on my blog, there were comments on Reddit, and there were also comments on the Reddit from your post, and I just got through reading all those comments.
Spolsky: But most of them were like, [Napoleon Dynamite voice] "Why is this a podcast? I don't want to listen to you guys talk."
Atwood: Well, I thought that issue did come up and I want to talk about that up front like I promised because I thought you had a really good theory because I actually don't listen to podcasts, so I'm actually with these guys. I'm like, "Well, wouldn't it be more convenient if it was written down?" And to me the answer is yes. But you actually convinced me that this is a good idea and I kind of believe it's a good idea based on the feedback we're getting. So, maybe if you could open by talking about that.
Spolsky: Well, here's the thing, I mean a podcast is not, this isn't like we sat around saying, "We want to get out all this information about StackOverflow, what's the best way to do it? I know, let's make a podcast." A podcast is a different kind of thing, it's like a radio show. And some people have radios, and they listen to them. Some people don't, and they don't listen to them. And that's okay. It's just like if you are listening to the radio, we're now one of the channels on the dial. People who listen to podcasts, it's not like they've carved out an hour from their life so that they can sit in their armchair and listen to it. You know, they're working out, they're taking a walk, they're driving to work or driving back from work, they're in the gym, any kind of situation where you kind of can listen to something in the background but not really give it your whole attention. You can't be watching it. That's pretty much the entire market that podcasts are ever going to have, the same as the radio market. And we've got something there and it allows you to follow along with something that you and I were going to do anyway which is have these weekly phone conversations just to keep up to date on the status and to chat about the product and it also gives a select part of our audience the opportunity - if they want to - to listen in, to follow along, to call in with suggestions. But it is by no means the only way in which people are going to interact with us. And in fact there's nothing really about StackOverflow that depends on the podcast. This is just sort of like the behind the scenes. There were a few people who were confused and sort of thought that in some ways StackOverflow would itself be a podcast, which I guess I can see why they thought that, but that is not the case.
Atwood: Joel, one point that you brought up, that I thought was very interesting was that - particularly on my blog - I think the word you used was I was kind of didactic and you felt that hearing the audio gives you another dimension to sort of the person you are sort of interacting with from this great distance.
Spolsky: Ah, yeah...
Atwood: Do you believe that to be true?
Spolsky: Oh, yeah, absolutely. I mean I've always kind of wanted to do a podcast, because I think that people don't write the same way as they talk. And when you hear somebody in two different forms like, maybe, or two or three forms, maybe like you read what they've wrote but you've also heard them speak, that sort of makes them into more of a whole person, into more of a real person. You know, one thing that I have noticed - I noticed that myself - I listen to podcasts walking to work pretty frequently. There are a few people who come across really badly on the written page and really well in a podcast. Some people for whom the opposite is true. I think of John C. Dvorak is a great example, he's got his own podcasts, he's got 2 or 3 of his own, he's always on TWiT with Leo Laporte. He's just a funny old coot, an old curmudgeon. You get the feeling he'd be a great guy to spend time with. And yet, when you're reading the so called "blog" or reading his writing about tech you may think he's a little disconnected or he's a little bit out of it, or flat out wrong - whatever you may think. You realize he's just a funny old coot that does know what's going on. He is a sort of grumpy. One of his podcasts is called uhh, what's it called, not angry, not hard... grouchy geeks? No. I can't remember, John C Dvorak podcast-angry grumpy old coots. Anyways...
Atwood: That sounds about right for Dvorak.
Spolsky: Yeah. Uhm, but he's a funny guy, he's smart, it's fun to listen to him. Similarly you've got folks like Adam Curry who just comes across as a bit of an airhead in every other form. But he's a really good DJ, his podcast is DJing, it's talking on the radio, making a connection with the listener, finding music that they might like. Making boring things interesting, he's really good at that, and he puts on a great show. So, there's a few cases I've noticed with podcasts where it just allows you get another dimension of a person and think about them in kind of another way.
Atwood: And I'm starting to agree with that. I was very skeptical when we started this, I wanted to do it because, it's a call we have anyways so we might as well extract the value from the call and share it with people.
Atwood: But seeing the response, I don't want to say overwhelmingly, but it's been very very positive. I was very pleased that people liked it and seemed to get stuff out of it that we put into it. I found that very satisfying. So I've become sort of a believer now.
Spolsky: Yes. I think the important thing to know is that there are some people who don't read the web they just sit and listen to the radio all day long. They're probably saying, "Why are you putting it on the web, get a radio show like everybody else!" This is a different format, not everyone listens to this format it is not appropriate for sitting at your computing and playing the MP3s. It really has to be in podcast format, something that is taken with you, subscribing to iTunes, putting it on your iPod and listen to it on your way to work. That's really what we're trying to do here, and it's not going to be the be-all end-all, as I said. There were a bunch of people who complained about the lack of a transcript. I thought what we could do is just open up a wiki and let people post transcripts if we could get enough volunteers to do that. We already have one volunteer, Brian Pelton, who was kind enough to, actually, transcribe the entire first podcast. It's already up on the wiki, so if you're listening to this and have extra time and you feel like contributing to this for people who don't have time to listen to the whole thing, or for the hearing impaired, and you want to contribute by helping with the transcript, just head on over to our wiki at stackoverflow.fogbugz.com [...] and you can contribute as much or as little as you want. If you want to, just transcribe the first five minutes, or the second five minutes, or stop, or just put down some show notes where you talk about what you saw. There's also a discussion group on that same site, stackoverflow.fogbugz.com, where you can chat with the other two listeners. How many listeners did we get to the first one, by the way?
Atwood: I have no idea. I can just look at the comment length. I haven't hooked up metrics to the site yet. But I will. One point of business though, I did setup an RSS feed, essentially by setting up WordPress there's a plugin for WordPress that unlocks all the podcasting potential. There's an RSS feed for blog.stackoverflow.com and also for the podcast section, there's a podcast feed, I submitted that the iTunes, Podcast Alley, Yahoo, one or two other places. Hopefully everybody that wanted to get this, in sort of an automatic way can. I know there where some snarky comments about, "well, it's not really a podcast without RSS, now is it?"
Spolsky: Yeah. Well, I think it's fair to now have RSS until you have two. It seems weird to enclose something when there's only one of them.
Atwood: This is my theory of sucking less every episode. And I promised that at the end of our first episode that it could only get better, right? Can't get worse.
Spolsky: And we've definitely got some things in the works to try to make the sound quality a little bit better.
Atwood: That's next week's job, is to improve the sound quality. We realize there's definitely issues with the sound quality due to the way we're recording it and we're gonna work on that as well.
Spolsky: I've got two mixers, I've got about 40 miles of cables that it's gonna take to get this working the way we need it to work. I've actually looked into this, but the people that are podcasting with Skype, to get the really high quality podcasts, you need mixers, you need real mikes, you need... stuff, you just need... gear.
Atwood: I was kinda fine with AM radio quality - I feel like the content should be the driving factor - but to the point that it's a distraction. Honestly, i didn't see it come up that much, but it came up a few times. So if there is an easy way for us to improve it, then I'm for it.
Spolsky: Yeah, well there is a couple of reasons. One is that some of our listeners are from other countries - people who are not native speakers of English - are going to have more trouble as the sound degrades. In other words it's going to be harder for them to understand it more quickly as the sound degrades. But the second reason is we're on their iPod with a bunch of other podcasts and so we just sound kinda crappy compared to Adam Curry and Leo Laporte. And most podcasts are not done remotely, like this. They're usually just done by one person in a room so they can record at much higher quality, it doesn't have to be a phone conversation.
Atwood: I know what some people do is they record all the audio locally. Like even though we're on the phone right now I would be recording on my PC and you would be recording on your PC - I mean just literally recording...
Spolsky: That's called "double-heading" sometimes. [Editors Note: I should have said "double ending" which is what the real podcasters call it. -- Joel]
Atwood: ...Yeah, and then you just splice the audio together which seems like it would work because you could line up the waveforms and they'd fit sorta like LEGO blocks, like when I'm talking you're not talking. So visually it would kinda work. That's a possibility too. We're looking at it for sure.
Spolsky: What I'd heard about that is that if we both did that first of all there's some post-production there to get them merged - but not much. The problem is that CPU clocks have a little bit of variation, just because they're not really very accurate. So over the course of, say, a half hour podcast your speech may drift a couple of seconds out of sync with my speech. Just 'cause our clocks are running at a slightly different speeds...
Atwood: I see.
Spolsky: ...and you usually have to do a some work to re-align it. That's what I've heard when you record it completely separately. So I think what I'm going to try to get going is we have a Skype conversation and I got a mic on my desk, feeding into a mixer. The mixer feeds into my computer to go over Skype and into another mixer where it's also receiving the sound from my computer - which is you talking - on another channel. So I've got the secondary mixer where I can mix your voice and my voice and then the output from that mixer goes into another computer - digitally - where we actually record it live in. And the advantage of that kind of system is, once again, if you don't have to do post-production that can save, that can save us, you know, an hour.
Atwood: Oh, post-production is huge. Anything we can do to avoid that is a big, big deal. Just speaking to the audience; I was also surprised, Joel is very, very into this - as you can see. I was actually surprised because when I first hooked up with you Joel, I wasn't sure how hands-on you'd want to be and I was very pleasantly surprised you've been very, very hands on... in a great way for me.
Spolsky: I just like playing with audio gear. I've got all these cool mixers in my office.
Atwood: In other ways as well - it's been a good partnership. I've enjoyed it so far...
Atwood: ...tremendously. So did we want to do... I know we have some questions from listeners. Also I have just a few topics that I can cover.
Spolsky: Alright, let's start with the questions, let's see how this comes out. Where's my list of questions...
Atwood: And thanks everybody who submitted questions, I know we can't get to all questions.
Oh, and I do want you to talk about... before we get into this, you were very adamant that everybody had to submit audio questions. Did you want to explain that?
Spolsky: We may be able to set up that, there probably are already phone numbers that you can call in and it'll make you an MP3 of what you called in, I believe that somebody has something like that set up, that makes just a blog out of the calls you put in. If you can't figure out how to record things with your computer maybe somebody in the show notes can suggest a way that you can call in and get an MP3 from your voice. But the truth is, it just sounds weird. If I take a question that someone e-mailed me, and I read it, it's going to sound different because they wrote it in e-mail and it's not the way they would speak and this is really a radio show, this is really radio, and this is voice, that's the format we're in. And so I want the questions in that format and not the questions in a written format. They're going to sound better, they're going to flow better. It just works better. And we really did get an awful lot of questions. You know, if somebody has a great question and you just cannot figure out how to get it into MP3 format, or Ogg Vorbis format, for those of you that refuse to use MP3s, then you can still email it to us, and if we have time we'll read it. But the truth is the priority is going to be to take the audio ones because I can just play it, as I will do now. So let's go to the first question:
Nathan Stohlmann: Hello my name is Nathan Stohlmann from Minneapolis and I had two questions after listening to your podcast. First of all: how are you going to keep the religious discussions from happening and second: one of the things that I do actually like-really like- about MSDN and the MSDN documentation is that it shows you implementations of particular topics in multiple languages. Is that something that you guys are looking at implementing in your system? I hope so because seeing how to implement something, you know, in Java or C# or Python or whatever it is... Just being able to look through all of the examples like that, sounds like it would be a really great and valuable resource. Thanks much and good luck.
Spolsky: Yeah, you wanna take a stab at that?
Atwood: Let's see, so his question is basically how are we going to prevent religious discussions. So I think we talked about this at the top when we set up the project, that we don't want... I think the quote--the soundbite is, "another place to discuss tabs versus spaces".
Spolsky: [grunts agreement]
Atwood: So I think having a very tight question and answer focus, like those kind of questions really can't be answered.
Spolsky: "Why does Windows suck so bad?"
Atwood: Yeah [laughs]
Spolsky: "My question is, why does Vista suck!?" [laughs]
Atwood: Yeah, exactly. That's not really a question, is it? So, I would expect people to downmod that question to the point that it eventually disappears, 'cause it's not really a question. We'll have guidance that says, "ask questions that can really have a legitimate answer, please." And I know there's some interpretation around this, but, I think that's what saves it from being yet another forum, right?
Atwood: You could post anything or talk about anything.
Spolsky: Or that ABC debate in Pennsylvania, where the questions were, "Does Reverend Wright love America more than you do?"
Atwood: Well, that whole debate was just a nightmare.
Atwood: I'm less optimistic about that, because I feel like if a programmer is asking... I know I was a long time BASIC and VB programmer and I basically had to switch, because you really can't find enough VB code samples for what you want. I mean that's what it comes down to in the end. It's like, "can I find code samples that I want, can I find things in my language." And I found that I really couldn't ultimately. Unless I wanted to convert everything.
So I'm a little less optimistic that there's gonna be this emergence of people saying, "oh, here's how you do it in Perl", or you know, "here's how you do it in Python." Because it might be a little off topic for the question. Because if I'm asking, you know, "I want VB code that does X". I'm like, "well that's great but I really don't want to learn Python today. I want to solve the problem that I have with this that I asked a question about." Plus the whole issue with tagging, of keeping things in separate sections. We're not going to have a rigid hierarchy, per se, but if you're tagging something as every language under the sun, it kind of devolves. It's about everything and therefore it's about nothing at that point. So I'm a little less optimistic about that.
But if you posted a question that was like, "I'm curious about how you would write this small thing in any... I don't think you can do this in your pet language. You know, you'll immediately get programmers rushing in to say, "oh, I can do it."
Spolsky: [grunts agreement]
Atwood: So if you want that, you want code snippets in different languages, you could say, as sort of a little mini challenge, how would you write this, in, you know, Java, right?
Spolsky: Aren't the .NET languages close enough that the translation from C# to VB - for somebody who knows both - is almost mechanical. It's not like you have to figure out a new way of doing it.
Atwood: Well that's really the problem with the whole concept of .NET language independence. It ends up not meaning much, because it's like a Coke versus Pepsi thing. They've become increasingly different over time, but still not very different. What do you get for that? It's like, the mental overhead of translation is what it is, okay. It's still there no matter how simple the languages are, and it bites me all the time. Those little subtle differences, like zero-based versus one-based, is horrible. You always forget. And what you get for that is two languages that essentially are the same. Right? It's not like Python, which really is kind of a... the whole duck typing... it's pretty different. It's worth the mental gymnastics translating in your head, because it's a significantly different language. I think because C# and VB.NET are really so closely related, it ends up not bringing a lot of value to the table. So that's why I'm really excited about what they call the dynamic language runtime, which is basically the platform to put Python and Ruby and things like that on the CLR. I think that's great, because those are truly different languages that will make it worthwhile to me.
[ 19:05 ]
Spolsky: Yeah, but then again, if you're -- just 'cause you're on the CLR doesn't mean that there's a nice class library like, like the class library for... I don't know... sending emails or whatever the case may be in .NET in the framework basically -- the framework classes.
Atwood: Oh yeah, yeah that's...
Spolsky: I mean they were really designed for C# and VB.NET. And, and so if you start using those from Python, although you can, you may find that they're not really using a Python idiom, and that they feel kind of unnatural in the Python world.
Atwood: Yeah, I've read things like that before where they'll port a language like JRuby, uh, which is, you know, Ruby running on sort of the Java runtime, and then you realize that it wasn't really the language you wanted. It was all the...
Spolsky: [grunts agreement]
Atwood: ...cool libraries that people had created...
Atwood: ...Those don't automagically get ported over when you do that. So it can be a little tricky to manage that. So I'll try to be optimistic about that, but I think if you want that you'll have to phrase the question in a certain way to get, you know, five different language implementations of 'x'.
Spolsky: But yeah, there maybe some type of questions -- and maybe if we had a facility for that... you know, uh, there's a class of questions that's like, "How do I 'x' in my language? How do I... well, you know, can I just please see some sample code for just sending an email?"
Spolsky: "I know the subject, the from, the to, the SMTP server. Show me this code in every possible programming environment."
Atwood: And the other thing I want to, I think, answer was, I think some people were thinking of this as like, "I'm going to ask these really large, grandiose programming problems." And I think you can do that, but I think you can also be very tightly focused, like when I was setting up, uh, blog.stackoverflow.com the other night I needed to remember how to do a dotted underline for links and I couldn't really remember exactly how to do it...
Spolsky: Oh yeah
Atwood: ...so I basically did a web search for that. So I could have asked a question which was... I mean it's a really simple question. This is fine this is actually what the site is designed to do, it's like, "How do I create that dotted underline effect on links?" And then I could actually -- I'm wondering if I could actually answer my own question. Then I started thinking that through. It's like, then I would like to post it as like, so other people could find it even though I sorta knew the answer, or found the answer.
Spolsky: Yeah, or so you could find it next year.
Atwood: Uh, well, exactly.
Spolsky: When you forget it...
Spolsky: ...I guess you're not... [chuckles]
Spolsky: ...you're not old like me so you don't...
Atwood: Bogging to me is sort of like an institutional memory. I wanna remember the things I've done...
Spolsky: Hey! Hey Jeff, have you ever had a question that you typed into Google and got an answer that you wrote?
Atwood: Oh, yeah. It's actually annoying. [Spolsky laughs] Because I don't... I don't actually want... typically when I'm really searching for something I know what I've written for the most part.
Atwood: Um, but if I get hits on my own site it's kinda annoying 'cause...
Atwood: ... I know what I wrote and I don't really need to read it again.
Spolsky: Oh I get that and I'm like, "Yeah that's how you do it." [chuckling] and I do it and I'm happy.
Atwood: Oh, you had actually forgotten...
Atwood: ...that you had written that.
Spolsky: Uh huh. That's happened to me at least, at least once or twice.
Atwood: Well, in a few years I'm sure that'll start happening to me.
Spolsky: Um... okay... let's uh, let's try another question. What do I got? What was that? That was 85 hundred. We're doing this with extensions on Asterisk. It's kind of complicated. I'm now actually dialing an extension that is programmed to play an mp3. And that's how I'm getting these mp3s onto the podcast. So uh let's see.. 8501.
Youell: High guys, my name is Matt Youell and I'm from Portland, Oregon.
Spolsky: [Interrupting the recording] Hi Matt.
Youell: I guess I'd like to know how you will handle the problem of content theft. For example there are websites that will blatantly copy, like entire forums, right? They'll throw them on their own website, they'll slap some advertising on top of that and then I guess they run off to the bank or something. I assume they're making some money, anyway. After that the content -- it just sits there and rots. But what's amazing to me is that somehow it still ranks high on Google sometimes. And another problem I've seen is what they're calling "re-blogging" which is smoother, but basically it results in the same problem which is outdated content. So, assuming StackOverflow gets big and has a lot of content, how will you handle competing against your own regurgitated, outdated, spamified content?
Spolsky: Is this a real problem?
Atwood: This is a real problem. I mean this happens to me and it's probably happened to you and you probably don't realize it. But...
Spolsky: I do get people regurgitating it but I don't think they get anywhere in terms of like PageRank, or readership or... I mean it just seems to me like a waste of time for them.
Atwood: Yeah, I would say maybe that's true as well, but I think on a personal level it's kind of annoying that somebody's like, taking your stuff and using it.
Atwood: Essentially to make money off you in sort of a really kind of grimy, unsavory way. Um, but I, I don't know that there's a good solution. I mean that's really the problem. It's like, do you really wanna be the cop running around putting down the ban-hammer on these people. First of all how do you even do it? It would take so much time to track down -- okay, the ISP, or the web host, and on some level...
Spolsky: Wouldn't we always have a higher PageRank ourselves then, then these guys for the article?
Atwood: I would think so. I mean, I know when I'm searching for my stuff I almost never encounter... what happens is people will mail me and say, "Oh look, somebody stole your stuff." and I appreciate that because I do like to at least know that it's happening -- right? -- on some level. Uh, but, what can I really do about it? I mean, I know one thing I have done in the past -- and you might find this kind of amusing -- is when somebody steals your post and you have pictures in it [Spolsky laughs], you control the content on their site so you can put pictures up there. So I did that once, I put pictures of the treeman, which is like that skin condition where the skin grows uncontrollably, it's actually very very disgusting. Uh... well.. you.. very.. uh, you know I feel sorry for the man and all that, but it's, it's something you don't really wanna see in a blog article. But beyond that, that was just a lark. That was just me sort of having fun. I wasn't really... you know, there's nothing I could really do to get these people to stop.
Spolsky: I feel... I used to... I used to care about this, and I used to send them little notes saying, "I wish you would take this down because, you know, otherwise people blame me and accuse me of..." you know the worst thing is when somebody says, [dumb voice] "Hey did you just steal your article from that guy?" [Jeff laughs] I'm like, "Yeah, uh huh, the latest post of Joel on Software..."
Atwood: The can't figure out who the real source is? That's funny.
Spolsky: Yeah, uh, you know they read it and then they read it on my site and they're like, [dumb voice] "Hey, I saw that some where!" and they Google it and they find it and send me it... You know for a long time... what was that program called? Manila was the source of a lot of these problems because it was a blog tool that -- the default behavior -- it like added something to your browser that's like "Blog this" and you clicked it and the first thing it did is copy the entire thing you were blogging about and I think the idea was you could then cut out everything you didn't want. So it sort of quoted... it did a hundred percent quote for you by default, and then it was your job to trim away the parts that you didn't want to quote. And this was sort of one of the early blogging tools and it wasn't very popular, but it did have this nasty side-effect that people that didn't know much about blogging who sat down and started using it... was it Radio Userland or Manila? Maybe Radio Userland.
Atwood: But this is like, accidental? I mean these people are...
Spolsky: Yeah, and this is just people who don't know what they're doing.
Atwood: Yeah, thats different and we're, we're definitely talking about people doing it very much intentionally with...
Atwood: ...the idea of, "Hey, I want content that I can put advertisements on...
Atwood: ...but I don't want all the burden of creating any content myself."
Spolsky: These are small people with small ambitions. They, they don't get anywhere in life. I don't, I've lost interest in caring about them though, y'know?
Atwood: Yeah, and actually...
Spolsky: They're not getting very far.
Atwood: I've actually tried submitted Takedown Notices and, like, you have to like do a fax, and, like it's way too much work to take these things down.
Atwood: Now, one thing I was thinking about, and we'll probably do, is embed a GUID, I, I love GUIDs, actually, they're fun to create because there are so many of them. We can...
Atwood: I know, it's great. You can always make up a new batch of 20 every day.
Spolsky: Hey Jeff, let's sell GUIDs on the site: two cents a-piece.
Atwood: [laughing] I know, GUIDs are, there's something about GUIDs that...
Spolsky: A hundred for a dollar-fifty.
Atwood: I don't know why, but they are really amusing. Like, at my previous job I proposed -- we had too many name conflicts with people starting, "Oh another Scott", it's like, we should just assign GUIDs when people arrive, like, "This is your new name -- it's your GUID. Right, so just please learn to refer to yourself by this 20-character hexadecimal string and no more problems."
But, if we embed a GUID at least we can know when it's happening. Because, well, part of the challenge of figuring that out is doing a search that picks everything up.
Spolsky: Oh! I see. I get it...
Atwood: At least then you know.
Spolsky: ...then you just Google search for that thing.
Atwood: Then you say, "Oh look. There's no way you could have this GUID." 'Cause like, it's the only GUID like that in the world, right? It's a fingerprint. So we might do that...
Spolsky: Or it's a coincidence.
Atwood: Yeah, a coincidence. At least we can track it; I don't know about enforcement but I think embedding a GUID is a good way to start and then we'll just...
Spolsky: Do we want people to maybe reproduce the content elsewhere? I mean maybe we want some of this material to be sort of uh, uh... I don't want to say 'Public Domain' but a liberally licensed body of code that other people might distributed in, in better fashion then we can.
Atwood: That's funny that you bring that up because I've often thought that piracy is an intractable problem. The only way to really solve piracy is to give everything away. And then, in which case piracy no longer has any meaning 'cause you can't really steal stuff that, you know, has no owner. Um...
Spolsky: That's the principle of shareware.
Atwood: Yeah, and this content -- this topic did come up in an email. Somebody was asking about the licensing of the content that we're gonna put on the site.
Atwood: And since it's content that's created by a bunch of different people... I don't know, I mean I'm open to the idea of having it be something you could reprint like Wikipedia perhaps. I know our goal is not like, to own the things that you write. My goal, at least -- and I think you share these goals -- is just to create something that's actually helpful and useful, right...
Spolsky: [grunts agreement]
Atwood: ...where everybody collaborates. I'm not really looking to, um...
Spolsky: To some extent they may be more willing to collaborate if the material is more freely available.
Atwood: Yeah, exactly. And since y'know, there's... say on a given question there might be, y'know, four or five people that participate, so I think you gotta have some kind of broad umbrella that all these people can be under and feel like, y'know, "Hey! I'm getting value out of this, and you guys aren't just using me as a conduit to make money."
Atwood: Which certainly is not my goal. I just want better information in the world. I don't really have any other goals other than that. So, it's something we're thinking about, for sure. And that might also mitigrate [sic] the whole piracy factor as well, which would be nice.
Spolsky: Uh, yup. 'Cause we won't care.
Atwood: Yeah, exactly.
Spolsky: Alright, let's take another question.
Davis: Hi guys, this is Andrew from compupage.com... coming to you from Fremantle prison in Western Australia. I have a long term challenge for you. Just to a break the life-cycle of a tech resource: typically you'll start out fairly obscure. The only people who can find you are those who are quite good at Google, who also tend to be quite good programmers, and you get reasonable questions and reasonable replies. Over time you, your Google rankings improve and you start to place well with the kind of search terms that less sophisticated users will use. And around then you're gonna get an avalanche of people posting questions like how to write a for loop and, "Can someone please do my college assignment for me?" And that's usually followed pretty closely by your original basis -- sophisticated users -- abandoning you for some other site.
So the challenge for you guys isn't to become popular, but, "How can you place well in Google while still retaining your original user-base?" If you can keep your value as a tech resource despite placing well on Google you'll be invaluable to me and a lot of other people; so, for the both of our sakes: best of luck.
Spolsky: Best of luck! [laughs]
Atwood: That one was really hard to hear on my end. I mean, I think I got most of it but did you want to paraphrase what he said there Joel?
Spolsky: Okay, and I'll try to clean it up in post-production. One of the reasons why I set up a mixer is so that I can adjust these volumes on the fly. Basically his question is: you start one of these things, it's great because you have a very narrow audience of highly technical people who find it - the early adopters - and the quality of the content is great [...] these things start out great with all kinds of smart users asking smart questions because they're the early adopters who find it, but as you start to get a larger audience the quality diminishes. I don't think that's true. I think it's true for a general discussion forum, I saw that happen to Reddit, it happened to -- I hate to say it -- my discussion forum where when they were a little bit more elite early on the quality of the discussion were higher. The reason I don't think this is going to happen is that we're not really creating a single discussion point. We're creating half a million articles on a very very narrow topics, and every one of them is narrow enough that it has its own demographics.
Atwood: That's perfect, that's exactly what I would have said because, all these microclimates. I find that what's interesting on the Web is that the more general you are, the more hosed you are, because you just can't sustain, you have the Youtube problem where you have 50 thousand comments and all of them are completely inane. But the more targeted you get and the more you can be within a certain community and even within sub-sub-subareas of that community, you start to get some real value because there's only a tiny percent of people in the world interested in that question, and they really care. I mean I have seen this on my blog when I'll post things that help people about a very specific niche I get the most helpful kind of feedback, I mean really helpful feedback, details about what they did and how they did it, there's this really nice reciprocity that goes on there. And I think the secret is to stay very very narrow. As I mentioned at the top of the call, I expect the questions to be very very narrow. And I would hope there are millions of these very very narrow questions that only five people in the world care about, cause those people are not gonna game you, they care about this information.
Spolsky: Right. What you will see if that if the question turns out to be is the canonical source for talking about some common problem that everybody is having with the latest service pack of Windows or something, that particular question will start to have a very high PageRank and that PageRank will start to attract the spam engines that try to add to the spam at the bottom of the discussion, just to get PageRank, and it will start to attract, basically, the idiots. And so, we'll need kind of more -- we'll need to be more aware, of the possibility of spam, on some of those higher distribution, higher PageRank, more common questions.
Atwood: Right. And one thing we talked about, again looking at Wikipedia, is having a lock-down mode, where if an article starts to become really popular, lock it down so that only people with a certain amount of reputation can even edit it at all. Normally, we will allow people who don't have an account to go in and not necessarily edit, but add responses. But for really popular things, there might even be an automatic sort of lock-down where it goes into...
Spolsky: Yeah. It could even be based on the PageRank, or just the number of hits. If some particular topic just becomes too noisy, you need a higher karma to post to it. Just to get rid of the drive-by-shooting spam.
Atwood: Yeah. I've actually seen that on my blog. Some of the stuff that ranks really high, for really common problems that I had like two years ago, that does happen, and it's actually annoying, cause like every week I have to go in and like clean in it out. So I think there's an argument you can make for some kind of automatic lock-down mode.
Spolsky: Yeah, we just made the Joel on Software discussion forum which is based on FogBugz if something scrolls off the home page you can't post to it. Period. It's just closed; it's archived. Part of the reason is that nobody will find it at the discussion group, it's a very very old topic. To reply to a very very old topic is sort of inappropriate. You're in the spirit of the staircase as they say, you're at a party and you've been insulted and everybody left the party, you're the only person in the room, and you think of the perfect retort and you shout it up, and there's nobody to listen to you anymore. And so once a discussion topic is scrolled off the home page, in the FogBugz discussion groups, it's shutdown, you can't post to it. And indeed 99% of additional posts that would have been there would have been spam. That eliminates a lot of automatic spam, and it also means that the only place where people can spam is on the home page so they still being seen by moderators, they're not buried somewhere.
Atwood: A lot of this community stuff is very near and dear to my heart because I spent a lot of time, as I'm sure a lot of hard core geeks have, online on these kind of discussion forums or boards and it really is a fascinating problem because when it works it is like the most beautiful thing the signal to noise gets really high and you get this amazing information that you wouldn't get anywhere else, and then it's so sad when it breaks down too. You've seen the potential that could've been there. You've seen it work really well.
Spolsky: You get a large enough audience that you attract the people that just want to take advantage of your large audience.
Atwood: One good example of a site that just produces amazing content, over and over again, MetaFilter does this thing where you have to pay to sign up, like $5 to create an account there, but the signal to noise there is just off the charts, it's really really strong.
Atwood: My hope is that we'll retain some of that.
Spolsky: Well, if you take a five dollar bill, drop it in the mail, and send it to me I will make sure that you have a lot of karma on StackOverflow.com. Not the official policy, but like a say, a clean five dollar bill -- or a hundred. I'm not picky but...
Atwood: How 'bout if they could just open a FogBugz account, would that work for you?
Spolsky: Umm, er yes, well yes. Actually, uh, yeah, FogBugz customers also have a special... Another question?
Atwood: Yes, let's do one more.
Andre: Hey, Jeff and Joel, this is Andre from Atlanta, and first of all, I would like to point out that at my house, the walls meet the ceiling at a 90 degree angle, not a 45 degree angle.
Spolsky: Oh yeah, I don't know why I kept saying 45. Sorry. I said it twice.
Andre: Also, I would like to suggest a name for the podcast. How about Smalltalk? It comes to mind because I have to learn that language for a class next semester.
Spolsky: Oooh! [forboding]
Andre: I actually have a legitimate question: Should I learn C++? Because this semester I took a class where we had to learn C. We actually built some GameBoy Advance in C, like Space Invaders and rubber snake. We also learned some memory management stuff about malloc and realloc and free. My question is, what are the advantages of C++ as opposed to C? Because I know C is a pretty versatile language where you can grab anything and do just about anything. What does C++ do that C doesn't? Thanks guys!
Spolsky: Alright, I thought I'd get a real question in the mix there, in addition to just a podcasty question.
Atwood: OK, go ahead, that's all you, man.
Spolsky: It is?
Atwood: Totally, I mean, I don't even know C. Literally. I'm not a real programmer.
Spolsky: Oh my God. You gotta learn C. Including you, Jeff. And you gotta learn C++, you gotta do both. If I had to describe, y'know you're probably not gonna use either of them. You know, they're not--at this point there are very few projects for which either C or C++ is the right choice of language to use, because there are just better languages today. But you really do have to learn them, they're part of the history. C is the best way to learn about how, basically, the machine works at a certain level of abstraction. And C++ is just a toolkit for creating additional abstractions that are better than abstractions you can create from C. So for example, C doesn't really have object-oriented programming. It doesn't really have the ability to say, here's an object, and it has variables, and it has has some data and some state, but it also has methods that you can call, or messages that you can send to operate on those things. And you can do that in C, you can emulate that, but it kinda takes a lot of manual work, and C++ just automates a lot of that for you. So, C++, you wind up being able to build a slightly better abstraction. And thus you can make your code that much smaller, because you can build it using these abstractions. The only real kind of abstraction you can create in C is a subroutine, a function call. And I guess you can have a data structure, and that's kind of an abstraction, so you got a data structure, and you got a subroutine, and those are the only kinds of abstractions you can build with C. C++ gives you tools for building several new kinds of abstractions, and so it's definitely worth learning once... The truth is, nowadays there's so many good alternatives. Y'know, if you need performance, C#; if you don't need performance, Ruby--I'm gonna cause all kinds of wars. There's so many other languages you can use, depending on the situation that it's pretty rare that C or C++ is gonna be your first choice for just about anything today.
Atwood: So is it like studying Latin, is that what you're saying? Like a dead language, you don't really need to do it, you just need to know about it.
Spolsky: Y'know I think that studying C, which is why you should, Jeff, is like studying anatomy before you go to medical school.
Atwood: I, I know that every time I've tried--I actually, in high school, I got a copy of the K&R book--"Oh, I'll sit down and learn this, C is the thing I should learn, and I remember just, like, the indescribable pain of trying to use C was just, it's really kind of turned me off. I just--I realised at some point or another: "I just can't deal with this. I don't even wanna think about this stuff anymore." It really didn't work for me, I don't know why... And ironically, in high school I loved Latin. It's a dead language, all the history, I dunno, to me, studying the history means, like seeking, not like, the language that the old programmers used, but thinking about the same problems that they were trying to solve.
Spolsky: But, but, but, but, but you see the thing about C is it's not COBOL, which is the language that the old programmers used, it's the language that is closer to the machine. And so, things like stacks, they're still going on there, and, and malloc and memory allocation in C, yeah it's a lot of manual work that's done for you automatically in modern languages, but it's done for you automatically--it's still getting done. And so studying C, for example, is like learning how to drive a stick shift car. It's learning how your car works, and what the connections are, and how the gears work, and basically the main parts of the drive shaft, and parts of your car. And you don't have to know about them to drive an automatic, it's true, but to really be a person who designs cars, or is an expert at cars, or who's an auto mechanic, or who's just kind of a wizard at cars, you have to know that anatomical stuff. So you're not really--I don't think C is an obsolete language, because it's just an expression of assembler. It's just an easier to use expression of assembler language. And it reflects what actually goes on at the chip.
Atwood: Yeah, I wouldn't say it's obsolete, so much as it becomes increasingly narrow over time, right? As performance goes up so dramatically every year, there's just less and less scenarios where--although there's still absolutely scenarios where you've gotta be writing C.
Spolsky: Even if you never use it, when you know about that stuff, you don't do stupid things in the high level languages.
Atwood: Oh, I, I, I disagree. I don't think that--
Spolsky: I don't know, I think a lot of times you'll see people writing code in a high level language where they're doing what I would call "consing up a string" which is using a lisp term, but basically you're, you're, you've got some string and you're building it up one character at a time. Let's say, for example, that you need to write some code that replaces all the exclamation points with question marks in a...
Spolsky: ...in a blob of text. And the algorithm that you choose to write -- although everybody today would just use regexes or something and think they were pleased with themselves. But let's say that you were doing something a little too complicated for regex -- the algorithm you would write would go over the characters of that string, or over the bytes of that string, and if the character is a exclamation point then it would append a question mark to the end of this new string that you're building up and otherwise it would just append the actual character to this new string that you're building up. So basically you have a loop and in the center of the loop you're appending bytes to the end of a -- to the end of a string. And I see that code all over the place. And if you've learned anything about memory management you realize that that is horribly inefficient, that that is just a terrible way to do things. And even when you're using a higher level language like C#, when you write that algorithm in C#, you're not -- it's going to perform badly. And if you understand about allocating memory and reallocating memory and reallocating memory and how much time that's going to take, because you've learned about that in C programming, then you'll know not to write code that does stuff like that even in higher level languages. And in your higher level language you'll say, "Alright, I've got to pre-allocate a buffer that's big enough and then just copy things over, and that's going to save me a lot of time." And indeed it will even in your higher level language.
Atwood: But wouldn't it be more useful to speak in terms of O notation like algorithmically how long thing are going to take. I mean I think that...
Spolsky: I don't even know how you could specify when you see something in a programming language at a high level of abstraction, you don't know how long the thing's gonna take you just like "Okay, it's a string append operation. How long does a string append operation take?"
Atwood: I think this is the concept of measurement. I think that rather focusing on an individual language, I would think of it more in terms of how to measure.
Spolsky: Okay, you should measure, but if you don't get what the library provides you with in the ability to append strings, and you don't get what that has to do under the surface, then it will never occur to you that it may be remarkably slow if you do that in an inner loop. That's just one example...
Atwood: No, it's a good example. I'm not faulting the example. I wonder if there's better ways to express that. Like, "learn a couple of different languages" verses "you should learn C because it's closest to assembly language". Learn four languages, don't be a language monogamist, right?
Spolsky: I'm happy with that totally, but I also think that you should know about your machine, it's your tool, it's anatomy, you know, if you don't get what a stack is... yeah, it's true that it doesn't come up in business programming, let's put it that way - in creating CRUD databases, stuff like that. But you know, it's sort of, I hate to say this, but there's sort of two levels of programmers, there's Microsoft's term was application programmers vs systems programmers. There's programmers that are using the tools that other programmers built for them to create stuff, and then there are programmers that are creating those tools.
Atwood: That's absolutely true.
Spolsky: There's a difference between a bus driver, and a guy that designs engines for buses. They're both programmers, but you're not going to start designing the engines for buses, or designing cars in Detroit, or working in Chrysler as an automobile designer, until you understand what a stick-shift is and why that works and what gears are, and you may not need to know that to drive a car.
Atwood: The other problem I find with that is some programmers - and it depends on the type of programmer - are curious about why things work the way they do, and some programmers simply aren't: they would write that string routine and say "okay, it works, I'm done". Some programmers would look at it and go "hmmm, I wonder what this really does, what if I measured this?" they love getting in and just messing with things, and seeing what happens, and that's really hard to teach. I don't think that has anything to do with learning C, I think it has to do with a sense of self-awareness, which I'm huge about on my blog, it's all about self-awareness, "Why do things work they way they do? How can I break this? What happens when I break this?" And I don't know that studying C would make you that kind of programmer necessarily you could still learn it and go "don't care, moving onto the next thing" it's just about a sense of curiosity about why the code works the way it works. I don't know how to teach that. I think maybe learning a couple of different languages would be the stepping stone 'though.
Spolsky: Why don't you go learn C and get back and talk with me [laughs]
Spolsky: I'll use another metaphor. I got this mixer, this gigantic mixer sitting on my desk, which I'm hoping to get working with the podcast next week, so we can mix it on the fly. But, there's all kinds of buttons on here, and a lot of them I know what they do, like I know the trim, I know the main volume button. But there's other buttons - like there's something here that says "level depth" and it has min, max, parameter 2 - I dunno what that does - I guess that's one of the ... oh, that's why this wasn't working! [Laughing] Uhm, sorry.
So the exact point here is there's a bunch of buttons on here, and sometimes you just can't get the mixer to work, and you're just sitting there, trying to get what you want to happen, and the way you get this working is to flip the switch that you didn't understand back into the position it should've always been in. And then it will start working again. Now, you can use this mixer, just by learning, it's all set up for you to turn these two things - this is the volume of me, and this is the volume of Jeff, and just adjust these two knobs and my volume will change, and Jeff's volume will change [demonstrating]. And you can learn that, and you can operate this mixer, as long as everything goes well. The minute something breaks, you don't even know where to start looking. And so this is sort of like the novice using a computer, right? You can setup somebody who doesn't know anything about computers, you can set them up to say "to send email, click here" and then type who you want to send it to, and it'll send them your email. And then they're going to make a mistake, and they won't know anything - they'll have to come get you. But they'll be able to send emails all day long - until they make a mistake and then they'll have to come get you. Same thing with this mixer, you know, I can turn these two little sliders all day long, and adjust the volumes, but as soon as I need to change something or something gets broken or something gets unplugged, I have no clue, because I haven't really learned the mixer. I haven't really learned the tool.
And that's what I feel like, C is - that's the tool. That's the CPU. That's your tool. And that's what you have to really learn, otherwise, you're gonna be sitting there one day, and you're gonna be spending 8 hours trying to debug something, and none of it's going to make any sense. Because what's going on under the covers has not been explained to you. You've just been told how to adjust the two volume controls.
Spolsky: And that's just a good point to quit, a good point to get a lot of feedback from our listeners, because I think we're sort of probably set of a huge holy war here. Maybe I'm overestimating the value of C.
Atwood: Well you're the one who said we shouldn't be putting those disclaimers in when we talk, just say whatever we thought ...
Spolsky: Yeah, because everything has to be disclaimered so much anyway. This is obviously just my opinion, but some people are going to find this interesting. If you do find this interesting, please, figure out how to record MP3's on your computer, it's very simple, you could get a program called Audacity, which is free, or you could just use the sound recorder that's built into Windows and record it and then use this GNU program called LAME, which will convert it into MP3. And then email them to:
Spolsky: Podcast@stackoverflow.com. Uh, we'll get those throughout the week. We listen to most of them. We read, um, you're text if you write text. Uh... keep it under 90 seconds 'cause uh, we're trying to keep this whole thing -- and as you can tell um... uh, y'know, the shorter you make it, the, the, the better it fits into our program so the more likely we are to use it. So, um, keep it quick, uh, record it as loudly and as clearly as you can, send it to uh, um, firstname.lastname@example.org, and you might get on next week's show.
Atwood: Uh, no, I think we can talk about some other stuff next week: we'll have lots.
Spolsky: Alright, we will talk to you again next week. Thank you very much from, coming to you from... I don't know what to -- we need a sign-off thing; "Keep your, your feet in the ground and your head reaching to the sky." Or...
Atwood: "Keep your feet on the ground, and keep reaching for the stars."
Spolsky: Thank you!
Atwood: That's Casey Kasem.
Spolsky: Casey Kasem. That's right, I knew it was something like that.
Spolsky: Alright, seeya next week.
Atwood: Alright, bye.