Spolsky: Alright let's get on with the podcast. Let's start with attendance, somebody thought that was very funny when we did that last week.
Atwood: <laughs>, I'm glad someone thought it was funny.
Spolsky: So I think we should do it every week now, <laughs>, Jeff...
Spolsky: And Joel present, good.
Atwood: Present, check, you have to check.
Atwood: Check, yes check <laughs>. A little Flight of the Conchords reference for anyone who doesn't know.
Spolsky: Of course. That show's great, and I think they're done, they're not making any more, or are they ?
Atwood: What ever ?
Spolsky: Huh ?
Atwood: Well they were in concert last night in San Francsico I know that.
Spolsky: Cool, well I think they were tired with having to come up with a whole song for every show.
Atwood: Hmm, I hadn't heard that.
Spolsky : Because they'd used up all their songs on the first season, and then they did a second season and it was just exhausting for them to come up with like a new song for every single show. It would be like doing a podcast every week or a blog post.
Spolsky. Of all the IDEs, I think the only IDE that really has any kind of marketplace where people actually make money selling add-ins is Visual Studio - it's only a couple of companies that actually make money selling add-ins for that.
Atwood. Right. I feel like I'm kind of the bad guy for advocating that they put
these companies out of business - but that wasn't really what I was advocating. I guess you could have the starter version that has the core features; the really key one or two things that it does that everybody would want. And then they could sell the upgrade version, OK, then you get the pro version that does this really cool stuff.
Spolsky. Well it's either cool or it isn't. If it’s cool, you want to have it, and if it's not cool, then why would you pay for it?
Atwood. I think there's a way to walk the line there. There's the whole Freemium
model, where the core product that's free, and you up-sell all these other things. You know who does that really well? Skype does this really well and in a tasteful way. Because the core us of the Skype product is free, you know, making calls internationally. But if you want to call into a phone number, that costs a little bit, or
have your own phone number that people can call that rings on your computer.
I pay for that, so they've up-sold me. I think there are ways to do it, but it's definitely tricky.
Spolsky: OK, so, was that the end of the list?
Atwood: I think so. Basically, the next thing I was proposing was having a contest to have the best user-designed IDE add-in with the intent that at the end of the contest we're going to take these and fold them into the product,, there’s no expectation… If you're going to make a company…. <laughs>
Spolsky: Yeah, I think this is just a bad business to be in, filling in the gaps in somebody else's infrastructure. And so, if you're going to build an add-in world, you probably have to build it in a way that the add-ins are assumed to either be free or ...
The only way you can really sell an add-in is if you're providing some very niche-y thing. Let's say that you've got the Visual Studio add-in that allows it to talk to some crazy... nuclear power plant thing. There are 4 people who ever need this, but they really need it. And then you sell 4 copies of your add-in for $1 million each. And there's value there all around. So, that's a legit market. But if it's just “hey - I've got better keyboard shortcuts for Visual Studio”, then you probably don't want to have that be your business model because eventually if what you do is good enough then the vendor of your platform is going to have to copy it
Atwood. Wasn't that true of the industry in general though? Couldn't you make
that argument for competing Excel vs Quattro Pro?
Spolsky. It's always true of vendors and the people that build on top of their platforms. Let's look at the Windows market. The Windows market was very successful for people who wanted to build on top of Windows and make money doing that because they could build something that Microsoft didn't want to build or wasn't interested in and make money doing that (because Microsoft couldn't
do everything). On the other hand there were certain things that were built on top of Windows that were basically just utilities to work around some limitation in Windows itself. So there were alternate shells, and alternate file managers and keyboard recorders and all those sort of utilities. And anything that was good eventually got folded into the Windows core product or just got re-implemented by Microsoft, usually in a better way than these utility vendors. Half of the shareware that’s out there is filling in some limitation in Windows or in DOS (that doesn’t exist any more). Remember all those DOS shareware for Terminate and Stay Resident (TSR) programs?
Atwood. Right. I do.
Spolsky. Eventually … it was compelling to multi-process, so Microsoft had to build a multi-processing operating system. Or Stacker which got into a big lawsuit with Microsoft and was eventually gone by building in compression so that your hard drive would always compress everything automatically and silently.
Atwood. I remember that.
Spolsky. That was a business for a while, and eventually it just got added to DOS in a way which … They sued Microsoft for patent infringement in that case, and they actually won the lawsuit against Microsoft but they’re still gone – although Microsoft actually did not infringe their patent, so… but the jury thought they did.
Atwood. This is kind of a universal problem. There’s something that – at its core here that’s not going to go away. There’s some tension here in the model that you’re going to have to deal with, unless you’re open source in which case that’s sort of the out. Ultimately maybe that is the answer. Maybe everything eventually has to be open source! <laughs> [indistinguishable] Licensing goes away, what-can-we-include-what-can’t-we-include goes away, it’s amazing how many problems go away.
Spolsky. Of course, getting your programmers paid becomes a new problem.
Atwood. Well, that becomes a new problem, but from the consumer’s perspective, let me tell you, it’s an attraction: you have the source code. Do you have any other questions?
Spolsky. Er, no, that was our three listener questions. Hey there was something – I sent you an email asking, that we should talk about…
Atwood. It was about feedback in interviews. The question is: if you’re at a job interview, and for whatever reason you don’t make it, how much feedback should you get about why you didn’t get the job? Let me give you my position first. My position first is that I think you need enough feedback that you know why it didn’t work out, so you can adjust. Maybe it wasn’t you. Maybe it was some particular thing, like “you wore a red shirt today and man, we really hate red shirts”.
Spolsky. Well if you tell somebody that, you’re not going to win any friends. Even if it’s true.
Spolsky: And it's not that important to... boy, when I was in seventh grade, I used to go down to the University of New Mexico computer lab and play around a little with these teletype printing terminals that you would type on like a typewriter type keypad and it was connected at 300 baud to this mainframe IBM/360 computer and you would type little commands and hit Enter and it would execute them and print them on a dot-matrix printer that was going <makes printer sounds> on this gigantic piece of fanfold paper. And we would go down and play Star Trek and Star Trek was a game where you had a ten by ten grid of dots that would print.
Atwood: Oh, I've played that.
Spolsky: You were the 'X' and the Klingon ship was an 'H' and you had to fire at the Klingon ship by saying "fire photon torpedoes 20 degrees" and then the Klingon ship would move of course and you would miss. And that was the whole game. <thinks> Yeah, that was pretty much it, that was the game. Then you could move and try to fire again. How much harder can you get.
But I did this for several years and then I started trying to learn the programming languages that were available on the system and the three programming languages... the system which nobody's ever heard of and I don't think anybody ever installed except for the University of New Mexico because they were... daft... was called "CallOS" (sp?) and it was an interactive timesharing system for OS/360 that supported three programming languages. They were Basic, Fortran and PL/I. Although it was a subset of Basic, a subset of Fortran, a subset of PL/I and it was the same subset. And in fact, I believe that I learned later that they were really just sort of these very simple preprocessors, that preprocessed whatever subset of those languages that you used into the same kind of internal mushy stuff. I don't think they were sort of standalone full-fledged compilers cause they really all had the same functionality, just slightly different syntax. Like .NET.
Anyway, there was this... I was thirteen. And there was this... cool 19-yearolder who's a computer science student... And he was really cool. And really muscular, too. He would wear these tight, tight t-shirts. That's not really relevant but that's just to show how cool he was.
Atwood: <laughing> A muscular programmer -- that is somewhat rare.
Spolsky: Yeah. But you could tell that he was like captain of the football team kinda cool. And I asked him what... how many programming languages he knew. Because he's like: "I'm a computer science student!" And I'm like: "Oh yeah? How many programming languages to you know?" And he's like: "You know, the programming languages is not really the point... knowing a lot of programming languages is just not..." you know.
So ever since I'm thirteen I have known that the programming languages is not the point of what we do as computer programmers.
Atwood: I agree. So maybe, I guess what we're saying is: they're asking the wrong question. So if you're in a curriculum where they are agonizing over what language do we use to teach beginning programmers then you're already sort of... in trouble.
So that's the one course which is I wanna teach you academic computer science, theoretical proving things about stuff and the pedagogical print (?) people who are going in that direction tend to start with a language like Scheme. And the other direction which is the new MIT curriculum is to say: we want to teach you what programmers do these days... is they deal with badly documented APIs that don't work the way they're supposed to. That you're constantly falling down and tripping over things. You're working almost in a scientific mode where, in order to use an API or write code you have to try things and figure them out and come up with little experiments and try little experiments and then spend the rest of your life debugging, because the API you're using is so leaky and the abstractions that you're using are so leaky and they're flowing so badly and the idea that they came up with at MIT is that the first year programming students should learn how to program robots to do things. Because they said that robot libraries are always kinda badly documented and the robots themselves are... although it may appear very simple to tell a robot to drive forward, the minute you do that and you see that the floor is not exactly straight and so the robot tends to turn a little bit and you realize that programming is more of a scientific art of just trying things until you finally bash your stupid API into submission. And that programming robots is a very good metaphor for this.
Atwood: <laughing> That's great, that's so true.
Spolsky: And if you have ever tried to program [Lego] Mindstorms... I mean, you could try to figure it out in theory and then you write the code and at step two the robot would just fall off the table and you'd say: "what the... heck" and then you'd realize that merely telling the wheels to spin at the same speed doesn't really cause that to happen. And so this is indeed what the MIT curriculum came up with and they chose the Python programming language not because they have any particular affection for it, but simply because it was a good language to use for the robots they wanted to program. It would just happen to work well with that particular robot library and what they care about is not the actual language, they picked the best language for the job, but it's not a matter of teaching you Python, it's a matter of teaching you a programming in an environment where everything is constantly falling down around you and nothing works as documented, even if there were documentation, which there isn't, and if there is documentation it's the kind that has been written by a technical writer who's afraid to go into the programmer's office, because the last time she did that, she got her head bit off.
Atwood: That's a great example. And I have a question on Stack Overflow that segueways directly into that and it's: How can I teach a know-it-all beginner programmer? It's 868301.
Spolsky: Oh yeah, I remember that one.
Atwood: And I really like the response that this thing... I think particularly people who grew up as programmers, the hardcore guys, who were programmers for a very early age so they were the know-it-all beginner programmer. Almost everybody has been to the stage where they're young, they're full of pith and vinegar and they know everything about everything and you can't teach them everything.
Spolsky: I love this comment. This comment says: "I have met people like this. There is always one time when they come and declare: I have found a bug in GCC." <laughs>
<talking over each other>
Atwood: And I really like the responses, particularly the number one response which is true, you have to say it's the only thing you can really... one of the comments is: "hell, make them fail!" <laughs> Like if you know they're doing something that's wrong and they're just too headstrong to agree with you... I mean some of the security exploits we've had, I mean, we went in being cautious, we knew we were making mistakes, but if you're really headstrong and say: god, this code has no security vulnerabilities. Just say: fine, put it out there. And maybe you could nudge a few people that are really good at... hack in and say: "hey, guess what, I'm logged in as you," which has actually happened to me. And then you give them a bit of humble pie and if you give them enough humble pie and you're not a complete idiot then you kinda learn that you don't actually know everything.
Spolsky: ...and you should become, and know it's working because you should become a programmer like the rest of us which is perpetually cowering in fear, shivering in the corner of the room, hoping that the bad man doesn't come back. <laughs>
Atwood: Is that one of the comments?
Spolsky: No, that's just like what the rest of our programmers are like. "Nothing can ever possibly work." You can write some code...
Atwood: <laughing> "Nothing can ever possibly work." That's Joel's programming motto. That's inspirational!
Spolsky: No code that you write can possibly work. That's the level of humbleness it takes. I have... have you ever written code and had it work the first time? I mean, it gets to the point where you are just surprised that it even appears to be working and you haven't yet found the bugs.
Atwood: Well when it appears to run then I know that there's some secret thing wrong with it so that's even worse. When it runs the first time. It's like then you're more afraid.
Spolsky: Like I say you have to be shivering, naked in the corner of the room, in the foetal position crying "make it stop, make it stop".
Atwood: This is a really great thread. This is a fine case for discussion questions that are actually on topic and add to Stack Overflow because there's some really brilliant responses in here that are really, really helpful. So I encourage everybody to look at that. And of course my watershed moment was "Code Complete" - you know finding Code Complete - so you can always throw a copy of Code Complete at them if they're in a place where they'll actually read it and not just let it bounce off their head.
Spolsky: Yeah, that is a good book. I always feel like it sort of, it's got some great stuff. Do you think that "Code Complete" needs to be updated a little bit?
Atwood: Well it was updated in 2004.
Spolsky: Oh it was?
Atwood: That was basically 10 years, so I would say it's reasonably up to date.
Spolsky: Ok, Ok.
Atwood: You know there's a few parts there that I don't agree with, obviously, but I think that's true of any book, like the Bible for example.
Spolsky: Sure it's got... just tear out "Leviticus" and you're good to go.
Atwood: <laughs> Exactly. But I think the two things that would help, what I reccomend is, one if they're in a place where they will accept Code Complete and will actually read and take it to heart because there's some really cool stuff in there for... even if you think you're a badass there's stuff in there that will help you.
And then two just being around other programmers who have more experience. As a young programmer who thought I knew everything I was lucky to get in with another guy who had been through a lot more failure cycles than I had and he would sort of shake his head and say "you don't understand how this stuff works" and he was right I didn't. If you're around a bunch of other young programmers that all think they know everything you're screwed. That's my point. Try to get into the company where you can learn from the people you're working with that actually have some level of experience above your's.