Future of Coding - Magic Ink by Bret Victor

Episode Date: December 8, 2022

Before the time-travelling talks, the programmable rooms, the ladders and rocket launchers, we had the first real Bret Victor essay: Magic Ink. It set the stage for Bret's later explorations, breaking... down the very idea of "software" into a few key pieces and interrogating them with his distinct focus, then clearly demoing a way we could all just do it better. All of Bret's works feel simultaneously like an anguished cry and a call to arms, and this essay is no exception. For the next episode, we're reading Programming as Theory Building by Peter Naur, with a little bit of Gilbert Ryle's The Concept of Mind thrown in for good measure. Links Four Hundred of the most Chart-Topping Thoughts of All Time: Inventing On Principal Stop Drawing Dead Fish Drawing Dynamic Visualizations Dynamicland Paper Programs by JP Posma was inspired by Dynamicland. "Computers aren't the thing. They're the thing that gets us to the thing." from Halt and Catch Fire Charticulator is Microsoft Research's take on a _Drawing Dynamic Visualizations_-esq tool. Jimmy's Fender Jazz bass looks like this, but red, but like a decade older, but like $600 at the time. We could probably post parts of this episode as Boyfriend Roleplay on YouTube. Fitts's Law is but one thing we've learned about the industrial design aspect of building good software. The Witness is a game where communicating ideas through (essentially) graphic design is the whole entire point of the game. If you haven't played it, know that it comes highly recommended by plenty of folks in the community. A "red letter Bible" is a Bible in which the words spoken by Jesus are colored red, to make them easier to identify. Toph Tucker has a pretty cool personal website. It's rare to see these sorts of sites nowadays, and they're always made by adventuresome programmers, trendy design agencies, or their clients. In the Flash era, it felt like everyone had a website like this, for better and for worse. tldraw is a beautiful little browser-based drawing tool by Steve Ruiz. What few things it does, it does exceptionally well. John while Henry had had had had had had had had had been my preference. #devlog-together is the channel on our Future of Coding slack community where members post small, frequent updates about what they're working on. The (Not Boring) apps are arguably a counterpoint to Bret's theses about information apps and harmful interaction, where the interaction and graphic design are balanced against being maximally-informative, toward being silly and superfluous, to great effect. Did you know there's a hobby horse, but also a hobby horse? I didn't! There are a few examples of folks doing FoC work that, in Ivan's view, align well with the values Bret outlines in Magic Ink: Szymon Kaliski's projects for Ink & Switch, summarized in his Strange Loop talk, Programmable Ink. Mock Mechanics is an environment for building mechanisms by Felipe Reigosa. PANE by Josh Horowitz inverts the usual node-wire programming pattern by putting data in the nodes and data transformation in the wires. Robot Odyssey was a 1984 game for the Apple II (and some other, lesser systems) in which players would go inside various robots to reprogram them. Music featured in this episode: Wash Machine, from the unfinished 2014 album Sneaky Dances Shaun's Amaj Rebirth, created in November 2022 for a friend named — you guessed it — Shaun. Hey! Send us questions we can answer on the show. Like, "How do you keep bread warm?" Or, "What's so great about concatenative languages?" We'll answer them. Send them here: Jimmy Ivan Or just DM one of us in the FoC Slack. futureofcoding.org/episodes/060Support us on Patreon: https://www.patreon.com/futureofcodingSee omnystudio.com/listener for privacy information.

