Podcast 050Revision #8, 4/24/2009 5:31 PMUser: "Nothing changed, just an addition to my last comment: Please, guys, check out my changes, my grasp of the english language is horrible, and there are a couple of americanisms i couldn't work out" Tags: (None) Previous Next |
Podcast 050Revision #14, 5/17/2010 8:45 PM72.244.212.98 Tags: (None) Previous Next |
---|---|
[incomplete] Spolsky: El Cerrito? Atwood: Yeah Spolsky: That's a different Mexican resteraunt outside of Berkeley Atwood: Yeah Atwood: So how's the Google-plex treating you? Spolsky: It's pretty nice, this isn't the flex I don't think... Yegge: It's kind of plexuss, yeahII mean it's the plexiest we've got in Kirklandd Spolsky: Yeah <laughs> Spolsky: It's a little ugly plex Yegge: It's frigidly cold here, but it's beautiful outside Spolsky: Apparently the weather in Seattle is usually bad, we're having beautiful weather and everybody's saying we're lucky or something? Yegge: You were, you're using our years quote of sunlight basically, but yeah we're in Kirkland offices and 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 Spolsky: Oh yeah, there's a big old table of organic produce up there in the Amazon cafeteria Yegge: NERRRRRRRRRRRRRR <Spolsky stutters> Yegge: GOOGLE cafeteria Spolsky: Sorry! <laughter> Atwood: Amazon... <laughing> <more laughter> [2:51] ... [2:56] Spolsky: 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 Yegge: Yeah, like a farmers market Spolsky: All kinds of different apples and stuff Yegge: And I was trying to explain to Joel that in certain other companies that I've worked at, I'm not 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're going to feed you because there's 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, and he just starts handing us bags - so yeah there's a little bit of contrast there Spolsky: Yeah. That's pretty nice, I was going to take some home to my friends at Microsoft because they don't get enough food over there, I don't think Atwood: But it's a table full of vegetables, that's not very "programmery", it should be like Ding-Dongs and Twinkies and... Spolsky: They had that too! They have the slightly healthier versions of the Ding-Dongs Yegge: Yeah we have the much healthier (hard to work out) Red bull cola? Spolsky: Red bull cola and stuff Atwood: The "organic" red bull <laughs> Yegge: We did have a brownie, there was a brownie Spolsky: I'm just noticing that lava lamps seems to have an antenna which seems to be attached by a wire ... Yegge: Oh yeah! That's our wired internet lava lamp, so you can check its...I'm just making this stuff up <all 3 laugh> Spolsky: It's a lava lamp, this little conference room along with a ... floating ... soccer ball Yegge: It's not very lava lamp-ey either, it's ON but it's not MOVING, so maybe it's actually a, you know a... listening device or... Spolsky: Optical illusion? It's just CGI that they added after Yegge: <laughs> Could be! Spolsky: So Jeff how are you doing? Atwood: Good! Well I was going to tell you, I think your show was one of the most popular ones we ever did Yegge: Yeah! One of the most popular Atwood: Yeah, repeated - REPEATED compliments on that one, people really seemed to enjoy that show Yegge: I don't remember ANY of it! But I hear it was good Spolsky: We might have talked about programming languages, everybody likes a good programming language fight Yegge: Oh yeah, yeah Atwood: Oh yeah! Speaking of programming languages, I have a little anecdote, you guys probably knew this but me being a dumb ass, I didn't know that APL was ACTUALLY symbols? I thought you were kidding! You brought that up, and you were like, you know, I said well what if there was a programming language or - I think Alex brought it up actually from the Daily WTF, what if there was a programming language which was ENTIRELY symbols? and I was like, "Ha ha ha, that's hilarious!" Spolsky: And I said "Yeah, APL" Atwood: No, I was like, that's ridiculous, and then <laughs> in the comments after I put that show up people were like, "yeah, just like APL" and I was: "WHAT?" , I was like, "Joel wasn't just pulling my chain like he usually is?" Spolsky: When did I ever pull your chain? Atwood: You're CONSTANTLY yanking my chain <laughing> Spolsky: Yeah I think they got the idea from terminals that couldn't display Unicode? So you'd see little smiley faces and stuff? and they're like, you know what? This is even MORE <something> than Perl! [5:39] ... [17:27] Yegge: It's foolish to, to, to try to ... I saw this dude, you know, hes not with us anymore and he left voluntarily, he was a good programmer, I mean people can get by with just basic V.I. But I mean the dude had, he was using not Vim, he was using V.I. Like Vi or whatever you call it, the old one. it was like Ed. Spolsky: Ed. One comma three I <laughs> Yegge: 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 just got out of college and probably didn't even know what he was doing, right, hadn't used a terminal before and he didn't even have paren matching turned on, right, he had no braces, and he was doing this like really deeply nested javascript and every time he'd make a change, you know, he'd like go in and he kept spelling it fuction instead of function, right. <Joel cackles> Yegge: And I'd watch over his shoulder and i'd be like "Dude, you spelled it fuction again". Right ... [18:17] .... [21:37] Spolsky: Doesn't—isn't there a problem that ... I know that 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. Yegge: Well, it is hard, but I notice that you didn't say it's impossible, and that's—that's the correct word, because it's not impossible. Spolsky: Mm-hmm. Yegge: It is just hard. Google has a JavaScript compiler. Spolsky: Right. Yegge: 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. Spolsky: Is it—is it the same as the one in Chrome? Yegge: I don't know—no, it's not. The one in Chrome is a VM. Spolsky: OK. Yegge: 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... Spolsky: Oh, OK. Yegge: It's a very—You know, it's kind of obfuscated—and it's not obfuscated... Spolsky: It's still JavaScript. Yegge: It's still JavaScript, but what they've done is they've given all the variables very short names... Spolsky: Right. Yegge: ...they've taken all these shortcut—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, right, 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, but... Spolsky: Mm-hmm. Yegge: So like, you can write typed JavaScript. Spolsky: OK. Yegge: So there's classes, and there's methods, and inheritance, and there's even to some extent, you know, parameterized types and things like that. Spolsky: Do you have to declare the types? Yegge: You don't have to—there's type inference. Spolsky: OK. Yegge: So, the more types that you declare, especially at key points where there's a little bit of purchase for the type inference engine... Spolsky: Yeah. Yeah. Yegge: ...the better... Spolsky: Yeah. Yegge: …and it'll tell you, "Oh gosh, I have no idea what's going on here", right? Spolsky: Yeah. Yegge: But it does—it's very smart. It actually knows about, like, union types, and so, like, if you have a function, like in JavaScript, that takes a number or string, and it just casts, you know, or does… Spolsky: Yeah. Yegge: …maybe it dispatches and does something different, you know? Spolsky: Mm-hmm. Yegge: ...because they don't have overloading, right? So what you do is you just look at your arguments and see what you got and then do some dispatch, right? Spolsky: Mm-hmm. Yegge: The type inference engine in JSCompiler will actually, like, figure out what all the possible things are that you do pass in, and create a union type for those, right? Spolsky: <unintelligible> Yegge: And none of this is ever surfaced in any sort of an IDE, or anything—it's just warnings or errors at build time, right? Spolsky: So it can catch things faster. Yegge: Yeah—but I mean, so it would be very nice if it could catch it as you typed it. Spolsky: Mm-hmm. Yegge: Right? Spolsky: And plus, like, know what the type of that object is, so that... <overtalked> Yegge: Absolutely. <overtalked> So that you could do—exactly—autocompletion, and things like that, right? Spolsky: Yeah. Yegge: Code navigation. So, the JavaScript approach that we've taken is, 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. In fact, the Python crowd here, when they what I had done internally, they were like "oh, we want that for Python in a big way." And so... Spolsky: Mm-hmm. Yegge: ...I'm like, well, yeah. We have to write a Python compiler, you know.. Spolsky: Mm-hmm. Yegge: ...it's going to be some work. Because, the thing is, it's a very—it's a really sophisticated compiler. It does like 50 passes over the IR, and it does—it builds a, you know, control flow graph, and all that Dragon Book stuff, right? Spolsky: Mm-hmm. Yegge: And it's doing it with JavaScript. Spolsky: Mm-hmm. Yegge: And it's starting—it's starting off with very few types. I mean, it's 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 it on third-party code, where all—the only types are, like, you know, literals, and functions—you know, there isn't a type system, right? But it can still infer kind of a lot of stuff there, right? Spolsky: Yeah. Yegge: So, like, anyways, 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 any statically typed language, you have types. Spolsky: Mm-hmm. Yegge: So you have a lot of stuff for the IntelliJ... Spolsky: Sure. Yegge: ...IntelliSense stuff to work. Spolsky: There's actually, I mean, if you open up—in the latest version of Visual Studio, if you open up an HTML file that has a bunch of random JavaScript pasted in there—the JavaScript will get syntax colored. Yegge: Mm-hmm. Spolsky: And IntelliSense will almost work, and it'll use all kinds of exhaustive methods... Yegge: Yes. Spolsky: ...to try to guess what type things are. Yegge: Yes. Spolsky: Sometimes in ways that are maybe 95% accurate... Yegge: And you know what? Spolsky: <simultaneous> but not 100%... Yegge: That's been my, sort of, core philosophy, is that if it's 95% accurate, then, you know, 5% of the time, you're going to be fixing it, you know... Spolsky: Yeah. Yegge: That's no worse than, like, the indentation, for JavaScript, or... Spolsky: Ha. Yegge: ...probably for C++, right? Every once in a while, it doesn't indent exactly the way you want, but as long as it's helping you... Spolsky: Yep. Yegge: You know, um... Spolsky: A lot of times, when it's failing, it's cuing you off as to something that you did nonstandard that's... Yegge: That's true. Spolsky: Or possibly even wrong. Yegge: It could—you're right, it's actually kind of an incentive for you to sort of code in a more transparent way. Spolsky: Mm-hmm. Yegge: Now, people who love to write obfuscated JavaScript, you know, will kind of sniff at that—go "Whoa, I want to use, you know, anonymous function callbacks nested inside of other closures that are passed along with them." Then you're like, "Fine." Spolsky: Mm-hmm. Yegge: "Your tool won't know what the hell you're doing." Spolsky: Mm-hmm. <laughs> Yegge: And that's your choice, right? Spolsky: Right. [26:04] … [76:26 ends] | [incomplete] Spolsky: El Cerrito? Atwood: Yeah Spolsky: That's a different Mexican resteraunt outside of Berkeley Atwood: Yeah Atwood: So how's the Google-plex treating you? Spolsky: It's pretty nice, this isn't the plex I don't think... Yegge: It's kind of plexy, I mean it's the plexiest we've got in Kirkland Spolsky: Yeah <laughs> Spolsky: It's a little ugly plex Yegge: It's frigidly cold here, but it's beautiful outside Spolsky: Apparently the weather in Seattle is usually bad, we're having beautiful weather and everybody's saying we're lucky or something? Yegge: You were, you're using our year's quote of sunlight basically, but yeah we're in Kirkland offices and 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 Spolsky: Oh yeah, there's a big old table of organic produce up there in the Amazon cafeteria Yegge: NERRRRRRRRRRRRRR <Spolsky stutters> Yegge: GOOGLE cafeteria Spolsky: Sorry! <laughter> Atwood: Amazon... <laughing> <more laughter> Yegge: At amazon you <something> pull your wallet out. No, they do but... Spolsky: 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 Yegge: Yeah, like a farmers market Spolsky: All kinds of different apples and stuff Yegge: And I was trying to explain to Joel that in certain other companies that I've worked at, I'm not 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're going to feed you because there's 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, and he just starts handing us bags - so yeah there's a little bit of contrast there Spolsky: Yeah. That's pretty nice, I was going to take some home to my friends at Microsoft because they don't get enough food over there, I don't think Atwood: But it's a table full of vegetables, that's not very "programmery", it should be like Ding-Dongs and Twinkies and... Spolsky: They had that too! They have the slightly healthier versions of the Ding-Dongs Yegge: Yeah we have the much healthier Red bull cola? Spolsky: Red bull cola and stuff Atwood: The "organic" red bull <laughs> Yegge: We did have a brownie, there was a brownie Spolsky: I'm just noticing that lava lamps seems to have an antenna which seems to be attached by a wire ... Yegge: Oh yeah! That's our wired internet lava lamp, so you can check its...I'm just making this stuff up <all 3 laugh> Spolsky: It's a lava lamp, this little conference room along with a ... floating ... soccer ball Yegge: It's not very lava lamp-ey either, it's ON but it's not MOVING, so maybe it's actually a, you know a... listening device or... Spolsky: Optical illusion? It's just CGI that they added after Yegge: <laughs> Could be! Spolsky: So Jeff how are you doing? Atwood: Good! Well I was going to tell you, I think your show was one of the most popular ones we ever did Yegge: Yeah! One of the most popular Atwood: Yeah, repeated - REPEATED compliments on that one, people really seemed to enjoy that show Yegge: I don't remember ANY of it! But I hear it was good Spolsky: We might have talked about programming languages, everybody likes a good programming language fight Yegge: Oh yeah, yeah Atwood: Oh yeah! Speaking of programming languages, I have a little anecdote, you guys probably knew this but me being a dumb ass, I didn't know that APL was ACTUALLY symbols? I thought you were kidding! You brought that up, and you were like, you know, I said well what if there was a programming language or - I think Alex brought it up actually from the Daily WTF, what if there was a programming language which was ENTIRELY symbols? and I was like, "Ha ha ha, that's hilarious!" Spolsky: And I said "Yeah, APL" Atwood: No, I was like, that's ridiculous, and then <laughs> in the comments after I put that show up people were like, "yeah, just like APL" and I was: "WHAT?" , I was like, "Joel wasn't just pulling my chain like he usually is?" Spolsky: When did I ever pull your chain? Atwood: You're CONSTANTLY yanking my chain <laughing> Yegge: Yeah I think they got the idea from terminals that couldn't display Unicode? So you'd see little smiley faces and stuff? and they're like, you know what? This is even MORE succinct than Perl!
Spolsky: It's the line noise language! I don't know why they use symbols it's really a matrix language Atwood: Well it's a mathematics thing, somebody said this is what happens when you let...mathematics design a programming language Spolsky: It gets really concise. But then like the whole Fibonacci generator is like 8 characters or something and the, you know, it's a very concise language Yegge: It's good to be able to save space on your, Fibonacci generators, cause... lot of those... <laughs> Yegge: The toy examples always drive me nuts, you know the, c++, you know the Stroustrup examples, you know the c++ toy example he uses AGAIN and AGAIN and AGAIN, it's the point class , and it's just SO hard in C and now we can have... Spolsky: Right... which inherits from <something> Yegge: ... points, complex numbers, that was the one, complex numbers, yeah same thing Spolsky: You've got a whole programming language designed for complex numbers? Yegge: Pretty much, and then he kinda bolted everything else on afterwards Spolsky: and strings, that's the problem, that you couldn't do strings Yegge: Exactly, and then Perl came along and they could do strings really well but not so much lists or (something) 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 3 LINES AND IT'S NOT ACTUALLY QUICKSORT BUT IT'S PRETTY CLOSE” and it's provably correct your stuff is sorted and you're just like "Great, that really makes me want to use the language." I don't know, it's just... Spolsky: It's some other sort. <laughs> Yegge: Yeah, it is. Medium sort. <all 3 laugh> Atwood: 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, I want to say "J"? I think. A lot of people that use APL have switched to that because it's less insane. Yegge: Isn't that four out of five people? Because there were only five people I think, actually using APL. Spolksy: You used to have to get a special terminal for it. Yegge: Yeah, you couldn't type it in. That was a big one, right? I mean, if your keyboard doesn't work for you, where are ya? The thing is, I hear it was a really elegant, really nice language. I had old geezers telling me they just loved it. It's just a shame it never took off. Spolsky: I think it did amongst Mathematicians, people that were modelling weather and scientists, and stuff like that, but this was really in the sixties, maybe the seventies. So it wasn't like it was Windows, like you could have a language with all kinds of wacky stuff and they would just put an onscreen keyboard and you could click on the glyph you wanted. No, this was like you had a teletype punch type terminal with... Yegge: You probably had some horrible horrible setup that looked like the sound equipment on the table in front of us. <laughs> In thirty years we're going to look back and go "Remember that setup you had for the podcasting?" Spolsky: The only thing funnier than all these wires that I have on the table in front of me for the podcast is trying to get this through airport security. Yegge: Oh god. I can't imagine. Seriously, it looks just like the Apollo 13 scene where they dumped all the stuff on the floor and said "build a CO2 remover" and Joel did it in record time, I think he did it in under 15 minutes, put it all together this time. It's an impressive piece of work. That's what you need to program APL is what I hear. You just need this really fancy setup. Spolsky: Well, this setup is nothing. Just the fact that I could fit a whole professional recording studio into a knapsack and the fact that we've got Jeff on Skype coming in remotely. Yegge: It looks pretty cool now. Spolsky: Yeah, and you're not even seeing all the cool flashing numbers over here and the blinking lights and the little VU meters that I'm monitoring. Yegge: It has blinking lights, kind of like the Star Trek panel? Spolsky: Swing around over here, we got four little VU meters here, so that's me. Yegge: That looks very expensive. Spolsky: That's the time, it's an OLED display. Atwood: Let's not get too meta on podcast stuff. That's a complaint about other podcasts. Spolsky: That they talk about podcasts the whole time. Yegge: Who? Oh, they do? Atwood: It's kind of like programmers talking about programming languages. Yegge: Yeah, that's annoying, let's not do that. <Atwood laughs> Spolsky: A minute ago we were about to have an interesting conversation, Steve and I was "Let's save this for the podcast". What the heck was that about? Do you remember Michael? It's lost to... Yegge: Was it the strippers? Spolsky: I thought it was hookers. Wait a minute. Yegge: That was my former employer. Yeah, what was it? Spolsky: I was asking you what were the worst things about working for you former employer, cause I hear it's not such a great place to work any more. Yegge: It's not so bad. McDonalds has pros and cons, right? You could make a case for working there. Spolsky: 1 out of 8 of all US citizens have worked at McDonalds at some point. Yegge: Yeah, right. I'd say with their turnover, my former employer will probably be... 1 in 8 programmers will be able to say they worked there and their signing bonus kicked in and they ran. I'm thinking that 4 years is an appropriate amount of time to wait. So I've got another 6 months before I can actually start the whistle blowing. Or, what's the word? Expose. Not that people haven't done that before, right? Written books about it and stuff. But that place is just insane. Spolsky: Mike Daisy? Wait, are we not identifying them by name? Yegge: No, no, no, we're not identifying them by name. Is this a cell phone? No, 6 months from now you can ask me and I'll be a bit more forthcoming about some of the craziness that went on there. Spolsky: It was sort of like a dot com company, right? Like dot com craziness? Yegge: Er... well, I don't know. I've heard a lot of dot com stories, but I haven't heard any stories of managers who like wrote with green felt markers on bald employees heads or prevented... keeping people from going to their mothers funerals, or any number of other... I mean it wasn't just dot com craziness, there was real craziness going on there, moony craziness going on there for a while. Atwood: Wow. Yegge: But we're talking about it, this company is ancient history, I don't wanna talk about it... but you did ask me "what are you working on?" Spolsky: Oh yeah, are you allowed to say what you're working on? Yegge: Yeah... to some extent. You guys asked me last time and I was like "Raaaraaaragh". And this time I'm more like "Rah". A little less <indecipherable> Spolsky: OK. Yegge: So you know, it's just a little less.. Spolsky: So two barks or one bark. Is it anything to do with like communications in some way. Give me one bark yes. Yegge: Rah, rah. That's two barks for no. Spolsky: Not a communications tool. Yegge: No,no, it's an internal... so I'm obsessed with productivity. And as it happens, so's Google now because the big recession hit, and now nobodies hiring like crazy any more, I think everybody was for a while, but... 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 round asking people, so what would make you more happier? And people inevitably say "Tools! Tools, tools, tools", right? I mean that's what they want. Well, people come over here from Microsoft and they throw temper tantrums. Spolsky: That's true. Microsoft really does have a machine of tools, like the... Yegge: They have all kinds of machines, I was wondering which one you were referring to. The one that keeps your eyelids open? Spolsky: Well, I was thinking of the fact that when a programmer writes code at Microsoft, it goes into this giant factory, you don't even know about. And millions of copies of it in millions of different languages and you're seeing your code run in Turkish. And somebody's complaining about an error when you capitalise the letter I from English to Turkish it loses or doesn't lose it's dot as appropriate in the Turkish alphabet set and you're like, "What? My code runs in Turkish?" Yegge: Nice, nice. And also, they have Intellisense, right? And they've had it forever. It's like crack. Or so I hear. Spolsky: Oh, jeez, the size of APIs today, where you've got like a thousand little member functions... [13:30] Yegge: And it's funny. I heard this Googler who, uh, he sent this impassioned rant to our Java list and he said, "you know I've been a C++ programmer for 25 years and I never, ever though 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 using C++ for along time, right? He says, "I was forced to use Java," because he was on this one project using Java, and he says, "you know, now, like a year later, 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 the language. The language isn't really that good, but that's neither here not there. The tools are amazing. The things it can tell you..." and blah blah blah, and he was basically going on saying Java has kinda intellisense now, right? Spolsky: Right, now this is in Eclipse presumably. Yegge: Yeah it was Eclipse or maybe IntelliJ or one of those ones. And so Visual Studio has had this forever so people from Microsoft, you know that's the environment they use (except for the ones who use Emacs, which is apparently 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." 'Cause Google has a lot of code. I mean, so does Microsoft, so does any big company, right? And so like a year ago... so after being on like 3 projects, all of which were cancelled - I think I told you guys this last time... Spolsky: You have a lot of bad luck with that. Yegge: Yeah, you know, but it wasn't all bad right? I even got a bonus for one of 'em. Spolsky: You could have a situation comedy, sort of like Everyone Hates Chris, where something bad happens to you every single day, but you stand up and dust yourself off. Yegge: I could, I could, but it would be so hard to pull it off, right? Around here it's like, "oh something bad happened today. They didn't have enough asparagus..." [15:00] Yegge: ...or whatever, right. I mean it's just like you gotta... Spolsky <laughing>: You ran out of asparagus on the free vegetable table. Yegge: You gotta put it all in perspective, right, I mean. Seriously, people got whiny here. We had a reputation in Kirkland for being whiners, among the rest of Google. It's cause people would literally write on the comments board... The one that really got my co-worker was "Please don't put frosting on the chocolate brownies because it gets on my finger," I mean it's like... we've got serious problems at this company. Spolsky: What's that expression? "How quickly we grow to feel entitled to things that were only invented 15 minutes ago". Yegge: Yes! Spolsky: There was a woman on the plane when Michael and I were flying out here, who, uh, 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 was like "A six hour flight without power?!? How am I supposed to... Yegge: Oh, no. 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 at other places at Google it doesn't appear to be. I heard one dude stand up at the company All-Hands and complain that because there was now a cafe in every building bug not a bunch of micro-kitchens, what would happen if he didn't like the chef's food and had to walk to another building. Spolsky: Oh, no. Yegge: And he got boo'd off the stage, everyone was laughing at him, jeering at him, and it's like no entitlement down there, right? Spolsky: I think Google hires a much larger proportion of experienced developer than fresh out of college hires than a lot of other companies. Yegge: I could see that. Spolsky: Which means that a lot of them have been other places where they know what the par for the course is Yegge: I actually made an argument at one pont and I was sort of serious that you shouldn't be allowed to come here right out of college because you have no idea how good you've got it. Spolsky: Right, just for that reason alone. Yegge: Or, or 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 like you could... you know, have them go to a little boot camp. I don't know, something like... Spolsky: Well, here's an idea. What you do is you find some big advertising company in New York or something that's doing some integration project with Google, you know, to feed 8 million ad words to some campaign or something, and you send them out to work in that place for 8 weeks. Yegge: That's right. We call it the "Salt Mines Project" and they get to be in the salt mines for 8 weeks. And then, and then... and then no food or anything like that. And then they get to come over here and then maybe they'll get it. Because it's often the college hires who were kind of... who had the worst entitlement problem. But anyway, we had kind of a reputation for it, and it was kind of an issue, so... Yegge: But developers are kind of entitled to good tools, I think. I mean, you know, it'st's foolish to, to, to try to ... I saw this dude, you know, hes not with us anymore and he left voluntarily, he was a good programmer, I mean people can get by with just basic V.I. But I mean the dude had, he was using not Vim, he was using V.I. Like Vi or whatever you call it, the old one. it was like Ed. Spolsky: Ed. One comma three I <laughs> Yegge: 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 just got out of college and probably didn't even know what he was doing, right, hadn't used a terminal before and he didn't even have paren matching turned on, right, he had no braces, and he was doing this like really deeply nested javascript and every time he'd make a change, you know, he'd like go in and he kept spelling it fuction instead of function, right. He'd leave the 'n' out. <Spolsky cackles> Yegge: And I'd watch over his shoulder and i'd be like "Dude, you spelled it fuction again". Right, and he'd be like "yeah, I really oughtta...". And I'd be like... <Spolsky and Atwood laughing> Yegge: Yeah, I guess it's kind of funny. So like I, you know, I was watching over this guy's shoulder and I'm thinking, "this is kinda, sort of the state of the art of tools at Google, you know, for people who are doing any sort of JavaScript, any sort of C++, anything that's not Java. We gotta fix this, this is a problem." Spolsky: Yeah. Sure. Yegge: And if I'm going to fix it, I'm gonna fix it in sort of a Googly way, and a big scalable way, and a non-stupid way, right. And so I took a look around, and I mean like, basically programming languages are silos. We already know that, they don't interoperate well, right. You know, you can use COM, CORBA, things like that you know, whatever, but there's no like there's very little like call stack sharing, right, going on. Spolsky: Unless you have... except for the set of .NET languages. But yeah... Yegge: Uh, yeah they do. Yes. Or, if you want to go through the exceptions list, the Sun's JVM, the Apple LLVM that's probably further along than that. Spolsky: Right, right. There are litte worlds that aren't quite so "silo." Yegge: Yeah, and they're working on it, but I mean, I was at Foo Camp a couple years ago where the, basically the leading experts, you know, in the world were working on this. There was a dude, there were a couple guys from Microsoft, a couple guys from Apple, and the Perl 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 2 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 mouthful going <muffled>"well, what about this problem?"</muffled> Spolsky: "How do you throw an exception across 4 frames...?" Yegge: Seriously. Spolsky: "... where you gotta throw it through another language?" Yegge: Yes! And it was exactly this kind of question. And it was like people were just trivializing it, going like "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?" You know. And it's a hard, hard problem. Basically my point that languages don't really call each other in their silos is still true today. It'll be great when we get to where it doesn't matter what language you use, it's just surface syntax you know. But that's gonna be a long time, right. And you kinda disenfranchise your users too. Microsoft did this with Visual Basic, right. They were like, "oh, we want it to interoperate with C++, so we're gonna kinda change the way it works..." Spolsky: Well, with C#, actually, but yeah... Yegge: Oh, sorry. Or, or, you know, what do they call it? Spolsky: And they changed the way C++ works Yegge: ...embedded C++, what do they call it? Managed, managed C++. Yeah. Spolsky: Well, don't forget that if you do that, 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. Yegge: And it's the least common denominator too, is what you're gonna wind up with. Spolsky: You have to have a least common denominator... Yegge: There's still the "right tool for the right job" thing going on with programming. Spolsky: Exactly, exactly. You gotta... I mean, what are you going to do in the browser? There's gotta be JavaScript, I assume, or something that translates to JavaScript. Yegge: I guess. I don't know. But anyway, I took a look at the state of the art of tools, and I was like, you know what, I mean, Visual Studio, and say, Eclipse, IntelliJ are the sort of the state of the art for tools. You know, they have auto-completion, they have smart linking and browsing and blah blah blah, but you basically have to like add support for each language for each editor. So there's a NxM sort of matrix problem, right. So in other words, like, emacs has like pretty, kinda OK-ish C++ support but it's Java support's not quite as good, and it kinda diminishes. Emacs kinda has a decent-ish support for a lot of languages; Eclipse has really good support for Java, and kind of OK for C++, and it tails off really fast, it's like lousy for like Perl. And so on. And so like everybody has their favorite editor, and they won't give it up, right. Spolsky: Right. Yegge: Even if it's vi with no paren matching. They're like, "damn it, I'm gonna use this till I die."
Spolsky: Doesn't—isn't there a problem that ... I know that 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. Yegge: Well, it is hard, but I notice that you didn't say it's impossible, and that's—that's the correct word, because it's not impossible. Spolsky: Mm-hmm. Yegge: It is just hard. Google has a JavaScript compiler. Spolsky: Right. Yegge: 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. Spolsky: Is it—is it the same as the one in Chrome? Yegge: I don't know—no, it's not. The one in Chrome is a VM. Spolsky: OK. Yegge: 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... Spolsky: Oh, OK. Yegge: It's a very—You know, it's kind of obfuscated—and it's not obfuscated... Spolsky: It's still JavaScript. Yegge: It's still JavaScript, but what they've done is they've given all the variables very short names... Spolsky: Right. Yegge: ...they've taken all these shortcut—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, right, 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, but... Spolsky: Mm-hmm. Yegge: So like, you can write typed JavaScript. Spolsky: OK. Yegge: So there's classes, and there's methods, and inheritance, and there's even to some extent, you know, parameterized types and things like that. Spolsky: Do you have to declare the types? Yegge: You don't have to—there's type inference. Spolsky: OK. Yegge: So, the more types that you declare, especially at key points where there's a little bit of purchase for the type inference engine... Spolsky: Yeah. Yeah. Yegge: ...the better... Spolsky: Yeah. Yegge: …and it'll tell you, "Oh gosh, I have no idea what's going on here", right? Spolsky: Yeah. Yegge: But it does—it's very smart. It actually knows about, like, union types, and so, like, if you have a function, like in JavaScript, that takes a number or string, and it just casts, you know, or does… Spolsky: Yeah. Yegge: …maybe it dispatches and does something different, you know? Spolsky: Mm-hmm. Yegge: ...because they don't have overloading, right? So what you do is you just look at your arguments and see what you got and then do some dispatch, right? Spolsky: Mm-hmm. Yegge: The type inference engine in JSCompiler will actually, like, figure out what all the possible things are that you do pass in, and create a union type for those, right? Spolsky: <unintelligible> Yegge: And none of this is ever surfaced in any sort of an IDE, or anything—it's just warnings or errors at build time, right? Spolsky: So it can catch things faster. Yegge: Yeah—but I mean, so it would be very nice if it could catch it as you typed it. Spolsky: Mm-hmm. Yegge: Right? Spolsky: And plus, like, know what the type of that object is, so that... <overtalked> Yegge: Absolutely. <overtalked> So that you could do—exactly—autocompletion, and things like that, right? Spolsky: Yeah. Yegge: Code navigation. So, the JavaScript approach that we've taken is, 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. In fact, the Python crowd here, when they what I had done internally, they were like "oh, we want that for Python in a big way." And so... Spolsky: Mm-hmm. Yegge: ...I'm like, well, yeah. We have to write a Python compiler, you know.. Spolsky: Mm-hmm. Yegge: ...it's going to be some work. Because, the thing is, it's a very—it's a really sophisticated compiler. It does like 50 passes over the IR, and it does—it builds a, you know, control flow graph, and all that Dragon Book stuff, right? Spolsky: Mm-hmm. Yegge: And it's doing it with JavaScript. Spolsky: Mm-hmm. Yegge: And it's starting—it's starting off with very few types. I mean, it's 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 it on third-party code, where all—the only types are, like, you know, literals, and functions—you know, there isn't a type system, right? But it can still infer kind of a lot of stuff there, right? Spolsky: Yeah. Yegge: So, like, anyways, 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 any statically typed language, you have types. Spolsky: Mm-hmm. Yegge: So you have a lot of stuff for the IntelliJ... Spolsky: Sure. Yegge: ...IntelliSense stuff to work. Spolsky: There's actually, I mean, if you open up—in the latest version of Visual Studio, if you open up an HTML file that has a bunch of random JavaScript pasted in there—the JavaScript will get syntax colored. Yegge: Mm-hmm. Spolsky: And IntelliSense will almost work, and it'll use all kinds of exhaustive methods... Yegge: Yes. Spolsky: ...to try to guess what type things are. Yegge: Yes. Spolsky: Sometimes in ways that are maybe 95% accurate... Yegge: And you know what? Spolsky: <simultaneous> but not 100%... Yegge: That's been my, sort of, core philosophy, is that if it's 95% accurate, then, you know, 5% of the time, you're going to be fixing it, you know... Spolsky: Yeah. Yegge: That's no worse than, like, the indentation, for JavaScript, or... Spolsky: Ha. Yegge: ...probably for C++, right? Every once in a while, it doesn't indent exactly the way you want, but as long as it's helping you... Spolsky: Yep. Yegge: You know, um... Spolsky: A lot of times, when it's failing, it's cuing you off as to something that you did nonstandard that's... Yegge: That's true. Spolsky: Or possibly even wrong. Yegge: It could—you're right, it's actually kind of an incentive for you to sort of code in a more transparent way. Spolsky: Mm-hmm. Yegge: Now, people who love to write obfuscated JavaScript, you know, will kind of sniff at that—go "Whoa, I want to use, you know, anonymous function callbacks nested inside of other closures that are passed along with them." Then you're like, "Fine." Spolsky: Mm-hmm. Yegge: "Your tool won't know what the hell you're doing." Spolsky: Mm-hmm. <laughs> Yegge: And that's your choice, right? Spolsky: Right. [26:04] … [54:06] Spolsky: 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 4 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, that awesome capability. Atwood: Ok, well, do it sir. Spolsky: It's gonna be, well, I don't know if it's a good question or not. Here we go. <caller>: Hey, Joel and Jeff. This is <caller's name> in Chicago. Love the podcast and Stack Overflow. In podcast #47, Joel that storing email messages per file in a mail application is stupidly inefficient. Spolsky: Yes. <caller>: Then he mentions Unix under his breath. Now I happen to think that storing emails in a single database is an overly aggressive optimization, and that it leads to a lot of problems with backups and opaqueness, and that a hybrid design is the best approach. But I'm actually more curious about Joel's history with Unix, because he mentions Unix a lot in this vaguely pejorative way but never really explains why. Spolsky <in background, responding to caller>: Stop, stop. No, no... <caller>: I don't mind that Joel prefers one platform to another, but I'm asking this because while Joel is opinionated, he is overall rather wise and not dogmatic or partisan for shallow reasons. I have to believe then that he had an early experience with Unix. Could you tell us more about it, Joel? Thanks. Spolsky: Ok, well, when I was at... Yegge: Is he talking about snip-snip eunichs, or...? <Spolsky chuckles> Spolsky: Yes, there were eunichs at <undecipherable>. And I had a terrible, terrible experience... Yegge: I could see that. Spolsky: ...with, uh... Well, first of all, I said Unix under my breath because that is actually the, called the Unix mail format. It's just plain text, and the way you know that a new message is started 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. It's 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 was muttering under my breath "Unix" because that's the way they... do it. So that's it! But I kinda... the question is sort of, um... Atwood: Why do you hate Unix so much? Spolsky: I don't actually hate Unix. So, sorry. It was, you know, Unix is awesome. Yegge: I don't know, I mean, that design doesn't realy 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. <Spolsky laughs> Yegge: Dealing with some monolithic beast of a thing that exports 8 thousand messages to Skype every time you log in. <laughing> Spolsky: Ok. 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, uh, partisan about their technology choices, especially around things like whatever it may be, whether it's Windows vs. Macintosh, whether it's Windows vs. Unix, whatever those things are. There's such an assumption that you kinda have to be partisan in a way 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 the assumption that's like, "wait, is Joel against Unix? What does he have against Unix, why is he anti-Unix?" Yegge: This coming from a guy who's working on an IBM StinkPad, and you probably have a Zune, don't you? <laughing> Spolsky: Wait, wait. Yegge: I mean, you're voting with your feet, right? Spolsky: Hold on. Wait. Damn it, I had to rebuild this computer so I don't have Cygwin on here. Yegge: Oh, you had Cygwin? That's so cool. See? He doesn't hate Unix. He even knows what Cygwin is, that counts. Spolsky: Yeah, yeah. We have, uh... I should say, you know... but I think, I am trying to be fair, there's certain things that I know. We make FogBugz, 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. Um, 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 gonna be there. So, uh, writing software that's gonna be distributed for Unix is just... Yegge: That's a hard problem. Spolsky: ...painful. Yegge: I can't believe you're doing it, actually. I mean, like there's no... I mean, Unix is, heh, Unix is great at timesharing and stuff but it doesn't have like a registry. I mean, you know, for better or for worse, the registry is a central place where you register stuff. And Unix has, it could be in /etc/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, on my, for my compiles. And I, there's no way to tell what packages you've installed. Right. There's this think called dpkg, d-p-k-j, and it works with this other thing, a-p-t-get, you know and like you gotta go read about these things and learn how they work and learn their flags and stuff, which is already a pain in the ass, but it turns out that there's, neither one of them will actually tell you which packages you've installed. And the 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 thousand lines of output for every package you have installed, right. Every little sound driver, every little whatever, and then you have to run it again on a pristine installation of Ubuntu and then diff them. What the hell?? Like, I'll rant against Unix. <Spolsky laughing> Atwood: Wow, wow. Yegge: I mean, you know, I'm... Spolsky: I like it. Yegge: I mean, come on. Like 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, right, relative to on the Mac or on Windows. Same processing power, even better processing power on the Unix box, so I dunno. I applaud Joel for being non-partisan here, but my god! Unix does have some issues, I mean especially around applications. [60:00] Spolsky: It's sort of... Yegge: It's sort of for servers; for apps the... Spolsky: Yeah, it's the lack of consistency, especially on the server. Like on a Windows box, if you're 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 you 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, just think about if you have to add something to Apache's configuration file, httpd.conf, where is that thing? How do you know, 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 where it's configuration is. And, uh, almost completely impossible. So, we just have customers who will spend 3 days just trying to get FogBugz up and running on a Unix system that doesn't have a web server. <laugh> At all. Yegge: It's funny, I can see both sides so clearly, because I would much rather run and administer Unix myself, and I'd prefer httpd.conf, for all it's ugliness, over the IIS opaque, you know, menu structure... I mean, to me, that's opaque, right. However, when it comes to installing and application, I would much rather do it on my Mac or whatever it is to be my Windows box, than I would on any Unix... Spolsky: Right, which is a drag-and-drop, or a double click and then it's in... Yegge: I mean, on Unix, if it's an application that's command line and it has a decent tarball, or 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, and the experience can sort of approximate a good experience, right? Spolsky: It depends, it sort of depends on... Yegge: It's not a good experience, but it can sort of approximate it. Spolsky: Well, it depends on the dependencies. Um, it's meta-circular. Yegge: Yes! Spolsky: So, FogBugz has just two major dependencies at least, the database and the way it gets to the database, which is usually MySQL, and the, uh, web server, which is Apache. So in the future, I think we're just gonna ship with those, and we're just gonna have this big ol' cloddy, like "I'm sorry..." Yeah, we have a setup program that just gives you everything you need and don't just try to find things that are there because it's just hopeless. Yegge: I said lawsuit. Um, I don't honestly know what the licensing terms are. Spolsky: Oh. Yegge: You just said you were going to have a big cloddy and then you... Spolsky: No, no. Yeah, we have to, 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 you know... 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 FogBugz. So FogBugz now has a choice of SQLite or MySQL... Yegge: Ah, interesting... Spolsky: ...we think that's the current plan. We don't actually... and then we discovered that we can use SQL Server. We do have a choice of Microsoft SQL Server, so we might... Spolsky: Ok, this is all inside baseball, as they say. Hey Jeff, is there any interesting news on Stack Overflow, anything we want to talk about? [62:56] ... [76:26 ends] |