Loading summary
A
Up Next, on episode 50 of Stack Overflow, Joel and Jeff sit down with Steve Yeage to discuss his JavaScript compilation project, a generalized googly approach for plugging language support into editors, and the overall importance and philosophy of language tooling from IT Conversations. Hi, this is Phil Windley. Today I'm excited to bring you another great program from Stack Overflow with Joel Spolsky and Jeff ATWOOD Here on it conversations.
B
The Conversations Network is a 501c3 nonprofit, and we need your help. For a tax deductible donation of as little as $5 per month, you can support this channel and the rest of the Conversations Network. So please visit conversationsnetwork.org to become a member and help us continue to bring our programs to the world for free. Our audio files are delivered by Limelight Networks, the high performance content delivery network for digital media.
A
And now, here's Stack Overflow.
B
You know, John Cage is the composer who pissed everyone off with this 4 minutes and 37 seconds composition, which was a dude sitting at a piano for four minutes and 37 seconds.
A
33.
B
Is it 33?
A
4.
B
33. Oh, man, I'm four seconds off.
A
You just. Well, I think you might have your own new composition. Our guest today on this Echo Flow podcast is Mr. Steve Yegi.
B
Howdy. Howdy.
A
Formerly of Amazon and the Navy. Even before that, currently of Google in Kirkland, where Michael and I are visiting. Jeff is on the line from Emeryville.
C
Well, actually El Cerrito, but close, very close.
A
El Cerrito, Yeah. That's a different Mexican restaurant outside of Berkeley.
B
Yeah.
C
So how is. How's the Googleplex treating you?
A
It's pretty nice. It's not. This isn't the plex.
B
I don't think it's kind of plexi. I mean, it's the plexi est. We got in Kirkland.
A
Yeah, it's the locally Plex.
B
It's frigidly cold here, but it's beautiful outside.
A
Apparently the weather in Seattle is usually bad. We're having beautiful weather and everybody's saying that we were lucky or something.
B
You were. You're using our whole year's quota of sunlight, basically. But no. Yeah, we're in the Kirkland office. We had a nice lunch. It's Earth Day tomorrow, I guess. And so the chef came up and started begging us to take asparagus home.
A
Oh, yeah, there's a big old table of organic produce up there in the Amazon cafeteria.
B
Google cafeteria.
A
Sorry.
B
Amazon and Amazon. You have both of them pulling your wallet out.
A
They do, but so we're in the Google cafeteria. There's a big old table set out there with, like, raw asparagus and 20 kinds of fruits and vegetables.
B
Yeah, like a farmer's market.
A
All kinds of different apples and stuff.
B
And I was trying to explain to Joel that at certain other companies that I've worked at, without naming any names, there was a big discussion about whether you should feel guilty if you're going to take food home. You know, if they decided to feed you, because there was some cataclysmic event. And I was about to say, at Google, they've kind of cleared up the ambiguity. And the chef walks up and says, please take any of this home you want. He just starts handing us bags. A little bit of contrast there.
A
That's pretty nice. I was going to take some over to my friends at Microsoft because they don't get enough food over there, I don't think.
C
But it's a table full of vegetables. That's not very programming. It should be like Ding Dongs and Twinkies.
A
And they have that, too.
C
Jolt Cola.
A
They have the slightly healthier versions of the Ding Dongs.
B
Yeah, I had the much healthier Red Bull Cola.
A
Red Bull Cola and stuff.
C
The organic Red Bull.
B
We did have a brownie. There was a brownie.
A
I'm just noticing that that lava lamp seems to have an antenna. It seems to be attached by a.
B
Wire to an antenna. That's our wired Internet lava lamp. So you can check its. I'm just making this up.
A
There's a lava lamp here, this little tiny conference room we're in, along with a floating soccer ball.
B
It's not very lava lampy either. It's on, but it's not moving, so maybe it's actually a, you know, listening.
A
Device or it's just CGI that they added afterwards.
B
Could be. So, Jeff, how you doing?
C
Good. Well, I was gonna tell you your show was one of the most popular ones I think we ever did.
B
Yeah, one of the most popular.
C
Yeah.
B
Repeated.
C
Repeated compliments on that. People really seem to enjoy that show.
B
I don't remember any of it, but I hear it was good.
A
We might have talked about programming languages. Everybody likes a good programming language fight.
B
Oh, yeah.
C
Oh, speaking of programming languages, I have a little anecdote. You guys probably knew this, but me being a dumbass, I didn't know that APL was actually symbols. I thought you were kidding. You brought that up. You're like. I said, well, what if there's a programming language or. I think Alex brought it up, actually, at the Daily. Wtf? What if there was a programming language that was entirely symbols? I was like, ha, ha, ha. That's hilarious.
A
And I said, yeah, apl.
C
And I was like, that's ridiculous. And then in the comments, after I put that show up, people were like, yeah, just like apl. And I was like, what? I was like, joel wasn't just pulling my chain like he usually is.
A
When did I ever pull your chain?
C
Constantly yanking my chain.
B
Yeah. I think they got the idea from terminals that couldn't display Unicodes. So you'd see little smiley faces and stuff, and they were like, oh, you know what? This is even more succinct than Perl.
A
The line noise language. I think they're really. Well, first of all, I don't know why it uses symbols. It's really a matrix language.
C
Well, it's a mathematics thing. Somebody said, this is what happens when you let math mathematicians design a programming language.
A
It gets really concise. But like, the whole. Like the whole, like the Fibonacci generator is like eight characters or something. And yeah, it's a. It's a very concise language.
B
It's good to be able to save space on your Fibonacci generators because you got a lot of those. The toy examples always drive me nuts. You know, C. You know, see the Strue strip books? You know, the C toy example that he uses again and again and again. It's the point class and how it's just so hard. And C. And now we can have.
A
Right.
B
Points which inherit complex numbers. Complex numbers. That was the one.
A
Complex numbers.
B
Yeah, same thing.
A
You got a whole programming language designed for complex numbers, pretty much.
B
And then he kind of bolted everything else on afterwards.
A
And strings. That's the problem, is that you couldn't do strings.
B
Right, Exactly. And then Perl came along, and they could do strings really well, but not so much lists or trees or data structures. And then it all went to hell. And then now the Haskell and the Scala people are like, look at our Quicksort. It's only three lines, and it's not actually Quicksort, but it's pretty close. And it's provably correct that your stuff is sorted. And it's like, great. That makes me want to use the language. I don't know, it's just.
A
It's some other sort of medium.
B
Sort.
A
Yeah.
C
So just to clarify, there is a version of APL that gets rid of the crazy symbols, but it's essentially the same language. I believe it's called.
A
I want to say J Is that what that is?
C
Yeah, I think. And a lot of people that use APL have sort of switched to that because it's less insane.
B
Was it like four out of five people? Because there were only five, I think, actually using apl. Right.
A
They used to. Used to have to get a special terminal for it. And that was.
B
Yeah, you couldn't type it in. That was. That was a big one. Right. I mean, like, if your keyboard doesn't work, then where are you and your terminal? You know, the thing is, I hear it was a really elegant, really nice language. And I. You know, a lot of old geezers tell me they just loved it. It's just a shame that it just never took off.
A
I think it did among, like, mathematicians, people that were modeling weather. But this was. This was. And scientists and stuff like that. But, I mean, this was really in the 60s, maybe the early 70s, so it wasn't like it was Windows. Like, you could have a language with all kinds of wacky stuff, and then they would just put a little on screen keyboard, and you could click on the glyphs that you wanted. No, this was like you had a teletype punch type terminal with the.
B
You probably had some horrible, horrible setup that looks like the sound equipment on the table in front of us. And we're gonna. In 30 years, we're gonna look back and go, remember that sound setup you had for the podcasting?
A
The only thing funnier than all these wires that I have on the table for this podcast is trying to get this through airport security.
B
Oh, God, I can't imagine. This looks. It's. Seriously, it looks just like the Apollo 13 scene where they dumped all that stuff on the floor and said, build a CO2 remover. And Joel was. Joel. Joel did it in record time. I think he did it in under 15 minutes. Put it all together this time.
A
Yep, it was.
B
It's an impressive piece of work. It's impressive piece of work. That's what you needed to program APL is. What I hear is you just needed this really fancy.
A
That's what. Well, this setup is. This is nothing. Just the fact that I could fit a whole professional recording studio into a knapsack. And then we got Jeff on Skype coming remotely.
B
Yeah, it looks pretty cool when it's all set up now.
A
Yeah. And you're not even seeing the cool flashing numbers over here and the blinking lights and little VU meters that I'm monitoring.
B
It has blinking light, kind of like the Star Trek panels with all the blinking lights to show you that it's.
A
Swing around over here. You probably won't unplug. We got four little VU meters here, so that's me.
B
That looks very expensive.
A
That's the time. It's an OLED display.
C
Well, let's not get too meta on podcast stuff. That is one of my complaints about other podcasts that they talk about.
A
They talk about podcasts all the time.
B
Who? Yeah, they do.
C
It's kind of like programmers talking about programming languages.
B
Yeah, that's really annoying. Let's not do that.
A
A minute ago we were. Steve, we were about to have an interesting conversation. I was like, let's save this for the podcast. What the heck was that about? Do you remember Michael? Nope. It's lost too. It's lost to.
B
Was it the strippers? No, different. Sorry.
A
No, I thought they were hookers. Wait a minute. This is a different.
B
Well, then that was my former employer. Yeah. What was it?
A
I was asking you sort of what were the worst things about working at your former employer? Because I guess I hear that it's not such a great place to work anymore.
B
No, it's not so bad. I mean, McDonald's has pros and cons, right?
A
Yeah.
B
You know, you can make a case for working there.
A
I mean, it's one out of eight of all US citizens have worked at McDonald's at some point.
B
And I would say that with their turnover, my former employer will probably be pretty close. One in eight programmers will be able to say they worked there for a year, and as soon as their signing bonus kicked in, they ran. Yeah, but I don't know. I'm thinking that four years is probably the appropriate amount of time to wait. So I got another six months to go before I can actually sort of start the whistleblowing or what's the right word for it? The expose. Not that other people haven't done it before. Right. And written books about it and stuff, but I mean, that place was just.
A
Yeah. Mike Daisy. Oh, wait, we're not identifying them by name.
B
I don't know who Mike Daisy is. I don't know who. Is this a cell phone? But no, I think six months from now you can ask me and I'll be a little more forthcoming about some of the craziness that went on there.
A
It was really sort of a dot com company, right? Just dot com craziness.
B
Well, I don't know. I've heard a lot of dot com stories, but I haven't heard companies where managers wrote with green felt markers, bald employees heads, or prevented people from going.
C
To their.
B
Keeping people from going to their mother's funerals or any number of other. I mean, it wasn't just dot com craziness. There was actual real craziness there. Mooney craziness going on there for a while.
C
Wow.
B
But, you know, we're talking about it. This company's ancient history. I don't want to talk about who they were or anything like that, but. But you did ask me. You did ask me what I'm working on.
A
Oh, yeah. Are you allowed to say what you're working on at all?
B
Yeah, to some extent. You guys asked me last time, and I was like, right, right. And this time I'm more like, okay. So, you know, it's just a little. A little less.
A
So two barks, one bark. Is it. Is it. Is it anything to do with, like, communications in some way? Give you one bark? Yes.
B
There's no.
A
Right? No, not a communications tool.
B
No, no. It's an internal. So, you know, I'm kind of obsessed with productivity. Right. And as it happens, so is Google now because, well, a recession hit and now we're, you know, nobody's hiring like crazy anymore. I mean, I think everybody was for a while, but.
A
Yeah.
B
And so, you know, they're taking a look around to see how to get more out of their current engineers, and they're walking around asking people, so what would make you happier? And people inevitably say, tools, tools, tools, tools. Right. I mean, that's what they want. They're like, I can't navigate. Well, people come over here from Microsoft and they throw temper tantrums.
A
Okay, that's true. They don't. Microsoft really does have a machine of tools. Like the tool. Like the.
B
Like. Yeah, they have all kinds of machines. I was wondering which. Which one you were referring to. Well, like one that keeps your eyelids open.
A
I'm thinking about that. When a programmer writes code at Microsoft, it goes into this gigantic factory. Yes. You don't even know about. And millions of copies of it in 47 languages. And you're seeing your code running in Turkish and somebody's complaining to you about an error. When you capitalize the letter I from English to Turkish, it loses or doesn't lose its dot as appropriate, and the Turkish Alphabet set. And you're like, what? My code runs in Turkish?
B
Nice, nice. And also they have intellisense. Right. They've had it forever. Intellisense.
A
I forgot that.
B
It's like crack or so I hear.
A
Yeah. Oh, geez. You have to. With the size of APIs today, where you got like 8,000 little member functions Exactly.
B
And I've heard, it's funny, I heard this Googler, who he sent this impassioned rant to, I don't know, our Java Java list. And he said, you know, I've been a C programmer for 25 years, and I never ever thought I'd be using Java. I've been using C since before there was C, apparently. I don't think I did my math quite right there, but he's been doing it for a long time, right? And he says, you know, he says, I had to. I had. I was forced to use Java because I wanted this one project and I'm using Java. And he says, you know, now, like a year later, I can't. I can't even begin to express how much cooler it is than C. And it's not the language. It's got nothing to do with language. The language isn't even really that good. It's neither here nor there. The tools are amazing. He says the things that it can tell you and blah, blah, blah. He was basically going on and on and saying, java has kind of intellisense now, right?
A
Right now. People in Eclipse, presumably.
B
Yeah, it was Eclipse or maybe Intellij or whatever. One of those. One of those ones. And so, you know, Visual Studios had this, like, kind of forever. And so people from Microsoft, you know, that's. That's the environment to use, except for the ones who use Emacs, which is apparently kind of a larger number than they like to advertise. But they come over here and they're like, I can't find my way around this code base because Google has a lot of code. I mean, so does Microsoft, so does any big company happening.
C
Right? And.
B
And so I was like, well, so like a year ago. So after having been on three projects, all of which were canceled, I think I told you guys this.
A
You have a lot of bad luck with that.
B
Yeah. You know, but it wasn't all bad, right? I mean, like, I even got a bonus for one of them.
A
You could have a situation comedy sort of like everyone, like everyone hates Chris, where something bad happens to you every single day. I could stand up and dust yourself off.
B
I could. But I mean, it would be so hard to pull it off around here. I mean, it's like, oh, something bad happened today. They didn't have enough asparagus or whatever. Right. I mean, it's just like you got.
A
Ran out of asparagus.
B
Free vegetable table perspective. Right. I mean, seriously, people got kind of whiny here. We had a reputation in Kirkland for being whiners. Right. Among the rest of Google. It's because people, people would literally write on the comments board. That's the one that really got my, my coworker was please don't put frosting on the chocolate brownies because it gets on my finger. It's just like we've got serious problems at this company.
A
What's that expression? How quickly we grow to feel entitled to things that were only invented 15 minutes ago. There was a woman on the plane when Michael and I were flying who I guess it was the kind of plane that doesn't have power outlets at every seat. And she was just complaining to the flight attendant. She's like a six hour flight without power.
B
How am I supposed to.
A
What?
B
It's like being on a desert island. I know, I know. So yeah, the entitlement thing is you wouldn't think that it was an issue. And other places in Google, it doesn't appear to be like, I heard one dude stand up at the company, all hands and complain that because there was now a cafeteria in every building but not a bunch of micro kitchens, that what if he didn't like the chef's food and he had to like walk to another building and he got booed off the stage, everyone was laughing and jeering at him and it was like, clearly no entitlement down there.
A
You know what? I think Google hires a much larger proportion of experienced developers than fresh out of college developers relative to the average high tech company. I could see that. Which means that a lot of them have been at places where they know what the par for the course is.
B
I actually made an argument at one point, and I was kind of semi serious, that you should not be allowed to come here out of college. Right. Because you have no idea how good you've got it.
A
Right. Just for that reason alone or, or.
B
Like if you come here from college, we should slap you like just once, right? Just to say that's what it's like elsewhere. Right. Or you could stand, you know. Yeah, just have them go to a little boot camp, I don't know, something to, you know.
A
Well, here's an idea. What you do is you find some big advertising agency in New York or something that's doing some integration project with Google to, you know, to feed 8 million adwords something campaigns or something and you send them out to work in that place for eight weeks.
B
We call it the salt mines project. And they get to be in the salt mines for eight weeks and then, and then no food or anything like that. No, and then they get to come over here and then, and then maybe they'll get it right. Because it's often the college hires who were kind of had the worst entitlement problem. But anyway, we had kind of a reputation for it and it was kind of an issue, so. But developers are kind of entitled to good tools, I think. I mean, you know, it's foolish to try to. I saw this dude, he's not with us anymore and he left volunteer. He was a good programmer. I mean people can get by with, you know, just basic vi. But I mean the dude he was using, not vim, he was using vi, like VI or whatever you call it. Right. The old one, it was like Ed.
A
1, comma, 3i.
B
Exactly. And he, he didn't have any colors. He was using the green on black terminal theme, you know, reminiscent of the old days. Even though he had just gotten out of college and probably didn't even know what he was doing. Right. He hadn't used a terminal before and he. So he had. But he didn't even have parent matching turned on. He had no brace. And he was doing this really deeply nested JavaScript. And every time he'd make a change, he'd go in and he kept spelling it function instead of function, right? He'd leave the N out. And I watched. Yeah. And I'd watch over his shoulder and I'd be like, dude, you spelled it function again, right? And he'd be like, oh yeah, boy, I really ought to. And I'm like, yeah, I guess it's kind of funny. So I was watching over this guy's shoulder and I'm thinking this is kind of sort of the state of the art of tools at Google for people who are doing any sort of JavaScript, any sort of C, anything that's not. Not Java. We got to fix this. This is a problem. And you know, if I'm going to fix it, I'm going to fix it in sort of a, you know, a googly way, in a big scalable way, in a non stupid way. Right. And so I took a look around. I mean like basically programming languages are silos. We already know that they don't interoperate very well. Right. You know, you can use concorba, things like that, you know, whatever. But there's no, like, there's very little call stack sharing.
A
Right.
B
Going on.
A
Unless you have. Except for the. Set of. NET languages.
B
Yeah, yes. Or. Well, if you want to go through the exceptions. Jvm, the jvm, the LLVM is Probably further along.
A
There are little worlds that are on.
B
Yeah. And they're working on it. But I mean, I was at Foocamp a couple years ago where basically the leading experts, you know, in the world were working on this. There was a dude from. There were a couple guys from Microsoft, there were guys from Apple and the Pearl Parrot project, and there was the SmallTalk VM guy and this long list of people. The room was just packed with compiler VM brain material and they just got into this explosive argument that lasted for like two hours. They literally got up and walked over into the tent and ate dinner. And they're still like talking to each other through their mouth mouthful going, no, but what about this problem?
A
How do you throw an exception across four frames where you got to throw it through another language?
B
And it was exactly this kind of question. And it was like when people were just trivializing it going, oh, well, you'll just. And they're like, there is no just. What about threading semantics? What about object semantics? What about this and that? And it's a hard problem, basically. My point that languages don't really call each other in their silos, I think is still true today. Right? It'll be great when we all get to where it doesn't matter what language, it's just Surface syntax. But it's going to be a long time, right? And you kind of disenfranchise your users too. Microsoft, Microsoft did this with Visual Basic, right? They were like, oh, well, you know, we want it to interoperate with C, so we're just going to kind of change the way it works.
A
Well, with C, actually. Sorry. Well, or they changed the way C works.
B
Embedded C, they call it Manage. Manage C, Manage C.
A
Don'T forget that. If you do that, then you're missing the point because if you just say, wouldn't it be awesome if all languages were just skin syntax on top? That skin syntax on top is the thing that the programmers care the least about.
B
And it's the least common denominator too, is what you're going to want.
A
You have to have a least common denominator.
B
There's still the right tool for the right job thing.
A
Exactly, exactly. You got to, I mean, what are you going to do in the browser? It's got to be JavaScript, I assume, or something that translates to JavaScript, I guess.
B
I don't know. But anyway, I took a look at the sort of, you know, the state of the art tools and I was like, you know what I mean? Visual Studio and say, Eclipse, Intellij, are the sort of state of the art tools, you know, and they have auto completion and they have smart linking and browsing and blah blah, blah. But you basically have to like, you have to add support for each language for each editor. So there's an N by M sort of of matrix problem. Right. So in other words, like Emacs has pretty kind of okay C support, but this job support is not quite as good and it kind of diminishes. Emacs kind of has decent ish support for a lot of languages. Eclipse has really good support for Java and kind of okay for C. And then it tails off really fast. It's like lousy for Perl and so on, but everybody has their favorite editor and they won't give it up even if it's VI with no parent matching. They're like, damn it, I'm going to use this until I die.
A
Isn't there a problem that I know in the case of intellisense at least, it's very, very hard to do good intellisense if you don't know the type that something is that the variable is pointing at.
B
Well, it is hard, but I noticed that you didn't say it's impossible and that's the correct word because it's not impossible, it is just hard. Google has a JavaScript compiler. I don't know if we talk about it or anything. I know we're planning on open sourcing it. We're working on it.
A
Is it the same as the one in Chrome?
B
I don't know. No, it's not. The one in chrome is a VM, so the one in Chrome actually interprets JavaScript. What we have is a compiler that will, you know, it's the thing that crunches it down. So if you actually look at the JavaScript from like Maps or whatever, right, you know, Gmail, it's kind of obfuscated and it's not obfuscated, but it's still JavaScript. It's still JavaScript. But what they've done is they've given all the variables very short names and they've taken all these shortcuts, but it actually does a very, very sophisticated analysis of the JavaScript. And we have our own internal type system that we've kind of developed that's more or less modeled on the way JavaScript's type system is evolving through the ECMA stuff. I don't know if you guys have been following that. So you can write typed JavaScript in Google. So there's classes and there's methods and inheritance and there's even to some extent parameterized types and things like that.
A
Do you have to declare the types?
B
You don't have to. There's type inference. Okay, so the more types that you declare, especially at key points where there's a little bit of purchase for the type inference engine, the better it'll tell you. Oh gosh, I have no idea what's going on here, but it's very smart. It actually knows about union types. So if you have a function like in JavaScript that takes a number or a string and it just casts or maybe it dispatches and does something different because they don't have overloading. So what you do is you just look at your arguments and see what you got and then do some dispatch. Right. The type inference engine and jscomiler will actually figure out what all the possible things are that you do pass in and create a union type for those. None of this has ever surfaced in any sort of an IDE or anything. It's just warnings or errors at build time.
A
So it can catch things faster.
B
Yeah, but I mean it would be very nice if it could catch it as you typed it. Right.
A
And plus like know what the type of that object is.
B
Absolutely. So that you could do auto completion, things like that. Right. Code navigation. So, so, so the, the JavaScript approach that we've taken is, is I, I think a model for how we're going to do static analysis. And when I say we, I mean the industry, how we want to do static analysis for languages like Perl and Python and Ruby and so on. And in fact the Python crowd here, when they saw what I had done internally, they were like, want that for Python in a big way. And so I'm like, well yeah, we have to write a Python compiler. It's going to be some work. Right? Because the thing is a really sophisticated compiler. It does like 50 passes over the IR and it builds a control full graph and all that Dragon book stuff. Right. And it's doing it with JavaScript and it's starting off with very few types. I mean the types that you give it. Right, but I mean like you could potentially. I mean, I think eventually we're going to be able to run a third party code where the only types are like literals and functions and there isn't a type system. Right, but it can still infer kind of a lot of stuff there.
A
Right? Yeah.
B
So like, anyway, so again it's hard, it's a lot of work and it could be better and so on, but I Mean, it's pretty good. And then with C and with Java and statically typed language, you have types. So you have a lot of stuff. For the intellisense stuff to work, there's.
A
Actually, I mean, if you open up in the latest version of Visual Studio, if you open up an HTML file has a bunch of random JavaScript pasted in there, the JavaScript will get syntax colored and IntelliSense will almost work. And it'll use all kinds of exhaustive methods to try to guess what type things are, sometimes. Sometimes in ways that are maybe 95% accurate, but not 100%.
B
That's been. My core philosophy is if it's 95% accurate, then 5% of the time you're going to be fixing it. That's no worse than the indentation for JavaScript or probably for C. Every once in a while it doesn't indent exactly the way it wants, but as long as it's helping you, a lot of.
A
Times when it's failing, it's queuing you off as to something that you did non standard that's true or possibly even wrong.
B
You're right. It's actually kind of an incentive for you to sort of code in a more transparent way. Now people who love to write obfuscated JavaScript will kind of sniff at that and go, whoa, I want to use anonymous function callbacks nested inside of other closures that are passed along. And you're like, fine, your tool won't know what the hell you're doing. And that's your choice, right? So anyway, I decided why not take these compilers that are designed for IDEs. Like Eclipse has a whole bunch of compilers that compile Java. It has like three Java compilers in it, right? You know, one, it has a fast, kind of inaccurate one for as you type, and then it has kind of a better batch one, and then it has a great big one that does like exhaustive analysis on big trees. Right?
A
And this is all just for syntax coloring. This isn't even compiling your program, this is just the ide.
B
No, Eclipse actually does compile your program.
A
Well. Yeah, but I mean, you're saying some of these compilers.
B
Well, only because Java requires you to compile to store symbol information, because you got to store it in class files, whereas with C you can use like headers. Right? But yeah, it's not for compiling an executable necessarily.
C
Right.
B
But it is a compilation. It's basically it's doing all the semantics analysis. So it's everything except CodeGen. So effectively it is a compiler, right? And so take these things and run it on Google infrastructure and run a service around it. So instead of having to write a separate language plugin for every ide, for every language, instead you do it once and then the IDEs have these sort of these super lightweight kind of thin client plug ins that deal with things like style runs and hyperlinks, right. They're not dealing with parsing and all that ugly stuff. Right. All that stuff is done like by these big batch analyzers. And then maybe I'll follow the Eclipse model and have some really fast interactive ones as you type. So the idea is basically to commoditize IDE backends and I want to bring it externally at some point. We got to dog food the thing for a good long time. It's got to be rock solid, bulletproof before we start showing to other people, because it's awfully close to our core organizing the world's information. People are going to expect it to be correct, you know, and if it's not correct, they're going to be like, you know, the superclass here is, you know, is wrong. And so, you know, it's going to take, it's going to take a couple years probably before I can externalize this. But this is the way I see programming language evolving, design evolving, because I want to turn the problem around and I want to have language implementers providing the sort of the symbol tables and the, and the file offset information and not discarding comments, you know, like an IDE model for everybody's, you know, whether it's Python or Perl or, you know, apl, you name it. It's no longer, I think it's acceptable in today's, you know, sort of environment to have a compiler that discards all the useful information for the programmer and just compiles your code.
A
Right.
B
Because it has it there for a.
A
While in the abstract. It's got an abstract syntax tree at some point that has tons and tons of useful information.
B
Yeah. And it just throws it all out because it's like not needed for CodeGen.
A
Right.
B
But the fact is that is you don't want to have two separate ones. You don't want to have to like track the evolution of C and Java. You want to have them giving the IDE the information. It's totally backwards today. It's ghetto, right? I mean, it's like we're in the middle ages of programming. I think it's going to change as people start. What's going to happen, I think is eventually there's going to be this critical mass of languages that all support tools and I would love to have language implementers hear this today and start working on it. Now. When you write a parser, write a mode for the parser that retains more information and then give us a symbol table that links back to the places in the source where it came from. Basically all the stuff you need in order to build an IDE that's smart, that has like intelligence about your language, about your language. And that way when you decide to make a change to your language, it's going to be supported by the IDEs, because you're exporting everything in a sort of language neutral way to do stalwarts. It'll be a critical mass, at which point people will be like, well, I'm not going to use your language because it doesn't play along with this sort of system.
A
It's just a text language that you type into a bi.
B
How lame is that? Well, that's what we use today, but hopefully in five, 10 years it's going to be ancient history. So that's kind of what I'm working on. It's pretty preliminary. It's a very tiny, small team and, you know, but there's a lot of excitement about it internally and we're, we're launching new languages about once a quarter and I don't know. So I'll be able to talk more about it, you know.
A
Awesome. Well, I hope you'll come on the show when you do have something to show us. Yeah, yeah.
C
Steve, I think that's a fantastic project for you to work on. I mean, it's a huge problem inside, not just like you said, within Google, but just in the world. I mean, if you try, try to. Having an editor that deals intelligently with JavaScript is just, there's just no real good solution out there right now. So I think it's solving a real serious problem.
B
Also. There are some okay solutions there, right? I mean, like, IntelliJ is pretty good. I mean, actually if you just like, just feed your JavaScript into IntelliJ, it does what Joel just described that Visual Studio does. It uses a lot of guesswork to come up with something that's approximately correct. The problem is that, like, what if you don't like intelligence? What if my family don't like bread? My favorite Simpsons. So you want to be able to have that data available, the code graph and the symbol table. You want that stuff available in a language neutral format that you can serve up to Emacs or to VI or to slickedit or Ed or whatever your favorite editor is. Maybe not ed, but whatever your favorite editor is that has a plugin system.
C
Like, nope.
B
Does Notepad have a plug in system?
C
But it should.
A
Notepad is a text control.
B
Yeah.
C
So the question I have, I realized that, you know, if the JavaScript gets really crazy, you just sort of have to throw up your hands and say, look, nobody can or just throw out. You don't even know what you're doing. Right. Much less the analysis service. But what about like common JavaScript frameworks? Like we use jQuery all the time now.
B
Yeah.
C
Are there, are there any frameworks so weird that they wouldn't work well with what you're proposing or are those a well known set?
B
Well, I mean I've looked at like Prototype, which I've used a fair amount I guess at home, and Prototype doesn't play super well with Google's jscompiler because why Nobody ever compiled Prototype before. If you have a compiler telling you, gosh, you've redeclared this variable here and oh, this here function's never used and blah, blah, blah, it's just really helpful, helpful. And I think one nice thing that we might be able to do hopefully in the next quarter or two we'll see is actually offer a JSC compiler as an external service where you can just shove your JavaScript into it and get back some warnings. So I think that there's going to be a first sort of chaotic path where basically every framework has to go and basically do a little bit of housekeeping, a little bit of cleanup, after which I think it's going to be, yeah, some of them are pretty dynamic. I mean like our system has to be taught, you have to tell the system how inheritance works in JavaScript because everybody does it a little bit differently. They have different names for the kind of doing the same thing with prototype chain inheritance, turning it into sort of something like class inheritance and Dojo does it one way and Google's internal system does it a different way and Prototype does it another way. I haven't looked at jqueries yet, but so those things kind of have to be hand rolled in like, you know what I mean? There's no way to detect them automatically to the best of my knowledge. But you know, so yeah, none of them are going to work very well. Right. So this is, I got to get it working well for Google's code internally and then going to kind of turn it. But I would like to maybe, I mean, you know Maybe start in my blog, just start ranting at compiler vendors now and saying, look, it's time for you, you know, people, all of you people, whether it's a VM or a compiler or an interpreter, right, whatever you've got, it's time for you to start exporting your IDE information so that, so that your tools don't suck so bad.
A
Well, there is going to be. I don't know about how Visual Studio does this, but I do know that there's a major effort underway for Visual Studio 2010 to make it easier for language developers to provide some standardized set of way of exposing things to IntelliSense.
B
Nice.
A
To make it much easier.
B
I mean, it's obvious. It's not like my idea is like revolutionary or anything. I mean, it's like it's what we should have been doing for 20 years.
A
Anybody that's worked on one of these ides has been sitting there saying, oh my gosh, I wish I could.
B
Why do I have to do all this myself? I mean, look at the amount of, of code. Eclipse has millions of lines of code. It's crazy. I mean it's massive. And most of that they shouldn't have had to write. I mean, they've got a better Java compiler than the Java compiler, right? They do. And it's like, that's just wrong.
A
So you've got this really good Java compiler that's helping you edit and then when you're done you pipe it through the Sun Standard Happy Reference edition of Java.
B
That's just lame. It's lame. So hopefully, maybe if I get my blog and just start waving my fist, sure.
A
Is this going to be an open source, one of Google's many open source projects?
B
Well, maybe. I mean, it's tricky, right? It's a hard problem. A, because it's a lot of work, it's easy to say, oh yeah, we're just going to. But I mean like when it comes right down to it, every language is its own special mess, right? And like adding new languages and getting them right, each one of them is like kind of an ongoing. Each time you add a language, it's almost like you got to add a person to the team whose permanent job is to kind of keep working on that language. Yeah, and I also like putting it on Google infrastructure and making it serving and serving it through a service API isn't something that's really easily open sourceable. I mean you'd have to like come up with a.
A
No, wait, don't they have. Wait, wait a minute. Am I being too high level here, I thought there was some kind of Google infrastructure.
B
Well, there is. Right, but that's not really open source. Right? I mean if you offered it, there's.
A
A way that people can run stuff on App engine, right?
B
You know, or whatever. Sure. But I mean like that's not the same as. I mean open source kind of usually implies there's this downloadable thing that you can run on your own computers that are not even hooked up to the Internet.
A
Yeah.
B
You know, and, and it's conceivable that I could come up with something that people could download like lxr, like the Linux cross referencer. I don't know if you guys know about that, but that's a good example of something that does a really bad job but an acceptable job of what I'm trying to do.
A
Right.
B
It's all regex matching and stuff. It's not a real compiler but it indexes code. Right. And you can download it. So like if I came up with some sort of index format, you know, I don't know. Or if Microsoft came up with an index format. Right. Like the thing you were just talking about, if they standardize some sort of XML definition or whatever, you know, maybe I could have, my analyzer could support that.
A
Right, right.
B
So it's all really, really up in the air right now. So is it going to be open source? Yeah, if it's successful, if my project doesn't get canceled because of the bleak economic winter that we're in right now or whatever, you know, I mean you never know on my track record. But if, if it's successful then yeah, I think a couple years down the road it could totally be open sourced.
C
So Steve, one quick clarification. It's almost so on Stack overflow, it's almost a running joke that the answer to any, any JavaScript question that people have is use jQuery. And there's sort of this perception and we use jQuery and love it and there's sort of this perception that there are certain frameworks, these JavaScript frameworks that are kind of winning and they're getting a lot of mind share.
B
That's great.
C
Well, it's easy to envision a world where people kind of have migrated to these frameworks. You know, nobody's really sitting down and saying, you know, I want to manipulate something in the browser, so I'm going to hand roll a bunch of JavaScript to do it, but that there's going to be these commonly accepted frameworks that sort of everybody uses.
B
Yeah, One would hope.
C
And I was surprised to hear that you. I mean, not that yet. It's a war and somebody has to win. But I'm surprised that you're not seeing jQuery as. I mean, from our perspective, it's almost like a running joke how often jQuery comes up. People seem to really fall in love with it. There's a lot of geek love around jQuery.
B
Yeah. Which I've heard nothing but good about it.
A
And a lot of the JavaScript interpreters are now starting to.
B
To.
A
Okay, now, I don't know what the words I'm supposed to be using here, but the JavaScript interpreters are aware that so many people are using jQuery that there are actually new features showing up in new versions of JavaScript interpreters that optimize for certain jQuery things.
B
I think that makes a lot of sense.
A
Yeah.
B
You know, I don't know. I mean, I should probably go look at jQuery. So I'm not speaking from a position of utter ignorance.
A
No, no, you should speak from a position of ignorance.
B
And then I.
A
I don't even know what it is.
B
It sounds like you're saying that it's a framework that gives you some higher level abstractions for doing web development.
A
JavaScript, not so much. The heart of jQuery, as far as I understand it. I'm not very good at this either is the rapid ability to identify a subset of parts of the DOM that you want to operate on in a way that's much easier than the old way that you used to do it. And it is also a framework.
B
You mean sort of like css selectors and XPath?
C
Yes, yes, it is very much like that.
A
That's part of. The second part of it is a lot of tiny little hacks, or I don't know what they call them, but they're like shims so that you don't care what browser you're working on.
B
Sure.
A
So they just abstract away like the little capitalization differences between Internet Explorer and.
B
Firefox and they spew out gigabytes of code.
A
If it's IE5, it's actually pretty small, actually. I mean, they're like these little tiny things where they just sort of redefine some name as some other name.
B
Yeah. Okay.
A
To make things more consistent with you.
B
Well, yeah, it sounds cool. As far as I can tell, all these frameworks interoperate reasonably well. There are almost never any namespace collisions. I mean, I've used like Dojo and Prototype together and they weren't really intended to. They had to make like one tweak to Dojo. And then you could use prototype, you know, and of course, you know, then you run the risk of having just this mountain of JavaScript from five different frameworks, you know, that takes forever for your page to load. I got to tell you, I mean, the reason I haven't really looked at jQuery is, is that, well, maybe I should, I mean, maybe, maybe there's people at Google who are using it. Like, I don't even spend a lot of time on the list. I'm more kind of in the tools and infrastructure side than doing a lot of actual JavaScript development. I do some of my own, but it was sort of my first experience with it and it was using Google's framework with the types and everything. And Google, everybody has a little bit of a different take on it, right? I mean, some people focus on the presentation level. JQuery sounds like it's focusing on, you know, structure, structural queries, which is great. Prototype is kind of focused on Ajax, you know what I mean?
A
They all have their.
B
And the Google one is kind of more like the Java libraries. So it has abstractions for timers and for data structures and I don't know this and that, right. So all of them seem to be kind of tackling a slightly different subset of the space that you would expect any reasonable language to be tackling. Right? I mean, the standard library, none of them is complete, I think. But I'll tell you, once you've used Google's JS compiler, I mean, you really don't want to go back. So hopefully we can get that thing open sourced so that everybody can start using it. Because it's not just the compression and the sort of obfuscation that happens, it's really the type to type system and the warnings and the errors that it gives you, it'll actually report what percentage typed your program is like. Of all the identifiers, It'll be like 87% of it is typed. And so you can go out, you can launch JavaScript with some, some comfort, I guess, that it's actually, it's actually gonna work.
A
We actually have our internal programming language on Fogbugs. Wasabi actually has a type inferencer and the original language was VBScript. And so I'm actually, I actually appreciate all that, which is one of the nice things about Wasabi is getting error messages early.
B
Yeah, man.
A
The type inferencer discovers.
C
So Steve, one interesting point with this is that you hear a lot in at least I've heard it from the Ruby community was that compilation is overrated. That if you have good enough tests, whether you can compile your code or not is completely irrelevant. And it's interesting to hear you talk about all the benefits of compiling JavaScript that actually gives you a bunch of information you wouldn't otherwise have, that there are actually bugs in some of these frameworks that they can't even see. Well, I think that nobody's trying to compile them.
A
Don't you think that the Ruby guys are basically, I don't want to say Ruby in particular, but Ruby.
C
And it's not really the Ruby guys, but that's where I've heard it in particular.
A
What they've done is instead of getting errors from the compiler at type time, is that they have this test driven development methodology where they get errors by running their tests, their automatic tests.
B
I mean, they're making the argument that brushing your teeth is better than taking a shower. It's like, I don't buy that argument. I think taking a shower is way better. Or maybe you should do both. Just a thought. Right? So I mean, if compilation is available to you, it doesn't excuse you from writing unit tests. And we certainly lots and lots of unit tests here, but it sure helps.
C
Isn't there the parable of fox and the graves? It's like if you can't have it, then you don't want it and it's stupid.
B
Yes. So we should send them all. Toothbrushes.
A
Toothbrushes for dhh. Okay, I'm going to start a website. Is that domain name available?
B
Toothbrush probably is available for dhh. That is available.
C
Well, this is to me a classic. There's this classic tension between static and dynamic typing and you're trying to start.
B
A client, aren't you? It's not going to work, man. I had one Red Bull, but that morning meeting just knocked me out, so I'm not gonna fight. But go ahead, try static versus dynamic technique.
C
That's exactly what I was gonna say is I don't think it's really about the fighting. I think it's about having tooling that actually supports both ways of working.
B
Oh, you're so wrong. No, just kidding. I'm just trying.
A
Well, he's just saying let's all get along. How could he be wrong?
C
Well, no, no, I don't think we.
B
Should all get along.
C
I think it's a tooling problem. I think that's what you're getting into and that's why I find what you're working on.
A
Let's get to the heart of the tooling problem, which is that JavaScript, which is an insufficiently well designed language, albeit one of my favorite languages, but still not quite good enough. I mean it was really a rushed out language with a bunch of wrong stuff.
C
Wait, can anyone really say with a straight face that JavaScript is one of your favorite languages?
A
Yeah, because I like, you know, I really like all the functional programming stuff that's built in there and Yeah, I like JavaScript. Sure.
C
I feel like everything that was done with JavaScript was like mostly accidental. I don't know, it's not as bad as say php.
B
Do you know the history of JavaScript? It was supposed to be Scheme lives. Yeah, he got hired to do Scheme in the browser.
A
Yeah.
B
And at the last minute somebody did a deal with Bill Joy at Sun and said, oh yeah, we're going to cross market our scripting engine with Java. So you got to call it JavaScript and give it a superficial Java syntax and you got one week to do it. And Brendan was like. And worked for a week and came up with JavaScript where he basically he was looking at Self. You know about Self. It's all the prototype, all the Prototype stuff from JavaScript is from Self.
C
Oh really?
B
Yeah.
C
So it has sort of a more interesting start than I realized.
B
Yeah, it has a pretty decent pedigree. Scheme in Self, not bad. Closures came from Scheme and the prototype stuff came from Self and the interesting curly brace syntax came from Java and then this keyword came from Brendan's pocket. Because I have no idea how this I can possibly imagine that was supposed to work.
A
Every time he gives a speech about JavaScript, he apologizes for the whole carriage return, starts a new statement bug.
B
Yeah, but you know what? Every time I hear any language designer talk about their language, they start by apologizing. But there are things Matz did his whole why Ruby sucks that made my blood run cold. Like hearing the language designer talk about how horrible it was friggin hard.
A
It's frigging hard.
B
It is hard. It's hard to get right. And you know what? You have to be stupid to try it, right? You have to be foolish. You have to say, oh yeah, I'm going to do a new programming language because if you knew how hard it was, you wouldn't try.
A
Right?
B
And so you're going to make some mistakes and unfortunately you're going to be the victim of your own success. That's the way languages work.
A
And you're not going to know about Mistakes until people start using it, and.
B
Then you've got legacy users at which you can't alienate them. So, I mean, all the languages go through this problem. Yeah. You can't really unfairly pick JavaScript out and say, oh, it's badly designed or.
A
No, no, no.
B
I want to say that insufficiently designed. I mean, C was over sufficiently designed, if you want to go that route.
A
Yeah. And you know what? You know, the, the most designed language I would say is probably Haskell. There was a committee and they were all academic, they were language geniuses. Paul Hudak, my professor at Yale, and they really studied all these issues and they came up with a language that is kind of designed by committee, you know, maybe sort of some of the same problems as ada. And it's designed by committee. Ada in its committee design. You're right, it's a name.
C
Did you say ada?
A
I'm sorry?
B
Ada. It was the American Dental Association, American with Disabilities, named after Lady Ada Lovelace. But go ahead and name it after the Dental Association.
A
Well, you get your point. Yeah, okay. It's committee, designed by committee. But it is a very modern language. It has type inferences, quite sophisticated, and nobody's going to use Haskell.
B
But it's, oh, you guys just got yourself some fan mail. Or should I say hate mail?
A
Yeah, yeah.
B
Every time I bother, every time I mention Haskell, I say, oh, and by the way, they're like all kinds of people use. And I'm using it, for example, I think it's the same guy every time actually that says that. But anyway, actually Scala is cooler than Haskell. That's a real problem for Haskell right now. Scala's type system is more modern and cooler. Yeah, it has a lot of concessions to like real world programming. So like, it's Haskell. Like, if you want your head to explode, then Scala will do it for you.
A
Sure, go for it. We'll blow up your head.
B
But they have some really neat stuff.
A
So the only point I was trying to make here is that JavaScript is maybe not the language that we would most like to be using for all the work that we have to do. And in some ways it's very much a step back from even Java and C. I don't know, maybe it's not JavaScript. I guess JavaScript is better than Java. Yeah, okay, but here we are worrying about all this tooling to work around the fact that we have a language that's not quite good enough.
B
Yeah, or it doesn't really matter. Right. Both languages have problems But Java has great tools, tools. So Java is way better for a developer experience right now. I think there's people there, I mean, there's a lot of people focused on making JavaScript better tools wise. Because, I mean, what are you going to do? You got browsers and they support JavaScript. You got.
A
We're stuck with JavaScript.
B
Right.
A
But there are. What are some of the. We've talked about this. There are a few. I don't know if we've talked about this on the show, Jeff. There are a few languages that compile into JavaScript. So that whole crazy thing we got Wasabi compiles into JavaScript. Google has a Java into JavaScript thing.
B
Google widget Toolkit.
A
But you don't use that internally or.
B
No, it's used internally.
A
Okay.
B
I mean, it took a while for it to take off, but we've got some fairly big flagship customers.
A
Right.
B
Internally, so.
A
And I don't know if anybody else has one, but there's no reason you can't pick another language that you like, compile it into JavaScript.
B
That's true. You can compile pretty much anything and anything. Yeah, the beauty of computer science. And so, yeah, you can. The tools then become less trivial. Right. Like, let's say you start with Java. Let's say you start with C. You're like, you know what, I don't like JavaScript. I'm going to write all my web stuff in C. Right. So therefore I'm going to compile. Have you ever used it? Do you remember when C came out? It was CFRONT and compiled the C. And C was horrible. And the debugger didn't understand the line numbers even originally.
A
Oh yeah, it was bad.
B
Right. We're kind of at that stage right now. Debugging is maybe a little better right now, but not much.
A
So how have we gone back to 1988? We just went back in time 20 years. Have we moved forward in any other way? Now you can order a cat over the Internet and have it delivered.
B
That's a really interesting question. Have we moved forward in any way? You know, if you ask any embittered old Lisp programmer, they'll be like, no, it's all backwards. So I don't know.
A
1959, McCarthy lisp was better than any of us.
B
Exactly. We've moved forward on the calendar and that's it. I don't know what has gotten better. Even the calendar, even UIs aren't any better. If processor speeds were faster, like if you looked at some of the FANCY you know, UIs that they had for, like, you know, UNIX systems way back in the day. I mean, they were curses. They were pretty fancy.
A
So you're talking about, like, curses and.
B
No, that was great. UI for NetHack, don't get me wrong. But I mean, I'm talking about like a motif way back.
A
Oh, yeah, yeah.
B
I mean, there were some nice ones, or even. NextStep is kind of old by today's standards. I mean, at the time NextStep was out, remember, we were on win 3.1.
A
It had four colors. NextStep. Instead of just two colors, black and white, it had four shades of gray.
B
I thought only the cool people used the shades of gray ones. But you're right, it did have those four colors.
C
Anyway, I think we're going forward. I would say the only step backwards, and I get a lot of crap for this, but I really believe it is. My baseline is, are you doing better than PHP as a language?
B
Oh, yeah. The web is definitely gone going forward. Yeah, you're right. You're absolutely right. It's much better than it was. We have jQuery, for example. I know all about it now.
A
I'll tell you how we're going forward. We're going forward because we're using abstractions at a much higher level. Like literally 10 years ago, if you wanted your app to send email, we're talking 30 lines of code minimum.
B
Right. And now it's a million lines, but it's all abstracted into a library.
A
Right, right. Million lines in a library that you just get.
B
Yeah, that's a forward. That's progress.
A
I think there are people that are working at higher levels of abstraction now that are plugging together things like look at Stack overflow. It's got WMD in there as the code editor and it's got OpenID there as the authentication method. And we're just to some extent, we're able to move very quickly because we just sort of snap big things together.
B
Did you hear that they got Coco the gorilla to write a web app? Finally, in the New York Z, Coco the Girl Jeff wins for the fastest one to laugh.
C
Yes.
A
No.
C
And it's in php.
B
It's a pretty high level of abstraction, but it was a successful web app.
C
It's in php and there's a function called Gorilla writewebapp.
B
Yeah. So the gorilla just had to push a button.
A
It's assigned to F2.
B
Exactly. It's a lot like. Actually, the first N Amazon launches were all done by Rufus the dog. It's Eric Jensen dog. And they'd have a huge party and everybody would get together and be, you know, 50 people in the room, the whole company. And they'd get ready and when it was time to actually go live with this new, you know, whatever it was like Amazon.co.uk they'd get Rufus out and he'd like do. He'd ceremonially sleep. He was a corgi. And he would press the button, he.
A
Would hit enter, they would type the command line and he would hit enter and it would start.
B
And that's pretty much. That's an awesome place to work. That's where web development has gone today.
A
Tons of fun.
B
Well, yeah, but then Roof left and what were we left with? Who got to push the button then, huh?
A
That's another thing. They used to bring David Shaw in every time they wanted to launch a new thing. And he would press Enter. These are all. You're gotta be all David Shaw.
B
No, you're joking.
A
They would. When there was a new version of Juno to launch something new on the server.
B
David Shaw.
A
Well, or what was the name of the president of Charles Ardi? The president of Juneau.
B
There would be a ceremony around, tongue in cheek, that their David Shaw was actually a dog.
A
We're going to get in trouble if anybody listens to this podcast.
B
Yeah, we better not air any of this. No, it's all well known, actually. It's all documented. The Rufus thing. I didn't know about Shaw's president doing the same thing, but I guess they got to do something.
A
Those of our listeners who are confused, there's a bit of a legacy here, which is that Amazon and Juno were two companies that were spawned from the loins of D.E. shaw hedge fund in New York City. And David Shaw was the creator there. And he had two people working for him who he just really wanted to do an Internet thing. He didn't know what. And he took his two smartest people and said, I want you each to come up with an idea for an Internet thing. And one of them said, how about a bookstore where you can order books on the Internet? And the other one said, how about free online email dial up isp, that would be free. And David Shaw said no to the bookstore idea. And that was Jeff Bezos and he went off and created an Amazon and he said yes to the online isp. And that was Charles Arday. And that became Juno Online Services where Michael and I met and where we got our start.
B
Is there a more standard industry term for that process than spawn from the loins.
A
Cut out loins. It's a spin off. It's like a TV spin off.
B
Spin off.
A
It's like much more satisfying. What were the spin offs like? The Jeffersons was a spin off of all in the Family.
B
Yeah. Spin off. Okay. I like that better.
A
Moving on. Well, we've. We've gone a long way here without doing our usual stack overflow kind of podcasting.
B
Let's do some usual stuff.
A
Yeah, well, that's okay.
C
I mean, Steve, it's awesome you're able to talk about this. I really. I really love your project.
B
You can't actually. You're not going to publish this for other people, are you? Yeah, I'm just kidding.
A
I'm just kidding.
B
It should be fine.
A
We're going to have a transcript typed out.
B
I vetted all this. I vetted all this beforehand with my lawyer, Rufus.
C
Yeah, well, Steve, it's only for gorillas who write web apps. So.
B
You'Re going to just have that one Haskell user listening to the podcast. You're going to have to deal with him, but otherwise I think it'll go over fine.
A
You know what I want to do? I want to take a listener question, even though I don't know what it's going to be, because I have at least four of these cables that you see here in front of you are necessary so that we can take a listener question. I just need to somehow exercise that awesome capability.
C
Okay, well, do it, sir.
A
It's going to be a. I don't know if it's a good question or not. Here we go.
B
Hey, Joel and Jeff, this is Sungpei in Chicago. Love the podcast and stack overflow.
C
In podcast 47, Joel mentions that storing.
B
Email messages per file in a mail application is stupidly inefficient.
C
Then he mentions Unix under his breath.
B
Yeah, I happen to think that storing emails in a single database is an.
A
Overly aggressive optimist and that it leads.
B
To a lot of problems with backups.
C
And opaqueness, and that a hybrid design.
B
Is the best approach.
C
But I'm actually more curious about Joel's history with Unix because he mentions Unix.
A
A lot in this vaguely pejorative way.
B
But never really explains why.
A
I don't mind that Joel prefers one.
B
Platform or another, but I'm asking this.
A
Because while Joel is opinionated, he is.
C
Overall rather wise and not dogmatic or.
B
Partisan for shallow reason reasons. I have to believe then that he.
C
Had a bad early experience with Unix. Could you tell us more about it, Joel?
B
Thanks.
A
Okay, well, when I was at.
B
Is he talking about snip snip Unix or.
A
Yes, there were UNIX at school and I had a terrible, terrible experience. I could see that with a. No. Well, first of all, I said UNIX under my breath because that is actually called the UNIX mailbox format is just plain text. And the way you know that a new message has started is that the. Is that you have a carriage return, F R O M space. And that's how you know that the end of one message and the beginning of the next message, impossible to page forward. It's impossible to do anything with any kind of performance other than scanning the entire friggin file. And so all I was doing is muttering under my breath Unix because that's the way they do it. So that's it. But I kind of. The question is sort of, why do.
C
You hate UNIX so much?
A
I don't actually hate Unix, so sorry. It was, you know, UNIX is awesome.
B
I don't know. I mean, that design doesn't really permit you to hire armies of exchange server administrators. I mean, the UNIX thing is really keeping people on the streets who would otherwise be employed dealing with some monolithic beast of a thing that exports 8,000 messages to Skype every time you log in.
A
Just do that, didn't it? Okay, okay. But no, no, I mean, if you have. If I have. I've got folders here that have so many messages in them, they could not possibly. You could not possibly hit the sort header, column header and get a reasonable speed sort if you don't have some kind of index. But the real thing I wanted to talk about is that there is such a belief that people are going to be partisan about their technology choices, especially around things like whatever it may be, whether it's. Whether it's wind, Windows versus Macintosh, whether it's Windows versus Unix, whatever those things are. There's such an assumption that you have to kind of be partisan and wave flags that even if I have no intent of. You know, I was just mentioning that I thought the UNIX mailbox format was somewhat inadequate. And so I mentioned that. Then there's an assumption that's like, wait, is Joel against unix? What does he have against unix? Why is he anti Unix?
B
This coming from a guy who's working on an IBM stink pad. And you probably have a Zune, don't you? Wait, I mean, you're voting with your feet, right? Hold on.
A
Damn it. You know, I had to rebuild this computer, so I don't have Cygwin on here.
B
Oh, you had Cygwin? That's so cool. See, he doesn't hate unix. He even knows what Cygwin is. That's. That counts.
A
Yeah, we have. I should say, you know, but I think, and I am. I do feel like I'm trying to be fair. There's certain things that I know. We make fog bugs, and there's a UNIX version and a Windows version, and probably half or more of our tech support costs comes from the 10% of the users that have UNIX servers, because UNIX servers are just not monolithic. And you can't throw an app on there and run it and expect to be able to find things that are going to be there. So writing software that's going to be distributed for UNIX is just.
B
That's a hard problem.
A
Painful.
B
I can't believe you're doing it, actually. Yeah, I mean, like, there's no. I mean, Unix is. Unix is great at timesharing and stuff, but it doesn't have, like a registry. I mean, you know, for better or for worse. I mean, the registry is a central place where you register stuff. And UNIX has. It could be an Etsy. Whatever. It could be under the user's home directory. There's no paper trail anywhere, really, of where you installed something. Hell, I use a pretty modern version of Ubuntu, right, for my compiles, and there's no way to tell what packages you've installed. There's this thing called DPKG dpkj and it works in conjunction with this other thing called aptget. And you got to go read about these things and learn how they work and learn their flags and stuff. It's already a pain in the ass, but it turns out that neither one of them will actually tell you which packages you've installed. The only way to do it, according to the Linux gurus here, and I assume they know what they're talking about, is to run dpkg l for list, which produces 8,000 lines of output for every package you have installed, every little sound driver, every whatever, and then you have to run it again on a. On a pristine installation of Ubuntu and then diff them. I'll rant against Unix. I like it, but I mean, come on. Yeah, I've got a few issues with Unix. I can't imagine doing application deployment. And by the way, why is it that all of the apps that are traditionally ported across platforms, like browsers, for example, why are the Unix ones always the crappy ones? Firefox is really, really slow on Linux relative to on the Mac or on Windows. Same processing power. Even better processing power on the Unix box. So I mean, I applaud Joel for being nonpartisan here, but my God, Unix does have some issues, I mean, especially around, I mean, applications for servers.
A
Part of it is apps. Yeah, it's the lack of consistency, especially on the server. So like on a Windows box you can pretty much, if your app will install and deploy on say a Windows 2000 server correctly and it can have whatever dependencies you want. But if you can take an off the Shelf Windows 2000 server and your app gets up and running, then it's pretty much guaranteed to work on just about any Windows server. Whereas with Unix systems, besides the fact that administrators configure different things, they put different things in different directories. Just trying to find like, just think about if you have to add something to Apache's configuration file, HTTP conf. Where is that thing? How do you, how do you even find that? How many copies of Apache are running on the system or is it even installed yet? Those things are trivial API calls on Windows to find out if IIS is installed and what, where it's configured, configuration is, and almost completely impossible. And so we just have customers who will spend three days trying to get Fogbugs up and running on a Unix system that doesn't have a web server at all.
B
It's funny, I can see both sides so clearly because I would much rather run and administrator Unix myself. I prefer HTTP.com for all its ugliness over the IIS opaque menu structure. I mean, to me that's opaque, right? However, when it comes to installing an application, I would much rather do it on my Mac or what used to be my Windows box than I would.
A
On a double click.
B
I mean, on Unix, if it's an application that's command line and it has a decent tarball or it has a decent installer or whatever. And that's a big if. Or if it compiles successfully from sources and you know how to run the compiler and so on and so forth, then the experience can sort of approximate a good experience, right? It's not a good experience, but it can approximate one, right?
A
Yeah, it depends on the dependencies. Yes, it's meta circular. So Fogbugs has just two major dependencies, at least the database and the way it gets to the database, which is usually MySQL and the web server, which is Apache. So in the future I think we're just going to ship with those and we're just going to have this big old cloudy like. I'm sorry, yeah, we have a Setup program that just gives you everything you need. And we just don't try to find things that are there because it's just hopeless.
B
I said lawsuit. Yeah, I don't know if it's. I don't honestly know what the licensing terms are. You just said you're going to have a big cloudy and then you.
A
Yeah, we had to figure out things like you can't ship MySQL but you can give the person a little download button that they press that downloads and. Oh, I know what it was. You can't ship MySQL if you depend on MySQL, but you can if MySQL is optional. So we had to write a SQLite driver for fogbugs. So Fogbugs now has a choice of SQLite or MySQL.
B
Interesting.
A
We think that's the current plan. We don't actually. And then we discovered that we could use SQL Server. We do have a choice of Microsoft SQL Server, so we might. Okay, this is all inside baseball, as they say. Hey Jeff, is there any interesting news on Stack Overflow? Anything we want to talk about?
C
Not necessarily. I do have one question I to want wanted to Stack Overflow question I want to talk about because it highlights sort of a recent thing that we've been having this little mild controversy about. And that is what Michael is snickering at me.
A
What belongs on.
C
Yeah, yeah, what belongs on Stack Overflow and what doesn't. And one question that came up and it's actually kind of a cool question, I'm not sure if it's entirely serious, but the title is what Do I Need? What Do I Need to do in Order to be a Programmer at C Program.
A
Etc. Oh, Etc.
C
Sea.
B
Yes.
C
Not C. I know you want it to be C, but no. And it's number 766-935 and I think it's a serious question. I can't entirely tell. This guy's saying, hey, I've just acquired a 40 foot sailboat, I want to do programming like on the sea. Like what do I need? How do I do it? And this got closed really rapidly as not programming related, even though it's ostensibly about program programming.
A
It sure is.
C
But I have a hard time seeing the value of this question personally. I mean, it's interesting and all and there are actually some reasonable responses. In fact, one guy says, I live and work on my 38 foot sailboat and be happy to discuss this with you offline.
A
So that's not a response, but I.
C
Think it's a perfect Response in that I'm not entirely sure this question belongs.
B
That was a hookup, man. That's Craigslist. Behind the scenes. That had nothing to do with programming.
A
This is. You know what?
C
I think this may be just somebody 47 or something.
B
Yeah, exactly.
A
Do you think this is somebody that's just interested in. Well, I don't know. Maybe.
B
Did he put programming in quotes? I'm interested in, quote, programming at sea. Anyone interested?
C
He did say he's going to bring his cat Ender.
B
That's a dead giveaway right there. I don't know what for, but it's really suspicious.
A
Ender. That's a sci fi series, right?
C
Orson Scott Bard's books.
A
Yeah.
C
So I think it's a real question, but I just, I don't like this question on Stack Overflow. Personally. I think it's too weird and too narrow.
A
But doesn't. But who cares? So you ignore it. This weirdo. Why does it have to be closed?
C
Well, there's a negative attention, though. I mean, this stuff does take up space in your mind. Like the fact that people have to parse this question and look at it, you know, the people that are actually engaged in Stack Overflow. I mean, if you're coming from a search engine, sure. You're never going to search for programming. Cat Ender. Yeah. Which is on this page.
A
But just put like this guy used the tag boat programming. So just put boat programming on your pack.
C
Well, I object to the fact that we have a tag called boat programming. Actually, like, I don't even think that.
A
Should be a valid question. I'm just curious. Now, that's the only question on that tag?
C
Yes, Boat programming. I'm sure that's gonna be a huge category.
A
You know, it does sort of beg the question. I mean, what if there's some really, really narrow programming topic that's like, you know, I've got this, I don't know, like some kind of weird sound card that 15 people have and the manual that came with. Very good. And I want to know how to do something. And it's definitely programming related, but it's.
B
That's a big deal, man. I mean, that particular. It's video cards. It's for oblivion. Right. When you want to run oblivion on a crappy old laptop, like, oh, this one right here, you have to get this driver called.
A
This is an awesome laptop.
B
Well, it looks.
A
Dude, it's got an ssd.
B
It's got a marketing issue. It looks like it's on its last leg and it's probably Brand new.
C
Doesn't look awesome enough.
A
Just because I bent this screen like that.
B
Anyway, anyway, now look, I've blown my stack. Damn you, Adam Carolla programming at C Go. Oh yeah. So how are you guys going to know whether it's actually a niche thing that nobody cares about or whether it's an emerging trend or a joke?
C
I mean, I still have suspicions. This is not entirely a serious question.
B
Most sites, I mean, you either have two policies. You either moderate it and you're busy all the time like throwing away traffic trying to figure out there's always these gray areas you have no idea or you just let it self police and you set things up so that most people don't have to parse it because it bubbles down to the bottom and you have to type boat programming to ever see the thing.
A
This got nine votes. How did it get so many votes?
C
Well, because it has some ASCII art in it.
A
Oh yeah, but that was copied out of the comment that was copied out of that ASCII art was in one of those. What is your favorite comment that you've ever seen in a. Wasn't it? Isn't that where that ASCII art is from?
C
I think so. I'm looking at. Oh, maybe you're right. Actually there's a picture. Picture here.
A
Wow.
C
Why did they edit out the picture? That's interesting.
B
I think. And I'm just saying I think you guys are doing way too much soul searching over individual posts.
C
Well, I agree. And you mentioned that this should be community moderated. In fact it is. The community, like five people decided this should be. They're outvoting the people who think this should be open. The people who think it should be closed are currently outvoting the people who think it should be open. And I actually agree with that.
A
One of the things, you know, somebody asked me a question this morning, Jeff, at Microsoft. They said what? They said, oh, what do you do about questions that seem to be off topic and stuff like that. And I said the truth is that we have a policy that is not absolute enough to enforce. And part of the policy is we do know that we want there to sometimes be fun, interesting questions like the programmer cartoon question.
C
That is true.
A
We want that to happen sometimes. Sometimes fun is, but only a little bit. Yes, and we know that. And the reason we know that we want those to happen is because we don't want Stack Overflow just to be the world's most boring printout of questions and answers. We want it to be a little bit of A community. And we know that human communities tend to have things like, you know, tend to have days, special days of the year when you just go off script and you do something else with the same people as you normally do things. Right. It's a company July 4th picnic or the, you know, Easter Pirate day. Talk like a pirate day. Exactly. Tomorrow is. Do you have take your daughter to work day here tomorrow as well, or is that just down in.
B
I typically only follow the talk like a pirate days because I don't have a daughter, but I heard something like that.
A
It's Thursday, I think, and. Yeah, so you have to have, like, these days that are, like, a little bit different. That's fun. And that's. That's what communities do. And so the question. The question is, like, what happen will we do if a Stack Overflow celebrity like John Skeet had some major life change? Or maybe he was leaving his job and going somewhere else, or he had some really cool thing happen to him, like he won Dances with the Stars. What do they call that program in England where you dance?
B
Dude, even if I knew the name, I wouldn't admit it.
A
Let's come dancing or something. What's the. You know, Steve Wozniak was on it. Dancing with the Stars.
C
Dancing with the Stars.
A
But there's an English version of it that's got a slightly different name. Anyway, you know, if he was on that, we'd want to talk about that on Stack Overflow, wouldn't we? It's John Skeet, possibly.
C
I'm actually looking at the history of this question. I realized he had a picture of his boat. So I think this is, in fact a real question now. That changes my entire perception of it. But he couldn't post a picture because new users can't post pictures because we had some, quote, unquote, bad experiences with users. Post new users posting pictures that I'm sure you can imagine what. What it was like.
B
What do you mean? What kind of pictures? I'm kidding, Jeff.
C
Yeah, hopefully that was a really bad day, by the way.
B
It just sounds a little dangerous that you guys are. You guys know what you want out of the community. You want it to be, you know, professional and good, but a little bit quirky and blah, blah, blah. But how can you dictate that? A culture evolves, man. It's just going to happen whether you like it or not. What you really want is for it to be popular and for ads to be valid, valuable. So you should go into porn right now. So I don't. I Don't know what I'm saying here. I'm just saying, like, all of my alarm bells are going off because I hear all these, like, stories about Dig versus Reddit and I just think Dig is just so broken.
C
Yes. I don't know. Well, part of the reaction, the reason we allow things to be closed is we don't want Dig. We actually want the community to say, hey, this doesn't belong here. Yeah, you know, we want to set boundaries.
B
Great question.
C
What's that?
B
So why are we asking the question then?
C
I mean, if people, because some people don't like the fact, like some people are purists and think it should work like Digg, that everything should be voting driven purely, like, if the people vote for it, it belongs.
B
Oh, that's Reddit Diggs, the one that moderates things. Like, you'll never see how to disable Digg on the front of Digg's page.
A
But anyway, yeah, Dig does some manipulation. They don't explain what it is. And Reddit believes in the voting and actually Reddit has gone, I think it's gone downhill pretty rapidly.
B
Well, result of that, that's, that's, that's the standing joke, right, Is that everybody who's been on Reddit for one year says it's gone downhill. What's really happening is it's cyclical. Right. I mean, it just, there's kind of fashions that come and go, but the community is always about the same, same.
A
Ron Paul, conspiracy theorist.
B
Well, that, yeah, if you were on it six months ago, now it's the whoever. Right. I mean, it's funny, they've decided, I don't know, it's complicated space you guys are getting into here. But I, I would vote for voting and openness over no boats.
C
We're trying to have it, I think, Steve, one of the things we're doing is we're trying to have it both ways. And anytime you try to have it both ways, there's this tension between the people that want it one way and the people that want it the other.
B
Way, you guys are going to be Destroyed by boat programming.org I'm telling you.
C
Well, actually, I'm just. Now I'm editing this picture back into the post because I didn't realize this guy, he had a revision history and I saw that he actually had added this really cool picture.
A
So you're going to reopen this question, Jeff, because it was closed, I might.
C
Now that I see that it actually has a picture, a picture of a.
B
Book, may I suggest that it won't be statistically relevant after 10,000 people hear about it in the podcast.
C
No, it won't be. I'll go and reopen it just for the sake of argument, because to me, if it's a real experience or I.
A
Michael is jumping for joy.
C
This is an important point to me.
B
Have you guys seen the Turkish. The what? Is the Turkish milk thing on Amazon?
A
No, but that's a second Turkish reference.
B
It is, it's. It's called Tuscan milk. Tuscan, not Turkish. Tuscan milk.
C
Tuscan milk.
A
Have you seen that?
B
It's got like thousands of comments from people. People write like poems and short stories and stuff all about Tuscan milk and their experiences.
A
It's an actual product you can buy from a grocery store.
B
It's an actual product. It's like a four gallon jug of Tuscan milk, whatever that means.
A
That's the brand name. That's the brand we have in New.
B
York and it's the funniest thing ever. And Amazon has actually let that one continue. Right. Even though it's just kind of a gross violation of what they kind of wanted, which was real reviews of products. Right?
A
Yeah.
B
And the Ping the duck is another one that they let kind of go. So somehow they managed. And I think it's through a combination of user moderation and customer service rep. Moderation Things don't get caught right away, but I think you guys might be able to achieve what you're trying to get here.
A
We're probably going to.
B
With a light touch.
A
Yeah, we're probably going to have to tweak it. I mean, I kind of like the, I think of this as the Google ethics. I don't know if it really is, but I think of this is what I think of as being closest to what Google says when they say don't be evil, which, which is don't tweak posts, tweak algorithms, don't worry about individual things that are the results of your algorithms. Try to improve the algorithms, but never reach down to an individual website and do something special in the algorithm. Always try to make the algorithm better. So maybe, Jeff, if we see too many of these things, we need to be figuring out different ways of flagging and closing and voting on that. But we shouldn't individually get involved in, in removing or closing things that we don't think are appropriate. We should just be trying to tweak the system so that the system does a better job on the whole, even if some couple bad things slip through.
B
Well said.
C
Well, now that you tell me that after I've just.
A
We've gone really long, so I'm going to have to draw to a close. But for our listeners, hopefully you've got some interesting questions that you'd like to ask us. And you can do so either by recording an MP3 or Ogg Vorbis file and emailing it to podcastackoverflow. Or you can call the podcast hotline at 646-826-3879 and record a message for us up to 90 seconds. We've also got a transcript wiki which volunteers around the world use to write down transcripts of their favorite parts of each podcast, which make them indexable by our host, Google, and also available to the hearing impaired. So if you have a few minutes of spare time or if you heard something today that Steve said that you think is just awesome and you want out there for posterity, please go to blog.StackOverflow.com and look for this podcast number 40.
C
I think it might be 50.
A
This might be podcast number 50. So look for podcast number 50 over there on blog. That's the GoFlow.com and click on the little link to the transcript wiki and you'll arrive at a wiki where you can hit, edit and transcribe all or part of this podcast for the benefit of those listeners. Steve, thank you.
C
So we can use it against Steve later?
A
That's right. We can pull it. It goes into your permanent record. Steve, thanks very much for hosting us here at Google Kirkland and for giving us as a room and for being on the show mostly.
B
Mike. My pleasure.
A
Much appreciated. And Jeff, I'll see you next week.
C
Yep, see you next week.
B
I did live next door to a couple strippers for a year. It was. It was actually, I was very famous at Amazon for that year.
A
Where did you live? What part of Seattle did you live in?
B
Upstairs from Wajimaya, you know, the Asian grocery store across from there. And there were these two deja vu strippers that lived next door to me and they kind of adopted me, like their little brother. They'd knock on my wall at five in the morning and I'd get up and go over to my bathrobe and hang out with them. And everyone was just like, you're hanging.
A
Out with strippers in your bathroom?
B
It was just like, yeah, because I didn't really think either of them was very attractive. And so they kind of like, no recognized that. And so I was their little brother.
A
Were they?
B
They were like really well connected. They knew all the DJs in town. They took me to all these radio stations and they could get into all the great restaurants and it's pretty awesome.
A
Yeah, because they spent a lot of money there. I assum. You've been listening to Stack Overflow with Jeff Atwood and Joel Spolsky.
B
The Conversations Network is a 501c3 nonprofit and we need your help. For a tax deductible donation of as little as $5 per month, you can support this channel and the rest of the Conversations Network. So please visit conversationsnetwork.org to become a member and help us continue to bring our programs to the world for free. Our audio files are delivered by Limelight Networks, the high performance content delivery network for digital media. The post production audio engineer for this program was Joel Spolsky. Our website editor was Jeff Atwood. The series producer is Jeff Atwood.
A
This is Phil Windley. I hope you'll join me next time for another great presentation from Stack Overflow here. On it, Conversations.
Episode #50 of the Stack Overflow Podcast features Joel Spolsky, Jeff Atwood, and guest Steve Yegge (then of Google, formerly Amazon and the Navy). The main theme is the evolution and importance of programmer tooling, especially language tooling, code editors, type systems, and the culture surrounding software development. The conversation spans from the practicalities of IDE support for multiple languages, internal tool-building at Google, the merits and quirks of languages like JavaScript and APL, developer entitlement, and the moderation philosophy behind Stack Overflow itself.
“Programming languages are silos... there’s very little call stack sharing”
— Steve (18:44)
“Don’t tweak posts, tweak algorithms. Don’t worry about individual things ... always try to make the algorithm better.”
— Joel (73:06)
“It’s not the language. It’s got nothing to do with language ... the tools are amazing.” (13:26, Steve)
“How quickly we grow to feel entitled to things that were only invented 15 minutes ago.” (15:12, Joel)
“There is no just. What about threading semantics? What about object semantics?” (19:26, Steve)
“If compilation is available to you, it doesn’t excuse you from writing unit tests ... but it sure helps.” (41:26, Steve)
“It’s totally backwards today. It’s ghetto ... I think we’re in the middle ages of programming.” (28:24, Steve)
“Don’t tweak posts, tweak algorithms. Don’t worry about individual things ... always try to make the algorithm better.” (73:06, Joel)
Episode #50 dives deep into the underappreciated complexities of programming language tooling, why powerful tools can strongly influence language choice, and the ecosystem-wide push towards making language intelligence more universally accessible—regardless of the editor or language in question. Steve Yegge’s insights predict trends that would shape future open-source tooling and language service APIs. The show also provides a warm, irreverent inside look at developer culture, Stack Overflow’s community management values, and the quirks that make software development and its practitioners endlessly fascinating.