View  Info
 

Podcast 050

Revision #9, 4/26/2009 10:44 PM
User: "up to 6:49 , just a few more minutes"
Tags: (None)

Previous Next 

Podcast 050

Revision #10, 4/27/2009 12:34 PM
User: "Added transcript from 6 minutes to 13 minutes."
Tags: (None)

Previous Next 

[incomplete]

Intro, advertising

[01:20]

Yegge: You know John Cage is the composer who pissed everyone off with his 4 minutes and 37 seconds composition which was a dude sitting at a piano for 4 minutes and 37 seconds.

Spolsky: 33.

Yegge: And not playing it, was it 33 ?

Spolsky: 4'33".

Yegge: Oh man, I'm 4 seconds out.

Spolsky: You just, well I think you might have your own new composition.

Yegge & Spolsky: <laughs>

Spolsky: Our guest today on the StackOverflow Podcast is Mr Steve Yegge.

Yegge: Howdy howdy.

Spolsky: 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.

Atwood: Well actually El Cerrito but close, very close.

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!

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


Yagge: It's really concise


Spolsky: the whole Fibonacci generator is like 8 characters or something and the, you know, it's a very concise language


Yagge: It's good to be able to save space on your, Fibonacci generators


<laughs>


Yagge: The toy examples always drive me nuts, you know the, c++ 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 points, complex numbers, yeah same thing


Spolsky: You've got a whole programming language designed for complex numbers?


Yagge: Pretty much, and then he kinda bolted everything else on afterwards


Spolsky: and strings, that's the problem, that you couldn't do strings


Yagge: 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”


<all 3 laugh>

[6:49]

...

[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]

Outro, advertising

[77:39]

[incomplete]

Intro, advertising

[01:20]

Yegge: You know John Cage is the composer who pissed everyone off with his 4 minutes and 37 seconds composition which was a dude sitting at a piano for 4 minutes and 37 seconds.

Spolsky: 33.

Yegge: And not playing it, was it 33 ?

Spolsky: 4'33".

Yegge: Oh man, I'm 4 seconds out.

Spolsky: You just, well I think you might have your own new composition.

Yegge & Spolsky: <laughs>

Spolsky: Our guest today on the StackOverflow Podcast is Mr Steve Yegge.

Yegge: Howdy howdy.

Spolsky: 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.

Atwood: Well actually El Cerrito but close, very close.

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!

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


Yagge: It's really concise


Spolsky: the whole Fibonacci generator is like 8 characters or something and the, you know, it's a very concise language


Yagge: It's good to be able to save space on your, Fibonacci generators


<laughs>


Yagge: The toy examples always drive me nuts, you know the, c++ 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 points, complex numbers, yeah same thing


Spolsky: You've got a whole programming language designed for complex numbers?


Yagge: Pretty much, and then he kinda bolted everything else on afterwards


Spolsky: and strings, that's the problem, that you couldn't do strings


Yagge: 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."

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.

S: 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 coming in remotely via Skype.

Y: It looks pretty cool now.

S: 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.

It has blinking lights, kind of like the Star Trek panel?

Swing around over here, we got four little VU meters here, so that's me.

Y: That looks very expensive.

S: That's the time, it's an OLED display.

A: Let's not get too meta on podcast stuff. That's a complaint about other podcasts.

S: That they talk about podcasts the whole time.

It's kind of like programmers talking about programming languages.

Y: Yeah, that's annoying, let's not do that.

<Atwood laughs>

S: 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...

Y: Was it the strippers?

S: I thought it was hookers. Wait a minute.

Y: That was my former employer. Yeah, what was it?

S: 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.

Y: It's not so bad. McDonalds has pros and cons, right? You could make a case for working there.

S: 1 out of 8 of all US citizens have worked at McDonalds at some point.

Y: 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.

S: Mike Daisy? Wait, are we not identifying them by name?

Y: 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.

S: It was sort of like a dot com company, right? Like dot com craziness?

Y: 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.

A: Wow.

Y: 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?"

S: Oh yeah, are you allowed to say what you're working on?

Y: 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>

S: OK.

Y: So you know, it's just a little less..

S: So two barks or one bark. Is it anything to do with like communications in some way. Give me one bark yes.

Y: Rah, rah. That's two barks for no.

S: Not a communications tool.

Y: 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.

S: That's true. Microsoft really does have a machine of tools, like the...

Y: They have all kinds of machines, I was wondering which one you were referring to. The one that keeps your eyelids open?

S: 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?"

Y: Nice, nice. And also, they have Intellisense, right? And they've had it forever. It's like crack. Or so I hear.

S: Oh, jeez, the size of APIs today, where you've got like a thousand little member functions...


[13:30]

...

[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]

Outro, advertising

[77:39]