DHH · 2025-07-12 · transcript-lex-474-2025 · source ↗
Ruby programming language
`0:39:01`
It was very much a means to an end. I didn't fall in love with PHP. I'm very 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, 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. I was just offering solicited advice. Jason had asked a question on the internet and I had sent him the answer and he was asking in PHP. And I'd sent him the answer to that question.
`0:40:02`
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, 37signals would do design, I would bring the programming PHP. And after we'd work 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 an 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 gotta add someone to the project. 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 finalfinal_v06_2.0, right?
`0:41:03`
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 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 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 gonna run a seminar teaching you how to use the system. I'm just gonna give you the login code. You're gonna jump into it. So that's Basecamp. And 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.
`0:42:04`
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 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 pseudo code. Whether you were programming in C or Java or PHP, all three constituencies could understand Ruby because it basically just read link English. So these guys were using Ruby to describe the concepts. And first of all, 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 wanna see the programming language. Why haven't I heard of this? So I started looking into Ruby
`0:43:04`
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. 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. 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.
`0:44:04`
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 the interpreter that there's a new line of instructions, but I don't need 'em 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 gonna give myself two weeks. I'm gonna write a proof of concept where I talk to a database, I pull some records, I format them a bit, and I display 'em on an HTML page. Can I figure that out in a couple weeks? It took about one weekend and I was completely mesmerized. I was completely mind blown because Ruby was made for my brain
`0:45:07`
like a perfect tailored glove by someone I'd never met. Like, how is this even possible? — We should say maybe like paint the 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. — Yes, yes, there's line noise. That's what I like to call. — There's line noise. Line noise, that's such a beautiful phrase. Yeah, so there's all these things that look like programs. 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 wild loop that does a five iterations. You can literally type the number five, dot, now I'm calling a method under number five. By the way, that's one of the beautiful aspects of Ruby that primitives like integers are also objects. And you can call 5.times, start brackets.