ATRIUMsearch → argument graph
ClaimAudio · 22:00 — 26:02

The simplicity and ergonomics of late 90s PHP — write a script, FTP it to a server, instantly deployed — is a peak of web developer experience that the industry has been losing ever since.

DHH argues that late 90s PHP represented the pinnacle of web developer ergonomics — write a script, FTP it, instantly deployed — and that the industry has been chasing that high ever since, often overcomplicating what is fundamentally CRUD work. ✦ AI generated

David Heinemeier Hansson (DHH) · Lex Fridman · 2025-07-12 · original ↗

plays this moment only · 22:00 — 26:02

Elicited by

So would it be fair to say that we wouldn't have DHH without PHP and therefore you owe all of your success to PHP?

PHP to me didn't just give me a start in terms of making my own web applications. It actually gave me a bar. In many ways, I think the pinnacle of web developer ergonomics is late 90s PHP. You write this script, you FTP it to a server, and instantly it's deployed, instantly it's available. You change anything in that file and you reload, boom, it's right there. There's no web servers, there's no setup, there's just an Apache that runs mod PHP, and it was essentially the easiest way to get a dynamic web page up and going. And this is one of the things I've been chasing that high for basically the rest of my career, that it was so easy to make things for the internet in the mid to late 90s. How did we lose the sensibilities that allowed us to not just work this way, but get new people into the industry to give them their success experiences that I had? ... A lot of people, I think, are very uncomfortable with the fact that they are essentially crud monkeys. They just make systems that create, read, update, or delete rows in a database. And they have to compensate for that existential dread by overcomplicating things.

verbatim transcript · starts at 22:00

Transcript · around this moment

