Papadimoulis: Did you see the sunrise this morning, or not make it up that late ?
Atwood: Who me ?
Papadimoulis (& Spolsky): Yes.
Atwood: No, I don't remember actually it all blends together after a while.
Spolsky: What's going on here?
Spolsky: Snap out of it man we've got a podcast to do.
Atwood: I'm ready.
S: And WTF stands for
P: Worse than failure, that was established, yeah we actually established that a couple years ago. I don't know if you guys remember there was a bit of a name change on the site...
S: And people were not happy
P: It didn't work out so well, in retrospect probably keeping the daily WTF was the way to go. I don't know what it was... it just didn't feel right saying it. We obviously talk about the site here at the office, every time any of us said worse than failure, it didn't quite fit.
S: It's like a Bowdlerized version of Shakespeare or something with all the good stuff taken out.
P: More or less. It's hard to say, at the time it seemed like a good idea to kinda go with a name change, but ya know, I'm kinda glad to be back to the old name or the real name, whatever you wanna call it.
A: Changing the name was the ultimate WTF. I think everyone was scratching their head going Wow, that's a real WTF. Why would you change your name?
S: Well, I'll tell you how... new coke
A: Now but you have a good name. I want to change it to something really crappy and see what happens.
P: In fairness, I thought the name was good. I thought it was a clever acronym. It was the result of groupthink.
S: Decisions by committee! You keep going until nobody finds any offense in the thing, and nobody finds any delight in the thing.
P: Well I don't know, we all like the name, we're all like everyone's going to love it because it's kind of clever, yeah but we all just tricked ourselves into thinking that it was the right way to go.
S: Who's we? Who else is there? Is there a whole institution behind The Daily WTF? I thought it was just a guy with a blog.
P: Well, yeah, it is a guy with a blog. I'm the guy, and obviously I have the blog. But I do have a job, a day job, at Inedo and we're a software company that's in the business of helping other software companies develop software better. I'm still working on the elevator pitch, but basically we're in best practices consulting and that sort of thing.
A: I didn't know that.
P: Yeah. Well, we used to do a lot of-we still do-custom, proprietary business software. But I don't know, have you guys developed that? I know Joel, you're primarily with products, right? FogBugz, and CityDesk, and CoPilot, right?
S: Exactly. Totally. No, we haven't done any consulting for a long time. We did it in the old days to raise some money.
P: You know, I really like it. Love doing the business applications, but I'll tell you, I think it's a little more exciting to work in this realm and I've been doing the... helping people do the better software, whether it's continuous integration or whatever's gonna help the process go better. What's fun is the Daily WTF has helped me learn just how how wrong so much of software is, or at least software development at so many places. So it's kind of given a unique perspective on things.
S: We are talking today to Alex Papadimoulis, who is the blogger at the Daily WTF, which is a blog, if you haven't seen it, about all kinds of things going wrong in software development. Right? It's mostly software development, although I see wine bottles here on the front page...
P: Information technology. But, yeah, generally software development.
S: Is there a difference between information technology and software development?
P: I like to think IT kind of encompasses maybe the network. IT is a broader domain. Software is just internal applications, external applications, whereas the IT organization handles all the servers, the desktops, phone systems, they seem to get it all.
S: And you guys always have, besides having actual bodies of bad code, things are always written in an exciting, story-like way. Do you get these things submitted from people and then rewrite them, is that what goes on there? Do they submit them correctly in the first place?
P: You know, very rarely. And I'll tell you a little bit of background: we started doing all exclusively code, which... the bad code is fun to read. I think like writing, and I know Jake, he helps out on the site, Mark, we all like writing and it just kind of fell into the format of starting with a fun paragraph at the beginning of a code snippet to really just writing stories in a unique manner. I don't know if you guys read Discover magazine, but Vital Signs sometimes serves as inspiration for how we try to tell stories. You know, at the end of the day, some of these things can be pretty boring in software development.
S: And although it is funny to read some of these, I'm just reading this one where a guy has created a bunch of constants for every possible number of spaces. And then written what looks like a select statement. So he's basically reimplemented a function that is already available for you.
P: And I believe -- you know, I think that one is "Spaced Out" -- he not only did that, but he reimplemented a few times in his own code, which is pretty impressive, I might say.
S: And so this is sort of humorous, but on the other hand you sort of feel sorry for these people who are writing bad code. You imagine that they've woken up in the middle of the night and they're feverish, and they don't completely understand what's going on around them, and they need to somehow make their computer do something. And through the haze and the fog of the high fever and the nausea and the explosive diarrhea, they're trying to write a function that produces a given number of spaces. And they just do the best they can and you sort of have to feel sorry for them, a little bit, creating code like this.
P: Yeah, I think that's a part of it. Definitely, you got the guys who are really struggling. But you know, I've worked with enough developers, especially in some of the larger companies, where it's their way of life. They don't see this as bad. It's kind of like, You know, it works -- sure, it might be a lot of duct tape, patched together. But that's the way they see it.
S: Isn't that being pragmatic? Isn't that the ultimate goal as a programmer, to be a pragmatic programmer? Hey, the code works...
P: I don't know if that's quite what "The Pragmatic Programmer" is supposed to be but I guess that's one way of looking at it.
S: I had that person. I was in a meeting at MTV with a very hyperactive executive. This was like 1994 or 1995, the web had just come out, we're talking Netscape 2.0. And she wanted an effect where when you click from one page to the other, the web browser would crumple up like a piece of paper that had been crumpled up and thrown across the page and then another page would then appear. And I can see where she got this idea because she was from television, right, and this was like an effect that you have programmed into your little television switcheroonie things. And yet, of course, there is no way to do anything even remotely like that with HTML. I mean, now you could probably do something with Flash or whatever but at the time there was no way to do anything even remotely like that. So we said, "This absolutely cannot be done with HTML, what you are describing is not -- we cannot do that on the web ever under any circumstances... no." And she said, "What if you use SQL Server? I heard SQL Server was ****ing amazing." Because I guess somebody had been telling her about all the awesome new features in SQL Server 6.0.
P: You know, I think I've worked for or at least seen the same person too, because that's a recurring thing. And if it's not SQL Server... I often get methodology. "Why don't we do Test Driven Development?" or "Let's try Scrum." "Can you do it in Scrum?"
S: I sometimes refer to this as management by Delta Airlines In Flight magazine. Where your boss has read something in the In Flight magazine on the plane, and then wants you to then implement that somehow.
P: I kinda like that, yeah, and I can see that happening too.
J: So… but we probably should talk about localization because I pissed off so many people last week.
S: Have you, what’s the word, recanted?
A: I see this… no, I haven’t. I should apologize, I didn’t mean to offend anyone by saying that, like, if you don’t know English than you suck. That was not my intent, with my statement.
S: No, I just edited to make it sound that way.
A: No, no, actually, I could have been more clear. But I think there’s two things: one is that, you know, we have to serve our primary audience really well. And for programmers, I really believe, that the primary audience, in terms of just reaching the biggest number of people that are programming, is really going to be in English. So that what we have to focus on. So that’s number one. And point number two, is that, it’s perfectly fine to have, you know, other communities form around other languages. And actually it sort of bothered me a little, Joel, that you sort of implied that we like had to own this whole pie. Like if people were talking about programming in any language, then we want them to be on Stack Overflow. And I don’t necessarily believe that to be true, at least, that not really my goal, to own the world of programming. I just want to have one place that we are building, that is centered around English, because we believe – I believe, personally, it’s the de facto language of programming. And that’s really all. And, you know, if you know English that’s great, if you don’t know English, that’s fine too, there’s plenty of other place you can go. I don’t think we need to own the whole pie.
P: The part that I never understood about programming in another language is the keywords. You know, I only speak English, so, you know, for me it’d be hard imagine, I mean, programming in another language, you know, code comments, variable names, things like that. I have seen plenty of foreign code. Is that you know what’s driving your overall thought as well? You know, the c spec, the VB spec, whatever, all these are, you know, English keywords, that define the language. Therefore you have to know English
S: The English words, the keywords themselves, like select, that’s not … I mean that’s just an arbitrary, it’s an almost arbitrary word. If I gave you a programming language, where I said, instead of select, we now have, you know, snerbelgeek, you can memorize that one thing. I mean, there’s only about 10, 20 of them, that really matter. Now there are a lot of function names, but, really, that important thing is to distinguish between the language you use to talk about code, and the language in which you write code. And just because somebody, just because it’s common to write code using English language variable names, English language comments, the language in which you are going to talk about code, sometimes the comments, but just in let’s say, a book about programming, or talking with your colleagues in the same hallway, or programmers, or writing on the Internet about code, is only going to be English for probably 50%-60% of the world’s programmers.
A: Well, somebody wrote that there actually was a language, and I think it was a research project, that was based on logo, but, all the keywords were in fact symbols. You guys familiar with that game, the sims…
S: APL. It’s APL.
A: In the Sims, they have this completely made up language called Simlish, which has, it just sounds like Gibberish, and, they actually have, when you see it on the screen, it’s just a bunch of, it’s like windings, when you’re typing in windings. It’s like crazy symbols. And they actually make the game understandable, for the most part, in any language. So that would be like having a programming language that was Simlish, that was intentionally just symbols, that had no meaning in any language.
S: But see, none of these words have any meaning… I mean, while? I mean, it’s true that it does have its origin in English, but, I mean, lambda, function? A lot of these things are very very specific. For?
A: And some of them are kind of crappy. Like I’ve always objected to some of the C# terminology for classes and stuff like that, I felt that was unclear.
S: Yeah, I mean, it’s not… the actual keywords of the language are too few, are so few. I mean, human languages that people speak, you need a vocabulary of 5000-10000 words to start speaking a human language, and to speak it, you know, in a highly technical area, than you are probably using a vocabulary of a 100,000 words in your language. And so those 100,000 words that you need to have reasonably detailed conversation about code, is, it totally dominates compared to the 20 keywords which happen to be in English
P: Well, there’s still the libraries to consider too, right. I mean, just look at .Net.
S: Well, if you look at, here’s the thing. Those libraries, like obviously you’ve got a function called CreateWindow. And so you’re thinking, oh gosh, I got to know English because create is a real thing and a window is an English word. And, actually, if you then go, pull down a Japanese language book teaching about Windows programming, you’ll see that they probably don’t have a Japanese word for Window, they probably switch to English for that, or because that’s technical jargon. But the conversation in which they say “you might want to call the CreateWindow API shortly after instantiating the first instance of your app”, you’re going to say that all in Japanese, except for the word CreateWindow.
P: I think I have seen that, yeah, just browsing different sites. It’s exactly… what it… just look, I think, from my perspective, if was reading, and then saw a Japanese symbol for some function, bit of a learning curve…
S: That’s because you don’t know any Japanese. But most Japanese programmers know enough English to be able to deal with those occasional words. That doesn’t mean that they want to read about programming in English. I was talking to Scott Hanselman today, he told me, every single word of MSDN is localized, by professional translators, into Japanese. Not machine translation, it’s professionally localized, every single article on MSDN.
P: well, I think that show there’s definitely an audience for it, so… that’s surprising.
S: Yeah. And it’s a large… I mean, I think that Japan probably has about 60% as many programmers as the US. That’s just a rough estimate. And when you add, you know, when you add China, Germany, and a few other countries, all Spanish speaking countries, apparently, Portuguese, and Brazilian Portuguese is a big deal, Scott told me. You know, when you add that together, it’s an audience that is the same size, I think, as the English audience. And I don’t know if I agree, Jeff, I don’t if I agree with you, that we should just abdicate that. I mean, I understand that we’ve got to have our priorities. But, I don’t see any reason why we should say, “ah, somebody else can do that”. I mean, we’re… you know, our goal is to… to me, it seems like a very… It’s ok to say, English is our first priority, but to say, “ah, we would never want to do those other things”, is just like sort of arbitrarily limiting our ambition. I mean, if Stack Overflow is a good thing, if it’s a good thing for programmers…
A: Wait, wait, wait. So previously you talked about Ebay, as an example. Ebay it’s like a trazillion…
S: No, no, no, wait, stop. The only thing I said about Ebay, is I gave the example of Ebay and TradeMe in New Zealand, because I wanted to point out that if we don’t do those other languages, soon enough, somebody else will come along and do them. And then if we ever wanted… and they will get critical mass. And I just gave you, as an example of how there is no Ebay in New Zealand.
P: Or like the Google-Yandex, how do you pronounce that, the Russian Google, that’s not Google, but…
S: Yeah, yeah, there’s a whole bunch of this, there’s Baidu, and there’s Daum in South Korea, there’s a whole bunch of these local things, and Google never really gets into those markets, never successfully got into those markets, because of another company that basically was a fast follower.
A: But I think sometimes the local version, and the local language should be more successful, because they are building it with that audience in mind. I mean, they have a better line on the audience then we would. I would say that’s the natural state of affairs. And when you’re… The example of Ebay was a bad one, I think, on many levels, because, first of all, Ebay is a huge business, it’s “oh, to have the problems of Ebay, how terrible”, right? If we could be as big as Ebay, that’s plenty. I mean, I don’t need more than that, frankly.
S: Where do you draw the line? How big do you want to get, and then stop and just say, OK, we are not going to be any bigger than this. We’ve solved the problems of 2 million programmers, we don’t need to solved the problems of 3 million programmers. Like, where do you say our mission ends, now, because I can’t be bothered.
A: Well, I don’t like to think too far ahead, because I think it’s distracting. I think you’ve got to focus on what’s happening on the next 6 months, like 6-8 weeks, that’s the things you want to focus on. You want to have a vague idea of where you’re going, but like, obsessing over it too much, it’s just, I think counterproductive. Like it sort of distracts you from your primary mission, which is to move forward, to the next… you know, the immediate future.
A: ... It's like parenting. I mean, [inaudible] and I were talking, it's like, this is just like having a kid, y'know? It really kind've is! It's like parenting. You want to get [inaudible] the right things for them.
P: I... I was going to say, I see the same thing, and I wonder is it just a... is it programmers in general? Or is it just, you get enough people and eventually you'll find the user who wants to help out the site but, y'know, kinda goes in the wrong direction in doing it?
A: I think the latter. I think it's... y'know, it's rare, but it does happen. And the way you deal with it sets the tone, right? If you don't deal with it, that's bad. That's like having lots of these users.
S: Y'know, when I first moved to New York, I'm walking down the street, and I was really a full-time programmer in those days, I mean, I just coded all day long... I'm walking down the street and a taxi comes careening through a red light, nearly runs me over... and I'm like, "What the hell? This taxi nearly ran me over!" And I start chasing it and banging on the taxi with my hand and start screaming at the taxi driver... and I realized that what was happening is I was having this mindset of "I saw a bug with the world and I wanna fix it". Like "The taxi driver tried to run me over, I'm going to yell at him so he doesn't do that anymore." But there are millions of taxi drivers in New York, and you know what? The entire population of taxi drivers in New York are all immigrants, and they turnover every 3 weeks on average. So there is no way I'm going to educate all 14,000, or whatever, 28,000 legally licensed taxi drivers in New York not try to try to run me over, as if they could care less. Because I banged on my taxi with my hand. And I realized this was more something to do with me, that when you're coding all day long, you are fighting an avalanche of code not doing what it's supposed to do. Either because you haven't written it, or because the first time you write it it's buggy, and the next 17 times it still has bugs, and eventually you get it a little bit closer. And you're just basically, like, sweeping back the sea with a stick.... beating back the sea with a stick? What's that expression? You're fighting this constant avalanche of "the world is wrong and I need to make it better", and then you get out in the actual world, as a human being, and it's hard to change that mindset. It's hard to forget that you're not responsible for improving the traffic situation in Manhattan, and the safety of pedestrians. You can't do that. You could make a whole job doing that, you could try to admonish a couple of taxi drivers once in a while.... But if you try to do that in your interpersonal relationships, in real life, if you try to behave the way you behave as a programmer, doing his or her job, if you behave that way with your family or friends, it's highly inappropriate. You have to be a lot more... you can't debug every problem in the real world. At some point you just have to stop and say, okay...
A: .. alright, let it go. That's the key thing, and I think a lot of these edit-wars are people who just can't let it go. "This must be capitalized!"
S: And it's very much a programming mindset, I think. And it's unfortunately necessary, because compilers are unusually literal-minded, compared to, say, humans. And computers just do exactly what you tell them, and therefore you have to be extremely strict in what you emit. You have to do the exact right thing, or they're not going to respond. And when you have bugs, you have to fix every single one of them, because who knows what's going to be a security bug, and what's going to be.... And so that's why I think programmers do this a lot.