Speaker 1: Hey, welcome back to Programmer Story Hour with Uncle Bob
Speaker 1: or JavaScript Jabber as we call it every week.
Speaker 2: This week on our panel, we have a j O'Neal.
Speaker 3: Yo yah yoh, come that you live.
Speaker 4: From the now with plywood paneling shed or like I said,
Speaker 4: a drywall. I got someplywood from a friend who is
Speaker 4: dumping it nice.
Speaker 2: We also have Dan Shapere.
Speaker 3: Hello from Tel Aviv.
Speaker 5: I'm Charles max Wood from Top End Devs. And this
Speaker 5: week we have a special guest. As I said before,
Speaker 5: we got Uncle Bob here. So Bob, welcome back.
Speaker 6: Thank you so much. Good to be back.
Speaker 5: So I was going to ask you what's new, but
Speaker 5: I have to say Pearson reached out to me about
Speaker 5: reviewing Clean Code, a new edition of Clean Code, So
Speaker 5: it looks like that's going to be a thing.
Speaker 6: Yeah. I'm in the midst of the final reviews of
Speaker 6: that now, so it should be going into production within
Speaker 6: another month. And then you know that that process takes
Speaker 6: about three or four months. So even cleaner Code end
Speaker 6: of the year, what's that?
Speaker 3: Even cleaner Code, we can only pray.
Speaker 6: Clean Code second Edition. I tried to play with other titles,
Speaker 6: but the publisher was very adamant be Clean Code second edition.
Speaker 2: I think it's easier to sell if you keep the title.
Speaker 3: It's you know, yeah, we're not supposed to. That's that's
Speaker 3: not the topic of our conversation. But I've got to ask.
Speaker 3: I mean, the Clean Code principles seem pretty kind of universal, almost,
Speaker 3: so why do we need a second edition?
Speaker 2: Oh heavens, I did say, story our go for it, Bob.
Speaker 6: For the longest time, I thought, you know, I'm done.
Speaker 6: I don't. I've never done a second edition of anything.
Speaker 6: Usually when I write something, I think, Okay, I said it,
Speaker 6: I don't need to say it again. And for the
Speaker 6: longest time I thought that would be the case with
Speaker 6: Clean Code. But the Clean Code became so controversial. There
Speaker 6: were so many misinterpretations and misrepresentations and you know, errors
Speaker 6: on my part where I said things that could be
Speaker 6: taken in the wrong way that I thought, you know,
Speaker 6: maybe it's time to dust that thing off and see
Speaker 6: if there isn't something I would say differently. And then
Speaker 6: as I was doing that, I thought, you know, there's
Speaker 6: all this new stuff, there's all this AI stuff. There's
Speaker 6: always you know, co Pilot and rock and all that stuff.
Speaker 6: How does that play in. And besides that, there's languages.
Speaker 7: That I should probably explore, like go and and I thought, okay, fine,
Speaker 7: let's let's do a top to bottom rewrite, incorporating some
Speaker 7: of the original chapters with a lot of change and
Speaker 7: just a whole new bunch of new chapters.
Speaker 6: The overall message is, of course the same, but the
Speaker 6: way I say it in the examples that I pose
Speaker 6: and some of the nuances have shifted a rather significant amount,
Speaker 6: so I'm happy with it. I also decided to add
Speaker 6: a whole bunch of other stuff, like design principles and
Speaker 6: design patterns. It's kind of like, Okay, everything I've learned
Speaker 6: over the last ten years, let's kind of funnel it
Speaker 6: into this book and see what happens. So that's why
Speaker 6: there is a second edition. Not least of all of
Speaker 6: that is that my publisher said, you know, you should
Speaker 6: write a second edition. I thought, okay, probably a good idea.
Speaker 3: You mentioned the fact that you cover new program additional
Speaker 3: programming languages in the new edition. I'm curious in that context,
Speaker 3: how to what extent does the choice of the programming
Speaker 3: language impact the meaning, I guess or the consequence of
Speaker 3: the code being clean, Like would you apply the same
Speaker 3: principles in order to achieve clean code in different programming languages.
Speaker 6: And that is one of the points of the second edition,
Speaker 6: which is that the programming language doesn't matter much at all.
Speaker 6: I'm going to show you an example in Python. I'm
Speaker 6: going to show you an example in Ruby. I'll do
Speaker 6: an enclosure. I'll do one in Java. An NC doesn't
Speaker 6: seem to make an awful lot of difference. There are
Speaker 6: little quibbles that you can make. Some languages want the
Speaker 6: order of the functions inverted. You know, if you're working
Speaker 6: in Python or if you're working in closure. They want
Speaker 6: low level things stated before high level things I whereas
Speaker 6: in Java you can turn it around in a way
Speaker 6: that makes more sense. But o are all the message
Speaker 6: of the book applies to all of those languages, and
Speaker 6: and in the second edition I tried to demonstrate that
Speaker 6: by just changing language from chapter to chapter to chapter.
Speaker 2: Yeah, I remember, with the help of co.
Speaker 6: Pilot, by the way, because I'm not a Python programmer,
Speaker 6: so I fire up co pilot and I get a
Speaker 6: lot of help. It was, it was It was pretty
Speaker 6: interesting to watch these ais throw a code at me
Speaker 6: that I could review and then think you know that's
Speaker 6: maybe not so bad or in more cases like I
Speaker 6: think I could do better.
Speaker 2: Very cool. We're looking forward to that coming out.
Speaker 4: One thing that I hear is like the number one
Speaker 4: criticism that I hear, and I think this is not accurate,
Speaker 4: but I want to know. People say, oh, or you
Speaker 4: could do it Uncle Bob style and only have three
Speaker 4: or four lines in a function. Is that is that true?
Speaker 4: Or is that just like a misquote or a a
Speaker 4: perversion of something you said? Like I know that a
Speaker 4: lot of demo code examples to do apps whatever. Yeah,
Speaker 4: like you end up you know, if you were going
Speaker 4: to enterprise it, and yeah, then you're gonna end up
Speaker 4: with a bunch of things that are three or four
Speaker 4: lines long, don't do anything meaningful. But what what is
Speaker 4: your actual advice on function size or grouping of logic?
Speaker 6: Actual? My actual advice there is to keep it very small.
Speaker 6: I like small functions, and you know how small, well,
Speaker 6: three four or five, six, seven lines something in that range.
Speaker 6: I don't like to see twenty lines. I don't like
Speaker 6: to see thirty. The the controversy is, you know, two
Speaker 6: to three lines. So bun Kebob says, everything's got to
Speaker 6: be two to three or three to four or whatever
Speaker 6: number they quote. And that's an example of people who
Speaker 6: did not read the book.
Speaker 3: In that context. Though some programming languages are more condensed
Speaker 3: than others. Yes, you know, I know that you like closure.
Speaker 3: Closure is pretty dense. So three lines of Closure could
Speaker 3: probably achieve a lot more than three lines of Java.
Speaker 3: Three lines of Java. Two of those lines are open,
Speaker 3: open curlies, and close curlies, so you're basically left with
Speaker 3: one line that is Java.
Speaker 6: Certainly true, It is certainly true that that Closure is
Speaker 6: much denser than Java, and yet it is much harder
Speaker 6: in closure to make small functions. And that's just because
Speaker 6: of the functional style and the fact that you need
Speaker 6: to set a bunch of variables up front and then
Speaker 6: and then operate them at a lower place, and it's
Speaker 6: very hard to separate those things out as independent functions. So,
Speaker 6: just just a quirk of the language, you end up
Speaker 6: with larger functions inclosure, even though those even though the
Speaker 6: language is denser.
Speaker 4: So do you have like a general rule of how
Speaker 4: to determine what belongs together? Because I think line limit
Speaker 4: to me, to me personally, I don't think line limit
Speaker 4: makes a lot of sense because the line limit is arbitrary.
Speaker 4: Like for me, I don't like to use comments. I
Speaker 4: put everything in a variable. So if I'm going to
Speaker 4: do a mathematical operation where I'm gonna, you know, add
Speaker 4: days of the week and multiply by hours or whatever,
Speaker 4: I'll actually write that out line by line, so that
Speaker 4: instead of commenting this is taking this to make that
Speaker 4: because this number is special, I'll just var special number
Speaker 4: equals you know, and and that way that the variables
Speaker 4: declare themselves. So a function that somebody else would have
Speaker 4: that would be or a operation like I break statements
Speaker 4: down right, so don't I don't necessarily find line numbers
Speaker 4: in of themselves to be meaningful. Other than that, you've
Speaker 4: got to be able to see it on a page,
Speaker 4: Like when you're looking at a block of code, generally
Speaker 4: you should be able to see the whole block of code.
Speaker 4: If it extends beyond what you can easily see, or
Speaker 4: you have to make your font size really small, then
Speaker 4: you know it's too much context in the brain.
Speaker 3: I've got these I don't make my font size too small.
Speaker 6: Yeah.
Speaker 4: But on the other hand, and I think that there's
Speaker 4: the general case versus the exceptional case and this might
Speaker 4: be the exceptional case. But if it's like a parser,
Speaker 4: I often find that my functions are way longer, longer
Speaker 4: than I like them to be, because it's like, well,
Speaker 4: one unit of logic for parsing, this thing is just
Speaker 4: this much logic or transforming if it's like a parser
Speaker 4: or a transformer.
Speaker 6: Yeah, yeah, So the line limit is always the way
Speaker 6: to look at it. It's because it's not a line
Speaker 6: limit that you're really going for. And in the book,
Speaker 6: and in the new book especially, I write a whole
Speaker 6: chapter about this in the new book. But in the
Speaker 6: old book, the rule was a function should do one thing,
Speaker 6: and how do you know that it's doing one thing?
Speaker 2: How do you remove the.
Speaker 6: Objective or the subjective idea of what one thing is?
Speaker 6: And my answer to that is is that if you
Speaker 6: can use the extract method refactoring inside a function to
Speaker 6: pull another function out of it, you probably should, and
Speaker 6: then give that function a nice name, and those two
Speaker 6: functions will then do one thing. If you can take
Speaker 6: one function and split it in two with extract method,
Speaker 6: then you then that then probably you should, and those
Speaker 6: two functions will be smaller. Of course, they'll both have
Speaker 6: nice names.
Speaker 4: That's that's if you don't know what to name your function.
Speaker 4: If your function name is dou stuff, you definitely need
Speaker 4: to break your function down.
Speaker 3: I literally want had to refactor code that had in
Speaker 3: it one through in it ten oh jee.
Speaker 6: Yeah, but that's useful. But they kept the line rule.
Speaker 5: The thing that we're kind of circling around here, at
Speaker 5: least the way that I approach it is I like
Speaker 5: everything at the same abstraction level.
Speaker 2: For one.
Speaker 5: Yeah, so that's one rule that I follow, right, And
Speaker 5: so if I can say this takes these steps A, D, C,
Speaker 5: D E, F right, and I can you know, I
Speaker 5: can name the steps, then then that's usually what my
Speaker 5: function looks like, right, or my method or whatever. And
Speaker 5: then and then I have those somewhere else, right, And
Speaker 5: so then and then those break down the same way.
Speaker 2: They're just the next layer of abstraction.
Speaker 5: But then the other thing is is that if typically
Speaker 5: if I have some big long function like AJ's talking
Speaker 5: about with like a parser, usually there are different stages
Speaker 5: or steps or functionalities in there that I need to
Speaker 5: go through, and so I can break all that out too.
Speaker 5: And so in a lot of cases, I don't typically
Speaker 5: find very many cases in any language that I've written,
Speaker 5: where I don't wind up with just some somewhat shorter method.
Speaker 5: The only time it gets particularly long is if you
Speaker 5: have a case statement. And I hate case statements because
Speaker 5: it adds the line every other time. If if the
Speaker 5: case case, then do this case, then do this case,
Speaker 5: than do this or if els if elsif else if
Speaker 5: elsif which is also gross.
Speaker 2: But beyond that. Yeah, typically you can break it out into.
Speaker 3: Multiple I prefer and direction over ifs and and switches.
Speaker 3: By the way, we have a question from the audience
Speaker 3: closure from Venicius. I think I'm pronouncing his name correctly.
Speaker 3: I hope closure developers value recursion more than any other
Speaker 3: How does recursion impact clean code? Well, I think that
Speaker 3: closure developers don't have a choice except to use recursion
Speaker 3: if they want to have to make to create loops.
Speaker 3: You know, one of the people you didn't talk about
Speaker 3: in your book, or a few people were Church And
Speaker 3: also I forget the name of the two guys that
Speaker 3: created lisp.
Speaker 1: Oh, yeah, we're here to talk about we programmers.
Speaker 5: Go go ahead and answer this question, Bob, and then
Speaker 5: we'll move on and move on to story hour.
Speaker 6: Well, I mean, I mean Dan is right. If you're
Speaker 6: going to use the functional language, you have no choice
Speaker 6: but to use recursion. Recursion is a the only way
Speaker 6: you can do loops in a in a functional language.
Speaker 6: How does it impact clean code? It doesn't. Good. Good
Speaker 6: expressive code can be expressed either with iterative loops or
Speaker 6: with recursion, so there's no real impact there at all.
Speaker 6: The impact that closure brings to the rules of clean
Speaker 6: code is that the act of creating intermediate variables is
Speaker 6: very difficult to extract out into other functions because in closure,
Speaker 6: when you create an intermediate variable, it is in the
Speaker 6: scope of your function, and there's no way to get
Speaker 6: it out without doing some nasty trick like creating an
Speaker 6: atom or something. And okay, probably don't want to do
Speaker 6: that too.
Speaker 3: Often because you don't want side effects, all right right now.
Speaker 6: I mean, you can manage those side effects by creating
Speaker 6: an atom and then making sure you don't overwrite the
Speaker 6: data that you stick in there. So in that sense,
Speaker 6: you probably could pull out those functions. And I've played
Speaker 6: with that technique a few times, but it's always ugly.
Speaker 6: So then I wind up with functions that are fifteen
Speaker 6: lines long, and I look at them and go boy,
Speaker 6: I wish I could pull lice things apart, but there's
Speaker 6: no real good way so far, enclosure that I have accepted.
Speaker 3: Also, at the end of the day, it's not about achieving,
Speaker 3: like you said, it's not about achieving some magic number.
Speaker 3: It's trying to make your I guess it would be
Speaker 3: try to make your functions as short as possible, but
Speaker 3: no shorter.
Speaker 6: Well, yeah, given the constraints of the language.
Speaker 2: And it's not easy either.
Speaker 5: Any people kind of conflate length and complexity or length
Speaker 5: and difficulty, and you know it can and can't sometimes.
Speaker 5: But was it Mark Twain that said I didn't have
Speaker 5: time to write you a short letter, so I wrote
Speaker 5: you a long one.
Speaker 2: It was Voltaire, it was somebody important.
Speaker 5: But the point is is that it takes a lot
Speaker 5: of time to get right, to really get things that
Speaker 5: they're in the right place, so that you have something
Speaker 5: like that that's easy to put together in your head. Anyway,
Speaker 5: let's get into we program I think we did this
Speaker 5: last time when we were talking about your your other project,
Speaker 5: where we went off on we programmers for about twenty
Speaker 5: minutes and then it's like, we're here to talk about
Speaker 5: this other thing. So which is great because it makes
Speaker 5: it fun to talk about. But yeah, so I'm kind
Speaker 5: of curious as we get in, what's your favorite part
Speaker 5: or story or whatever of the book, and can you
Speaker 5: kind of give us a little bit of the story there.
Speaker 6: My favorite story in there, well, there's a lot of
Speaker 6: a lot of stories that I really like, but my
Speaker 6: favorite story in there might be the story of John Bacchus,
Speaker 6: because here's a guy who was a complete and air
Speaker 6: did well. It didn't have a great family life growing up,
Speaker 6: kind of dumped on school, didn't care about school because
Speaker 6: he's too damn smart, right, and you know, everybody knows
Speaker 6: that kid. It was so damn smart that they didn't
Speaker 6: even he didn't even try, right. School was just so
Speaker 6: damn boring. The hell with it, and he got drafted
Speaker 6: towards the end of World War two. Fortunately right at
Speaker 6: the right time. He got drafted, and the army saw this,
Speaker 6: this ne'er do well kid, and ran him through an
Speaker 6: aptitude test and it blew their socks off, and so
Speaker 6: they said, you need to become an engineer, and they
Speaker 6: put him into engineering school. Well that was too boring
Speaker 6: for him. He did extremely well, of course, but it
Speaker 6: was too boring for him, and he just spent his
Speaker 6: time at nightclubs and stuff like that. And the army
Speaker 6: goes this right at the end of World War Two, right,
Speaker 6: so the army says, you know, this guy's so damn smart.
Speaker 6: They put him into medical school. He could become a doctor.
Speaker 6: And that was a bit more challenging, and Bacchus kind
Speaker 6: of enjoyed it, but kind of didn't. And then all
Speaker 6: of a sudden, the world was over and he had
Speaker 6: he was out of the army and he just dropped
Speaker 6: out of the school and said, yeah, the hell with that.
Speaker 7: And he he built himself a nice little Wi Fi system.
Speaker 6: Oh, by the way, that's not Wi Fi Hi Fi
Speaker 6: back in the you know, in the fifties, nice sound
Speaker 6: system for his record player. Still only half of the
Speaker 6: people in the world know what I'm talking about. He
Speaker 6: built that, and he dabbled around a little bit and
Speaker 6: really didn't get any jobs. And then a friend of
Speaker 6: his said, you know, you should see this really cool
Speaker 6: thing that's down in one of the streets of New
Speaker 6: York City at the IBM building. And he goes wandering
Speaker 6: over there and he looks in the window and and
Speaker 6: the at the IBM building. Thomas J. Watson, the guy
Speaker 6: who founded IBM, had put in the display window the
Speaker 6: world's second computer, big computer, right, the selective I can't
Speaker 6: remember the name of it. This gigantic machine, mostly electro mechanical,
Speaker 6: couple of vacuum tubes, paper tape everywhere. This massive machine
Speaker 6: fills the room. It's got this really cool front panel,
Speaker 6: you know, a Star Trek front panel. Lights are blinking.
Speaker 6: If you go inside, it's clicking away like crazy. And
Speaker 6: Bacchus goes, oh, yeah, that's kind of cool. And he
Speaker 6: asks for a tour, and the person giving him a
Speaker 6: tour I think must have smelled something. I mean, Bacchus
Speaker 6: was in a very informal garb shall we say, but
Speaker 6: must have smelled something about Bacchus's intelligence, because the tour
Speaker 6: guide brought him up to the department head, and the
Speaker 6: department head gave him an aptitude test and hired him
Speaker 6: on the spot, and he became the project leader of
Speaker 6: the Fortran project that gave us the Fortran language way
Speaker 6: back in the fifties. That's that is one of the
Speaker 6: most interesting intellectual rags to intellectual riches stories in the book.
Speaker 6: It's a guy that you would never expect to do
Speaker 6: well at anything and winds up delivering this wonderful thing
Speaker 6: to the world at that time.
Speaker 3: So I have to ask, I mean, it's the book.
Speaker 3: I've not read it, but I've read excerpts. I've not
Speaker 3: read it yet. That's put it this way, but I've
Speaker 3: read excerpts. And I also saw some of the stuff
Speaker 3: that you put out, and there are a huge no,
Speaker 3: there's a large number of amazing characters and crazy stories
Speaker 3: about them. How did you decide who to put in
Speaker 3: and leave out? And how did you get all the
Speaker 3: information about the ones that I decided to put in.
Speaker 6: It's how did I decide who to leave in and
Speaker 6: who to leave out? Old Bob Seeger song right. There
Speaker 6: were a few that were obvious that I had to
Speaker 6: put in. I had to put Babbage in because the
Speaker 6: book wouldn't even start properly without Babbage. And you have
Speaker 6: to put Grace Hopper because she was kind of like
Speaker 6: the first And if you're not talking about touring, you're
Speaker 6: not writing a book about software history. So you've got
Speaker 6: to have touring. And if you bring in touring, you
Speaker 6: have to talk about the math. Dave the Hilbert Albert.
Speaker 6: Thank you. I knew it starting with an H. You
Speaker 6: have to talk about David Hilbert, and you have to
Speaker 6: talk about John von Neuman. So those were kind of obvious.
Speaker 6: That's an obvious progression. And then you know, why wouldn't
Speaker 6: you talk about the three authors of C Why wouldn't
Speaker 6: you talk about Dennis Ritchie and Ken Thompson and Brian Kernahan.
Speaker 6: In fact, you're gonna want to end with that one
Speaker 6: because that's kind of where modern history begins. Yeah, and
Speaker 6: then in the midst of all that, there are these milestones,
Speaker 6: and most of those milestones I just uncovered by accident,
Speaker 6: like the whole story of John Kemeny, the father of Basic.
Speaker 6: What an interesting story that was. No, everybody knows Basic,
Speaker 6: hardly anybody knows the.
Speaker 3: You're making a You're making an assumption that's based on
Speaker 3: our age. Well, I have to tell you that I
Speaker 3: speak with the developers that I work with these days,
Speaker 3: and you know, sometimes the topic of the first what's
Speaker 3: your first programming language? Comes up and I say Basic
Speaker 3: and they say, what ye like people today? People today
Speaker 3: don't know about Basic. I mean, you know, maybe they
Speaker 3: do because of Microsoft. You know, stuff like VBA. But
Speaker 3: other than that, they probably don't know what basic is.
Speaker 3: And you know what, that's not such a bad thing.
Speaker 3: Basic almost spoiled me as a programmer.
Speaker 6: Oh well, you know you didn't write Cobaal then, because
Speaker 6: that would have spoiled you as a programmer. Spoiled me
Speaker 6: as a programmer for a day or two.
Speaker 3: Well, you know the story about Ellen Kay and Grace Hopper.
Speaker 6: Please please tell me the story.
Speaker 3: Well, I recall reading it somewhere that he was walking
Speaker 3: around the university. I guess it would be Stanford. I
Speaker 3: think I may be wrong. Maybe it was Berkeley. I
Speaker 3: don't recall where he taught, But anyway, he sees a
Speaker 3: group of people and he walks over and it's because
Speaker 3: Grace Hopper was there and they were like showing her around.
Speaker 3: And the story is that they introduced them and they said,
Speaker 3: this is Grace Hopper. She created Cobal, And he said, oh,
Speaker 3: I'm sorry.
Speaker 6: Yeah, I am not kind to Cobal in my book.
Speaker 6: I'm very kind to Grace Hopper because I think I
Speaker 6: think she was a remarkable person. But oh yeah, for sure, God,
Speaker 6: I hated Cobol. I spent about three months writing Cobal
Speaker 6: when I was nineteen years old. It was not a
Speaker 6: fun time for me. So I've walked away from that
Speaker 6: language and never looked back.
Speaker 3: Remember what happened when COVID hit?
Speaker 6: I thought you were going to go for y two K.
Speaker 6: So know what happened when COVID hit?
Speaker 3: I still remember. I think it was the governor of
Speaker 3: New Jersey or something saying that our systems can keep
Speaker 3: up and we were in dire need of cobalt programmers.
Speaker 6: Yeah, I've actually heard that, since there's a lot of
Speaker 6: people talking about these things are all rich and in cobalt.
Speaker 5: Okay, Well, it's like any other project that I've worked on.
Speaker 5: We don't actually update it until it's breaking.
Speaker 6: I think some of these are long past that point.
Speaker 2: Well look, yeah, but they can patch it over and yeah.
Speaker 3: Yeah, Well she also invented the term bug, as I recall.
Speaker 6: Yeah, well, I don't know if that she invented it,
Speaker 6: but in her notebook there is a desiccated moth that
Speaker 6: she pulled out of the relays in the Harvard Mark one,
Speaker 6: and in the notebook it says, this is the bug
Speaker 6: we found in the machine. So I believe the term
Speaker 6: actually came from telephony, maybe even fifty years before that,
Speaker 6: but she put it in a software notebook, so we
Speaker 6: can credit her with that. She was, however, responsible for
Speaker 6: creating the glossary of terms, one of the earliest glossary
Speaker 6: of terms in our industry. So she coined things like
Speaker 6: register and bit and breakpoint and a bunch of other
Speaker 6: words like that that we all know and love today.
Speaker 3: So again, how did you go about the research?
Speaker 6: I have got like a zillion books, and so it's
Speaker 6: all secondary research, you know, I didn't do any primary research.
Speaker 6: In some sense, you could look at we Programmers bring
Speaker 6: a book out We Programmers, you can look at that
Speaker 6: book as a literature review. Because I read really significant
Speaker 6: books about Babbage and about Grace Hopper and about all
Speaker 6: these guys, right, and then I tried to condense them
Speaker 6: down and pull out two things. I wanted to pull
Speaker 6: out the human side of the story, so that programmers
Speaker 6: who read this could I identify the character flaws that
Speaker 6: they see in themselves, and these people are replete with
Speaker 6: character flaws. And then I also wanted to pull out
Speaker 6: the deep technology. That's something that most of these books
Speaker 6: do not go into. So I had to do that
Speaker 6: research myself. So when they're talking about when they're talking
Speaker 6: about the Univak one, they don't really go into much detail.
Speaker 6: So I've got to pull all that information out and
Speaker 6: then describe, Okay, programmers, this is what a Univak one
Speaker 6: was like, this is how you programmed it. I actually
Speaker 6: put some Univac one code in there, and I talk
Speaker 6: about the kind of code that Grace Hopper had to
Speaker 6: write in the late forties and early fifties to get
Speaker 6: the Harvard Mark one to works. I wanted the programmers
Speaker 6: who read this book not only to identify with the
Speaker 6: human side of these guys, but also to identify with
Speaker 6: the deep technical problems that they were solving. So there's
Speaker 6: this really interesting juxtaposition. I think it's interesting anyway, interesting
Speaker 6: juxtaposition of these these frail human people dealing with really
Speaker 6: difficult technical problems.
Speaker 5: I'd like you to go into more depth on one
Speaker 5: of these. You know, you mentioned like maybe the Univac
Speaker 5: or something else where. You know, it's just something that
Speaker 5: we don't even fathom that they had to just figure out.
Speaker 6: Well, start with, start with the Harvard Mark one. This
Speaker 6: was a machine that was built by Harold. Harold Aken
Speaker 6: kind of conceived of it in the name he was
Speaker 6: a Navy guy, sort of popcorn. He talked to the
Speaker 6: Navy into building the thing. He actually talked to IBM
Speaker 6: into building the thing, and then didn't give them any
Speaker 6: credit for it, which was a real problem for him
Speaker 6: later on. But his idea was to create this calculator
Speaker 6: that could add some subtract, multiplan divide numbers that had
Speaker 6: twenty three digits. I think that was the numbers. These
Speaker 6: numbers had twenty three digits decimal. Nope, no, this wasn't binary.
Speaker 6: And the digits were all held in these counter registers,
Speaker 6: and the counter registers could be addressed and moved into
Speaker 6: arithmetic units that could add I think it could add
Speaker 6: three numbers per second if I remember correctly, and it
Speaker 6: could multiply, and it could multiply in something under ten seconds,
Speaker 6: so fast by the day, fast by the standards of
Speaker 6: the day, but impossibly slow from our point of view.
Speaker 6: This machine was programmed by punching holes in a twenty
Speaker 6: four channel paper tape, and the twenty four channels were
Speaker 6: broken up into eight zones, and the zones were the register.
Speaker 6: You want to take the data from the register, You're
Speaker 6: going to put the data in, and the operation you're
Speaker 6: going to perform on it. And those eight channels were
Speaker 6: all binary, sort of sort of binary. The programmers programmed
Speaker 6: this by identifying what holes should have to be punched
Speaker 6: in that paper tape, and they did that numerically, so
Speaker 6: they would write their code as four three, six, I
Speaker 6: think I got that right, and four men punched the
Speaker 6: fourth hole in zone one, punched the three hole in
Speaker 6: zone two, punched the sixth hole in zone three. That's
Speaker 6: how they would write their code, and if more than
Speaker 6: one hole had to be punched, they would write two
Speaker 6: numbers in that zone area and then they would come
Speaker 6: up with this program that was line by line by line,
Speaker 6: just these numbers, these three component numbers and graces. Looking
Speaker 6: at this, she was like the third programmer in there
Speaker 6: and was immediately turned into the lead. She took over
Speaker 6: the whole thing. Had never seen a computer before in
Speaker 6: her life, had no idea what these machines were. Aiken
Speaker 6: threw her into the task and said, okay, for your
Speaker 6: first job, you have to compute the arctangent coefficients to
Speaker 6: twenty three decimal places, the interpolation coefficients for doing arc
Speaker 6: tangents in twenty three decimal places, which took her a week,
Speaker 6: and she had to figure out how the machine worked
Speaker 6: and how to bunch the holes, and of course she couldn't.
Speaker 6: She didn't have dedicated time on the machine, so she
Speaker 6: had to steal the time when the other guys weren't
Speaker 6: as busy as they usually are, and she managed to
Speaker 6: get that all done. And she worked all this out,
Speaker 6: and she realized, and by the way, this is where
Speaker 6: the word code came from, because they were writing codes.
Speaker 6: It was these numbers, so they called it codes, the
Speaker 6: computer codes. And she was one of the first person
Speaker 6: people to say, well, each line, want to have a
Speaker 6: comment on it. So on the coding sheets that they
Speaker 6: had produced mimeograph machine and they would, you know, crank
Speaker 6: out and produce these coding sheets. She put in a
Speaker 6: column for comments. First person to ever do anything like that.
Speaker 6: They began to learn as they were writing the programs
Speaker 6: for this thing, and the kinds of programs they were
Speaker 6: writing were ballistic trajectories for artillery shells and the timings
Speaker 6: of tides in various places, very deep mathematical problems. And
Speaker 6: as they did one after the next after the next,
Speaker 6: they started realizing that they were writing some of the
Speaker 6: same codes over and over again. And so they would
Speaker 6: take these little snippets that would do something, some task,
Speaker 6: some small mathematical task, and they would write them into
Speaker 6: their notebooks. And they called these transcriptions in their notebooks subroutines.
Speaker 6: That was their name for them. And then they would
Speaker 6: share this back and forth. They would share their notebooks
Speaker 6: back and forth, and eventually created a library of subroutines,
Speaker 6: which were just these handwritten documents in a notebook style,
Speaker 6: and whenever they wanted to use one, they would go
Speaker 6: to the notebook, they'd look it up, and then they
Speaker 6: would transcribe manually those codes into their program. Of course,
Speaker 6: the register numbers had to change, because in one case
Speaker 6: you might be using register three, in another case you
Speaker 6: might be using register eight. And so when they wrote
Speaker 6: these in their book, they used the convention that all
Speaker 6: registers were zero or based on zero. So they invented
Speaker 6: relocatable programming just out of sheer raw need. Eventually, the
Speaker 6: programmers would write the numbers, but they would hire people
Speaker 6: to do the punching, and then the tape, the long tape,
Speaker 6: and these tapes got pretty long. The long tape would
Speaker 6: go back to the programmers and the programmers would verify
Speaker 6: the holes against the code that they had written. Man
Speaker 6: there was no jump instruction. There was no way to
Speaker 6: do a loop unless you put the ends of the
Speaker 6: tape together and then you could have a loop, and
Speaker 6: they actually did do that. I'm not sure that's where
Speaker 6: the word loop came from, but they did make loops
Speaker 6: of tape. But usually what happened was that there was
Speaker 6: a halt instruction. There was an instruction that would stop
Speaker 6: the machine, and then on the tape itself. The tape
Speaker 6: was fairly wide, twenty four channels right, so on the
Speaker 6: tape itself they would write instructions to the operator. If
Speaker 6: registered three is less than twenty eight, then go to
Speaker 6: and there would be a mark on the tape where
Speaker 6: they would back the tape up to and run it again.
Speaker 6: So all of the loops, all of the transfers of
Speaker 6: control were manual. They couldn't be done automatically, which meant
Speaker 6: that the operators were always on call, always watching the machine,
Speaker 6: always repositioning the tape to try and get any kind
Speaker 6: of iterative process done correctly. That's just a glimpse of
Speaker 6: the horrors of the earliest of programming jobs.
Speaker 3: One of my favorite characters that you also talk about,
Speaker 3: and I actually learned about him from reading the book
Speaker 3: about the Manhattan Project when I was a kid, is
Speaker 3: John von Neumann, who was an amazing intellect and persons
Speaker 3: give like you know, you watch a TV series like
Speaker 3: The Big Back Theory and everybody kind of amazed by
Speaker 3: the capabilities of the sheldn character. Well, think about somebody
Speaker 3: like that, only doubled, but also highly social. He was
Speaker 3: well known for his parties. So there's so, for example,
Speaker 3: there's this famous story about him. He basically had what
Speaker 3: a photograph you don't say, photographic memory? How do you
Speaker 3: call it these days?
Speaker 6: Photograph?
Speaker 3: You know, dadic Anyway, so a friend of a friend
Speaker 3: of his, you know, tells a story where, you know,
Speaker 3: he claimed to have this amazing memory. So to test
Speaker 3: him out, he asked them to recite the chapters of
Speaker 3: Between Two Cities, which he read like when he was
Speaker 3: a youth. And he basically started reciting it, and he
Speaker 3: asked him to stop after something like ten or fifteen minutes.
Speaker 6: I have seen that story reproduced a few times in
Speaker 6: slightly different contexts, but I think it's really clear that
Speaker 6: John von Newman may have been the smartest person ever
Speaker 6: to have been born and easily comparable to somebody like
Speaker 6: Einstein or James Clerk Maxwell or someone like that. He
Speaker 6: had this uncanny ability to switch disciplines and still be
Speaker 6: an expert. So he was deeply involved with quantum mechanics
Speaker 6: in the early days. He was deeply involved with the
Speaker 6: Manhattan Project. He was the only person on the Manhattan
Speaker 6: Project who was allowed to leave and come back, and
Speaker 6: leave and come back at will. He could go anywhere
Speaker 6: he needed to go because all the other parts of
Speaker 6: the military needed his advice. He was deeply involved with ballistics.
Speaker 6: He was deeply involved with the shock waves of explosions.
Speaker 6: He was he was running the computers at Manhattan on
Speaker 6: the Manhattan Project. He went out and looked at other
Speaker 6: ways of doing the computations, didn't find a good one,
Speaker 6: still stuck with the IBM punch card approach, but managed
Speaker 6: to get the initial h the initial models of the
Speaker 6: implosion of the of the plutonium corps to work. The
Speaker 6: guy was just a remarkable guy and and lucky as
Speaker 6: hell until the end of his life. Lucky as hell
Speaker 6: because he managed to leave Germany a year before it
Speaker 6: became impossible to leave Germany. He joined the Princeton Institute. Right,
Speaker 6: he was the guy who brought a lot of other
Speaker 6: guys over from Germany, saying, hey, you know it's nice
Speaker 6: over here in the US. You could come to Princeton. Oh, Einstein,
Speaker 6: come on over here. You know, people like that. So
Speaker 6: he was a massive recruiter. And like you said, it's
Speaker 6: it's unusual to find a guy who is supreme intellect,
Speaker 6: who has supreme intellect and yet really good social skills,
Speaker 6: and he did. He was a social animal, so very
Speaker 6: kind of like like fine, yes, a lot like Fineman.
Speaker 3: The funny thing about him you talked about how some
Speaker 3: of these characters were kind of flawed, was that while
Speaker 3: he was such a great, amazing person and made so
Speaker 3: many contributions, he was also wrecked with self doubt. And
Speaker 3: he was like he felt that he did not he
Speaker 3: that he hadn't achieved as much as his colleagues.
Speaker 6: What's the name of that syndrome. There's a it's that's
Speaker 6: got a name. I can't remember what the name of it.
Speaker 2: Imposter syndrome, kind of.
Speaker 6: The other way around. Right, It's like.
Speaker 3: He basically thought you done enough? Right, Yeah, he thought
Speaker 3: that he would, like you know, obviously everybody knew what
Speaker 3: I Einstein would be remembered for, and everybody and they
Speaker 3: knew what Hilbert would be remembered for. And he thought
Speaker 3: that he would not be remembered.
Speaker 6: Well he was remembered and fondly.
Speaker 3: Yeah.
Speaker 6: He was one of the inventors of Monte Carlo, the
Speaker 6: Monte Carlo method, and the story there is fascinating. They
Speaker 6: were trying to figure out, you know, how how to
Speaker 6: model the the diffusion of neutrons through a platon plutonium core.
Speaker 6: How do you model it? How do you calculate that?
Speaker 6: And his buddy, whose name escapes me at the moment,
Speaker 6: his buddy sat down and said, well, how would you
Speaker 6: determine the probability of winning at solitaire? Now you could
Speaker 6: do that mathematically, or you could play one hundred games
Speaker 6: and count the number of ones that you won. And
Speaker 6: that was the beginning of Monte Carlo analysis, which plays
Speaker 6: a huge role in the rest of the book. It
Speaker 6: drives the whole notion of Monte Carlo analysis, drives nuclear
Speaker 6: physics for a good long time, but it also drives
Speaker 6: the creation of object oriented programming. It was Christian Nygard's thing.
Speaker 6: He was a Monte Carlo analyst, and because of that
Speaker 6: he started thinking about simulation and how to do simulation well.
Speaker 6: And of course then you bring in computers and he
Speaker 6: wanted to create these the Monte Carlo compiler, and he
Speaker 6: recruited he recruited his buddy Ola Johan Dal and wrote
Speaker 6: this thing that they initially called the Monte Carlo Compiler
Speaker 6: and eventually became called Simula. And in the midst of
Speaker 6: all that they literally invented objectoried program.
Speaker 3: And in the context of JavaScript, because it's a JavaScript Java,
Speaker 3: I think Java JavaScript borrows from self and as I recalled,
Speaker 3: self borrows from Simula.
Speaker 6: Yeah, well, there's there's there's definitely something too that. The
Speaker 6: story that I have heard, and I don't know that
Speaker 6: this is absolutely correct, but the story I've heard about
Speaker 6: JavaScript is that it was it was brendan Ike's task
Speaker 6: to create a language that would run in the browser.
Speaker 6: This is back in the Netscape days, the Mozilla days,
Speaker 6: and he wanted to make it Lisp, but he didn't
Speaker 6: have time, and there was self there and he kind
Speaker 6: of borrowed from that and cobbled together this thing called JavaScript.
Speaker 6: That may be an urban legend. I think I've seen
Speaker 6: that once or twice in various threads on the web.
Speaker 6: I don't know if that's true at all, but I
Speaker 6: think it's funny.
Speaker 5: If you want to hear the full deal from the
Speaker 5: horse's mouth, we have an episode where.
Speaker 6: Oh with brendan Ike Oh beautiful.
Speaker 3: I also conversed with him about this online, even though
Speaker 3: I wasn't yet with the podcast when you recorded that
Speaker 3: episode with him. It's first of all, it's not exactly
Speaker 3: that he was toying with the concept, with the possibility
Speaker 3: of putting scheme in a browser, but it never really matured.
Speaker 3: And yes, he did create and implement JavaScript in ten days,
Speaker 3: which are fondly known in the community is the ten
Speaker 3: Days of Glory. But he said that JavaScript in a
Speaker 3: lot of ways is more influenced by ARC than it
Speaker 3: is by scheme. For those of you don't know, is
Speaker 3: kind of like Pearl. It's a language for text processing.
Speaker 6: Ah, somebody in Kernahan.
Speaker 3: Correct, who's the W I forget. It's one of those
Speaker 3: member Unix utilities that you you can pipe stuff in
Speaker 3: and pipe stuff out.
Speaker 6: Predecessor of Pearl, Yeah, exactly, predecessor of Ruby.
Speaker 2: This is cool actually.
Speaker 6: Away, By the way, the very first wiki ever put
Speaker 6: on on on the Internet was a couple one hundred
Speaker 6: lines of pearl written by Word Cunningham in the very
Speaker 6: late nineties, just you.
Speaker 3: Know, well CGI scripts. You know, people don't remember the
Speaker 3: origins of the web, but the initial web servers were
Speaker 3: mostly done in pearl because people didn't want to do
Speaker 3: all that text processing in.
Speaker 5: C Yeah, so I have another question. I'm going to
Speaker 5: change this topic a little bit because you know, we
Speaker 5: talked about how computers were initially kind of these calculating machines.
Speaker 5: And if you go watch like the Hidden Figures movie, right,
Speaker 5: they have these women that are called computers and right,
Speaker 5: and their job was to do the math right, and
Speaker 5: then they got this fancy computer that would do the
Speaker 5: math right, and so then they were programming the computer.
Speaker 5: But when when did computers kind of go from this
Speaker 5: math machine to this sort of general purpose machine that
Speaker 5: we kind of think of as a computer today.
Speaker 6: That's a really interesting question, and there's two ways to
Speaker 6: look at that. You could look at it from a
Speaker 6: from the practical point of view, When did computers start
Speaker 6: doing more than just math? When did they really start
Speaker 6: doing more than just math? And the guy who comes
Speaker 6: to mind there is Dykstra, because dystro is the guy
Speaker 6: who was playing with graph theory. He hey came up
Speaker 6: this clever way of computing the the best route to
Speaker 6: go from one city in Norway to another, something like that,
Speaker 6: and it was a demonstration. He wanted to show it,
Speaker 6: show this demonstration to his superiors, and he came up
Speaker 6: with this algorithm to do that. And that's a very
Speaker 6: different kind of problem than computing the implosion wave in
Speaker 6: a plutonium core, so that was a more practical one.
Speaker 6: So from that point of view, you could lay this
Speaker 6: at Dykster's door, and that would have been late fifties,
Speaker 6: maybe the early sixties, but probably the late probably the
Speaker 6: mid fifties actually. But it was Babbage, in his con
Speaker 6: his contemplations of his analytical engine, the thing that never
Speaker 6: got built, right, who started toying around with the idea
Speaker 6: that this machine that he had in his mind that
Speaker 6: had a thousand registers and a mill that could add, subtract, multiply,
Speaker 6: and divide, and an electro mechanical no excuse me, a
Speaker 6: mechanical bus that could move numbers from registers to the
Speaker 6: mill and back again, right, and was programmable by punched
Speaker 6: pieces of wood. You know, Jakrde loom style, right, these
Speaker 6: big chunks of wood with holes drilled, and was how
Speaker 6: you would punish them and give it or that's how
Speaker 6: you'd program them, punish them good word bout that's how
Speaker 6: you would programmed them. And in the midst of just
Speaker 6: thinking about this Machie Babbage starts realizing that you could
Speaker 6: write a program for this machine that could play chess.
Speaker 6: He started working that out. So in that sense, Babbage
Speaker 6: is the first guy to cross that boundary to get
Speaker 6: out of the mathematical world and into the symbolic abstract world.
Speaker 6: And he had a number of other ideas like that.
Speaker 6: He actually put together a machine that could play tic tactout.
Speaker 6: He actually built that one knots and crosses. Although you know,
Speaker 6: simple machine to build, still he was he was probably
Speaker 6: the guy that first had that concept.
Speaker 3: That's amazing. I didn't consider that. There are several people
Speaker 3: that you decided not to include in your book.
Speaker 6: Uh.
Speaker 3: Few that come to mind are Donald Kanouth or or Church.
Speaker 3: You know, if we're looking more recently, maybe somebody like
Speaker 3: Linus Travaldi's. So how did you decide to leave certain
Speaker 3: people out?
Speaker 6: Those are not conscious decisions. I did not have a
Speaker 6: list of people to leave out. What I did have
Speaker 6: was a hard cut off day. I wanted to. I
Speaker 6: wanted it to be a history book about other people
Speaker 6: right through the late sixties into the early seventies, and
Speaker 6: then from that point, that's where part two of the
Speaker 6: book begins. Then it starts to become autobiographical. From that
Speaker 6: point on, I can relate what was happening in the
Speaker 6: industry as an eyewitness, as a participant. So I shifted
Speaker 6: years entirely and just started talking about my experiences through
Speaker 6: the next thirty years, thirty or forty whatever it is,
Speaker 6: some number of years, and I described the industry from
Speaker 6: a from an insider's point of view at that point.
Speaker 6: So the hard cut off date was one of the
Speaker 6: reasons that you can't put that I didn't put Linus
Speaker 6: in there. For example, people have complained a lot that
Speaker 6: I should have put Margaret Hamilton in there, right, and
Speaker 6: I would have loved to. I actually bought a whole
Speaker 6: bunch of books on the Apollo program to read about that,
Speaker 6: but it turns out there's not a lot written deeply
Speaker 6: about the stories there, or if there is, I missed them.
Speaker 6: So you know, I went to look for that, but
Speaker 6: didn't find it. Limited amount of time. I thought, okay,
Speaker 6: I can probably skip that one. There's a number of
Speaker 6: other people that I should have written about if i'd
Speaker 6: had the space, Like John McCarthy, I would have loved
Speaker 6: to have told an in depth story of Lisp. That
Speaker 6: would have been a great story to tell. Just you know,
Speaker 6: ran out of time, ran out of materials.
Speaker 3: And the Mother of Old demos, I'm sorry, Engelbert and
Speaker 3: the Mother of All demos.
Speaker 6: That's a story I don't know.
Speaker 3: Check out the video for the Mother of All demos. Basically,
Speaker 3: it's you can find it on YouTube. Let me do
Speaker 3: a quick search.
Speaker 6: Demos sounds good.
Speaker 3: Yeah, it's still considered to be the greatest demo of
Speaker 3: all time.
Speaker 2: It's like, I see a couple of them here. When
Speaker 2: of them was like an hour and forty minutes.
Speaker 3: Yeah, it's pretty long. Basically, basically, while everybody was doing
Speaker 3: punch cards. So this this happened, let me do it.
Speaker 3: I'm looking at Wikipedia. It happened in sixty eight, so
Speaker 3: everybody was still doing punch card. This guy comes along
Speaker 3: and does well. Guy, he was a professor. He does
Speaker 3: a demo. I think it was Professor a ninety minute
Speaker 3: demo live demonstration showing stuff like Windows, a mouse, Dragon, drop,
Speaker 3: copy paste, hyperlinks sixty eight.
Speaker 6: Yeah, well okay, it's where Alan k got the idea. Huh.
Speaker 3: It's pretty nuts. And he does this in this kind
Speaker 3: of dead pan voice. Uh, and you know he's wearing
Speaker 3: a suit and tie, and it's he's he didn't do
Speaker 3: it for you know it. It wasn't like a CEO
Speaker 3: talking up there that this is like, you know, academics
Speaker 3: talking about stuff. So it's it's but it's I I
Speaker 3: highly recommend for our listeners or for you if you're
Speaker 3: not familiar with it, to go to YouTube and just
Speaker 3: you know, search for the Mother of All demos and
Speaker 3: watch the video.
Speaker 2: Yeah, it's pretty amazing.
Speaker 8: Great, So you said that the second half is kind
Speaker 8: of autobiographical.
Speaker 3: When did you enter the industry?
Speaker 6: Uh? I got my first job as a programmer at
Speaker 6: age It was either sixteen or seventeen, I can't remember exactly.
Speaker 6: And it was a summer job and it was very temporary.
Speaker 6: And my father had actually gone to this company who
Speaker 6: was just a few miles down the road, and had
Speaker 6: walked in there and said, you will hire my son.
Speaker 6: That was the kind of person my father was, and
Speaker 6: I found myself working at this place, and it was
Speaker 6: like two weeks, two or three weeks that I was there,
Speaker 6: and I wrote a little bit of assembly language under
Speaker 6: the watchful eye of my supervisor, got one little program working,
Speaker 6: and then he said, well, thank you very much, Bob,
Speaker 6: and now your time here is done.
Speaker 3: When was that they find my dad.
Speaker 6: That I was. I think I was sixteen, That would
Speaker 6: have been I was born in fifty two, so that
Speaker 6: would have been sixty eight ish something like that. I
Speaker 6: went back to that company like a year and a
Speaker 6: half later, and for a while I operated offline printers,
Speaker 6: printing junk mail on third shift, and then rapidly became
Speaker 6: a programmer. I think I spent about six months doing
Speaker 6: the offline printers, but knew some guys who were programmers
Speaker 6: and talked to them and convinced them that I probably
Speaker 6: could be could be writing code. And from that point
Speaker 6: I was writing a little bit of co ball, which
Speaker 6: I hated, and then from then on it was mini
Speaker 6: computer assembly language and a lot of it. So that
Speaker 6: was that's when I got my start. So I guess
Speaker 6: you'd have to say, really, my career began in the
Speaker 6: very very early nineteen seventy maybe late sixty nine.
Speaker 3: And did you also go to university or college.
Speaker 6: Or oh no, No, this was like the Vietnam War era,
Speaker 6: and the universities were all going nuts, and my family
Speaker 6: wasn't really very well off. And in the meantime I
Speaker 6: had devoured books on cobol, on PL one and four
Speaker 6: RAN and PDP eight assembly language. I was a real
Speaker 6: computer nerd still am.
Speaker 3: So you're the original self taught developer.
Speaker 6: Well, probably not one of them. I mean self taught.
Speaker 6: I think Grace Opera was self taught. But but one.
Speaker 3: Of the she did come from academia, I believe she did.
Speaker 6: Yeah, she was. She was a mathematics professor at I
Speaker 6: can't think, Vasser, I can't remember.
Speaker 3: Look, I have to say that. You know, today CS
Speaker 3: departments are departments on their own, But when I studied
Speaker 3: in the university, the CS department did not exist. It
Speaker 3: was part of the math department. Yeah, I mean came
Speaker 3: a couple of years later.
Speaker 2: Yeah, the department.
Speaker 6: If you wanted to be a programmer. In nineteen sixty nine,
Speaker 6: there weren't a lot of courses you could do ache
Speaker 6: and access to computers was very difficult, and that was
Speaker 6: one of the problems that Kemedy was trying to solve.
Speaker 6: Kemedy was at oh Geez, one of the colleges out there,
Speaker 6: I can't remember where it is on the East coast,
Speaker 6: and you know, access to computers was a really big problem.
Speaker 6: They eventually got time on one of the computers at
Speaker 6: M I T. And they would they would do it
Speaker 6: by schlepping punched cards several miles. One of the guys
Speaker 6: would get on a train and haul punch cards up
Speaker 6: there and run the jobs and then come back with
Speaker 6: the listings. And so if you were a student, you
Speaker 6: would submit a program and maybe a week later you
Speaker 6: got a listing. And Kemedy wanted to solve that problem,
Speaker 6: and he bought a little mini computer. It was a
Speaker 6: really dinky little thing, and maybe he had six students
Speaker 6: that really learned how to do it very well. And
Speaker 6: then it occurred to him that he needed a bigger machine,
Speaker 6: and he wrangled General Electric to give him, for a
Speaker 6: very very low price, a couple of big honk and
Speaker 6: ge machines. I actually worked on on a machine like
Speaker 6: that at about that time, at that at that same
Speaker 6: company General General Electric Data at thirty, really really big
Speaker 6: in those days, big machines, and he and his buddy
Speaker 6: and a few undergrads wrote in assembly language, a time
Speaker 6: sharing system and a basic compiler in about six months
Speaker 6: and turned the student body loose. They had a whole
Speaker 6: bunch of teletypes that they just scattered around the school Dartmouth.
Speaker 6: They scattered around Dartmouth, and the students could suddenly find
Speaker 6: themselves writing code and seeing it execute in the same
Speaker 6: session within minutes. And what did the students do? They
Speaker 6: wrote games?
Speaker 3: Well, And you did bring up the fact that that
Speaker 3: Ritchie and Thompson and Richie created the uniques and c
Speaker 3: because they wanted to play games.
Speaker 6: Space war.
Speaker 3: Yeah. By the way, one of the things that I'm
Speaker 3: really sad about is I remember, in the nineties or
Speaker 3: something get a copy of the I Triple E Spectrum
Speaker 3: magazine talking about the origins of the video game industry
Speaker 3: Atari and whatnot, and unfortunately I did not keep it.
Speaker 3: And some crazy stories there as well. I mean, the
Speaker 3: original Atari's had one k of RAM, which you know,
Speaker 3: think about that the next time you're writing your five megabyte,
Speaker 3: your thirty megabyte web application that does absolutely nothing. They
Speaker 3: wrote Space Invaders in one K.
Speaker 6: You got a bunch of guys out there on the
Speaker 6: net going okay, Boomer.
Speaker 3: I don't deny it.
Speaker 2: I remember playing games on the Atari. I mean I
Speaker 2: was like six.
Speaker 3: Well, I can tell you a funny story is that
Speaker 3: it was the device was limited to four colors, and
Speaker 3: one of the games they wanted to have eight colors.
Speaker 3: So they want to have four different colors at the
Speaker 3: top and four different colors at the bottom. So what
Speaker 3: they did is they actually synchronized the game loop with
Speaker 3: the television refresh, and they would switch the palette of
Speaker 3: the colors mid screen so that that way they could
Speaker 3: get four different colors at you know, the two halves
Speaker 3: of the upper part of the screen and the lower
Speaker 3: part of the screen.
Speaker 6: There was a lot of that kind of Shenanigan's going on.
Speaker 4: I love video game podcasts like and and the YouTube
Speaker 4: channels like Modern Vintage Gamer and Video Game Historian doesn't
Speaker 4: really do much anymore, but the stuff that's there is great.
Speaker 4: I love learning about all those tricks that I think
Speaker 4: Modern Vintage Gamer just did one on. I think it
Speaker 4: was the Nintendo that does that that that where they're
Speaker 4: doing that where they're swapping on the chip they're swapping
Speaker 4: what's being presented to the thing that's reading it in
Speaker 4: real time with a little microprocessor so that they can
Speaker 4: get two color ballads.
Speaker 3: Yeah, they can't afford the garbage collection in the middle
Speaker 3: of their loop.
Speaker 6: It's all written an assembly language, all right.
Speaker 2: Well, well.
Speaker 3: Yeah, just as an and that's interesting aside, we were talking,
Speaker 3: we mentioned lisp. Lisp in the I believe fifties or
Speaker 3: sixties I think, introduced the concept of garbage collection.
Speaker 6: Yeah, that's true. Yeah, Nigarden and dol needed garbage collection
Speaker 6: in their in their Monty Carlo compiler, and they tried
Speaker 6: to write their own and then eventually they bailed out
Speaker 6: and and borrowed McCarthy's the concept of McCarthy's garbage collector,
Speaker 6: and that's what they put into simula for a while.
Speaker 5: All Right, I'm gonna push his picks because I've got
Speaker 5: to go. I have I have a call in ten minutes.
Speaker 3: Okay, I could talk history forever, I know.
Speaker 6: Right, I know, it's the it's the uh.
Speaker 5: Glory ship pop back when clean Coders comes out, and
Speaker 5: we'll see when you get them on Ruby Rogues and
Speaker 5: go into more of this stuff.
Speaker 2: But yeah, let's do picks, and let's be.
Speaker 5: Fast because I want to be able to do them,
Speaker 5: so AJ you want to start us.
Speaker 4: The picks, Yeah, I'll just pick a short one. No, no,
Speaker 4: I can't do that, But the Expanse. I finished book two,
Speaker 4: and I just have to say, so far between book
Speaker 4: one and book two, the book is like, the book
Speaker 4: and the TV show are.
Speaker 2: Very very very similar.
Speaker 4: If I were to describe the plot of them, they're
Speaker 4: pretty much identical. But the book is so much better
Speaker 4: because in the TV show they cut out like critically
Speaker 4: important elements that are absolutely essential for you to understand
Speaker 4: why they transitioned from what seemed like two completely different
Speaker 4: TV shows with the same actors between season one and
Speaker 4: season two, where it's like, okay, these are not related
Speaker 4: other than it's the same people.
Speaker 6: There's like a.
Speaker 4: Few key pieces that if you know, it's like, oh okay,
Speaker 4: now I can have suspension of disbelief again. And then likewise,
Speaker 4: there's so much stuff that they added into the TV
Speaker 4: show that's completely irrelevant and just draws out like a
Speaker 4: couple extra episodes. Man, yeah, so if if the Expanse
Speaker 4: didn't hit for you on the TV show, but you
Speaker 4: like the first the first season and you want to
Speaker 4: know where it goes. I think I think the books
Speaker 4: are better, Chuck, You'll have to chime into, you know,
Speaker 4: if the is the ending satisfying after what is it
Speaker 4: six books or nine books or something.
Speaker 2: But they don't. They don't do all the books in
Speaker 2: the TV series, so.
Speaker 4: Yeah, I think they were they cut out pretty early.
Speaker 5: The books are very, very good, way better than the
Speaker 5: TV shows. I had the benefit of having read the
Speaker 5: books before I watched the TV show. There's a little
Speaker 5: bit of a gap because the sci fi folks dropped
Speaker 5: the show and then Amazon Prime picked it up and
Speaker 5: so there was like a year where they didn't record.
Speaker 2: But yeah, anyway, it's the TV show.
Speaker 5: Is terrific, but the books or and yes, they do
Speaker 5: stay pretty pretty close to the books.
Speaker 4: So yeah, yeah, so keep things short. That's that's all
Speaker 4: I'll pick today. It's just got finished for that book,
Speaker 4: and I liked it. And I do have to say,
Speaker 4: Avola Sara is worse in the book than in the
Speaker 4: TV show. Previously, I complain all she does in the
Speaker 4: TV show was come in, say the F word a
Speaker 4: couple of times and leave. Yeah, she's the same in
Speaker 4: the book, like.
Speaker 2: Better in there, there's the books.
Speaker 3: Go on.
Speaker 2: Okay, Dan, what are your picks?
Speaker 3: Yeah? So I called Dibbs actually on this pick when
Speaker 3: it came along, because it's so great and it's kind
Speaker 3: of related to some of the stuff were we talk
Speaker 3: about today. So it turns out that this guy called
Speaker 3: Dmitri Mitropoulos I hope I pronounced his name correctly implemented
Speaker 3: the game Doom in the typescript type system. Because, as
Speaker 3: we all know, the typescript type system is touring complete.
Speaker 3: It's effectively a dialect of Lisp, I think in a
Speaker 3: certain way, because you can implement loops with recursion and
Speaker 3: you also do case if statements, you know, along deseignes.
Speaker 3: So he basically managed to implement something like a compiler
Speaker 3: that's something that takes I think ll VM code and
Speaker 3: basically translates it into typescript types. It took him all
Speaker 3: of a year of working ten hour days to implement,
Speaker 3: and I think he has it running at something like
Speaker 3: a frame a week. But it works, and it's the
Speaker 3: most insane thing I've ever seen. He put a video up,
Speaker 3: he said he'll put two more one that he talks
Speaker 3: about you know, he'll go into the details of how
Speaker 3: he actually implemented it. And I'm really trying to to
Speaker 3: get him to come on the show. If you're listening,
Speaker 3: please do. I've reached out to him and I hope
Speaker 3: that I'll be successful. You know, he did something like
Speaker 3: there's something like a trillion types in the code, something
Speaker 3: like that. He had to remove all the limits out
Speaker 3: of the Typescript compiler source code.
Speaker 6: Wow, I wish I worthwhile.
Speaker 2: You know, you're going to change humanity.
Speaker 4: This was very different from the the floppy Bird implementation. Well,
Speaker 4: the floppy Bird was a was an interpreter and this
Speaker 4: is LVM.
Speaker 3: Yeah, something wrong if iind just correctly. Like I said,
Speaker 3: we really need to get him on the show. But
Speaker 3: you know, the funny thing though, it's we talked about
Speaker 3: is the fact that, yeah, the type system in certain
Speaker 3: programming languages, you know, Typescript also a C plus plus
Speaker 3: comes to mind. I think even Java to an extent
Speaker 3: is effectively a touring complete programming language in and off
Speaker 3: its own because you can implement recushion and with halting conditions.
Speaker 3: So yeah, it's pretty nuts. Anyway, you can't top that,
Speaker 3: and that would be my pick for today.
Speaker 2: I can't top that. I'm gonna throw out two picks
Speaker 2: really quick. I'm gonna do a card game.
Speaker 5: I've picked it before, I've picked it recently, but it's
Speaker 5: the one that I've been playing the most lately. It
Speaker 5: is The Gang and it's basically cooperative Texas holden poker.
Speaker 2: And so what you all get dealt your pocket cards?
Speaker 5: You do, you know, you flip the river and the
Speaker 5: flip and the flop right, and at each stage in
Speaker 5: the game, there are chips for each there's one for
Speaker 5: each player, you know, one up to however many there are.
Speaker 5: Whoever thinks they have the winning hand will grab the
Speaker 5: top one right. Sometimes you fight over the chips and
Speaker 5: then you know, you go around and eventually, once you
Speaker 5: settle on the chips, then you do the flop or
Speaker 5: the river and you you know, so you get three
Speaker 5: more cards and then right and so then.
Speaker 2: The the chips change hands.
Speaker 5: Because right now you have a pair or two pair
Speaker 5: or three of a kind or whatever. And anyway, it's
Speaker 5: it's super fun. So you know, it takes about twenty
Speaker 5: minutes to play a game. I played it with four
Speaker 5: and five people. It gets a little harder when there
Speaker 5: are more people, but it's totally fun. So I'm gonna
Speaker 5: pick that. And then the other one is I've been
Speaker 5: watching the latest season of Reacher. I watch a lot
Speaker 5: of these kind of action kind of shows. I really
Speaker 5: enjoy them. I have to say, the plots aren't always
Speaker 5: that creative, right, they have.
Speaker 3: A lot of the same they're not supposed to be.
Speaker 5: But you know, I can just you know, I can
Speaker 5: just sit and vedge and turn my brain off. So anyway,
Speaker 5: I'm enjoying that. There are like four episodes out, man,
Speaker 5: so reach here on Amazon Prime.
Speaker 2: Bob, what are your picks?
Speaker 6: In the spirit of ancient history, there are a couple
Speaker 6: of science fiction books that are worthy of a good,
Speaker 6: solid read, even though they're very old. The books that
Speaker 6: come to mind they're one hundred years old, are When
Speaker 6: Worlds Collide and the sequel After World's Collide. And don't
Speaker 6: get confused by Velikovsky's Worlds in Collision. That's not the
Speaker 6: books that I'm talking about. When World's Collide and Afterworld's
Speaker 6: Collide wonderful stories written in the I think the nineteen
Speaker 6: twenties about an astronomical collision with the planet Earth and
Speaker 6: the way the scientists of the age find a way
Speaker 6: to survive. But I won't go any further than that
Speaker 6: except to say that it's very colorful and lovely and
Speaker 6: wonderful science fiction. If you can tolerate the glaring scientific
Speaker 6: errors that would have been obvious in the nineteen.
Speaker 2: Twenties, awesome.
Speaker 5: Can can you do spoilers after one hundred years? I
Speaker 5: guess maybe you could anyway, Bob. If people want to
Speaker 5: find you on the Internet or connect with you, where
Speaker 5: do they Where do they find you?
Speaker 6: Clean cooder dot com. That's my website c L e
Speaker 6: A n C O d e R dot com. You
Speaker 6: can go there. Twitter handle is uncle Bob Martin beware
Speaker 6: and other than that, I don't know. Just around all right, good.
Speaker 2: Deal, Well, thanks for coming, Bob.
Speaker 6: This was fun, my pleasure always.
Speaker 3: This was awesome. Thank you so much.
Speaker 2: All Right, we're gonna wrap it up until next time, folks.
Speaker 6: That's out.