(00:00:00) The following is a conversation with David Heinemeier Hansen, also known as DHH. (00:00:06) He is a legend in the programming and tech world, brilliant and insightful, sometimes controversial, and always fun to talk to. (00:00:16) He's the creator of Ruby on Rails, which is an influential web development framework behind many websites used by millions of people, including Shopify, GitHub, and Airbnb. (00:00:28) He is the co-owner and CTO of 37 Signals that created Basecamp, Hey, and Once. (00:00:36) He is a New York Times best-selling author, together with his co-author, Jason Fried, of four books, Rework, Remote, Getting Real, and It Doesn't Have to Be Crazy at Work. (00:00:49) And on top of that, he's also a race car driver, including being a class winner at the legendary 24-hour Le Mans race. (00:00:59) And now a quick few second mention of each sponsor. (00:01:02) Check them out in the description or at lexfriedman.com slash sponsors. (00:01:06) It's the best way to support this podcast. (00:01:08) We got a couple of new sponsors actually, so please go support them. (00:01:12) Uplift Desk for beautiful workspaces, Lindy for building AI agents, Element for hydration, Shopify for selling stuff online, and NetSuite for your business. (00:01:23) Choose Wisely, my friends. (00:01:24) And now on to the full add reads. (00:01:26) I do try to make them interesting, but if you skip, please still check out our sponsors. (00:01:30) I enjoy their stuff. (00:01:31) Maybe you will too. (00:01:33) To get in touch with me for whatever reason, go to lexfreeman.com slash contact. (00:01:37) All right, let's go. (00:01:39) This episode is brought to you by Uplift Desk. (00:01:41) Like I mentioned, it's a new sponsor, but I've been using it for many, many years. (00:01:45) I have six. (00:01:47) uplift desks. (00:01:48) So three of them are in the podcast studio. (00:01:50) So across many years, I don't know how many years, three, four years, if you see the sort of wood-colored desk in the podcast studio on camera, those are uplift desks. (00:02:01) Once again, have loved them, have used them for many years. (00:02:05) I also use it for the programming setup. (00:02:07) I use it for the robotics work I'm doing, and I'm also using it for music when I practice guitar. (00:02:12) For programming, I split my time standing and sitting. (00:02:16) I think they have some (00:02:17) biggest amount of possible desk combinations, but I went with the biggest or close to the biggest and mostly because I love horizontal desk space. (00:02:27) Anyway, I can't believe they're sponsoring the podcast. (00:02:29) I feel truly fortunate that they are. (00:02:32) I feel truly fortunate to be alive. (00:02:33) It's just all of this feels like a simulation because I've been using them for so long. (00:02:37) The fact that they somehow decided out of nowhere to be sponsoring this podcast is like, what is happening? (00:02:45) Anyway, go to upliftdesk.com/lex and use code LEX to get 4 free accessories, free same-day shipping, free returns, a 15-year warranty, and an extra discount off your entire order. (00:02:57) That's U-P-L-I-F-T-D-E-S-K.com/lex. (00:03:03) This episode is also brought to you by Lindy. (00:03:06) It's a platform that helps you build multiple AI agents in minutes. (00:03:10) No code. (00:03:12) It can do a lot of stuff, sales, customer support, recruiting. (00:03:14) It can take care of phone calls. (00:03:15) It can do a bunch of e-mail automation. (00:03:17) It integrates quite incredibly with a huge number of services, all of the Google services, Drive, Gmail, Slack, HubSpot, user-friendly, easy to set up. (00:03:28) Let's see, you can do a bunch of other kind of stuff. (00:03:30) Meetings, a lot of people talk about using it for meetings, meetings, recording. (00:03:34) It can monitor job boards. (00:03:36) It can snapshot Airbnb listings via Gmail. (00:03:38) It can easily set up if this, then that automations, including filters and conditions for more tailored responses to emails. (00:03:46) And they have just a huge number of templates and recipes to get you started with any kinds of automations. (00:03:53) You can deploy your first AI agent in just 24 hours. (00:03:56) Sign up at go.lindy.ai/lex to get 2 weeks free plus 50% off a pro plan for a year. (00:04:04) That's go.lindy.ai/lex. (00:04:08) This episode is also brought to you by Element, my daily zero sugar and delicious electrolyte mix. (00:04:14) I'm sipping in it right now because I had a crazy difficult workout at a shitty hotel gym. (00:04:21) I've actually not been to (00:04:23) to many hotels in my life that have a great gym, but the challenge, and many of the amazing things in life are all about the challenge. (00:04:30) The challenge with hotels and the hotel gyms is to get a good workout while there. (00:04:36) The one positive thing about those gyms is that they're usually empty. (00:04:40) And there is, on the negative side of the empty, a kind of depressing quality, almost like a sad coldness. (00:04:48) And it is usually extremely air conditioned to that gym. (00:04:52) The treadmills have not been used for years. (00:04:55) And there's the dumbbells that only go up to 50, and those haven't been used. (00:04:59) And there's just a sadness to the whole thing. (00:05:02) So you have to reinvigorate the space, I would say, by going nuts and just sweating your ass off. (00:05:10) That's what I try to do. (00:05:12) Anyway, before that and after that, I hydrate and rehydrate always with Element. (00:05:17) Get a free eight count sample pack for free with any purchase. (00:05:21) Try it at drinkelement.com/lex. (00:05:24) This episode is also brought to you by Shopify, a platform designed for anyone to sell anywhere with a great looking online store. (00:05:31) In fact, in this very episode, we talk about how amazing Toby, the CEO of Shopify, and Shopify is. (00:05:39) because of the underlying technology of it running on Rails, Ruby on Rails. (00:05:43) And DHH lays out brilliantly and rigorously with clarity in an awe-inspiring way, I would say, why Ruby and Ruby on Rails is just a beautiful programming language. (00:05:53) And one of the concerns, sort of the memes about it, was that it doesn't really scale. (00:05:58) And I think Shopify also responding with memes on top of memes showed that it can scale incredibly. (00:06:06) I'm always fascinated by the technological details that allow this kind of scale. (00:06:09) That's true for social networks, that's true for e-commerce sites. (00:06:13) I'll probably do a conversation with Pavel Durov of Telegram eventually. (00:06:17) One of the things that's really fascinating to me is the very detailed technological challenges of pulling that off. (00:06:23) And I'll probably also talk to Toby eventually in part for that. (00:06:27) But there's a lot of really incredible, brilliant people in Silicon Valley who have all said just how smart Toby is. (00:06:34) not just in the space of technology, but also in the space of business and the space of philosophy broadly about human existence, about this whole thing that we have going on here. (00:06:44) But anyway, you can sign up for a $1 per month trial period at shopify.com/lex. (00:06:50) That's all lowercase. (00:06:51) Go to shopify.com/lex to take your business to the next level today. (00:06:56) This episode is also brought to you by NetSuite, an all-in-one cloud business management system. (00:07:02) It's an ERP system, enterprise resource planning. (00:07:06) That's the machine within the machine of a company. (00:07:08) You could think of it as a kind of API between the different components of a company, manages those different components and ensures that they can communicate effectively, manages financials, HR, inventory, supply, e-commerce, and all that kind of stuff. (00:07:21) One of my favorite podcasts called Founders that I highly recommend to everybody, (00:07:26) He's making me fall in love with businesses and entrepreneurs of all kinds more and more. (00:07:31) It's such a fascinating puzzle how to get right. (00:07:34) And the people that do in all the different ways that they do are just geniuses. (00:07:39) They're bold, they're fearless, sometimes lucky, but almost always there's a deep wisdom in there how to pull it off, how to put it all on the line and make it happen. (00:07:48) David is the host of the podcast. (00:07:50) I'm sure I'll do a podcast with him eventually. (00:07:52) Anyway, the point is, creating and running a business is difficult. (00:07:55) So yeah, download the CFO's Guide to AI and Machine Learning at netsuite.com/lex. (00:08:01) That's netsuite.com/lex. (00:08:05) This is the Lex Freeman podcast. (00:08:07) To support it, please check out our sponsors in the description or at lexfreeman.com/sponsors. (00:08:12) And consider subscribing, commenting, and sharing the podcast with folks who might find it interesting. (00:08:19) I promise to work extremely hard to always bring you nuanced, long-form conversations with a wide variety of interesting people from all walks of life. (00:08:29) And now, dear friends, here's DHH. (00:08:48) For someone who became a legendary programmer, you officially got into programming late in life. (00:08:55) And I guess that's because you tried to learn how to program a few times and you failed. (00:09:00) So can you tell me the full story, the saga of your failures to learn programming? (00:09:07) Was Commodore 64 involved? (00:09:09) Commodore 64 was the inspiration. (00:09:11) I really wanted a Commodore 64. (00:09:13) That was the first computer I ever sat down in front. (00:09:16) And the way I sat down in front of it was I was five years old and there was this one kid on my street who had a Commodore 64. (00:09:23) No one else had a computer. (00:09:24) So we were all the kids just getting over there and we were all playing Yer Kung Fu. (00:09:29) I don't know if you've ever seen that game. (00:09:30) It was one of the original fighting games. (00:09:32) It's really a great game. (00:09:33) And I was playing that for the first time at five years old. (00:09:36) And we were like 7 kids sitting up in this (00:09:39) one kid's bedroom, all taking our turn to play the game. (00:09:43) And I just found that unbelievably interesting. (00:09:46) And I begged and I begged and I begged my dad, could I get a computer? (00:09:51) And he finally comes home, he's like, I got your computer. (00:09:54) I was like, yes, my own Commodore 64. (00:09:58) And he pulls out this black, green, and blue keyboard. (00:10:03) That's an Armstrong 464. (00:10:05) I was like, dad, what's this? (00:10:10) The disappointment. (00:10:10) This is not a Commodore 64, but it was a computer. (00:10:14) So I got my first computer at essentially 6 years old, that Amstrad 464. (00:10:21) And of course, the first thing I wanted to do, I just wanted to play video games. (00:10:24) And I think the (00:10:25) The computer, which he, by the way, had traded for a TV and a stereo recorder or something like that, came with like two games. (00:10:32) One was this frogger game where you had to escape from underground. (00:10:36) It was actually kind of dark, like this frog trying to get it out from underground. (00:10:40) I was just, I was pretty bad at it. (00:10:42) And I only had those two games. (00:10:43) And then I wanted more games. (00:10:46) And one way to get more games when you're a kid who don't have a lot of money, I can't just buy a bunch of games, is to type them in yourself. (00:10:53) back in 84, 85, magazines would literally print source code at the back of their magazines. (00:11:01) And you could just sit and type it in. (00:11:03) So I tried to do that. (00:11:04) And it would take like 2 hours to print this game into the Amistad. (00:11:10) And of course, I'd make some spelling mistake along the way and something wouldn't work. (00:11:13) And the whole thing, I wasn't that good of English. (00:11:16) I was born in Denmark. (00:11:18) So I was really trying to get into it because I wanted all these games. (00:11:21) I didn't have the money to buy them. (00:11:23) And I tried quite hard for quite a while to get into it, but it just never clicked. (00:11:27) And then I discovered the magic of piracy. (00:11:30) And after that, I kind of basically just took some time off from learning to program because, well, now suddenly I had access to all sorts of games. (00:11:39) So that was the first attempt, like around six, seven years old. (00:11:43) And what's funny is I remember these fragments. (00:11:46) I remember not understanding the purpose of a variable. (00:11:50) If there's a thing and you assign something, why would you assign another thing to it? (00:11:53) So for some reason I understand constants. (00:11:56) Like constants made sense to me, but variables didn't. (00:11:59) Then maybe I'm 11 to 12. (00:12:02) I've gotten into the Amiga at this point. (00:12:04) The Amiga, by the way. (00:12:06) Still perhaps my favorite computer of all time. (00:12:09) I mean, this is one of those things where you're like, people get older and they're like, oh, the music from the 80s was amazing. (00:12:14) To me, even as someone who loves computers, who love new computers, the Amiga. (00:12:19) was this magical machine that was made by the same company that produced the Commodore 64. (00:12:26) And I got the Amiga 500, I think in 87. (00:12:32) Look at this sexy thing. (00:12:33) That is a sexy machine right there. (00:12:35) This is from an age, by the way, where computing wasn't global in the same sense. (00:12:40) The different territories had different computers that were popular. (00:12:43) The Amiga was really popular in Europe. (00:12:46) But it wasn't very popular at all in the US, as far as I understand it. (00:12:48) wasn't popular in Japan. (00:12:50) There were just different machines. (00:12:52) The Apple II was a big thing in the US. (00:12:54) I'd never even heard of Apple in the 80s in Copenhagen. (00:12:58) But the Amiga 500 was the machine that brought me to want to try it again. (00:13:03) And you know what's funny? (00:13:04) The reason I wanted to try it again was I remembered the first time to learn, and then there was this programming language that was literally called Easy. (00:13:12) Amos, like the easy version of Amos. (00:13:15) I'm like, if it's easy Amos, how hard can it be? (00:13:18) I gotta be able to figure this out. (00:13:21) And this time I tried harder. (00:13:23) I got into conditionals, I got into loops, I got into all these things, and I still, I couldn't do it. (00:13:30) And on the second attempt, I really got to the point of like, maybe this is, maybe I'm not smart enough. (00:13:35) Maybe programming's just not, maybe it's too much math. (00:13:39) I like math in this sort of superficial way. (00:13:42) I don't like it in the deep way that some of my perhaps slightly nerdier friends did, who I had tremendous respect for. (00:13:48) I'm like, I'm not that person. (00:13:50) I'm not the math geek who's going to figure it all out. (00:13:54) So after that attempt with ECMOs and failing to even get, I don't even think I completed one even very basic game. (00:14:03) I thought, the program's just not for me. (00:14:05) I'm going to have to do something else. (00:14:06) I still love computers. (00:14:08) I still love video games. (00:14:09) I actually at that time had already begun making friends with people who knew how to program, who weren't even programming easy AMOs. (00:14:15) They were programming freaking assembler. (00:14:18) And I would sit down and just go, how do you, the moves and the memories and the copies, how do you even do this? (00:14:25) I don't even understand how you go from this to Amiga demos, for example. (00:14:31) That was the big thing with the Amiga. (00:14:32) It had this wonderful demo scene in Europe. (00:14:35) It's this really interesting period of time in the Amiga's history, where you had all these programmers spread out mostly all over Europe, who would compete on graphic competitions, where you could probably bring one of these on YouTube. (00:14:51) On this thing, they would make these little... (00:14:55) almost like music videos, combining some MIDI music, combining some cool graphics. (00:15:00) And they would do all of it in like 4K, 4 kilobytes, that is. (00:15:05) Not 4Ks of revolution, 4 kilobytes of memory. (00:15:08) And I just thought that was such a cool scene. (00:15:10) This was obviously pre-internet. (00:15:13) It was even pre-BBS, bulletin board systems to some extent. (00:15:18) It was, you swap your demo software with someone else by sending them a disk in the mail. (00:15:25) like the 3.5s. (00:15:27) And I just, I was enamored with that whole scene. (00:15:29) I was enamored with what they were able to create, and I just wanted to be a part of it, even though I kind of didn't have any skills to contribute. (00:15:36) And that's how I got into running BBSs. (00:15:39) I didn't learn programming then, and I wouldn't learn programming until much later, until I was almost 20 years old. (00:15:45) The bulletin board systems existed in this funny space where they were partly a service to the demo scenes, allowing all these demo groups to distribute their (00:15:55) amazing demos. (00:15:56) And then it was also a place to trade piracy software, pirated software. (00:16:01) And I ended up starting one of those when I was 14 years old in my tiny little bedroom in Copenhagen. (00:16:07) I had my, at that point, Amiga 4000. (00:16:11) I had three telephone lines coming into my tiny room. (00:16:16) Nice. (00:16:16) Which is funny because again, I'm 14 years old. (00:16:19) By the time I was in Sterling, my third line, you had to get someone from the telephone company to come do it. (00:16:24) I get this guy and he's just looking around like, what is this? (00:16:27) Why the hell is a 14 year old having three phone lines into their tiny little bedroom? (00:16:32) What are, what's going on here? (00:16:34) Why are all these modems blinking red and black and making funny sounds? (00:16:39) Did your parents know? (00:16:42) They did and they didn't. (00:16:43) They knew I had the phone lines. (00:16:44) They knew I had the computer. (00:16:46) I don't think they really understood that I was trading pirated software that was both illegal and whatever else was going on. (00:16:54) Oh, we should probably say that in Europe, maybe you can comment on this, especially in Eastern Europe, but Europe in general, piracy, I think, was more acceptable than it was in the United States. (00:17:04) I don't know. (00:17:05) Even that conversation wasn't present. (00:17:10) I never spoke to anyone growing up in Denmark that had any moral qualms whatsoever about piracy. (00:17:16) It was just completely accepted that you're a kid. (00:17:20) You want a lot of games. (00:17:21) You don't have a lot of money. (00:17:22) What do you do? (00:17:23) You trade. (00:17:25) Some people would occasionally buy a game. (00:17:26) I mean, I once bought a second master system and I bought one game. (00:17:33) because that was what I could afford. (00:17:34) I got After Burner 2. (00:17:35) I don't know if you've ever played that game. (00:17:36) It's pretty bad implementation on the Sega Master System, but it was like 600 crowners. (00:17:44) And I was making money at that time doing newspaper delivery. (00:17:48) I had to do that for a month to afford one game. (00:17:52) I liked video games way too much to wait a month just to get one game. (00:17:56) So piracy was just the way you did it. (00:17:59) And that was how I got into running this bulletin board system, being part of the demo scene, being part of the piracy scene to some extent. (00:18:06) And then also at some point realizing, oh, you can actually also make money on this. (00:18:11) And this can fund buying more phone lines and buying more modems and buying more Amigas. (00:18:17) Oh yeah, that was one of the demo parties. (00:18:19) These were amazing things. (00:18:20) What am I looking at? (00:18:22) Isn't that amazing? (00:18:22) Look at all those CRT monitors. (00:18:24) All these CRT monitors. (00:18:25) Again, when I was 14, (00:18:27) I don't understand fully why my parents allowed this, but I traveled from Copenhagen, the capital of Denmark, to Os, this tiny little town in Jutland, on the train with a bunch of dudes who were like late teens and their 20s. (00:18:44) I'm 14 years old. (00:18:45) I'm lugging my 14-inch CRT monitor with my computer in the back to go to the party. (00:18:51) That was what it was called. (00:18:52) That was the biggest demo scene party at that time. (00:18:54) And it was exactly as you see in that picture, thousands (00:18:57) of people just lining up with their computers, programming demos all day long, and trading these things back and forth. (00:19:04) That's kind of awesome. (00:19:05) Not going to lie. (00:19:06) It's a little ridiculous. (00:19:08) It's totally awesome. (00:19:09) And I miss it in ways where the internet has connected people in some ways. (00:19:14) But the connection you get from sitting right next to someone else who has their own CRT monitor, who's lugged it halfway around the country to get there, is truly special. (00:19:23) Because it was also just this burst of creativity. (00:19:26) You're constantly running around. (00:19:27) You're (00:19:27) I'm constantly surrounded by people who are really good at what they could do. (00:19:30) They're really good at programming computers. (00:19:32) It's infectious. (00:19:33) It was part of that pang I felt then going like, oh man, why can't I figure this out? (00:19:39) I mean, why can't I even figure out easy AMOs? (00:19:41) It's kind of frustrating. (00:19:44) But on your third attempt, you were more successful. (00:19:47) So third attempt is when I start getting it. (00:19:49) This is when I start helping out, let's say, building things for the internet. (00:19:55) So around 95, I think it is, or 96, I discovered the internet. (00:20:01) Actually, 9th grade, that was my first experience. (00:20:03) I went to some university in Denmark, and in 9th grade, we had this excursion, and they sat us down in front of a computer, and the computer had Netscape Navigator, the first version, or maybe it was even the precursor to that. (00:20:19) And they had a text editor and us kids just got like, hey, build something on the internet. (00:20:23) And it was just HTML. (00:20:24) And the first thing you do is like, oh, I can make the text blink by just putting in this tag and saving it. (00:20:31) That was that moment. (00:20:33) That was actually when I reawakened the urge to want to learn to program because I got a positive experience. (00:20:39) All the other experiences I had with programming was (00:20:42) I'd spend hours typing something in, I'd click run and it wouldn't work. (00:20:46) And I'd get an error message that made no sense to me as a kid, either at six or seven or at 12. (00:20:52) And here I am sitting in front of a computer connected to the internet and I'm making text blink. (00:20:58) I'm making it larger, I'm turning it into an H1 or an H2. (00:21:02) And these guys out here, we just did it for like an hour and a half. (00:21:06) And suddenly I go, oh, I can make things for the internet? (00:21:09) That someone in Germany (00:21:12) can be able to access and see, and I don't have to ask anyone for permission. (00:21:15) This is super cool. (00:21:16) I got to do more of this. (00:21:17) So I got into the internet, I got into working with HTML, and I still had all these friends from these demo parties. (00:21:23) And I started working with them on creating gaming websites. (00:21:27) I'd write about the video games, I'd review them. (00:21:29) This was another good way of getting new video games was to (00:21:32) to walk down to some store and say like, hey, I'm a journalist. (00:21:35) I'm like this 15-year-old kid, and they're looking at me. (00:21:38) You're a journalist? (00:21:39) Yeah, can I borrow some games? (00:21:41) Because this was when games moved on to the PlayStation and these other things you couldn't just as easily pirate, at least not at first. (00:21:48) So I went down there, did all that, and that started the journey of the internet for me. (00:21:53) It started working on these gaming websites, working with programmers, (00:21:58) Figuring out that I could do something, I could work on the HTML part. (00:22:00) It's not really programming, but it kind of smells like it. (00:22:03) You're talking to a computer, you're making it put text on the screen, and you're communicating with someone halfway around the world. (00:22:09) So that became my pathway back into programming. (00:22:13) And then slowly I picked up more and more of it. (00:22:15) First website I did with someone, one of these programmers from the demo scene that was dynamic was ASP.NET. (00:22:23) Yeah, it wasn't even actually cult.net. (00:22:25) That was what we started on. (00:22:26) And then we moved on to PHP. (00:22:28) And PHP was when I finally got it, when it finally clicked, when conditionals and loops and variables and all of that stuff started to make sense enough to me that I thought I can do this. (00:22:42) So would it be fair to say that we wouldn't have DHH without PHP and therefore you owe all of your success to PHP? (00:22:50) 100% that's true. (00:22:51) And it's even better than that, because PHP to me didn't just give me a start in terms of making my own web applications. (00:22:59) It actually gave me a bar. (00:23:00) In many ways, I think the pinnacle of web developer ergonomics is late 90s PHP. (00:23:08) You write this script, you FTP it (00:23:12) To a server, and instantly it's deployed, instantly it's available. (00:23:16) You change anything in that file and you reload, boom, it's right there. (00:23:19) There's no web servers, there's no setup, there's just an Apache that runs mod PHP, and it was essentially the easiest way to get a dynamic web page up and going. (00:23:31) And this is one of the things I've been chasing that high for basically the rest of my career, that it was so easy to make things for the internet in the mid to late 90s. (00:23:42) How did we lose the sensibilities that allowed us to not just work this way, but get new people into the industry to give them their success experiences that I had? (00:23:54) adding a freaking blink tag to an HTML page, FTPing a PHP page to an Apache web server without knowing really anything about anything, without knowing anything about frameworks, without knowing anything about setup, all of that stuff have really taken us to a place where it sometimes feels like we're barely better off. (00:24:14) Like web pages aren't that different. (00:24:17) from what they were in the late 90s, early 2000s. (00:24:19) They're still just forms. (00:24:21) They still just write to databases. (00:24:23) A lot of people, I think, are very uncomfortable with the fact that they are essentially crud monkeys. (00:24:29) They just make systems that create, read, update, or delete rows in a database. (00:24:35) And they have to compensate for that. (00:24:38) existential dread by overcomplicating things. (00:24:41) Now, that's a bit of a character. (00:24:42) There's more to it, and there's things you can learn for more sophisticated ways of thinking about this, but there's still an ideal here, which is why I was so happy you had Peter Levels on, because he still basically works like this. (00:24:53) And I look at that and go like, man, that's amazing. (00:24:55) Yeah, you're chasing that high. (00:24:56) He's been high all along. (00:24:58) Yes. (00:24:59) Using PHP, jQuery, and SQLite. (00:25:04) I think it's amazing, because he's proving (00:25:07) that this isn't just a nostalgic dream. (00:25:09) He's actually doing it. (00:25:10) He's running all these businesses. (00:25:12) Now, some of that is, as he would admit up first, up front, is that he's just one guy. (00:25:19) And you can do different things when you're just one guy. (00:25:21) When you're working in a team, when I started working on a team, when I started working with Jason Fried on Basecamp, we at first didn't use version control together. (00:25:32) I used version control for myself, and then I thought, do you know what? (00:25:35) Designers (00:25:37) They're probably not smart enough to figure out CBS. (00:25:40) And therefore, I just like, no, you just FTP it up. (00:25:43) You just FTP it. (00:25:44) I knew they knew how to do FTP. (00:25:47) And then after the third time, I had overridden their changes. (00:25:49) I was like, god damn it. (00:25:50) I guess I got to teach Jason CBS to not do that again. (00:25:54) But I think there's still way more truth to the fact that we can work the way we did in the 90s, work the way (00:26:02) Peter works today, even in the team context, and that we've been far too willing to hand over far too much of our developer ergonomics to the merchants of complexity. (00:26:13) And you've been chasing that with Rails 8. (00:26:16) So how do you bring all the cool features of a modern framework and make it no build, make it as easy to (00:26:25) create something and to ship it as it was in the 90s with just PHP. (00:26:29) It's very difficult for me to beat the Peter Lovell's approach of just, it's so easy to just ship some PHP. (00:26:38) And it should be. (00:26:39) Why should it be harder than that? (00:26:41) Our computers today are almost infinitely faster than what they were in the 90s. (00:26:47) So shouldn't we be able to work in even easier ways? (00:26:50) We should be looking back on the 90s and go like, oh, that was way too complicated. (00:26:54) Now we have more sophisticated technology that's way faster and it allows us to work in these easier to use ways, but that's not true. (00:27:02) But now you can see the line I draw in my work with Ruby on Rails, and especially with Rails 8. (00:27:08) No built (00:27:09) to me is reaching back to that 90s feeling and going, now we can do some of those things without giving up on all the progress. (00:27:18) Because I do think you can get too nostalgic. (00:27:20) I do think you can start just fantasizing that everything was better in the 90s. (00:27:25) It wasn't. (00:27:26) I mean, I was there. (00:27:27) was a lot of things that sucked. (00:27:29) And if we can somehow find a way to combine (00:27:33) the advantages and advances we've had over the past 20 years. (00:27:37) With that ease of developer ergonomics, we can win. (00:27:40) No build is a rejection of the part of web development I've hated the most in the past 10, 15 years, which is the JavaScript scene. (00:27:51) And I don't say that as someone who hates JavaScript. (00:27:54) I mean, I often joke that JavaScript is my second favorite programming language. (00:27:58) It's a very distant second. (00:27:59) Ruby is by far and away #1, but I actually like JavaScript. (00:28:03) I don't think it's a bad language. (00:28:05) It gets a lot of flack. (00:28:07) people add a string of two plus a one and it gives something nonsense. (00:28:11) And I just go like, yeah, but why would you do that? (00:28:14) Just don't do that. (00:28:15) The language is actually quite lovely, especially the modern version. (00:28:19) ES6 that really introduced a proper class syntax to it so I could work with JavaScript in many of the same ways that I love working with Ruby, made things so much better. (00:28:30) But (00:28:30) In the early 2010s until quite recently, all of that advancement happened in pre-processing, happened in built pipelines. (00:28:41) The browsers couldn't speak a dialect of JavaScript that was pleasant to work with. (00:28:45) So everyone started to pre-compiling their JavaScript to be able to use more modern ways of programming with a browser that was seen as stuck with an ancient version of JavaScript that no one actually wanted to work with. (00:28:59) And that made sense to me, but it was also deeply unpleasant. (00:29:03) And I remember thinking during that time, the Dark Ages, as I refer to them with JavaScript, that this cannot be the final destination. (00:29:12) There's no way that we have managed to turn the internet into such an unpleasant place to work. (00:29:19) where I would start working on a project in JavaScript using Webpack and all of these dependencies, and I would put it down for literally 5 minutes and the thing wouldn't compile anymore. (00:29:30) The amount of churn that the JavaScript community, especially with its frameworks and its tooling, went through in the decade from 2010 to 2020 was absurd. (00:29:41) And you had to be trapped inside of that asylum to not realize what an (00:29:49) utterly perverse situation we had landed ourselves in. (00:29:55) Why does everything break all the time? (00:29:57) I mean, the joke wouldn't be just that the software would break. (00:30:00) That would annoy me personally. (00:30:01) But then I'd go on Hacker News and I'd see some thread on the latest JavaScript release of some framework. (00:30:08) And the thread would be like, someone would ask, well, aren't we using the thing we just used three months ago? (00:30:14) And people would be like, that thing is so outdated. (00:30:16) That's so three months ago. (00:30:19) You got to get with the new program. (00:30:20) We're completely rewriting everything for the oomph teen time. (00:30:24) And anything you've learned in the framework you've been spending the last amount of time on, it's all useless. (00:30:30) You got to throw everything out and you got to start over. (00:30:32) Why aren't you doing it, stupid idiot? (00:30:34) Is that a kind of mass hysteria that took over the developer community, you think? (00:30:38) Like where you have to keep creating new frameworks and new frameworks? (00:30:42) And are we past that dark age? (00:30:45) I think we're getting out of it. (00:30:47) And we're getting out of it because browsers have gotten so much better. (00:30:52) There was a stagnation in browser technology. (00:30:54) Some of it was an overhang all the way back from IE5. (00:30:59) So IE5 essentially put the whole internet development experience into a deep freeze because Microsoft won the browser wars in the mid-2000s. (00:31:09) And then they basically disbanded their browser development team. (00:31:12) Because they're like, all right, job done. (00:31:14) We don't need any more innovation on the internet. (00:31:16) Can we just go back to writing Windows Forms or something now that we control everything? (00:31:21) And it really wasn't until, obviously, Firefox kind of kindled a little bit of something, then Chrome got into the scene, and Google got serious about moving the web forward, that you had a kindling (00:31:35) of maybe the browser could be better. (00:31:36) Maybe the browser wasn't frozen in time in 2005. (00:31:39) Maybe the browser could actually evolve like the development platform that it is. (00:31:46) But then what happened was you had a lot of smart people who poured in to the web because the web (00:31:53) turned out to be the greatest application development platform of all time. (00:31:57) This was where all the money was being made. (00:31:58) This was where all the billionaires were being minted. (00:32:01) This was where the Facebooks and whatever of the world came to be. (00:32:05) So you had all of this brain power applied to the problem of how to work with the web. (00:32:11) And there were some very smart people with (00:32:15) some, I'm sure, very good ideas, who did not have programmer happiness as their motivation #1. (00:32:25) They had other priorities, and those priorities allowed them to discount and even rationalize the complexity they were injecting everywhere. (00:32:37) Some of that complexity came from organizational structure. (00:32:40) When you have a company like Facebook, for example, that does depend on the web and want to push it forward, but have sliced the development role, job into these tiny little niches. (00:32:51) I'm A front-end, glob, pipeline, configurator. (00:32:57) Oh yeah, well, I'm A front-end, whatever engineer. (00:33:00) And suddenly, (00:33:02) The web developer was no longer one person. (00:33:04) It was 15 different roles. (00:33:06) That in itself injected a ton of complexity. (00:33:09) But I also want to give it the bold case here, which was that some of that complexity was necessary to get to where we are today. (00:33:17) That the complexity was a bridge. (00:33:20) It wasn't a destination, but we had to cross that bridge to get to where we are today, where browsers are, frankly, incredible. (00:33:27) The JavaScript you can write in a text file (00:33:30) and then serve on a web server for a browser to ingest is amazing. (00:33:34) It's actually a really good experience. (00:33:35) You don't need any pre-processing. (00:33:37) You could just write text files, send them to a browser, and you have an incredible development. (00:33:42) And we should also say that it can kind of be broken, at least the HTML, but even the JavaScript could be a little bit broken, and it kind of still works. (00:33:50) Like maybe it half-assed works, but like just the amount of mess, of smelly code that a browser has to deal with is insane. (00:34:00) This is one of the hardest problems in computing today, is to parse the entire internet. (00:34:06) Because thankfully, for us as web developers, but perhaps not so much for the browser developers, every webpage that has ever been created, minus the brief period with Flash, still runs today. (00:34:20) The webpage I did in 9th grade would render on a modern browser today, 30 years later. (00:34:27) That is completely crazy when you think about the amount of evolution we've had with the web, how much better we've made it, how many more standards browsers have adopted. (00:34:37) It's... (00:34:38) essentially an Apollo project today to create a new browser, which is why it doesn't happen very often, which is why even companies like Microsoft had to throw in the towel and say, we can't do it. (00:34:47) Now, I actually don't think that's good for the web. (00:34:50) There is the danger of the monoculture if we just get a single browser engine that runs everything, and we are in danger of that. (00:34:56) I love the fact that the Ladybird project, for example, is trying to make a new browser engine from scratch. (00:35:02) I've supported that project. (00:35:03) I would encourage people to look into that. (00:35:05) It's really a wonderful (00:35:07) Nice. (00:35:08) Thing. (00:35:08) It's staffed by a bunch of people who worked on other browser projects in the past. (00:35:13) Truly independent web browser. (00:35:15) We really need that. (00:35:17) But I can hold that thought in my head. (00:35:20) At the same time, I hold the thought in my head that Google's Chrome was pivotal to the web surviving as the premier web development platform. (00:35:31) If it had not been for Google and their entire business, depending on (00:35:36) a thriving open web, Apple, Microsoft, I think would have been just as fine to see the web go away, to disappear into being something that's just served native web application or native mobile applications and native desktop applications that they could completely control. (00:35:54) So I have all sorts of problems with Google, but it's not Chrome. (00:35:59) Chrome is a complete gift to web developers everywhere, to the web as a development platform. (00:36:06) And they deserve an enormous amount of credit, I think, for that. (00:36:10) Even if it's entangled with their business model and half of Chrome is code that spies on you or informs targeted ads and a bunch of things I'm not a big fan of, I can divorce that from the fact that we need champions in the corner of the web who have trillions of dollars (00:36:29) of market cap value riding on the open web. (00:36:32) We're going to take tangents upon a tangent upon a tangent. (00:36:35) So let's go to Chrome. (00:36:36) I think Chrome positive impact on humanities is immeasurable for reasons that you just described. (00:36:44) On the technology front, the features they present, the competition they created, it's spurred on this wonderful flourishing of web technologies. (00:36:51) But anyway, I have to ask you about the recent stuff with the DOJ trying to split up (00:36:58) Chrome and Google. (00:36:59) Do you think this is a good idea? (00:37:01) Do you think this does harm? (00:37:03) It's a disaster. (00:37:05) And I say that as someone who's been very sympathetic to the antitrust fight, because I do think we have antitrust problems in technology. (00:37:14) But the one place where we don't have them, by and large, is with browsers, is with the tools we use to (00:37:23) access the open web. (00:37:24) First of all, we have Firefox. (00:37:27) Now, Firefox is not doing all that great, and Firefox has been propped up by Google for many years to deter from exactly what's going on with the DOJ, that they were the only game in town. (00:37:38) Apple has Safari. (00:37:40) I have a bunch of problems with Apple too, but I love Safari. (00:37:43) I love the fact that we have a Premier browser running on a Premier operating system that people can't turn the web into just a Chrome experience. (00:37:53) But I also think that the open web needs this trillion dollar champion, or at least benefits from it. (00:38:00) Maybe it doesn't need it, but it certainly benefits from it. (00:38:03) And of all the things that are wrong with monopoly formation in technology, Chrome is the last thing. (00:38:10) And this is why I get so frustrated sometimes about the anti or the monopoly fight, that there are real problems and we should be focusing on the premier problems first, like the toll booths (00:38:21) on our mobile phones. (00:38:24) They're a far bigger problem. (00:38:25) It's not the open web. (00:38:26) It's not the tools that we use to access the open web. (00:38:28) If I don't want to use Chrome, if my customers of my businesses that run on the internet don't want to use Chrome, they don't have to. (00:38:37) We're never forced to go through it. (00:38:39) The open internet is still open. (00:38:41) So I think it's a real shame. (00:38:44) that the DOJ has chosen to pursue Google in this way. (00:38:48) I do think there are other things you can nail Google for and their ad monopoly maybe, or the shenanigans they've done in controlling both sides of the ad ledger, that they both control the supply and the demand. (00:39:01) There are problems. (00:39:02) Chrome isn't it. (00:39:03) And you end up making the web much worse. (00:39:07) And this is the thing we always got to remember when we think about legislation, when we think about monopoly fights, is (00:39:14) You may not like how things look today, and you may want to do something about it, but you may also make it worse. (00:39:21) The good intentions behind the GDPR in Europe currently has amounted to what? (00:39:27) cookie banners that everyone on the internet hates, that helps no one do anything better, anything more efficient, that saves no privacy in any way, shape, or form, has been a complete boondoggle that has only enriched lawyers and accountants and bureaucrats. (00:39:46) Yeah, you said that the cookie banner is a monument for why Europe is losing, is doing the worst of all the regions in tech. (00:39:56) It's (00:39:57) It's a monument to good intentions leading straight to hell. (00:40:03) And the Europe is actually world class in good intentions leading straight to hell. (00:40:09) So hell is the cookie accept button. (00:40:12) They have to accept all cookies. (00:40:14) That's what hell looks like. (00:40:15) Over and over, you don't actually ever get to the web page. (00:40:19) Just on a human scale, try to imagine how many hours every day are wasted. (00:40:25) clicking that away and how much harm we've done to the web as a platform that people enjoy because of them. The internet is ugly in part because of cookie banners. Cookie banners. (00:40:38) were supposed to save us from advertisement. And advertisement can make the web ugly. There's plenty of examples of that. But cookie banners made the entire internet ugly in one fell swoop. And that's a complete tragedy. But what's even worse, and this is why I call it out as a monument to everything the EU gets wrong, is that we have known this for a decade. No one anywhere who's serious believes that cookie banners does anything good for anyone, yet we've been unable to get rid of it. There's this (00:41:07) One piece of legislation that's now, I think, 10 to 12 years old is a complete failure on every conceivable metric. Everyone hates it universally, yet we can't seem to do anything about it. That's A bankruptcy declaration for any body of bureaucrats who pretend or portend to make things better for not just citizens, but people around the world. This is the thing that really gets me about cookie banners too. It's not just the EU. (00:41:35) It's the entire world. You can't hide from cookie banners anywhere on this planet. If you go to goddamn Mars on one of Elon's rockets and you try to access a web page, you'll still see a cookie banner. No one in the universe is safe from this nonsense. Probably the interface on the rocket. You'll have basically 150 second ping time. So it'll take you 45 seconds just to get through the cookie banners from Mars. (00:42:03) All right, let's walk back up the stack of this recursive tangents we've been taking. So Chrome, we should say, at least in my opinion, is not winning unfairly. It's winning in the fair way by just being better. It is. If I was going to steel man the other side just for 1/2 second, people would say, well, maybe yes, most people do. (00:42:29) sort of begrudgingly agree that Chrome is a pretty good browser. But then they'll say the reason they got dominance was distribution. And the reason they got distribution was because Google also controls Android and therefore can make Chrome the default browser on all these phones. Now, I don't buy that. And the reason I don't buy that is because on Android, you're actually allowed to ship a different browser that has a browser engine that's not the same as Chrome, unlike on iOS, where if you want to ship a browser, (00:42:59) Chrome, for example, ships for iOS, but it's not Chrome. It's Safari wrapped in a dress. And every single alternative browser on iOS have to use the Safari web engine. That's not competition. That's not what happened on Android. Again. (00:43:14) I think there are some nuances to it, but if you zoom out and you look at all the problems we have with big tech, Chrome is not it. Chrome won on merits. I begrudgingly have switched to Chrome on that realization alone. As a web developer, I just prefer it. I like Firefox in many ways. I like the ethos of it, but Chrome is a better browser than Firefox, full stop. (00:43:37) And by the way, we've never mentioned Edge. Edge is also a good browser. Because it's also Chrome in address. But it never gets the love. I don't think I've ever used Bing. And I'm sure Bing is really nice. Maybe you have, because you know what is Bing in address? What? DuckDuckGo. Which is actually the search engine that I use. DuckDuckGo gets its search results from Bing, or at least it used to. If they changed that, would be news to me. Well, maybe everything. (00:44:06) It's just a wrap or a dress. Everything is wearing a dress underneath. There's some other turtles. It's turtles all the dresses all the way down. Okay. What were we talking about? We got there from JavaScript and from you learning how to program. So eventually the big success story is when you built a bunch of stuff with PHP and you were like actually shipping things. Yes. And that's when the Ruby story came. So what (00:44:35) Your big love affair with programming began there. So can you take me there? What is Ruby? Tell the story of Ruby. Explain Ruby to me. PHP was what converted me from just being able to fondle HTML and turn out some web pages to actually being able to produce web applications myself. (00:44:56) So I owe a tremendous gratitude to PHP in that regard. But I never thought of PHP as a calling. I never thought, I'm a professional programmer who writes PHP. That's who I am and that's what I do. I thought of PHP as a tool I needed to smack the computer with until it produced web applications I wanted. It was very much a means to an end. I didn't fall in love with PHP. I'm very... (00:45:24) grateful that it taught me the basics of programming, and I'm very grateful that it set the bar for the economics, but it really wasn't until Ruby that I started thinking of myself as a programmer. And the way that came about was that the first time I ever got hired as a professional programmer to write code was actually by Jason Fried, my business partner still. All the way back in 2001, (00:45:50) I had been working on these gaming websites in PHP for essentially 18 months at that point. No one had been paying me to do code in that regard. And I connect with Jason Fried over an email sent from Copenhagen, Denmark, to Chicago, Illinois, to a person who didn't know who I was. just offering solicited advice. Jason had asked him a question on the internet, and I had sent him the answer, and he was asking in PHP. (00:46:17) And I'd send them the answer to that question, and we started talking, and then we started working, which, by the way, is a miracle of what the internet can allow. How can a kid in Copenhagen who's never met this guy in Chicago connect just over email and start working together? And by the way, we're still working together now 24 years later. That's incredible. But we started working together, and we started working together on some client projects. Jason would do the design, 37 Signals would do the design, I would bring the programming PHP. (00:46:46) And after we worked on, I think, two or three client projects together in PHP, we kept hitting the same problem, that whenever you work with a client, you start that project off in email. Oh yeah, let's work together. Here's what we're building. And you start trading more and more emails. And before a few weeks have passed, you got to add someone to the project. (00:47:09) They don't have the emails. They don't have the context. You send it, where's the latest file? Oh, I've uploaded on the FTP. It's like final, final V06 2.0. That's the one to get. It's just a mess, a beautiful mess in some ways, a mess that still runs the vast majority of projects to this day. Email is the lowest common denominator. That's wonderful. But we had dropped the ball a couple of times in serious ways with customers, and we thought, we can do better. We know how to make (00:47:37) web applications. Can't we just make a system that's better than email for managing projects? It can't be that hard. We've been doing blogs, we've been doing to-do lists. Let's put some of these things together and just make a system where everything that anyone involved in the project needs is on one page. And it has to be simple enough that I'm not going to run a seminar teaching you how to use the system. I'm just going to give you a login code, you're going to jump into it. So that's Basecamp. And (00:48:06) When we started working on Basecamp, I, for the first time in the experience I had with Jason, had the freedom of technology choice. There was no client telling me, yeah, PHP, that sounds good. We know PHP. Can you build it in PHP? I had free reigns. And at that time, I'd been reading IEEE magazine and a couple of other magazines back from the early 2000s where Dave Thomas, (00:48:35) and Martin Fowler had been writing about programming patterns and how to write better code. And these two guys in particular were both using Ruby to explain their concepts because Ruby looked like pseudocode. Whether you were programming in C or Java or PHP, all three constituencies could understand Ruby because it basically just reads like English. So these guys were using Ruby to describe their concepts. And first of all, (00:49:05) I would read these articles for just the concepts they were explaining. And I'd be like, what is this programming language? I mean, I like the concept you're explaining, but I also want to see the programming language. Why haven't I heard of this? So I started looking into Ruby. And I realized at that time, Ruby might not be known by anyone, but it's actually been around for a long time. Matz, the Japanese creator of Ruby, had started working on Ruby back in 93. (00:49:33) before the internet was even a thing. And here I am in 2003, 10 years later, picking up what seems like this hidden gem that's just laying in obscurity in plain sight. But Dave Thomas and Martin Fowler, I think, successfully put me and a handful of other people on the trail of a programming language that hadn't been used much in the West, but could be. (00:50:03) So I picked up Ruby and I thought, this is very different. First of all, where are all the semicolons? I'd been programming in PHP, in ASP, I'd even done some Pascal, I'd looked at some C. There were semicolons everywhere. And that was the first thing that struck me is where are the damn semicolons? And I started thinking, actually, why do we have semicolons in programming? They're to tell (00:50:31) the interpreter that there's a new line of instructions, but I don't need him as a human. How? Oh, someone is looking out for the human here, not for the machine. So that really got me interested. And then I thought to myself, do you know what? I know PHP quite well. I'm not an amazing programmer. I haven't been working in programming for all that long, but maybe I can figure it out. I'm going to give myself two weeks. (00:50:59) I'm going to write a proof of concept where I talk to a database, I pull some records, I format them a bit and I display them on an HTML page. Can I figure that out in a couple of weeks? It took about one weekend and I was completely mesmerized. I was completely mind blown because Ruby was made for my brain like a perfect tailored glove (00:51:26) by someone I'd never met. Like, how is this even possible? We should say maybe like paint a picture of the certain qualities that Ruby has, maybe even compared to PHP. We should also say that there's a ridiculous thing that I'm used to that I forget about, that there's dollar signs everywhere. PHP. I mean, there's line noise. That's what I like to call it. Line noise. Line noise. That's such a beautiful phrase. Yeah. So there's all these things that look like programs. (00:51:55) And with Ruby, I mean, there's some similarities in Python there. It just looks kind of like natural language. You can read it normally. Here's a while loop that does 5 iterations. You can literally type the number 5 dot. Now I'm calling a method on the number 5, by the way. That's one of the beautiful aspects of Ruby, that primitives, like integers, are also objects. And you can call 5 dot times (00:52:25) start brackets, now you're iterating over the code in that bracket five times. That's it. Okay, that's nice. That's not just nice, that's exceptional. There's literally no other programming language that I know of that has managed to boil away the line noise that almost every other programming language would inject into a five-time iteration over a block of code to that extent. That's a really nice, oh, thank you for giving that example. That's a beautiful example. (00:52:53) Wow, I don't think I know a programming language that does that. That's really nice. Ruby is full of that. And there's, so let me dive into a couple of examples because I really think it helps paint the picture. And let me preface this by saying, I actually, I like the ethos of Python. I think the Ruby and the Python community share a lot of similarities. They're both dynamic interpreted languages. They're both focused on (00:53:18) immediacy and productivity and ease of use in a bunch of ways. But then they're also very different in many other ways. And one of the ways they're very different is aesthetically. Python to me, I hope I don't offend people too much. I've said this before. It's just, it's ugly. And it's ugly in its base because it's full of superfluous instructions that are necessary for legacy reasons of when Guido made Python back in 87, (00:53:48) that are still here in 2025 and my brain can't cope with that. Let me give you a basic example. When you make a class in Python, the initializer method, the starting method, is def, okay, fair enough, that's actually the same as Ruby, DEF, definition of a method, then it is underscore, not one, underscore, 2, init, underscore, underscore, (00:54:15) parentheses start, self, comma, and then the first document. Yeah, the whole self thing, yeah. I look at that and go, I'm sorry, I'm out. I can't do it. It's just, it's everything about it offends my sensibilities to the core. Here you have the most important method that all new objects or classes have to implement. And it is one of the most aesthetically offensive ways of typing initialize that I've ever seen anywhere. (00:54:43) And you guys are okay with this? Hey, you're making me, where you're like talking about my marriage or something like this. And I'm not realizing I've been in a toxic relationship all along. Yeah, I just get used to it. That to me, by the way, was the magic of Ruby. It opened my eyes to how beautiful programs could be. (00:55:02) I didn't know. I'd been working in ASP, I'd been working in PHP. I didn't even have the concept that aesthetics, beautiful code, was something we could optimize for, that something we could pursue, and even more than that, we could pursue it above other objectives. That Ruby is as beautiful as it is, not an accident, and it's not easy. Ruby itself is implemented in C. It's very difficult to parse Ruby code, because Ruby is written for humans. (00:55:32) And humans are messy creatures. They like things in just the right way. I can't fully explain why the underscore, underscore, init, underscore, underscore make me repulse, but it does. And when I look at the Ruby alternative, it's really instructive. So it's def, same part, DEF, space, initialize. (00:55:56) parentheses. Not even parentheses. If you don't need to call it within the arguments, there's not even a parentheses. That in itself is actually also a major part. If the human doesn't need the additional characters, we're not just going to put them in because it'd be nicer to parse for the computer. We're going to get rid of the semicolons, we're going to get rid of the parentheses, we're going to get rid of the underscores, we're going to get rid of all that ugliness, all the line noise, and boil it down to its pure essentials. And at the same time, we're not going to abbreviate. (00:56:26) This is a key difference in the aesthetics between Ruby and Python as well. Init is short of type. It's only 5 characters. Initialize is a lot longer, but it looks a lot better. And you don't type it very often. So you should look at something pretty. If you don't have to do it all the time, it's okay that it's long. Those kinds of aesthetic evaluations are rife all over the Ruby language. But let me give you an even better example. The if conditional. That's the (00:56:56) bedrock of all programming languages, they have the if conditional. If you take most programming languages, they'll have if, that's basically the same in almost every language, space, start parentheses, we all do that, and then you have, perhaps let's say you're calling a object called user, dot is admin, close parentheses, close parentheses, start brackets, (00:57:24) And here's what we're going to do if the user's an admin, right? That would be a normal programming language. Ruby doesn't do it like that. Ruby boils almost all of it away. We start with the if. Okay, that's the same. No parentheses necessary because there's no ambiguity for the human to distinguish that the next part is just a single statement. So you do if space user dot admin question mark. (00:57:54) No open brackets, no parentheses, no nothing. Next open line, here's unconditional. That question mark means nothing to the computer, but it means something to the human. Ruby put in the predicate method style purely as a communication tool between humans. (00:58:18) It's actually more work for the interpreter to be able to see that this question mark is there. Why is this question mark in here? Because it just reads so nicely. If user admin question mark. That's a very human phrase, but it gets better. You can turn this around. You can have your statement you want to execute before the conditional. You can do user.upgrade. (00:58:47) Let's say you're calling an upgrade method on a user, space if space user.admin question mark. We do the thing if the thing is true. Instead of saying if the thing is true, do the thing. But it gets even better. This is why I love this example with the conditional, because you can keep diving into it. So let's flip it around. User.downgrade if exclamation point not (00:59:14) user.admin. Right? That'd be a typical way of writing it. Ruby goes, that exclamation point is light noise. Why do we have if and then an exclamation point? That's ugly. We could do user.downgrade unless user admin question mark. That to me is an encapsulation of the incredible beauty that Ruby affords the programmer through ambiguity (00:59:43) that is only to serve the human reader and writer. All of these statements we've just discussed, they're the same for the computer. It'll compile down to the same C code. They'll compile down to the same assembly code. It makes no difference whatsoever. In fact, it just makes it harder to write an interpreter. But for the human who gets to choose whether the statement comes before the conditional or the predicate method has (01:00:07) It's just incredible. (01:00:09) It reads like poetry at some point. (01:00:11) It's also incredible that, you know, one language designer is creating that. (01:00:16) You know, Guido van Rossum also, it's like one person gets to make these extremely difficult decision because it's, you have to think about how does that all get parsed? (01:00:27) And you have to think about the thousands, if it's a popular language, that millions of people that end up using this. (01:00:34) and what they feel. (01:00:35) What that question mark for the if statement, what does that feel like for the user? (01:00:40) That's what Matt's thought about because he started his entire mission off a different premise. (01:00:45) Then almost every programming language designer that I'd heard at least articulate their vision, that his number one goal was programmer happiness, that his number one goal was the affordances that would allow programmers to articulate code in ways that not just (01:01:04) executed correctly, but we're a joy to write and we're a joy to read. (01:01:10) And that vision is based on a fundamentally different view of humanity. (01:01:17) There's no greater contrast between Matts and James Gosselin, the designer of Java. (01:01:23) I wanted to listen to (01:01:25) James talk about the design of Java. (01:01:27) Why was it the way it was? (01:01:29) Why was it so rigid? (01:01:30) And he was very blunt about it, which, by the way, I really appreciate. (01:01:33) And I think Gothland's done a tremendous job with Java. (01:01:37) But his view of humanity is rather dark. (01:01:40) His view of humanity was programmers, at the average, are stupid creatures. (01:01:47) They cannot be trusted. (01:01:50) with sophisticated programming languages, because they're going to shoot their foot off or their hand off. (01:01:56) And that would be kind of inconvenient to the regional development office of a mid-tier insurance company writing code that has to last for 20 years. (01:02:08) Now, (01:02:09) It's actually a very Thomas Sowell view of constrained capacity in humans that I've come to appreciate much later in life, but it's also a very depressing view of programmers, that there are just certain programmers who are too dumb to appreciate code poetry. (01:02:27) They're too ignorant to learn how to write it well. (01:02:30) We need to give them a sandbox where they just won't hurt themselves too much. (01:02:36) Matt's went the complete opposite direction. (01:02:39) He believes in humanity. (01:02:41) He believes in the unlimited capacity of programmers to learn and become better, so much so that he's willing to put the stranger at his own level. (01:02:54) This is the second part I truly appreciate about Ruby. (01:02:58) Ruby allows you to extend base classes. (01:03:03) You know how we just talked about five dot times is a way to iterate over a statement five times? (01:03:09) That 5 is obviously a base class. (01:03:12) It's a number. (01:03:13) Do you know what? (01:03:14) You can add your own methods to that. (01:03:17) I did extensively. (01:03:20) In Rails, we have something called active support, which is essentially my dialect of Ruby for programming web applications. (01:03:28) And I'll give you one example. (01:03:29) I've added a method called days. (01:03:33) to the number. (01:03:33) So if you do 5 dot days, you get 5 days in seconds, because seconds is the way we set cache expiration times and other things like that. (01:03:43) So you can say cache expires in five dot days. (01:03:49) And you're going to get whatever 5 times 24 times 60 times 60 is or whatever the math is, right? (01:03:57) Very humanly readable. (01:03:59) In a novel programming language, you would type out (01:04:02) the seconds. (01:04:02) And then you would have a little comment above it saying, this represent 5 days. (01:04:07) In Ruby, you get to write 5 days. (01:04:09) But even better than that, Matts didn't come up with it. (01:04:12) Matts didn't need the five days. (01:04:14) I needed that because I needed to expire Cassius. (01:04:18) I was allowed by Matts to extend his story with my own chapters on equal footing, such that a reader of Ruby could not tell the difference between the code

Around this claim