Transcript
Discussion (0)
Starting point is 00:00:00 Yeah, this one's going to be all over the map. It's Brett Victor, right? And people kind of, while I don't necessarily think everyone sat down and read Magic Inc., I think almost everyone listening to this has some familiarity with Brett Victor. Whether it's just one of his talks, or all of his talks, or have heard the name, right? Or been influenced indirectly. Or have participated in the meta discussion around. Because for the handful of things that Brett's done,
Starting point is 00:00:27 there's sure been a lot of conversation about that work that I think people encounter, even if they haven't spent a lot of time with the source material. Yeah, exactly. I mean, Brett Victor's probably the best-known person in the broader ecosystem of future of coding kind of things yeah maybe alan k might be ahead right in terms of things that people know and point to though for a while there it kind of felt like everybody was discovering alan k via brett victor yeah that's a good point because brett's work went viral in the last decade in a way that Alan's work never did
Starting point is 00:01:07 because, you know, Alan was doing most of his work before virality was a thing. Yeah, and I think a lot of people would know Brett Victor's work by name, like by Brett Victor, whereas like Smalltalk, right? They might, people might know Smalltalk without knowing about Alan Kay. Or they might know the story of like Apple taking the GUI from Xerox PARC. Ah, yep. And not know that Alan Kay was at PARC working on that. Yeah, exactly.
Starting point is 00:01:35 Whereas like Brett Victor, there's not any one particular work that I think he's known for, except for maybe Inventing on Princi principle, where he is very front and center there, right? Like it's a talk. And I think that's the one kind of like Hickey's simple made easy. Exactly. That's the one that's the easiest entry point into the canon of Victor's works. Yeah, one of the things I know we said we're diving in and now we're kind of giving, you know, not actually an overview of Brett Victor. So for who, if someone doesn't know Brett Victor, Inventing on Principle was the talk that he gave that became very popular. But he's a designer.
Starting point is 00:02:13 This is not somebody who sees themselves as a software engineer, though he's clearly very capable of doing software engineering work. He's very intelligent. He's very well read. He has been focusing on a lot of things around programming, but doesn't see himself as a programmer, sees himself as a designer. He worked at Apple. He was homeless, jumping on trains, I think, traveling across the country for a little while, like nomadic. Yeah, it's a nomadic. And then started Dynamic Land. He's a very interesting person, kind of looking at these design elements,
Starting point is 00:02:49 not just for programmers, but for scientists, for creatives, for numbers of people, and really wants people to kind of, he wants to elevate design. And that's what this essay, Magic Ink, that we're going to be talking about, is kind of about as well, is design and software. A lot of the criticism that I've seen directed towards Brett's work, and for whatever reason, his work gets a lot of negative reaction, probably just because it's popular and it's throwing stones. And so, you know, that upsets people who have a certain fondness for the way things are currently done. The criticism that I've seen directed at his work, or at least one of the
Starting point is 00:03:29 big ones, is that he will present things like alternative ways of programming or alternative ways of working with dynamic media within the computer. You look at them and you think, wow, I wish I had that. That looks like an amazing tool. A great example of this is the talk Drawing Dynamic Visualizations, which presents a tool that is sort of like something you'd get from the Adobe Creative Suite or some Office package from Microsoft or Apple or whatever. It looks like a tool that would fit into one of those collections. And it's a kind of a hybrid of a drawing tool focused on simple vector graphics,
Starting point is 00:04:07 like rectangles and arrows and that sort of thing. But then also some cool programming-ish features so that those vector graphics can have their drawing characteristics be manipulated by data sources. And so it's a tool that you would use to generate like, here is a style of graph that represents some data. And when you bring in a different collection of data, the graph will update itself to represent the new data. And that's cool. That's
Starting point is 00:04:40 something you can do with spreadsheets right now. but what's special about it is that the way that the graph is constructed is not you know i picked from the template set of choices like line graph bar chart pie chart whatever instead you've built a little graphical system with these relationships and these rules and so the way that the graph will look or the or the the visualization of the data will look is very bespoke. And you can approach it in a very artistic way and kind of construct this visualization that really nicely suits the kind of data that you want to present and presents it with a very distinct style. And the criticism is, you know, hey, I wish I had that tool. I wish that was something that actually existed. and from the
Starting point is 00:05:25 demo it looks like he actually built the tool and was using it and people say well why can't i have that why doesn't he just release it why isn't that something that's been made public that everybody can benefit from and i've seen that criticism again and again i've seen that criticism directed at dynamic land and at stop drawing dead fish and at all the different really high quality looking demos of things that he's built or these prototypes the thing i think that gets missed and he's tried to make this point multiple times throughout his works throughout his presentations is that what he's doing is not trying to invent the new way that we should be doing things, but instead tell everybody that new ways to do things need to be invented. And what he's trying to give us is the set of
Starting point is 00:06:13 modes of thinking and the frame of reference and the feeling of compulsion that will drive everyone to be advancing the way that we work, thinking about new ways of creating and new ways of communicating and doing all of that to really leverage what the computer gives you. And so he's not trying to be the one who comes up with the new thing. He's trying to be the one to kind of wake everybody up from their slumber of complacency with the status quo and say hey everyone you need to be inventing these new things i'm not going to do it for you i'm here as somebody who's aware of how limited things are currently and how much better they could be but i you know brett on his own he's he's just one person and so he's not going to come up with all of the
Starting point is 00:07:04 ways that working with a computer could be better, or working with other people via a computer could be better. Yeah, I do find that response so unsatisfying. Not because I think it's false, but because there's just such an easier response. None of the software he made was production-ready in any way, shape, or form. It was a demo. He's so good at crafting demos, it looks like he has a real application that's really there, but he doesn't.
Starting point is 00:07:33 I guarantee if you do anything outside of the buttons he clicked in the demo, it just doesn't work. I just think it's so much easier to be like, yeah, the thing I made isn't really functional. Someone else should go make it rather than I like, I actually think that that response, while true, has actually stopped people from going and just making what he presented. Because they feel like it'll be cheap if they do that, because he wasn't trying to offer a solution. He was trying to offer an idea.
Starting point is 00:08:03 And if I just go replicate the solution then i'm not really taking his point and so that's why i don't think we have that software today and i would love that software today right and i actually think that would be a really fun um while i'm not a fan of hackathons maybe a jam like uh everyone go recreate your uh your favorite brett victor tool that he's presented. Jam, right? I actually think that would be kind of fun to have little prototype-y versions of those things that you could start playing with. It's worse than that, though.
Starting point is 00:08:36 It's worse than, you know, if he did release these demos, they'd be unsatisfying. A, there are some people out there who have taken especially dynamic land and have created their own like yeah paper programs that project is an attempt at recreating dynamic land without actually knowing the true implementation and without knowing the goals behind it let's just recreate the surface syntax of it so to speak and it's it's interesting and i'm sure it was a lot of fun but i i feel like yeah it's missing the point a little bit but the more insidious thing here is you're saying you know if he if he just released these programs people would find them unsatisfying i worry that it's actually the opposite that if he did release those programs people would say oh
Starting point is 00:09:21 thanks for open sourcing this i'm gonna put in a couple of pull requests or make a fork and shore it up a little bit and then good enough and that we are so used to living with poorly designed poorly conceptualized poorly implemented software that brett victor's you know he's not releasing this stuff because his i imagine that his standards are high and i would say appropriately high because i think the standards that most other people have most other working programmers at least people who are used to software being you know oh it's computers it's software it's like if it doesn't work perfectly all the time if it's not very elegant if it's not very nice to use whatever we just put up with it like right we're still using 80 character wide terminals right so we put up with a lot of really terrible so if he released this stuff people would go wow that's
Starting point is 00:10:11 that's so much better than than what we have today and jump all over it rather than going no these prototypes aren't good enough yes they're better than what we have conceptually and perhaps even in terms of some implementation stuff because brett is actually a pretty good programmer i've read his code his code is good but it's not good enough it's not what we deserve as a species as a thinking working cultural humanity writ large we deserve way more out of this magic that we've captured inside the box the dynamic medium we deserve so much more than than what these prototypes are and i don't think people would realize that if he just released these prototypes they'd think oh wow that's the thing no that's not the thing that's the thing that gets us to the thing but has that strategy worked
Starting point is 00:10:54 do we now after you know so magic ink is is 2006 yeah right have we now really learned those lessons do we now have a better plotting tool than what he showed in dynamic drawings? Like, we don't. I'd say yes. Okay. So this is going to be fun. I would take the position that
Starting point is 00:11:16 the people who were going to be satisfied by just emulating Brett's prototypes and his sort of early explorations have actually like disseminated those ideas widely and those ideas have been implemented and they've taken root and I find rereading Magic Inc and and looking at his other works that a lot of the things that he was holding up as examples of what we could be doing better are now better. And what we don't have is the true full realization of the vision, but that stuff was always sort of nebulous and you had to really hunt to arrive at that level of realization. And so of course we don't have that,
Starting point is 00:11:57 but all the concrete things that he used as examples of things that, well, still not good enough could be better. I think we have, and I think we'll see that as we get into the essay. Do you think that's just true for Magic Ink? Are you saying like dynamic drawings? Like if there is a tool out there that does stuff better than what's in that demo of dynamic drawings, I want it. There's one that's called Charticulator, which is for working with Power BI.
Starting point is 00:12:21 And it does a lot of what Brett showed in that prototype. So what you're saying is we got a better world because it's all in Power BI. And it does a lot of what Brett showed in that prototype. So what you're saying is we got a better world because it's all in Power BI. Yeah, right. Instead of open source from Brett Victor. No, what we have is the people who look at Brett's work and are like, oh, I'm doing something kind of adjacent to that space. And there's some really good ideas in this prototype that he showed i'm gonna you know put those ideas into my product that i'm working on that happened what didn't happen was the like people then saying okay now that we've stolen those direct examples how do we keep going from here how do we follow that vector not just the one step, but repeatedly. What kind of bass do you have?
Starting point is 00:13:29 I have a not American Fender Jazz. Ah, cool. Because I got it before I had money. Yep. It's a nicer one. I can't remember now all the details. But I got that from my first ever being paid to program job I got $600 to write PHP for a big ol insurance form mmm I
Starting point is 00:13:56 did not write PHP I wrote a Python script that wrote the PHP for me and I got paid a flat fee of $600 for the job. It took me an hour. It was great. So best, like I got $600 an hour. Like that was definitely the best pay rate I've ever had. Really? And got that base.
Starting point is 00:14:15 Yeah. Yeah. You should go into music. You perform at a festival or something like that for half an hour and you get like five grand. Oh, nice. And then you sign a contract that says I won't perform at any other festivals within a 200 mile radius for the next six months and then are you serious wow yeah
Starting point is 00:14:30 yep uh anyways yeah we were talking about uh whether or not we've actually achieved any of the things that brett victor has trying to push people towards achieving. And I think as we get into this essay, we will see that some of the things that he was pining for came true pretty much immediately after this essay came out and other things, the broader, the more abstract, the deeper kind of philosophical stuff. I think arguably there's a little bit more design thinking happening these days than there was back then, but it's not always a little bit more design thinking happening these days than there
Starting point is 00:15:05 was back then, but it's not always the good kind of design thinking. Yeah. See, I think this is just going to go back to our disagreement on the JCR Licklider episode where I don't think the things that he wanted have been accomplished and you do. So that's great. I'm all for it. Because I still look at, and I think, you know, I again am going to claim that I'm not being pessimistic. I'm being optimistic. I think that there's still yet more that we need to unlock here. Yeah, you have hope. Yeah, I do.
Starting point is 00:15:36 And I think that, but I also just think like what he, so Magic Inc., you know, I'll maybe give like a little bit of a summary as I see it for what he's offering, just because I think it'll make clear what I think we need to get to. And his point is that a lot of software design has failed to be even as good as print design. That software design really has focused so much on interaction. We kind of treat the computer as this machine that we need to manipulate
Starting point is 00:16:06 and less about displaying information for people to make decisions, to come to conclusions, to learn something. And that by focusing so much on interaction design, by focusing so much on the computer as a mechanical thing, we've really made bad software. And so he wants to say part of the problem here is that the people who design can't make these context sensitive magic ink, right? It's like print design, but now it knows something about your context. And so designers really aren't able to make these rich information things
Starting point is 00:16:49 that are dynamic but not interactive. And so you could really kind of call this interaction considered harmful. And the idea is that our software should only be interactive when it has to be. And really, our software should be context-aware, good, print-like displays of information. For the kinds of applications, and I mean lowercase a applications, where communicating information to the user is the primary purpose. And that's one of the things pretty early on in the paper, he kind of splits, you know, he asks the question, what is software and then answers it by splitting it into several different categories. And one of them, the one that's of most interest at the moment, is called information software. And it's software where the purpose the the software is to facilitate learning by the person using it that the person using it needs to absorb some new information or contextualize some information or or do something where what they really need is they need to learn and so the
Starting point is 00:17:59 software should help them do that learning and that's different from manipulation software, which is software that is for designing something or building something or having some model that you are working on and transforming and changing. And then the third category is communication software, where the software is facilitating communication between two people. The purpose of the software is just to allow people to communicate in a new way or in an old way, but different and better. And that one's kind of self-explanatory. And so the main interest here is information software, software that's, you know, there's tons of examples, but like a, like a phone book directory where you want to look up some information about a person or about a business or a shopping website where you're trying to pick what book do I want to order and how which of these editions or which of these
Starting point is 00:18:50 different books on similar topics should I choose or a website that's showing the weather or a website that's showing and I keep saying website but I application in the broader sense application that's showing you know movie showimes for my local theaters or applications that help me plan a trip. Like all these applications that are about learning something so that you can make a decision based on it. Yeah. And I will make a claim that is not made in the paper that with the exception of communication software, because, you know, obviously we're communicating. I think most software is actually information software. He does make that claim in the paper.
Starting point is 00:19:28 Okay, he does. Cool. Oh yeah, super does. Yeah, I wasn't sure. Maybe I missed it. But I think, for example, even programming interfaces, things where we are ostensibly supposed to be creating that seems like it would be something else, I think even that is actually more information software than we give it credit for being.
Starting point is 00:19:50 Oh, for sure. Yeah, totally agree. Most of the time that we are spent is not in the creation process, but in the question process. We're trying to discover and learn, and our interfaces are not designed at all for that i mean think about trying to navigate code and most text editors uh to like learn how a piece of complicated software works yeah it's it's a painful mess it is so hard to keep in your head the call stack that you're like walking down with the c macros from the c ruby code base being all wonky and weird and you not understanding C syntax at all. So you're like, what in the world is this? And then like, all of a
Starting point is 00:20:31 sudden, there's just like magical macros that are defined by themselves, because somehow a pre processor outside the macro processor, you know, insert something. I mean, this is not specific to me at all. I'm sure it's specific, Jimmy. I did definitely did not do this just uh this last week and be really confused by what in the world c does um so yeah no not not just me i know um thank you ivan for sharing uh in my c pains yeah no absolutely i and and so yeah i maybe he does make this claim i didn't want to put words in his mouth but yeah i think like most of our creation software could actually benefit a lot from having better displays of information rather than just focusing on you know when we're pressing the keys on the keyboard yeah and he he does talk about manipulation software the second category
Starting point is 00:21:25 as being information software plus some extra interactivity where the interactivity is is a good thing or it's at least it's it has a purpose whereas in information software you don't want interactivity or at least that's what he asserts in manipulation software you do need some interactivity but you mostly still need all the good design that information software that good information software should have you know when you're doing a manipulation half of it is or more than half is learning about something and then a little bit of it is making these small tweaks to the thing that you were learning about to the thing you're working on the model that exists in the software and a claim that he doesn't make in the paper at least i didn't see it and cue jimmy jumping in and saying actually he did make that claim um is that i think communication
Starting point is 00:22:14 software is actually mostly information software and manipulation software and it's kind of like an even more sophisticated version of manipulation software and to explain why it is that way i think we have to do a little bit more summarization first so i'm going to put a bookmark in this and say at some point we should come back and talk about how communication software is actually more sophisticated manipulation software and how it bypasses some of the issues that interactivity causes in information software because there's some stuff there yeah this is a long paper yeah and it's it kind of mostly published as a website it has this kind of nice setup where it's side notes instead of like footnotes which i i personally really enjoy like margin notes but i will say the pdf for it did not work for me every page would be cut off like the bottom like three or four lines was cut off
Starting point is 00:23:13 when i tried to render the pdf so i had to like print the html as pdf and in doing so i don't have page numbers yeah so i'm gonna call an audible and say this is table talk i'll probably cut it from the episode oh yeah i think it's good but you can cut it if you want all right well fine it's staying in now hello listener this is important we're having a conversation here other people are going to want to have similar conversations yeah all right listener i'm going to give you 10 seconds of silence you say whatever whatever you want, and then I'll respond to it. Well, that doesn't make any. I'll grant you that. Okay, slow down a minute.
Starting point is 00:24:14 This is a lot for me to take in. Well, no, I have thought about it yeah but don't you think everybody would be mad if we did that no it was a it was a death stranding reference you You might not have played it. Are we doing like boyfriend roleplay on YouTubes? I don't know if you know these, this weird genre of YouTube. No, I don't. Yeah. So I only know this from a commentary YouTuber talking about it. But yeah, there's like videos where people will pretend that they are your boyfriend and they're like jealous and they'll have a conversation with you and you are supposed to like like blues clues style you know be talking back to them whoa so make a call back to a previous episode there did we release that episode i don't know if that one yeah yeah that was uh the dynamic
Starting point is 00:25:22 media oh okay where i mentioned blues clues yeah i don't think i've mentioned blues clues before Yeah, yeah, that was the dynamic media. Oh, okay. Where I mentioned Blue's Clues. Yeah. I don't think I've mentioned Blue's Clues before that. I'm not that big of a Blue's Clues fan, at least not publicly. So the thing about page numbers I was going to say is this essay does the nice thing where each paragraph has a permalink, and so you can permalink to any given paragraph. So it's kind of embracing the medium a little bit. No, I did not read it with page numbers.
Starting point is 00:25:52 I read it just as a webpage. Okay. And if we need to look for a particular quote or something like that, talking to you, Jimmy, not the audience, we can take 30 seconds and do a find on page and scan around and that kind of stuff. And I can judiciously, surgically excise that from the edit and then maybe insert an ad read for totally real services that are good. Do we want to start walking through the argument as presented? How do you want to tackle this one? So here's what I'm going to do. I'm going to scroll down to the very bottom where there's a section called summary.
Starting point is 00:26:26 Okay. Clever. That sentence by sentence. Cheating, but okay. Yeah. So let's see what we've got. We've got software design consists of graphic design, drawing pictures, and industrial design, allowing for mechanical manipulation. So that's the first sentence of the summary.
Starting point is 00:26:54 Good job! What's the second sentence? Yeah, okay, so I mean, we could start there, right? If we really want to. Yeah, probably should. Okay, cool. So I do think this is actually a very interesting point, because I think as somebody who's a software engineer who's done a lot of front-end work but is not a designer at all, I think
Starting point is 00:27:19 this is actually something I don't ever separate these two dimensions. I think he talks in here about how we really have these mechanical metaphors in our software. We have these levers that we're pulling, these buttons that we're pushing. Dropdowns are these drawers that we're opening up, whatever. And so I never really think about the software I'm building as graphical and then interaction. It's kind of just all in one.
Starting point is 00:27:50 And one of the points he makes about this is that when we don't separate these two, what we get is software that over time, more and more things get shoved into tiny little menus. More and more things get put in small little places because we need to keep adding more and more things get shoved into tiny little menus. More and more things get put in small little places because we need to keep adding more and more functionality, and the pages just get to be this cluttered mess where there's no visual hierarchy, there's no information hierarchy, and we just keep wanting to have more and more features
Starting point is 00:28:19 but no place to put them. And I think that this is exactly the kinds of things I see in the software that i work i've worked on and especially in a you know business setting right where we're we're asked for more and more features and so i actually think just this separation of the two is very interesting because if you start thinking about the software and remove all the interactions, you start designing very differently. Like, I really think, you know,
Starting point is 00:28:52 I've done this kind of exercise after reading Magic Inc. the first time about, like, what would it look like if I couldn't interact with this software? How would I start designing it? And I think that's actually a very interesting frame that I think is very important for the start of this and for the examples that we're going to kind of see as he walks through them. The context in which this paper was written is important. And I want to explore that for a second. This came out in 2006 as we mentioned and i want to do a little bit of a sort of a guided tour back to what was software actually like in 2006 because my memory of that
Starting point is 00:29:33 time is colored by you know all of the life i've had since then i was in my 20s when this came out and so i was you know old enough to have been working in computers for quite a long time in a in a you know a professional-ish capacity and doing a lot of serious work with them this is one year before the iphone came out and i think that's a really important milestone that's going to come up a couple of times and it's when the internet was just getting to the point that people could do a lot of really major things on it that we have come to if Google Maps is around them, but there were a couple of other competing map services at the time. Right. And this is, you know, Gmail came out just a couple of years earlier. This is the beginning of web apps as a real thing, like the JavaScript S spa or not even the spa but like the the ajax style like you can have a web page and change some interface elements and without reloading
Starting point is 00:30:52 the page the web page updates itself like that's a brand new thing and so the the kind of software that is being used by a lot of people is moving from native on-computer software to software that lives in the web and the interfaces that that web-based software has are basically built out of the handful of primitive input elements that are available in web browsers at the time and this is not to say that native software is that much better. But the I think the most powerful examples of the ills that this paper is trying to push us away from are happening in the world of web based software. And so this is things like and there's some great, great examples in the paper, but you know, you're not going to read it. So I'm going to describe them to you,
Starting point is 00:31:41 or you're not going to read them, you know, pause the episode and go read it right now so i'll describe it to you there's things like if you want to look for flights from one city to another city you have one drop down menu where you select the city you're departing from and another drop down menu where you select the city you're going to you know your destination and then you have a drop down for the date that you want to depart and that is three separate drop downs one for year one for a month one for day and those drop downs start at like you know 1990 or whatever you gotta scroll all the way down to uh you know whatever the current year is or that kind of thing right like they're they're not contextually sensitive at all and so you you pick your month all right february and then it's like, okay, what day?
Starting point is 00:32:27 Well, it's a dropdown with 31 choices in it because it's not going to be smart enough to go, oh, you picked February. So only show 28 or 29 days in the day dropdown. All you are seeing for the most part, when you're doing an action where you have to put in some input, all you are seeing is these off-the-shelf input elements. You're seeing pull-downs, you're seeing number fields or text fields, you're seeing a submit button.
Starting point is 00:32:53 You're not seeing what we would soon have, you know, maybe four years later or so, like around 2010. You're not seeing things like when you need to pick a date, you click on a little thing and up pops a calendar widget where you can actually click on a day on the calendar. Or what we have now, where it's a calendar widget where you can click on a day and drag to select a range of days. Or something where you can click on a day and then pick, you know, I want plus or minus three days.
Starting point is 00:33:23 So show me all the airplanes flying out of this airport on this day, plus or minus three days, and it colors in the plus or minus three days a little differently. So you can kind of see that right in the calendar. We don't have these rich widgetized inputs on the web, and a lot of native apps didn't have them either, but the web was the worst. And that goes for every kind of data source. Like if you wanted to pick a location, you wouldn't be picking from a map. You'd be picking from a, you know, a text entry field, maybe, and you'd click search and it would load a new page with search results and you'd pick the
Starting point is 00:33:56 one that you meant, or it would have a fixed list of location choices and you'd pick the one that's the closest to you or something like that. If were going to be working with with calendars or working with emails or working with any of these different kinds of data sources they were only aware of their own internal kind of data emails only knew about text and now you know nowadays if you get an email that has an event invite or something there's like an embedded calendar widget and a thing that integrates with you know if you're using gmail and google calendar or whatever a thing that integrates the two of them so you can rsvp for the meeting right in the email and it will put an entry in your calendar at the right
Starting point is 00:34:39 time and you can see you know a little preview of what other events are in your calendar at around the time that this meeting is scheduled so you know if you're busy or if you're going to have enough time to do this meeting. There was none of that. Yeah, so I think you picked the one example that we actually have something new for and all the rest of them look exactly like what he shows in this essay. So, hold on.
Starting point is 00:35:04 So, you gave the flight example which i do think flights flights have gotten better interfaces uh they still don't do what he wants and i don't know if what he wants is good where you just show a map and you tell people to click on it um you know we type in the city names which is probably better uh but like movies i haven't gone to look up a movie. I don't really go to the movies. Yeah, no, me neither. I just did. And apparently Fandango is the answer.
Starting point is 00:35:32 That was the first Google result. And it looks almost exactly like what I see on this page here. And our listener, I'm sure, can assume what it's going to be. It looks modern and more updated. Like there's orange buttons instead of black text and the text isn't all blue and you know the there's more white space for the tables and they're you know whatever right like more modern aesthetic but it's a list of theaters and then for that theater it actually shows me the address of the theater and then it shows me each movie and the times that they're playing and there's nothing that he kind of talks about how this is a very bad graphic for what people actually want to do when
Starting point is 00:36:14 they're picking a movie I would bet I can go to a local flower shop that's another example that he has and I'd get like some drop downs of the kinds of flowers that I might want and not beautiful pictures um and colors that are pictures of flowers of different colors and things like that like i i really think like for the most part his point is that oh in amazon i'll use that's one of the other examples he has here which looks identical um in fact might actually have less useful information yeah uh today than it did when he took a picture of it but his point is like these interfaces at a glance
Starting point is 00:36:52 offer us none of the things that we the question answers to the questions we're asking and instead we have to scroll we have to look around we have to interact with the website in order to figure out the sorts of information we really want to know. And he offers up alternatives to these that don't require us to interact, and yet we can answer all sorts of interesting questions from them. So for his Amazon example, I think this one's really interesting here because I want oftentimes to find good book recommendations and decide whether I want to read a book or not. And it takes me a very long time because with Amazon, I have to go and click on the book and scroll and look at reviews and look at all this information.
Starting point is 00:37:37 Instead here, he has this very nice view of a book, who it's by, how many pages it is, a little blurb, a few little review snippets. And then one of my favorite things is he has the star rating, but he also has these little tick marks under the stars so you can know the distribution of the stars. So maybe it's three stars, but it's actually a bunch of fives and a bunch of ones, not a bunch of threes. And these little tick marks underneath the stars kind of show you. They'll be like three or four.
Starting point is 00:38:15 If it's like most people rate it at five, or a good distribution is five, a good distribution is one. There would be like five tick marks on both. And then we have, so this is like one column for these books. So we got Waiting for Good Dough, The Bun Also Rises, Yeast of Eden, right? And they're like by great, you know, like... Yeah, Samuel Biscuit. Yeah. Ernest Hemingwaffle, John Sconebeck. Yeah.
Starting point is 00:38:37 It's great. And then we have on the right, like some contents, like the table of contents is what it kind of looks like. And then related books that have like a similar little setup for stars and everything and so from this like graphic you get so much information there's a price in there new and used there's so much to go on here that you you can just look and sit at this graphic and that's what's so great is like even with these jokes i'm able to like pull out the little like lord of the pies 100 years of solid food like decline and fall of the ramen empire it's so good and like you couldn't even make these jokes with the original amazon
Starting point is 00:39:23 graphic like it kind of the jokes almost kind of reinforced the point that there's so much more information here so much density of jokes just right on the the page and i guess you know i i agree with you that like we've gotten i actually kind of found your point a little weird because like yes we've gotten more context sensitive inputs i guess would be the way of of putting it um but we really haven't gotten better graphical display of this information which seems to be kind of his like primary initial point here is think about what a good print graphic gives you you look at it you can answer questions about you can answer questions for, you can answer questions
Starting point is 00:40:05 for yourself without poking at the paper, right? Because obviously if you do that, nothing's going to happen. And yet our software systems don't give us that same capability. We have to poke, we have to scroll, we have to click, we have to do all of these things just to find the answers to our questions. Yeah. Like that print test. How good is your software if your way of viewing it is and working with it is via printer if you can print from your software and it still performs its function very well then that is a software that has good graphic design in it. But if your software requires that you click through lots of different things in order to get at the information you're looking for, then you wouldn't
Starting point is 00:40:53 be able to use it with a printer without just printing tons and tons of pages and going back and forth between the printed pages and the actual software on your computer. Because one of the things he gets into, and this is going to be a familiar idea so i'm comfortable jumping ahead to this is this idea of wanting a really tight feedback loop and it's funny that the printer test is like let's artificially lengthen the feedback loop of using the software to demonstrate that interactivity like you know good interactivity will have a tight feedback loop but it can't it will never be as tight as the feedback loop between like photons hitting your eyes and what your brain is able to do with those photons and so if your graphic design if the way that you've laid out your
Starting point is 00:41:38 information visually is giving you all the things that you need to think about and giving them in a really well-structured way, then you're going to do so much better than if it gives you just a little tiny information sent and then you need to click something and then click something else and then click something else to get the information you're looking for about one choice and then go back, back, back, and then click, click, click to get the next choice and then go back and to, back, and then click, click, click to get the next choice, and then go back and to build up this, you know, the set of things that you want to be thinking through and comparing. I have a if you're up for it, I have another great example of like, how software today compares with software in this essay. Yeah. So because you you, you correctly pointed out that the the calendar one is like the one big instance where what we have today is exactly what brett was describing as you know here's the right way to do it just for fun i
Starting point is 00:42:31 wanted to see how does google do at getting movie showtimes because in the past you know i used to use fandango and whatever and then google started adding a nice way of getting movie showtimes where you could just type in your your zip code or your postal code and the word showtimes. And it would give you a nice little smart result with like, here's the different movies that are showing and here's where they're showing. Here's the times like right at the top of the search results page. And so I did that. You know, I put in my postal code and then showtimes and Google came back with here's a list of theaters in your area it has places now it doesn't actually do what it used to do or it would show movie show
Starting point is 00:43:09 times it has a little map widget that shows on the map all the different theaters and it's like okay that's uh better than just search results because it's closer to being relevant to what I'm interested in but it's not what I wanted so I click on one of those theaters in the listing and it takes me to another map view. So on the rightmost side, there's like a map showing my city with pins for each of the theaters. And then floating above the map is a little panel that has here's all the movies showing at that theater I clicked, and what times they're showing. And in the left, there's the list of theaters like a list of all the theaters and so if i click on one on the map or if i click on one in that list on the left then it shows me
Starting point is 00:43:52 a different panel of you know the show times for that theater or whatever so it's like okay it's it's letting me click on each of these theaters to see the movies that are showing at that theater, but it's not doing the thing that Brett was advocating for, which is, what if I care about what movie I want to see and not where I want to see it? So just for funsies, I picked a movie that's in theaters right now called Black Adam. I've never heard of this movie.
Starting point is 00:44:19 I have no idea what it is. You mean you didn't pick Harry Plummer and the Goombas of Doom? No. The Harry Potter Mario mashup that we're definitely getting next year no i did not pick rain man forever or uh what was the other one oh yeah the little schemer an elephant journeys to find lambda the ultimate starring car cutter cons and cons. Yeah. I will say, I just have to make this small note.
Starting point is 00:44:50 Yeah. If you type in show times, one word, your zip code show times, one word versus show times, two words, you get totally different views on Google. Oh, interesting.
Starting point is 00:44:59 So if I do one of them immediately. Oh yeah, I do immediately pops up the, like the closest theater to me and then like the the time you know the little graphic that you were talking about of all these times but if i have like if there's two words if i have one word then it's the map view that you were talking about so if i do type in the name of a movie and then show times i do get a view of like here's the performance times near my location of this movie showing, you know, each theater in its own little section going down the page.
Starting point is 00:45:29 And then all the times that this movie is showing at the theater. It doesn't give me a nice timeline view so that I can kind of see, you know, when are these show times relative to one another. It is just a table of times like there's no spatial relationships being used to express the progression of time it's just a sort of a tabular view uh split up by different like ticket prices and features like you know 4dx avx avx dbox whatever the hell all those things are but in order to even get this you had to narrow down to a particular movie, correct? Well, I had to, in Google, type Black Adam Showtimes. One word. Yeah.
Starting point is 00:46:09 So I had to tell it, I want this particular movie. Yep. And you didn't put in your zip, though. It did use your location. Yes, it did use my location. Okay. So I feel like we can rabbit hole a little too much on this. I want to just put out the alternative, because we're looking at the alternative here that brett victor gives yes uh and and his whole point
Starting point is 00:46:29 is like it's you don't know it are people going to be caring about the movie and i want to see that movie are people going to be caring about a time i want to see a movie at a time or a theater or some combination of these right yeah and so his graphic gives us a list of these movies on the left die hard with more intensity rent and rentability and they have blurbs and star ratings and then on the right it's this graphic of there's colors for every single uh cinema that's around us and then there are times and each movie has its own kind of view here so that there's these colors of which cinemas they're in and then the times are actually these like timeline views so you know 11 25 is here and then there's a big space and then three o'clock and
Starting point is 00:47:19 then 7 15 way further down and that's like at old joe's show house these are the times for rain man forever and so if you're like scanning this and you're interested in like one like little in cinemas it's purple and so i can just look at all the purple times across each movie and be able to see what time that movie is playing at little in cinema or if i want to see a movie at five o'clock ish I just look at that sort of vertical slice of the timeline and I can scan down and see oh well at UAE Z Street Rain Man forever is at five and at AMC Lilliput die hard with more intensities at five but if I wanted to see Harry Plummer and the Goomba of doom I'd have to wait till 5 45 and we
Starting point is 00:48:06 have a like the graphic itself is divided in half with this like more shaded like a kind of grayed out and not grayed out so it's like the present it's like a line of what time is now and what time is the future and so like just from this any sorts of those questions that we want to ask, regardless of if we care about the theater, the time, the movie, we don't have to do any interaction. And in fact, we can't because I printed a PDF. I can't do interaction here. And yet, I can answer all these questions immediately.
Starting point is 00:48:42 And if we were to quiz ourselves right now on Black Adam and I asked, when today at this theater, and I did these different questions, if we compared what Google gives us, this billion dollar company offering us things for movies, versus a graphic here, it would be night and day on the amount of time and effort it takes for us to answer these questions. Yeah. And it's the point that I want to make about saying, you know what, I could actually print out this Black Adams Showtimes page and get all the information that I care about. I don't need to click on anything. It's got the summary. It's got the cast. It's got
Starting point is 00:49:21 audience reviews. It's got, you know, the Fandango percentage rating, the IMDB score out of 10, the Metacritic score. It's got all the theaters, all the showtimes, all the different tiers of ticket prices, that kind of thing. Like there's a ton of information on this one page that I could print out and it would be perfectly useful. The thing that I don't have is all software reconceived in this way i have a handful of specific examples like calendars maps movie show times arguably shopping websites there are some good shopping websites out there and there are some tools you can use to like make amazon better that kind of thing but what i don't have is i don't have this kind of a redesign taken to especially relevant programming and of course you know many many other things but this this this philosophy of
Starting point is 00:50:18 try to design the the way in which software presents information so that it leverages all of the lessons we've been learning for thousands of years about how to do graphic design and how to do that really well and not leaning on interaction which comes from industrial design which is also a really well established field it's just more recent and not even worse not relying on this kind of pigeon ad hoc sort of we're figuring it out as we go along mashup hybrid of industrial design and graphic design that people are kind of self-teaching as they are learning how to make software where, you know, we've now learned the lesson like from from from business metrics. Hey, that minimize the number of clicks that people need to do in order to get it the thing that they want, because we've learned, hey, every time somebody has to make a click, you know, 20% of people will bounce off of that. And so if it's in your sales funnel, get superfluous clicks out of there, right?
Starting point is 00:51:25 Like that wisdom pervades and is kind of, you know, in the cases like Google results or in signup funnels on websites that serve some informative purpose or whatever, like we've learned that lesson, right? If you go to kayak to book a trip, it doesn't make you sign up for an account before it lets you start searching for trips, right? So some of the lesson has been learned, but only in select cases. And what we don't have is we don't have all people making software, coming at software with the awareness that their craft is going to require very good communication skills and very good visual communication skills and that the computer is primarily a visual medium and the screen is
Starting point is 00:52:13 something that is it should give us everything that paper gives us and more and we don't take advantage of that and so that's that's my reason for saying hey yeah we do't take advantage of that. And so that's my reason for saying, hey, yeah, we do have the handful of examples in this paper because they were easy examples. And we don't have the hard examples. We don't have the universal examples. All right, hold on. I have a way, you know, I'm going to make my voice sound really cool. So a well-designed information graphic can almost compel the viewer to ask and answer
Starting point is 00:52:44 questions, make comparisons, draw conclusions. It does so by exploiting the capabilities of the human eye. Instantaneous and effortless movement, high bandwidth and capacity for parallel processing, intrinsic pattern recognition and correlation, macro micro dualro-duality that can skim the whole page or focus on the tiniest detail. Like this is the kind of thing that Brett Victor wants us to be focusing on is using our full capabilities of the human eye. Use the human body. Use it.
Starting point is 00:53:18 Yeah, yeah. I think this work really does, I think in a lot of ways, prefigure what we end up seeing in dynamic land, not just in this kind of ways, prefigure what we end up seeing in DynamicsLine, not just in this kind of focusing on the human capabilities, but also later when we talk about some implementation details, which I think are some of the exciting things I want
Starting point is 00:53:33 to get into for this. Yeah, let's keep going, because we're on the first sentence of the summary, the split between graphic design and industrial design. And we didn't talk about industrial design. I don't think we need to. Just the short summary is like, over the last 100, 200, however many years you want to look at it,
Starting point is 00:53:49 we've been learning how to build mechanisms that are nice for people to use. So it's that like, the quintessential example of a tool is a hammer. And a hammer has one end that is designed to fit the problem. That's, you know, the hard end you use to pound the nail. And the other end of the tool is designed to fit the wielder so that's the comfy grip that you hold in your hand
Starting point is 00:54:09 and for everything that human beings need to do to affect some change in the world industrial design is about how do you make the the thing that the person uses to do that effect as comfortable and as expressive and as good as possible. So that's that whole field. You can look at how we make software and say, wow, we are really not using graphic design to even a sliver of its full potential. The same can also be said of industrial design, but that's not as relevant or interesting to us immediately, at least in this conversation.
Starting point is 00:54:42 Yeah. So do you want to keep going through the summary? I'm happy to, but I'm also happy to, you know, pull out points that we want to make. Well, the second sentence, I'm ready to touch on that. So it's, information software is for learning an internal model. Manipulation software is for creating an external model. Communication software is for communicating a shared model. And I wanted to read that and then bring it up again, because we're now ready to, for me to say my short thing about how I think communication software is actually just more advanced manipulation software. So information software, we know that the pinnacle of that
Starting point is 00:55:22 is something that is as good as it can be when printed that you use all of graphic design to leverage the human's you know eyeball and brain to extract as much information as possible as quickly as possible and the way to do that is to not require that a person do a whole bunch of clicking around to explore an information space that you render that information space very immediately and give them a lot to hook into and you leverage graphic design to do that and the manipulation software is that plus they're actually going to be making some changes to the thing that they're learning about and looking at and so the graphic design is now married with really good industrial design where you know, you need to communicate to the computer how to change this internal model and so all of the things we've learned about you know, like
Starting point is 00:56:16 Like Fitts law, right? like if you put something at the edge or in the corner of a screen that makes it easier to click on because you can Just slam your cursor into the edge and it makes it like an infinitely large clickable area and that you know there's equivalence to that for touch screens and all that kind of stuff but there's all these like things we are learning about how to make really good expressive user interfaces and that's super relevant to the future of coding and i'm sure we'll come back to that at some point but that's not as much of a direct focus in this essay. And then communication software, which is not talked about much at all, is this idea of software that is about communicating
Starting point is 00:56:50 between two people. And the reason that I wanted to talk about it for a second is to say that getting information software, that first category, right, is hard. We barely do it. We're struggling to do it. Getting manipulation software right is even harder because it needs to be good information software and have this extra level of industrial design. Getting communication software to be good is even harder than getting manipulation software to be good because it is multiple people learning and manipulating together but the reason that communication software hasn't stymied us the way information software and manipulation software has is because we can more easily punt on the challenge of making you know that software
Starting point is 00:57:41 really good at expressing information and really good at showing information and allowing the person to shape the information they're trying to convey because it's a human on both ends and so both humans capabilities are brought to bear on this and so it's sort of like oh we can keep the communication software really basic and simple and make it like text messaging, right? Text messaging, we all know how terrible it is, right? Have you ever tried to break up with somebody over text messages? Or have you been broken up with over text messages? Or have you, you know, been fired over text messages?
Starting point is 00:58:16 Any of these circumstances that are like heightening the constraint of that medium really show how narrow a channel text messaging is and all the other kinds of communication software you know zoom calls and uh you know sending audio messages back and forth which is another popular kind of thing or something i do which is i have music friends and we record little demos and send them back and forth right that's using the computer as a as a kind of communication software the only thing that makes this good is that there's a human on both ends. And there's a circumstance that I thought of, which is communication software where you don't have a human on both ends, and that's games. And one of the things that makes games so interesting to me
Starting point is 00:59:00 is it is a kind of communication software where you can't just directly send a message from the designer of the game to each player. The designer of the game needs to come up with a system, and the system is going to express an idea or communicate an idea to the person playing the game. And you have to more deeply involve the computer as an intermediary in this communication from game designer to game player. And that really highlights just how challenging communication software can be when you can't just fall back on the human capabilities. I think a great example of kind of the point you're trying to make here about like communication software,
Starting point is 00:59:45 especially indirect communication software like games, being as important for these graphical aspects would be the witness. I think that's actually almost the whole point of the witness. No spoilers here. But the point is this kind of, it is a question about nonverbal communication, right? And how do we convey things to people? And it kind of goes back to this, I know, you know, looking at Jonathan Blow's conversations about this, it's kind of this like pre-language way of communicating. And we still do it today. We can communicate by mimicry and things like that.
Starting point is 01:00:26 I think that's really an interesting way of looking at video games, is this indirect communication application. And so that this interaction has to be crisp, has to be good, it has to have tight feedback, which is some of the things he says are required for any interaction, any interactive application. Yeah, and when you are learning to make games, you have to be, like to make a good game, you have to be a very good graphic designer.
Starting point is 01:00:56 And you have to be very good at interaction design and at industrial design to make the experience of playing the game feel good. You have to be so good at it that you can strategically choose to make some parts of the game challenging and frustrating and intentionally cumbersome because you can use that as a way to communicate ideas. It's such a mastery of the form compared to other software we work with, where if it's ever frustrating or cumbersome or whatever, you know that that's because of inability on the part of the people who designed it and incompetence on their part, not they were such masters of their field that they intentionally made the software hard to use, because that helps you get the full value out
Starting point is 01:01:46 of the software. Yeah, there's a great fairly popular YouTube video, I can't remember by who, you might know, where it was somebody going through kind of critiquing new Mega Man versus old Mega Man level design. And it's a great, hilarious video. But but you know they walk through like what made early megaman level design so good and why they didn't need a tutorial in these early megaman games and then later on you start getting these like very heavily tutorialized you know megaman games and then they just feel wrong and it's all about this like graphical communication that we have here and the way in which when you interact, your environment responds in this context-aware way that Brett wants us to have. He thinks, in fact, here, Brett Victor is quoting
Starting point is 01:02:36 from Jesus and he says, each interaction can and should result in a discernible change to a context-sensitive information graphic. And it's in red text, so I assume that this was Jesus saying this. That's what I learned growing up in church, the red text Bible. I don't know. He didn't cite the chapter or verse or verse but it's in red text so it must be jesus noted interaction designer jesus christ it's just like literally i know that's such a stupid thought but growing up that way yeah i just as soon as i saw red text i was like wait he's quoting from
Starting point is 01:03:21 jesus oh my goodness my brain immediately went there i even have it in my notes here jesus said this i mean the way we revere brett's work right might as well might as well just make it explicit uh yeah so um, I think this is a very interesting point that like, you know, we when we do this interaction, it has to result in a change in the graphic. I think this having this as a principle or constraint, and looking at how all of our software either, you know, lives up to this or doesn't, is a really interesting way of critiquing a design. And I've seen a lot of things where users get very lost, where I get very lost, or especially more non-technical users.
Starting point is 01:04:13 I'll help them because they can't tell what difference their interaction is making or if it's making a difference. And the only reason I know is because I can kind of mentally peek under the hood and think about how would a programmer program this and what might the invisible interaction be behind the machine. And in fact, this is what Brett Victor says is the reason that we've gotten in here. The reason that we've had this problem where instead of focusing on graphics, we focus on mechanical metaphors, is that we, the software engineers, think about our computers as machines
Starting point is 01:04:53 and about how we manipulate them and we kind of implicitly make software that assumes this almost metaphor. Do you want to summarize what Brett's issue with thinking of software as machines is about? Yes, I would love to do that.
Starting point is 01:05:16 I think we've kind of been talking about this, that you were talking about communication software, there's humans on each end. And it's not just humans, it's that the medium that we're using, we're allowing freeform language. We're letting language itself carry so much of the information there. And so he talks about this distinction between kind of linguistic software and software that is GUI. And he says that it actually forms a language. The GUI language consists of a grammar of menus, buttons, checkboxes, each labeled with a vocabulary of generally decontextualized short phrases. The user speaks by selecting from a tiny, discrete vocabulary with an entirely fixed grammatical structure,
Starting point is 01:06:10 a bizarre pigeon unlike any human language, unexpressive and unnatural. And then there's a little side note here. One might wonder what Sapper and Worf would conclude. Which I just love this idea of thinking of I think we as programmers, especially more this typed-bent
Starting point is 01:06:31 love to think about things as a grammar, love to think about oh, we have this algebra, we have this grammar that we can work on, but he's pointing out that it's such a bad grammar. It doesn't give us the context sensitivity that we actually want as humans. And so some of his interfaces that he's going to
Starting point is 01:06:54 recommend, and I think you see this in kind of the explorable explanations world, is having text instead of a big, huge list of all these drop downs and options you could choose, have a little paragraph. And he really exemplifies this in the example that we haven't quite gotten to the BART, right? So the San Francisco train system, it's an application that he really made for that. And the settings instead of being your very typical checkbox boxes and dialogue buttons and all these you know things is a little paragraph and it says things like do announce trains from castro valley and the do is like red and so it's like you know able to be manipulated and there's yeah it's just there's like very clear contextual sentences that convey so much more information than a big series of check boxes
Starting point is 01:07:46 and things would. I thought it being red meant something else, Jimmy. Yeah, yeah. No, so this is a darker red. Oh, okay. Yeah. So it's dark Jesus. Yeah. This is a goth Jesus. Yeah. You know, when he rose from the dead, he started a metal band, you know, etc. Right? Like, as you know from scriptures. As one does when they rise from the dead, you immediately start a black metal band. Yeah, exactly. That's what- Yeah, when I rise from the dead, I start black metal bands. Yeah, like that, we did talk about that and to tie it together, that idea of, you know,
Starting point is 01:08:22 if you're picking a date from a list of drop downs, that sucks. That's bad. The machininess that I want to get to is, and I'll read this as a quote, stemming off of something we've already talked about but leading us maybe somewhere new. Compared to excellent ink and paper designs, most current software communicates deplorably. This is a problem of surface, but not a superficial problem. The main cause, I believe, is that many software designers feel they are designing a machine. Their foremost concern is behavior, what the software does. They start by asking what functions must the software perform, what commands must it accept, what parameters can be
Starting point is 01:09:04 adjusted. In the case of websites, what pages must there be? How are they linked together? What are the dynamic features? These designers start by specifying functionality, but the essence of information software is the presentation. And I want to branch off of this thought to tie it into the future of coding a little bit but also just how we build software and say when i think about the way that programmers get excited about advances in technology or changes in popular practice or new approaches to building software yes sometimes it's the good shit, like, you know, a new Brett Victor essay or a video drops, and then everybody's like, Oh, my God, I'm going to
Starting point is 01:09:50 spend so much more time thinking about the meaning of my designs as I'm working, right? Like, I've, you know, been following Brett Victor long enough that I've seen these cycles happen, where he'll publish some new thing. And then there's this huge reckoning that, you know, hacker news and, and various other blogs and such do where they kind of realize, oh, yeah, no, we're not, we're not doing it right, we need to do it better. But the other side of it is the things that people get really excited about are like, ah, you know, now we're going to express our user interfaces using streams of events rather than using bindings between some input and some function call right like i'm going to build a web app and instead of using on click i'm going to generate a stream of click events and then have a an observer of that stream or a
Starting point is 01:10:39 consumer of it and then have stream combinators where I can like split those events based on whether it's a mouse down or a mouse up or a mouse move and then I can you know have a filter in there and do all these transformations and it's like the things that excite us about building the software as programmers as engineers are the machiny bits and I mentioned this in the last episode, right? We get excited about bun and we get excited about ES build and SWC because we can make the machine more machiny. And this essay does a really good job of saying for most software, which is information software, and even for the large portion of each piece of manipulation software that is not about doing the manipulation but is about learning the shape of the thing you're manipulating and then also for communication
Starting point is 01:11:31 software when you aren't just relying on humans you know to do the heavy lifting but you actually want to put some more substance into the middle of the communication In all of these cases, thinking about the machine is, it's a vice. It's not a strength. I'm going to say it's both. But I think in this essay, it's definitely considered a vice, right? I do think that there's something very important about the machininess. And it might be it's only important enough to overcome it because I do think a lot of what we aren't able to achieve is because we've kind of ignored the computer as a machine and our software has become so much slower.
Starting point is 01:12:17 And so we aren't able to accomplish certain things because the software we're using is so slow that we have to be super clever or it might seem infeasible for us to implement some of these things in a nice performant feedback critical way. Especially now, I'm much more thinking about the computer as a machine since I'm doing compiler work. But I really do think that we have to hold both as software engineers. Maybe a designer should fully separate out from thinking of the computer as a machine.
Starting point is 01:12:56 But I think as software engineers, we have to be able to kind of hold both that it's a machine and that it's a display of information and not hold one above the other. Whereas right now I feel like, yes, you're right. We have this like primacy of machine. Yeah. We have the primacy of machine like within our culture. Yes. Within the things that we get excited about. Yes. And there's this shame aspect of it too, right? Where a lot of programmers, like if you ask them to design an interface or
Starting point is 01:13:25 something like that like they'll there's this term of like programmer art you you brought this up yourself earlier when talking about interfaces and it's maybe it's just my background in the arts kind of made it easier for me to feel comfortable thinking of myself as a designer first and a programmer second and for people who don't think of themselves that way this this is all foreign or intimidating and the the focus on the machine is is fun and comfortable and exciting and and so this is kind of a a hard change to imagine one's self-making you know hey, hey, I'm actually going to work to eliminate the feeling of machininess in the things that I build. Yeah. Because this goes deeper, right? It's not just like the things that I build for end users, but even like the tools we build for each other,
Starting point is 01:14:15 right? We're in this future of coding community because we want to make a new kind of programming. And there's some people out there who think, oh yeah, everybody should be a programmer. So when you're making a new kind of programming, it's going to be for all people, right? People who don't think of themselves as engineers, people who aren't excited about the machine. But others in the community, myself included, don't have that goal. They don't have the goal of everyone should be a programmer. They have the goal of for people who do programming, whatever subset that is, can we make that programming better? So those are the people who are already comfortable working with machines but even there it's like programming
Starting point is 01:14:50 tools could be so much better at communication and it like expressing information like how do we get there how do we how do we do that if the audience we're serving is technical and the people who are doing that serving are technical how do we get those people to increase their level of comfort with the non-technical parts of the problem yeah i could imagine an earlier me having read this you know like i i read it a little bit later but you know had i read this super earlier on where i would kind of be almost offended by the suggestion yeah right that like i would think this is exactly the opposite of what we need um you know we need more precision we need more exactness we need more clarity and logical structure we need more of these machine-like qualities because it gives us a certain kind of predictability and i can imagine even seeing like you know a critique of this sort of thing
Starting point is 01:15:43 where it's like now what you're asking for is every interface is this bespoke you know work of art quote unquote and there's no predictability of my software there's no common patterns i can't just like open up any software and operate it on the way that i want to and expect it to work i have to you know deal with this designer's viewpoint on things and kind of deal with the fact that they want to lay something out different just to be different, right? And so you see a lot of people who would want kind of this conformity in software and make it more machine-like, make it more automatic, make it more consistent. And I don't know, there's part of me that still feels this pull, especially as we
Starting point is 01:16:27 get into Brett Victor wants to tell us like, how do we get this new information software revolution? How can we go beyond these mechanical metaphors that have dominated and really have better software? And in some ways, his answer kind of is like, kick out the software engineers. You know, that's a very not charitable way of putting it, but it is a reading that you could have of it is that we need to not have people who are interested in computers because they think of it as machine be the ones designing software. There was a moment in history where it almost felt to me like this was happening. And I'm sure this has happened a bunch of times
Starting point is 01:17:11 before my time and since. It was in the early 2000s when Flash was having its heyday. And it was the way that you could do dynamism on the web. And the flash player was installed on 97 percent of computers every website for every restaurant and every hotel and every you know if somebody's making a new game or if it's nike or you know all of these companies at every scale and all of these individuals were using flash to give each
Starting point is 01:17:45 website its own sense of style and flair and there was such a an excess and it was so amateurishly done by people who didn't have a background in formal design and in sort of the great works of visual communication that you'd have you know there was the time where the skip intro button was a really common interface element because every website wanted to have a flashy intro and i like i was making these kind of things at the time i made a a website for a mortgage broker in calgary and like you open the website and there's this like rolling green field with cows and little houses sprouting up and the kind of badly cut out photos of the different agents working at this brokerage, like just kind of popping out from behind the hills. And it was like very comically bad in hindsight. And of course, there was a skip intro button because there was this whole animated intro kind of thing but what what you had there was all of this information software was being designed
Starting point is 01:18:50 kind of like games are designed and i keep coming back to that but yes each one is bespoke in its own kind of way but they can't be so bespoke that they're not usable and there was this kind of the culture went through this learning process where we sort of figured out how to make things unique and interesting and exciting when it was appropriate to do that right like probably a mortgage broker site shouldn't be that but like the jim carrey website should maybe you know a hospital shouldn't have an interface that is trying to make it like look at all of our cool services that we offer like two minute intro video and it should instead have like you know like the cloud for style like are you under attack button in the top right are you having a medical emergency button right like you should understand
Starting point is 01:19:40 the context of use for what you're making, but there's a lot of contexts where having something unique and fun and playful is good. And because Flash started as a graphic design tool, emerging out of Director and HyperCard and that sort of lineage of the first interface that you encounter when you open it is the drawing interface and you have to dig behind that to get to the programming interface people would start using them and whether they thought of themselves as artists or designers or something else or a programmer right no matter how you came into it you would learn and work with the graphical interface first, even in a really primitive way. You'd make something terrible where it's like, oh, I've got this rectangle spinning that changes between three different colors or whatever. And then get to the programming interface where it's like, oh, I can actually put some code on keyframes in my animation so that as my animation runs, it's a little bit interactive. Like it pauses at this frame and then there's two buttons and I click
Starting point is 01:20:46 and it goes to one of two different parts of the timeline depending on which button I clicked, right? Like a classic DVD menu for the people listening to this old enough to remember digital video discs. That art-first approach to the environment that was the dominant way of making media on the internet. Yes, it led to a lot of superfluous interactivity that is bad, but it was all bespoke interactivity. And the cultural learning that we went through there was cut off very abruptly. And I don't see that reflected in
Starting point is 01:21:19 modern website interfaces. I see like people trying to claw some of that back like i see a lot of programmers with really cool personal websites like um i'm gonna totally butcher their name but toph tucker they made a new website i think it's new recently where it's like you load the website toph tucker.com like it's it's a very simple text website but each letter of each word is treated as its own particle and there's this like you know spring physics or something like that blowing the letters of the words around the page and when you move your mouse to a spot any words that are supposed to be laid out in that spot kind of swim back to it and form into the word so that you can read them so you have to read the page by like mousing around it and it's superfluous interactivity it fails the printer
Starting point is 01:22:10 test but it is using software from a graphical first mode of thinking and that's hard to do these days because all the tools we have for making software are systems first, they're machine first, they are, you know, you're gonna build this interactive widget, what's the first thing you think about? Oh, do I want to use async await? Because that's a new API for handling stuff? Do I want to use promises? Do I want to use streams? Do I want to use you know, which which approach to asynchrony or concurrency or uh parallelism or whatever do i want to use in this project because that's gonna bleed through and infect all of my code that's where we start thinking about it where in the heyday and i think games
Starting point is 01:22:54 have this now with with engines being so good you start thinking about the way that it looks first and work from there or the way that you interact with it first and work from there and think, how much interaction do I want? Where is that interaction going to happen? But we also need designers to be able to build that kind of software without requiring code. I think this is definitely a theme that you see through all of Brett Victor's work of kind of letting non-programmers build these sorts of software systems that he wants to see created. Maybe we can start with, I don't want to like maybe go into each of these points, but he does want to kind of give us, I think it's always good when someone gives us a step-by-step
Starting point is 01:23:43 program to kind of read it. He says that there's a way in which we can get to this information software revolution. And I'll just read these steps here, kind of the first statement of them. So the first step is to have a recognition of the need for design. And I think that's one thing that you were talking about there is, you know, not everyone sees that. And then it's going to be finding people with the talent for visual communication. Then it's going to be giving people the skills to use that talent. Then it's going to be making tools and platforms for letting people actually express that talent. And then finally, it's going to be having an environment where experimentation, evolution, and interplay of ideas can thrive. This is the path that he wants to set us on.
Starting point is 01:24:32 And these are kind of the steps that he is kind of setting up. Obviously, some of these are just about people, but ultimately it's really these like fourth and this fourth and fifth step here that he wants to focus on is what can the tools and platforms be, and then what can an environment be to really let these sorts of innovative, interesting, context-sensitive, rich, dynamic, Magic Ink-like applications flourish. He kind of sketches out this first tool.
Starting point is 01:25:04 I don't know if you quite call it a tool. I don't know. But he kind of gives an example of how you might build an interface without code that has this kind of rich context-sensitive dynamicness to it. And he starts with an app that he actually made, which is this BART widget that shows you the times of trains coming and leaving from various stations. And he does an interface that at least seems very familiar to me now, which is these kind of like bars of like there's a timeline and then there's, you know, for each train there's various bars of like when they're departing and leaving and they kind of take up the The width is how long they take,
Starting point is 01:25:46 and there's a little annotated of at 517 it's going to leave, and then at 545 it will complete its journey. It's like a Gantt chart. Yeah, yeah, yeah. And so what he wants to do, and I don't think we have to walk through all the details of how this works. It doesn't make for great uh radio as it were uh but he walks through how we could start from concrete instances of someone drawing this graphic and allow people to make a new instance and then the program
Starting point is 01:26:20 underneath can infer the difference between these and create the dynamic, not interaction, I always want to say interaction, the dynamicness of the application just from these inferences. Yeah, it's dynamic in the sense that it is responding to context, not responding to user input. Exactly, yes. It's responding to the underlying data, which might even include the environment in which somebody's in, right? The time it is, the place they are, etc. And then also other kinds of environment will include things like the history of what the person has done
Starting point is 01:26:57 before. And so the program should be building up a memory of things they've done in the past and using that memory to inform how it's going to do its best to present the most relevant information. And that's getting back to that idea of the purpose of information software is to present information that you can think about without having to click on a whole bunch. And one way to avoid clicking on it a whole bunch is if the program is smart enough to figure out what to show you at any given moment. Yeah, and I look, there's a really small tiny bit of text here that says, and to do that you need FRP.
Starting point is 01:27:33 We have this train interface that we're trying to have the whole context of the user being loaded into the application. We need to look at the history. We need to look at the ways in which the user wants to interact with it, but also the underlying data. And that data, of course, is going to change. And so the graphic needs to be able to change. And what we get is this very simple inference process where you can draw one graphic with, you know, one bit of text and then the same graphic with a different bit of text. And the underlying software is supposed to infer that, oh, we must be assigning, you know, this data to like be placed here. And then we might have a length and we'll have one graphic
Starting point is 01:28:19 with a certain length and a certain amount of time. And then another graphic with a different length and a different amount of time. And another graphic with a different length and a different amount of time and we should infer that this is connecting the length up to the time that we have here. But it gets even more than that. We also might want to have like descriptions of like in two hours and so we might have one that's like you know it tells us the exact amount of time and then we might have like in one minute versus in 119 minutes, we probably want to say in two hours or something like that, right? If it was like 120 minutes.
Starting point is 01:28:53 And so there's even this like interpolating, like what will that look like based on these little stepwise functions? And so what Brett Victor is trying to get us to see is that as programmers, we actually could implement these inference functions, that these are actually not that complicated. They're just unfamiliar. Most people aren't aware of,
Starting point is 01:29:18 or at least weren't at the time aware of, the background work done in programming by demonstration and machine learning. Exactly. That would make this kind of stuff easily doable. Yeah. And so, you know, there's no reason that we couldn't build a tool that let designers do these sorts of things without them having to directly specify these functions.
Starting point is 01:29:39 But ultimately, he even says, like, we could expose these, you know, inferences to the end user, and they might be able to help us out in those cases. There's no reason that these have to be completely hidden behind the scenes. Yeah, when you say end user, you mean the person who's building a piece of software, the end user of the design tool, not the end user of the resulting software. Yeah, and so he walks us through this very logical set of steps to build up an interface that, honestly, if I had to code it from scratch would be pretty complicated. It's non-trivial to even code from scratch, and if I walked you through what the code would look like to create the interface absent this tool,
Starting point is 01:30:20 it would be a much more complicated set of steps than the tool that he's made to let you build this. Now, I do, of course, wonder how much that tool would generalize, and could it only really build this interface, or what the expressiveness of a tool like this. And of course, this is kind of just a sketch of an example process to show that what he's asking for isn't that complicated and is feasible. He says as much in the essay. He does say like, hey, this approach that I'm articulating here really is focused on
Starting point is 01:30:53 how you would build this one program and it's not general. Absolutely. But he gives us kind of a guiding principle that I think is really interesting, that the essence of this process is elimination of abstraction. The designer works with concrete, visible examples. And I think this is really interesting because we as programmers really want to work with abstractions in a lot of ways. Like we kind of pride ourselves in our ability to work with abstractions. And so having a design tool that's whole goal is not having abstractions and yet offering dynamicness is kind of, I don't know. I get what he's saying here that we're not working with abstractions.
Starting point is 01:31:39 At the same time, it feels like we're working with abstractions to me. It's the abstraction of a linear function or this inference that can be had. But I guess from the designer's perspective it probably wouldn't feel like that. I think there's a little bit of a misdistinction going on here. The designer using this tool is still working with abstractions, but the way that they work with those abstractions is in terms of concrete examples whereas the way programmers work with abstractions is in the absence of concrete examples and we have to do a lot to create concrete examples um to make sure we
Starting point is 01:32:18 built the right abstractions so things like writing tests or doing like the kind of um testing of software where you run the software and then go click through it a whole bunch and make sure it works we we have ways that we we can kind of make sure that the abstractions that we've built are the right things and are doing the right job but this is this is an alternative approach where you don't start with the kind of the algebraic like let x be this here's my formula kind of abstract construction you're starting with concrete numbers right like i have a five and i need to get 15 what are the transformations that i can do to a five to get to a 15 and yeah you act out those
Starting point is 01:33:00 transformations you don't require the person to do those transformations and those examples in their head and then go, okay, I figured out what the general principle is here. Now that's the code I'm going to write. You let the design tool be the space where you do that thinking of coming up with the abstraction and you do it collaboratively with the computer rather than outside the computer. And then you come to the computer rather than outside the computer. And then you come to the computer to put in the final abstraction that you've come up with. See, this to me would be a great example for the Brett jam that someone should throw. I would love to see a working version of software that just made this. That would actually be more helpful for me because I thought about even, I just didn't have time,
Starting point is 01:33:47 trying to go starting to make something like this with these little inference algorithms and stuff. But it would be a little bit, I can understand how to do this, but it is a decent amount of work, right? It's non-trivial to go make something that would let me build an interface like this. A lot of the parts are not the
Starting point is 01:34:05 oh, well, I need to make an inference algorithm and that's going to be hard. It's like, I need to be able to draw that circle there. I actually looked at, are there any existing tools where I could just have a nice TL draw? Is there an easy way that I could just get all of its events and then start building something on top of this? Oh, Jimmy, you're hurting my heart what we have that have had had had had that tool john well henry had had
Starting point is 01:34:33 had had had had had had had been my preference we had that tool it was flash flash was that tool flash was the tool where you start with a drawing canvas you have all these really half-assed not very great but good enough ways of putting some text down making that text be a text field having a rectangle that is the same i think i think we're talking past each other because i want editor time code execution so as you're drawing in flash i want to execute code that's how flash worked you could and there's different ways of programming in flash some of them more programmery than others but it's a gradient where or it's like a progression or a ladder where um the first way that people encounter code in flash is you can put a piece of code on a keyframe on the timeline so that as the timeline is running,
Starting point is 01:35:26 when it hits that keyframe, it executes that code. And you can do that in the editor. You don't need to go and run, compile your thing and then test it out separately. You can have that in the editor. Yeah, I think we're still talking about that. I'm saying Ivan is sitting down building an application in Flash and he draws
Starting point is 01:35:45 a rectangle and at that moment when he draws that rectangle, Jimmy's code executes and draws another rectangle on the screen in Ivan's editor. Like, I want to plug in for the Flash editor itself. I'm pretty sure that you could work with Flash
Starting point is 01:36:02 in that way. There were downsides to doing it. It wasn't as good as it could be, and it wasn't built for this, but it was the closest that I've ever seen. Yeah, I looked at tldraw, and I looked at Figma, and I didn't, in my 15 minutes of research in each, I couldn't find just an obvious, like, give me every event that happens
Starting point is 01:36:21 when you draw a rectangle sort of thing, right? So, because that was the harder part to me. I would now need to go build a little graphic-y application to let people draw things and I didn't want it to look completely garbage. I wanted it a little bit better. But I do wish that this just was an open source tool because I would go and dive into it and learn from it and then go use it for something else. I wouldn't be satisfied here. And so if someone was, cool, they got a nice tool out of it. But for, you know, I don't know. I would love if that existed. And he continues on besides just
Starting point is 01:36:57 drawing dynamic graphics here and inferring things to inferring from history and he kind of gives us we don't i don't think we have to go into like the details of how he infers and the weights for different times when people look at it and you know there's some really nice little graphics here and it's a very particular solution and tells us that but ultimately he says that this sort of machine learning we don't need richer and richer, more advanced machine learning algorithms. What we need is to make an abstraction to let anyone put learning into their application in a very straightforward, simple way. And actually, there was a proposal for Swift that would do exactly this that I don't think ever landed. Or if it did, it turned into a much worse version.
Starting point is 01:37:47 And their example is VeryBritVictory, where instead of inferring times, it was inferring how fast you... Is it a 2x speed up for your podcast? Is it a 3x speed up for your podcast? Do you listen to this one at 1x? And they would infer that from your behavior over time and it was like three lines of code to do it was it was really nice actually i would have loved
Starting point is 01:38:10 something like that yeah because that's like brett's proposal is that maybe programming languages should have a learn keyword yeah and that would be really cool and i think there are some things out there you know apple actually has i think it's like Turicreate, I think is the weird name that it is, which is like a very simple machine learning setup where you can do a lot of inference in just a couple lines of Python. Continuing on, Brett Victor gives us even more implementation details around like how we can do this inference to inferring from the environment, not just from history, not just these dynamic graphics, but the environment itself.
Starting point is 01:38:48 And so he gives an example of like, you get an email saying, hey, dude, wanna get some pizza? And then ultimately you should get like a map or something of pizza places that you could go order from right away. And so he kind of walks through the details here. And what I think is most interesting
Starting point is 01:39:04 is that it's supposed to be this very open system that you don't have to go make one algorithm that looks for pizza and then it grabs a map but instead you have a series of different services that offer i think in this case they're like xml yeah they're like x XML output data, which is very of the time. But you have this series of applications that output different entities and things, and they'll be kind of this open system that will know how to respond to this. And I actually think this is really interesting
Starting point is 01:39:37 because this is very similar to how Real Talk works, where it is this very open broadcast system where any application could respond. And you can kind of put things out there that you don't know anyone will respond to. But if someone starts to now, you get more functionality over time. It's this sort of philosophically different approach to what an operating system could be that I've seen come up in quite a few places recently i think programmers are starting to pine for this which is what if
Starting point is 01:40:10 your computer had a really good database inside it and what if there was a category of application that was just about working with that data in that database and enriching it and transforming it and simplifying it and then applications could be written on top of that database and that ecosystem of transformers to look for things in that database and surface them in valuable ways and i think maybe we get a little bit of that um the experience of what that might be like to have if you like fully buy into the google ecosystem or you fully buy into the apple ecosystem and they can use all of their different apps and all of their different data about you and what you do to try and tie these things together but of course and he even mentions this in the paper that like the bad way to do this would be for a giant platform to try and do all of it for there to be like one or two big companies you know
Starting point is 01:41:22 that try to own the entire thing and what you want instead is you want this underlying database abstraction to be so open and good that lots of different individual people will write their plugins for it and their apps that sit on top of it and you get a sort of an emergent non-designed behavior to come out of it. Yeah, and I think this is definitely a tale as old as time in some ways. This isn't something Brett is inventing here. It's definitely asking for things that people wanted. But I think it's really interesting the way in which he's using it here.
Starting point is 01:42:03 And I do remember some systems around this time trying to accomplish these sorts of goals and they always kind of fall into these failure modes of like over complicated like the semantic web yeah was kind of like in this very similar vein and you kind of i assume it's kind of like reciprocal here where like he's probably probably influenced from semantic web things and maybe he you know went on to influence some of the other ones but like i think the general point here of inferring from the environment of inferring from time you know all of these things are things that i don't know i i'm of two minds on them in some ways they sound really good in other ways some of the most frustrating things i have with software is when they try to infer my behavior and they're wrong
Starting point is 01:42:52 and i would rather them often be predictable than be smart uh i'll give an example yeah so you know i just switched to the new iphone from android And on my Android keyboard, for a while, they didn't have predictive text in the way that iPhone does. And so instead, in this little top bar where you might get predictive text, it was just punctuation. And then they started adding predictive text. But then when you push space, instead of it being predictive text, it would go back to punctuation. And so you'd be able to, like the exclamation mark was always in the left, and then the middle was question mark. And so like you could do like, you know, exclamation mark or question marks, you know, very predictively. Or like you knew where
Starting point is 01:43:41 they were, right? They were always right there. Eventually, they decided to start predicting whether it was a question or an exclamation. And so if you typed in like, what is that? It would automatically put the question mark in the left instead of where the exclamation mark used to be. And so when it was right, I would sometimes, you know, click it properly. But sometimes I want to have like, what is that exclamation mark? Not question. It became really, really frustrating the way in which they inferred these punctuation marks
Starting point is 01:44:19 for me because I could never build up a habit. And in fact, right before I switched, they removed them completely. And so now what they put in place there was the insert GIF button. So I would be like, what is that? And then insert GIF, and now I'm in a totally different menu. So yeah, they broke my habits by trying to predict my behavior. And I find that so incredibly frustrating. So I don't want to over-index
Starting point is 01:44:47 on this particular failure mode of this example, and I'll counter it by saying, here's another way that we could get this vision and have, in some ways, gotten this vision that he's sharing here without falling into this failure mode. And that is that the exact way in which you use each of these contexts
Starting point is 01:45:08 isn't the thing to pay attention to in this paper. Instead, it's the idea that there are contexts and that they should be made available both to the people who are designing software and in some way or another to the people using the software. And so an example I'll give is the iPhone, because we keep coming back to that. And in fact, we're going to find out in a second here that the next section of this paper actually is a prediction
Starting point is 01:45:36 that we will eventually get an iPhone-like device that does a lot of iPhone-like things. But the iPhone has been adding more and more and more hooks across the OS so that you can customize its behavior and add your own widgets and add your own shortcuts and that sort of thing. And so one of the things that you can do is set it up so that there are widgets on your home screen that launch certain applications or that launch shortcuts. And those home screens can change based on context awareness. So you can have home screens that come on at certain times of day, or you can have home screens that come on at certain locations, or home screens that come on when a shortcut runs, that kind of thing. And so you can do things like say you know hey when I'm at a grocery store
Starting point is 01:46:26 I want my home screen to change so that the row of widgets that are there one of them is a button that launches me into my grocery list app so that when I'm at the grocery store I don't have to pull out my phone open it up find the app and open that, and then get on the right list, I just have a button right on my home screen that I can tap, and it takes me into that. And the phone isn't doing that on its own. It's not predictively saying, hey, whenever you go to grocery stores, I'm going to put a button for your grocery list app on the home screen. It is instead giving you a way to say, hey, you can tap into location data or time data, like, you know, set something relative to sunrise or sunset, or you can tap into other kind of periphery data that exists. And then you can trigger something to happen as a result when that data matches
Starting point is 01:47:23 certain criteria. And the thing that happens as a result can be changes to the mode that the phone runs in. And those different modes can offer different interfaces that let you do different things with them. And so you as the end user can kind of cobble together the structure of interaction that you want to have and is it good no is the programming experience good no are the kinds of information that you have access to good no it's it's absolutely not living up to the vision but it is interesting in the way that it's sort of like you can feel the beginnings of apple figuring out that this is the way that people want to interact with technology and this is the way that technology wants to interact with people and i'm using interact not in the interactions considered
Starting point is 01:48:18 harmful sense but i mean more like the the relationship that exists between people and their technology should have this flavor of context awareness and that that context awareness should enable the interface or the information being presented to be dynamic and that all of the different ways we have of working with context whether that's explicit rule setting like you see in the design app where you're building the BART widget and setting up explicit relationships between scheduled data and graphical layout, or whether it's the more implicit kind of thing about noticing, oh, hey, we're talking about pizza in this email. Wouldn't it be cool if you could search the web by just typing the word pizza in any text field in your os and your
Starting point is 01:49:08 os would know hmm they're thinking about pizza right now so when you flip over to the map app one of the suggestions it's going to make is do you want to look for pizza or when you flip over to the you know the recipe app one of the suggestions is hey do you want to make pizza which you know gets into the other thing about like how much is this creepy how much has google kind of pissed in the pot by abusing this and how much you know facebook i don't want to just throw google under the bus facebook the f word um how much have they kind of ruined the soup for everyone um and how much has surveillance ad tech this vision up but i think i think that vision is good and we're getting
Starting point is 01:49:45 closer to it little by little yeah so i think there's some really nice things here and i think there's a lot that we could learn from and there's things that i've been trying to think about like i'm i'm trying to maybe design a debugger uh kind of specific for me like a debugger for my work and one of the things you know i even pushed pushed about this in dev log together on Slack, is like, how can I be more context aware in this, like, if I'm actively working on changes, maybe my debugger should show me the code that changed, because that's probably where I'm going to put some breakpoints. Or if I check out a branch that had a failure
Starting point is 01:50:20 in CI, maybe it can go ahead and look at that failure and figure out the stack trace and kind of show something around there, or show me the code that was the get diff. There's things like that that seem like very context aware that's probably going to be right. And if it's not, it's not going to be too hard for me to overcome. At the same time, I think there's, I don't know, part of this essay feels like it throws the baby out with the bathwater in some ways. And the reason I say that is I think about interaction itself.
Starting point is 01:50:55 And I think about there's kind of this underlying principle, implicit or kind of norm or value here, that ultimately what we're offering people is efficiency in learning, right? Like we want them to learn something in the most efficient manner. And I actually think that that can be kind of an anti-goal in a lot of activities that we want to do. Laying out these graphics so that, you know, I can answer these questions might actually not reinforce my learning. Whereas if I have to search and navigate for them, that search and navigate process actually can help me remember things better.
Starting point is 01:51:33 But also there's times where things that I think he would class as information software or would say that we should focus on some of this graphical aspect that actually the interactions themselves are what I enjoy about the software. So I'm thinking of the not boring suite of applications. And if you haven't checked these out, I think they're really interesting. And they're these kind of like three, they're like overly ornate, unnecessary interactions for these applications, right? Like there's a calculator, there's a timer, there's weather app and a habits tracking app.
Starting point is 01:52:15 And I started using habits on my iPad and I really loved it. And it's this like, very, I don't know how to really describe it well, but it's this very kind of meditative habits app where you hold down on this check mark to say, I've accomplished this habit that I wanted to today. And it gives this like beautiful vibration that I never got to feel when I was on the iPad. But now that I have this iPhone, like I get to feel this beautiful vibration, this wonderful sound.
Starting point is 01:52:42 And this like 3D scene is put in place and these birds are flying around. And it's totally unnecessary for the task at hand. And yet, it's what draws me into the app. It's what makes me want to track my habits. And for the weather, I can fidget with this 3D spinning weather and I can hear the thunder roaring. And the interaction itself brings me joy. And it reminds me of like making pour over coffee. Like I don't do it because I want to get coffee in the most efficient manner. I do it because of that enjoyment of sitting there pouring. And, you know, the kind of frustration of not getting the coffee I wanted sometimes
Starting point is 01:53:23 actually makes it even better when I do get that coffee and so I feel like this is an element that's just completely missing if we got rid of interaction I think that there's it's getting rid of it's getting making these interactions more joyful if we're gonna have them and yes I know you could probably read that into him here and you know maybe I'm nitpicking too much. But. I was not. I totally wasn't going to do that.
Starting point is 01:53:51 Yeah, yeah, yeah. No, you definitely weren't. But it definitely isn't something that I think people will come away with the essay. It's not the main thrust of the essay. And I'm sure Brett Victor would agree with it or whatever. But I just want to put out there that interaction considered harmful might be a little too strong. Yeah. Can I tie this into one of my – this will be quick, I promise.
Starting point is 01:54:13 Yeah, absolutely. One of my – how do I say this without using one of the tired metaphors that is about animal abuse? One of the things that I repeatedly talk about – Your hobby horses. Yeah, sure. There's a lot of metaphors to describe a thing that you do over and over again
Starting point is 01:54:31 where the structure of the metaphor is, ah, here's this animal that I'm going to injure repeatedly. It's weird. Yeah, yeah, but a hobby horse is, you know, there's nothing... Sure, yeah. So I've got my little broom with the horse head on it that I'm running around on.
Starting point is 01:54:43 And it's that the problem with essential versus accidental or essential versus inessential complexity, that's a recurring theme in works that are of interest to our field, we'll talk about some of those works at some point, is that incidental complexity is bad and to be minimized, and essential complexity is also bad, but it's essential so you can't get rid of it. And the strive for simplicity means you want as little complexity as possible. And my take on that, spoilers for upcoming episodes, I'm sure at some point, is that incidental complexity is actually good you just need to choose what incidental complexity you take on and what the shape of that complexity is very judiciously you need to approach it as a design thing and these not boring apps are good because the interactivity that they have isn't interactivity
Starting point is 01:55:42 that interferes with your ability to use them as information software. So the weather app doesn't make you do a lot of tapping around to get at the relevant weather info. It shows all the information that you care about immediately and clearly and nicely. It does a good job at nailing that core learning responsibility that the software has as a piece of information software. The interactivity is placed around that as something you can do purely for fun. So it is an ornamentation. Like you said, this is heavily ornamented software. It is what makes the software exquisite it makes it better to use because that interactivity
Starting point is 01:56:26 is chosen very deliberately to be good it's not something that is put in there because of inability or incompetence on the part of the people designing it it's a flex it is we're so good at software design that we can nail the information representation the the the core purpose of the app and then do a whole bunch of dancing around it at the same time you come to it for the dancing around the core information but you stay using it because or yeah you you come to it because of the of the ornamental excesses and the style and the flair and the sound design and the gameness of it but you keep using it because the the core information presentation is so good yeah no i i mean i don't disagree with
Starting point is 01:57:20 you at all i think that you're spot on with this. And they do a wonderful job of this information hierarchy and everything that's in this essay. And I guess that's what I find so interesting is it's kind of like taking all of the things from this essay and then adding back that interaction. And I think that's genius. And I wish more apps kind of felt like this. And that's one of the things that I think we could, as a software engineer who definitely does not see themselves as a designer first in any way, I have built a lot of interfaces. I have decent enough taste.
Starting point is 01:57:56 I can tell you when something's bad, but I'm definitely not someone who's a master of visually laying out information or any of that. I find this really a helpful essay for, honestly, it's very practical. I think of all the essays we've read, of all the papers we've read, this is probably the most practical one. And not even necessarily just in its details of these inference algorithms, but just in how to think about the software I'm making
Starting point is 01:58:25 and how to really orient it less around features and more about questions being asked and how my software can facilitate answering those. And so I would love to see more languages, more programming tools, etc., designed around that from the beginning. I would love to see programming tools that answer questions just from if you printed them off, right? That we could pull up a debugger and see all the information we need at a glance rather than having to click through all these little menus. That we could see a program and find out all sorts of facts about the program
Starting point is 01:59:02 from a glance that go beyond just like, I built a graph, right? Like, yeah, we've all seen a call graph, and that's cool, but there has to be better ways, and I think there are, and I would love for us to explore those more as a community. So one of the reflections that I had on this essay is that this is actually very similar to augmenting human intellect and to me this is an example of like what would a better presentation of augmenting human intellect have looked like and i i see that similarity both in that it is sort of talking about the way that the world is facing a problem and that that problem is going
Starting point is 01:59:47 to get worse and worse and that we are going to need to come up with better ways of grappling with that problem that sort of high level like here's here's a society-wide issue that the advent of technology is bringing about and we as conscientious designers and engineers and thinkers can participate in alleviating that problem and it and it once it sets that groundwork it gets into it in two ways but you know both augmenting human inflect and magic ink do this they look at concrete examples of here are some things that one could build that would alleviate that problem and in magic ink that is you know here's this design tool and it would allow people who are good graphic designers and good people who understand visual communication
Starting point is 02:00:39 to build software that is able to respond to context and is able to afford a little bit of interactivity and is able to surface information really elegantly without them needing to learn how to program and all that nonsense so there's the like concrete example but then there's also the meta level how do you design a design system or what is the substrate on which these sorts of implementations like the design tool that is used for the bart widget or an anglebert like the you know the thing with the two pens and the big desk the the clerk where you can sort of array all of your virtual documents and work through them those sorts of examples are examples. And the real thing in here is the system that can produce those kinds of tools. And so Brett spends a fair bit of time in this essay
Starting point is 02:01:32 towards the end, kind of talking about like how to get to the world that he wants to see. And it's not the concrete, like we need that design tool, but it's the more general, like I'll read a quote here. Today's ubiquitous GUI has its roots in Doug Engelbert's ground shattering research in the mid 60s. The concepts he invented were further developed at Xerox PARC in the 70s and successfully commercialized in the Apple Macintosh in the early 80s, whereupon they essentially froze. 20 years later, despite the thousand-fold improvements along every technological dimension, the concepts behind today's interfaces are almost identical to those in the initial Mac. Similar stories abound. For example, a telephone that could be dialed with a string of digits was the hot new thing 90 years ago.
Starting point is 02:02:22 Today, the phone number is ubiquitous and entrenched, despite countless revolutions in underlying technology. Culture changes much more slowly than technological capability. The lesson is that even today we are designing for tomorrow's technology. Cultural inertia will carry today's design choices to whatever technology comes next. In a world where science can outpace science fiction, predicting future technology can be a Nostradamian challenge. But the responsible designer has no choice.
Starting point is 02:02:54 A successful design will outlive the world it was designed for. With what artifact will the people of tomorrow learn information? I believe that in order for a personal information device to be viable in the long term, it must satisfy two conflicting criteria, portability and readability. And to briefly summarize, portability just means it needs to be basically the shape of an iPhone, and readability means it needs to basically be the shape of an iPad. You know, it needs to be something small enough that you'll carry it in your pocket, but it also needs to be something that's about the size of a sheet of paper
Starting point is 02:03:27 because that is a comfortable size to design something that works with human eyes and bodies and such. And then he goes on in the rest of this section to explain how to unify those two constraints and what influence that will have on the design of software in the future how that will work with graphical output environment history interaction etc mentioning things like because you're carrying
Starting point is 02:03:52 it in your pocket it will know your location and so it will be able to use your current location to do things like when you open a map you know open the map to the area around where you're standing and he basically describes a lot of stuff that we got with the iphone and to me that that directly mirrors engelbart and lick lighter and other earlier works that in my opinion kind of predicted the way things arrived at what they are today and so that that parallel is interesting because magic ink is is a great read i really enjoyed it i've read it a couple of times now and you know throughout the last decade and it holds up and i'm still getting more out of it every time i read it and i'm sure in a decade
Starting point is 02:04:38 when i go back and read augmenting human intellect i'll have maybe a different reaction to it. But I think this essay shows you what you can do with the essay as a medium for expressing that kind of Engelbartian thinking in the modern era. And it excites me to think that we will get more of these essays in the future, and they will serve the same role that Augmenting Human Intellect and Magic Inc have served for generations of programmers and people who want to bring design thinking to programming thus far. So that's kind of my overall kind of impression of the essay. The other thing that I wanted to talk about is how this relates to future of coding. And I tried to sit down and come up as a problem of information communication, of graphic design? The person doing the programming is mostly going to be learning and how do you help them do
Starting point is 02:05:55 that learning? And then there's a little bit where they're going to do some manipulating, but that's not the most important thing. The most important thing is the learning and i did come up with a couple of examples one of them is what shimon kaliske is doing at ink and switch and i have to admit i am biased in that i worked with shimon on crosscut and have kind of been in the periphery of what ink and switch is doing and so i have some you know some uh no no more animal metaphors i i have some uh some vested interest here um but one of the things that i got from shimon when i worked with him on crosscut that he emphatically repeated again and again until it was drilled into my head is that there really is a great value in designing a kind of a programming where you are always working on the concrete real thing and you are not working on the abstract systematized way of
Starting point is 02:06:55 eventually getting something on the screen for the end user but that you when you are doing the programming should be working with real examples always and that we you know future of coding people trying to design programming tools there's not very many people out there not very many of us who are doing the thing where we're going to design a programming from scratch and that programming has to work with concrete examples and if you're going to introduce abstractions you're going to introduce them in terms of concrete things and that is like shimon's whole bent and it is really refreshing and cool to see and it is totally at odds with my own personal opinion of how we should be designing a programming. But it aligns with, I think, what Brett is calling for in this paper
Starting point is 02:07:47 in a really exciting way. Two other examples that I wanted to call out. One of them is Mock Mechanics by Felipe Rigosa. Apologies if I'm butchering name pronunciations. Which is, it's absolutely a programming tool, but it's a programming tool that i think does the wonderful thing that i wish more people did of saying i don't care whether or not this is a tool that's going to appeal to you because you can imagine yourself using it to do the kind of work that
Starting point is 02:08:17 you do as a programmer it is instead a way of showing what programming could be if you completely approached it from a different direction without regard for it being a drop-in replacement for JavaScript or C or whatever. It's like, what if you're working with a different material entirely? What if you're working with a different substrate that the programming sits on top of or interacts with? What if the materiality of it was completely different? And so it is a little 3D environment where you draw simple 3D constructions, and then you wire them together and imbue them with movement and reactivity. It feels a little bit like an interactive animation tool more than a programming tool but it is absolutely programming it like you just look at it for long enough and and you will see that what is taking
Starting point is 02:09:10 place in this tool is a programming the aesthetic of it is kind of cartoonish or like you know very early 90s late 80s kind of 3d like primary colors simple shapes stuff moving with linear motion and it's very machiny like the things you are building with it are it feels kind of like working with lego or one of those sort of like hey simple machine building tool kits for kids but it is i think way more closely aligned with what brett is thinking about then maybe most people would characterize it as at first blush. And I think that if not the example of mock mechanics directly,
Starting point is 02:09:52 the thinking that led to mock mechanics or that would lead to similar projects is a very fresh and invigorating kind of thinking that keeps coming up every so often. You know, there's some games in the 80s for the mac or the the apple 2 that were about sort of programming simple machines and in the game you'd go inside the machine and something's odyssey i think you go inside the machine you'd have to reprogram the machines and that was how you played the game and there's these like sort of
Starting point is 02:10:21 mechanical machine focused uh graphics first programming environments. And I feel like the fact that they look like machines is the thing that we are going to have to get away from to eventually make this generalize. Because machines are limited in what they can do to like rotating a shape or moving a shape or changing the scale of a shape. And you can kind of map that into some other domain like, oh, I want to write text justification. Okay, I'm going to use like physical arrangement of each letter is on its own block and we're going to make some machine that pushes those blocks around. Like that will work.
Starting point is 02:11:01 It just is hard to generalize that. But the thing that this has that is exciting is it is all about working with a concrete thing. You are working with a concrete representation of something. You are not working with an abstraction. And then getting from there to an abstraction is a second step. You start from the concrete and then you go to the abstract. And then the one other example of this that I thought of is pain by Josh Horowitz, which is a kind of an inverted node wire programming tool, where the nodes are data, and the wires are the transformations of that data. It lets you work with concrete
Starting point is 02:11:38 examples, as you are building up this construction that does sort of a more abstracted thing which is the transformation of the data. And to me, it's not doing the full thing that this essay is advocating for about being context aware. Neither is Mach Mechanics or the work that IncanSwitch are doing, Shimon's doing at IncanSwitch. None of these are doing that full thing, but they are doing that full thing but they are doing the thing of approaching programming firstly as a graphic design problem where you should think about how is the programming environment going to be expressing information to the programmer and that is the thing to start with and once you figure that out here's how the programmer is going to be viewing and learning what it is that they're manipulating, and using concreteness is a great way to do that. It's not the only way, but it's a great way. Then build some programming in terms of that visual presentation. why graphical programming hasn't really caught on is kind of the same reason we see these problems in this essay
Starting point is 02:12:48 of lack of beautiful applications. A lot of programmers just don't feel comfortable around it. We're so used to working in text. And I wonder if programmers would feel better about designing applications if the main things we were doing were graphical because we kind of honed those skills a little bit better. I shudder to think what would have happened
Starting point is 02:13:12 if I had learned to program in BASIC instead of in HyperCard and then Director and then Flash. Because I don't think of myself as a programmer first, I think of myself as an artist first. I'm a musician and a 3d artist that's my background and when i approach building software i approach it from the interface and then work backwards to the implementation always always always and i'm very comfortable using graphic design ideas and i cut my teeth in flash building software in flash and flash was that like graphic first thing and so the fact that
Starting point is 02:13:48 that we we had a graphic first programming substrate that was the ubiquitous way of building stuff on the web and we went through the learning of how to do it wrong and then how to do it right and then it got killed and replaced with text-based programming for the sake of efficiency on battery constrained mobile devices i i think we might someday see a re-emergence of a graphics first programming tool whether that's unity or swift ui if somebody makes a really killer front end to swift uUI and it becomes what React Native never quite became. Who knows? But I feel like on a long enough timeline, we will get that again.
Starting point is 02:14:33 I think it's interesting where you put the demise of Flash, kind of like the iPhone killed Flash sort of idea. I definitely think it was the proprietariness of the runtime and all the security vulnerabilities that happened and all the glitches. I mean, Flash websites honestly were horrible to use on my computers because I had very constrained abilities. I had very slow machines. And so I hated using Flash websites.
Starting point is 02:15:07 There were plug-in incompatibilities and all of that. I think you're right that these things will come back. I think maybe WebGL might be the underlying substrate for rendering these sorts of applications. I also hated Flash things from a programming perspective because they were completely not introspectable. I could never learn how they were created. So I think these are the problems that I would want to see people solve if we do go back to that graphics-first thing, is letting them be open in the way that the web was, and letting
Starting point is 02:15:41 them not have some of the performance problems and proprietary plugin problems and all of those things that we had with Flash. It wasn't perfect, but it was different compared to what we have now in a way that makes it interesting to reflect on. I think this is definitely the historical moment that we're at with this essay. I definitely hope to see more and more influence from this, because I don't think we're quite there. Especially, I would say, maybe you think in consumer space we might be a little closer
Starting point is 02:16:13 to where Brett Victor wanted us to be, but in programming tools, we're so far away from this. Hopefully, we can bring us back to this more graphically oriented thing, even for textual tools. Problem with this podcast, Jimmy, is that we always, like the whole point of the podcast is we're reading these essays and these papers about what could have been or what should have been or what could someday be. And that always forces us into the position where at the end of the episode, we're like, damn, it sucks right now and and maybe something out there can help us improve that and maybe
Starting point is 02:16:51 somebody out there will come up with the new thing or the new substrate or will spark the new ecosystem that that leads to all of that we always end on a downer and it's the like opining for greener pastures kind of downer where it's like yeah maybe there's some green grass on the other side and it's nice to think about that but over here you know it's it's mud uh so we always end the episode on uh on a downer note so we're gonna have to come up with something you know like uh like uh how about a yahoo or something like that that we can do at the end that's so interesting that you think of this as a downer note. I think it's the opposite. I mean, we could do it in a much, you know, more upbeat way if you want, but this is the call to
Starting point is 02:17:32 action. Go out and be the program you wish you had. Like that to me is always the answer. Like if we already solved it, if we already are there, if we've already achieved, then what's the point? You know, I only want to talk about these things to the extent that we can improve them and continue to create new things. Otherwise, we're just looking back at the great works and acting as if, you know, kind of having this ancestor worship, right? Like, well, it was all solved in small talk. Like, yeah, I think we can look back at these and say we didn't achieve them, but also we can look back at these and say we don't want to achieve them, right? And some more than others, right? I think like augmenting human intellect, I'm sorry. I think that's, it's, there's awesome things there,
Starting point is 02:18:17 but there's a good reason we didn't achieve it and I'm glad we didn't. And I'm glad that Brett was inspired by it. Yeah, absolutely. Right? Because Brett's work resonates with me in a way that augmenting human we didn't. And I'm glad that Brett was inspired by it. Yeah, absolutely. Right? Because Brett's work resonates with me in a way that Augmenting Human Intellect didn't. And Engelbert's work resonated with Brett, right? Like this can be a thing where we can each find the thing that personally motivates us
Starting point is 02:18:38 and have that be the thing that drives us to do our own explorations of this space and stand on each other's shoulders. Yeah, I think in all of these works, we have to find things where we say, yeah, this work pushed things forward and accomplished things. It didn't accomplish its whole vision,
Starting point is 02:18:53 and some parts of those are sad that we didn't, but now we can go do it. And then other parts, it's pretty good that we didn't accomplish those. So I don't know. I guess, you know, I'm not sure what a work would look like where we just said, huzzah, at the end. I think it would have to be a pretty theoretical work. If you, the listener, know of such a work, send it to us. And if you have questions about the show
Starting point is 02:19:19 or suggestions for topics we could cover, or if you want to know what Jimmy sounds like when he dunks his head into a bucket of water and sings. What's your favorite song, Jimmy? I didn't just dump my head into a bucket of water. That's my favorite song. Yeah, so if you want me to write a song called I didn't just dump my head in a bucket of water and hear Jimmy sing that song right into the show,
Starting point is 02:19:44 because the voice of the listener to this show has been absent thus far.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.