[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:23.10,0:00:26.50,Default,,0000,0000,0000,,LUKE FRANCL: Good afternoon. I'd like to get\Nstarted if, I Dialogue: 0,0:00:26.50,0:00:30.14,Default,,0000,0000,0000,,think, everybody's ready. Cool. Cool. Dialogue: 0,0:00:30.14,0:00:33.55,Default,,0000,0000,0000,,Thank, thank you for joining me this afternoon.\NI'm Dialogue: 0,0:00:33.55,0:00:36.75,Default,,0000,0000,0000,,excited to be here. And thanks for, thanks\Nfor Dialogue: 0,0:00:36.75,0:00:38.55,Default,,0000,0000,0000,,choosing this talk. Dialogue: 0,0:00:38.55,0:00:41.07,Default,,0000,0000,0000,,So it's been ten years since the first public Dialogue: 0,0:00:41.07,0:00:43.96,Default,,0000,0000,0000,,release on Rails, so I think that's a good Dialogue: 0,0:00:43.96,0:00:48.28,Default,,0000,0000,0000,,time to think back and reflect on where Rails Dialogue: 0,0:00:48.28,0:00:51.18,Default,,0000,0000,0000,,has come from, where it might be going, and Dialogue: 0,0:00:51.18,0:00:53.87,Default,,0000,0000,0000,,what the future has in store. Dialogue: 0,0:00:53.87,0:00:58.48,Default,,0000,0000,0000,,So, I've been thinking a lot about the early Dialogue: 0,0:00:58.48,0:01:01.42,Default,,0000,0000,0000,,days of Rails, lately, because the company\NI work Dialogue: 0,0:01:01.42,0:01:05.27,Default,,0000,0000,0000,,for, Swiftype, makes site search software.\NSo I use Dialogue: 0,0:01:05.27,0:01:09.37,Default,,0000,0000,0000,,my own website for testing. So I index my Dialogue: 0,0:01:09.37,0:01:11.44,Default,,0000,0000,0000,,site and then have to do searches on it, Dialogue: 0,0:01:11.44,0:01:13.73,Default,,0000,0000,0000,,and I'll search for Rails. Just cause I'm\Nnot Dialogue: 0,0:01:13.73,0:01:15.88,Default,,0000,0000,0000,,super creative and I need to search for something, Dialogue: 0,0:01:15.88,0:01:16.57,Default,,0000,0000,0000,,right. Dialogue: 0,0:01:16.57,0:01:18.51,Default,,0000,0000,0000,,And, in doing so, I found some old blog Dialogue: 0,0:01:18.51,0:01:20.85,Default,,0000,0000,0000,,posts that I wrote in early 2005, when I Dialogue: 0,0:01:20.85,0:01:23.84,Default,,0000,0000,0000,,first discovered Rails. And it was really\Ninteresting for Dialogue: 0,0:01:23.84,0:01:27.95,Default,,0000,0000,0000,,me to read, because back then, I was, I Dialogue: 0,0:01:27.95,0:01:32.08,Default,,0000,0000,0000,,was working as a Java developer and I was Dialogue: 0,0:01:32.08,0:01:35.06,Default,,0000,0000,0000,,really interested in Python. And Rails was\Nneither of Dialogue: 0,0:01:35.06,0:01:37.44,Default,,0000,0000,0000,,those things. So I was pretty skeptical of\NRails. Dialogue: 0,0:01:37.44,0:01:39.12,Default,,0000,0000,0000,,Like, I was impressed with it, but I wasn't Dialogue: 0,0:01:39.12,0:01:43.09,Default,,0000,0000,0000,,sure it was worth learning Ruby over. Dialogue: 0,0:01:43.09,0:01:45.04,Default,,0000,0000,0000,,So I thought, I'll just sit back and let Dialogue: 0,0:01:45.04,0:01:49.44,Default,,0000,0000,0000,,the Python people catch up. And I waited and Dialogue: 0,0:01:49.44,0:01:51.99,Default,,0000,0000,0000,,I waited and I waited, and that never really Dialogue: 0,0:01:51.99,0:01:55.13,Default,,0000,0000,0000,,seemed to happen. And so after a few months, Dialogue: 0,0:01:55.13,0:01:58.50,Default,,0000,0000,0000,,I jumped into Rails and started learning it\Nand Dialogue: 0,0:01:58.50,0:02:00.41,Default,,0000,0000,0000,,I started learning Ruby so that I could use Dialogue: 0,0:02:00.41,0:02:04.59,Default,,0000,0000,0000,,Rails. And then that fall, I got wind of Dialogue: 0,0:02:04.59,0:02:06.51,Default,,0000,0000,0000,,a new group starting in my home town. The Dialogue: 0,0:02:06.51,0:02:09.51,Default,,0000,0000,0000,,Ruby Users of Minnesota. And so I was, I Dialogue: 0,0:02:09.51,0:02:10.99,Default,,0000,0000,0000,,was there at the first meeting when there\Nwas Dialogue: 0,0:02:10.99,0:02:13.48,Default,,0000,0000,0000,,twelve people talk, who were just really excited\Nabout Dialogue: 0,0:02:13.48,0:02:15.85,Default,,0000,0000,0000,,Ruby and really excited about Rails. Dialogue: 0,0:02:15.85,0:02:18.77,Default,,0000,0000,0000,,And at that point I joined the, the Ruby Dialogue: 0,0:02:18.77,0:02:22.01,Default,,0000,0000,0000,,community and became a part of that and really Dialogue: 0,0:02:22.01,0:02:24.91,Default,,0000,0000,0000,,have not, have not looked back since then.\NAnd Dialogue: 0,0:02:24.91,0:02:27.07,Default,,0000,0000,0000,,I've been working with Rails professionally\Nnow for about Dialogue: 0,0:02:27.07,0:02:28.65,Default,,0000,0000,0000,,eight years. Dialogue: 0,0:02:28.65,0:02:31.40,Default,,0000,0000,0000,,So this made me think about a book I Dialogue: 0,0:02:31.40,0:02:35.41,Default,,0000,0000,0000,,read once called Looking Backward by Edward\NBellamy. So Dialogue: 0,0:02:35.41,0:02:37.46,Default,,0000,0000,0000,,in this book, which was written in the late Dialogue: 0,0:02:37.46,0:02:41.59,Default,,0000,0000,0000,,1800s and takes place at that time, a rich, Dialogue: 0,0:02:41.59,0:02:45.26,Default,,0000,0000,0000,,upperclass man is hypnotized. And he falls\Nasleep for Dialogue: 0,0:02:45.26,0:02:48.62,Default,,0000,0000,0000,,over a hundred years. And when he wakes up, Dialogue: 0,0:02:48.62,0:02:49.88,Default,,0000,0000,0000,,everything has changed. Dialogue: 0,0:02:49.88,0:02:54.07,Default,,0000,0000,0000,,America is now a socialist utopia. And so,\Nyou Dialogue: 0,0:02:54.07,0:02:57.22,Default,,0000,0000,0000,,know, he had it pretty good before, right.\NHe, Dialogue: 0,0:02:57.22,0:03:00.94,Default,,0000,0000,0000,,he was wealthy. He had servants. And now everyone Dialogue: 0,0:03:00.94,0:03:03.34,Default,,0000,0000,0000,,is equal. And so he's pretty skeptical of\Nthis Dialogue: 0,0:03:03.34,0:03:05.09,Default,,0000,0000,0000,,new order. Dialogue: 0,0:03:05.09,0:03:09.38,Default,,0000,0000,0000,,So it takes him awhile, but as he's shown Dialogue: 0,0:03:09.38,0:03:11.71,Default,,0000,0000,0000,,the new way of doing things, he becomes convinced Dialogue: 0,0:03:11.71,0:03:16.88,Default,,0000,0000,0000,,that this is actually a better way. And that Dialogue: 0,0:03:16.88,0:03:20.96,Default,,0000,0000,0000,,made me think of, think of my situation, where Dialogue: 0,0:03:20.96,0:03:24.20,Default,,0000,0000,0000,,I was, I was skeptical of Rails, and, but Dialogue: 0,0:03:24.20,0:03:29.02,Default,,0000,0000,0000,,eventually won over. Dialogue: 0,0:03:29.02,0:03:32.70,Default,,0000,0000,0000,,So today, what I'd like to talk about is Dialogue: 0,0:03:32.70,0:03:36.45,Default,,0000,0000,0000,,the idea of what would a programmer from 2004 Dialogue: 0,0:03:36.45,0:03:39.31,Default,,0000,0000,0000,,think if they could time travel forward to\Ntoday Dialogue: 0,0:03:39.31,0:03:42.65,Default,,0000,0000,0000,,and experience our web development utopia.\NWhat would that Dialogue: 0,0:03:42.65,0:03:45.26,Default,,0000,0000,0000,,be like, for them, to see how we work Dialogue: 0,0:03:45.26,0:03:46.30,Default,,0000,0000,0000,,today? Dialogue: 0,0:03:46.30,0:03:49.74,Default,,0000,0000,0000,,So, what I'd like to do today is first Dialogue: 0,0:03:49.74,0:03:53.39,Default,,0000,0000,0000,,talk about what web development was like in\N2004. Dialogue: 0,0:03:53.39,0:03:55.93,Default,,0000,0000,0000,,Then, I'd like to jump forward to the present Dialogue: 0,0:03:55.93,0:03:59.21,Default,,0000,0000,0000,,and think about what a programmer from 2004\Nwould Dialogue: 0,0:03:59.21,0:04:02.65,Default,,0000,0000,0000,,think about our web development utopia of\Ntoday. And Dialogue: 0,0:04:02.65,0:04:05.43,Default,,0000,0000,0000,,finally I'd like to take a look at what Dialogue: 0,0:04:05.43,0:04:07.87,Default,,0000,0000,0000,,the future might have in store for Rails,\Nand Dialogue: 0,0:04:07.87,0:04:13.40,Default,,0000,0000,0000,,what the, what the legacy of Rails might be. Dialogue: 0,0:04:13.40,0:04:16.06,Default,,0000,0000,0000,,So first, let's talk a little bit about what Dialogue: 0,0:04:16.06,0:04:19.68,Default,,0000,0000,0000,,development was like in 2004. Dialogue: 0,0:04:19.68,0:04:22.22,Default,,0000,0000,0000,,So if I can set the stage for a Dialogue: 0,0:04:22.22,0:04:24.69,Default,,0000,0000,0000,,minute, I see a lot of Mac Books here Dialogue: 0,0:04:24.69,0:04:28.66,Default,,0000,0000,0000,,today. There were no Mac Books in 2004. The Dialogue: 0,0:04:28.66,0:04:30.59,Default,,0000,0000,0000,,top of the line Apple laptop was a Power Dialogue: 0,0:04:30.59,0:04:35.15,Default,,0000,0000,0000,,Mac G4. And, you know, Apple had not completely Dialogue: 0,0:04:35.15,0:04:39.29,Default,,0000,0000,0000,,penetrated the web development community like\Nit has now. Dialogue: 0,0:04:39.29,0:04:42.38,Default,,0000,0000,0000,,There were only, I, I used Linux at work Dialogue: 0,0:04:42.38,0:04:49.05,Default,,0000,0000,0000,,myself. And, a Windows at home, actually.\NAnd the Dialogue: 0,0:04:49.05,0:04:51.99,Default,,0000,0000,0000,,most popular phone, like, maybe not the most\Npopular, Dialogue: 0,0:04:51.99,0:04:54.81,Default,,0000,0000,0000,,but the hottest phone in 2004 was a Motorrola Dialogue: 0,0:04:54.81,0:04:58.46,Default,,0000,0000,0000,,Razr. So, right? Dialogue: 0,0:04:58.46,0:05:01.77,Default,,0000,0000,0000,,So things were pretty different there. Things\Nwere pretty Dialogue: 0,0:05:01.77,0:05:04.56,Default,,0000,0000,0000,,different then. And I was working as a Java Dialogue: 0,0:05:04.56,0:05:07.18,Default,,0000,0000,0000,,developer at the time. And I was pretty excited Dialogue: 0,0:05:07.18,0:05:10.66,Default,,0000,0000,0000,,about that, because I graduated in 2001, right\Nafter Dialogue: 0,0:05:10.66,0:05:14.34,Default,,0000,0000,0000,,the dot com bust. And things were pretty sketchy Dialogue: 0,0:05:14.34,0:05:15.99,Default,,0000,0000,0000,,there for awhile. It was hard for me to Dialogue: 0,0:05:15.99,0:05:19.23,Default,,0000,0000,0000,,find a job. And so I was excited that Dialogue: 0,0:05:19.23,0:05:20.96,Default,,0000,0000,0000,,I was able to work as a Java developer, Dialogue: 0,0:05:20.96,0:05:22.93,Default,,0000,0000,0000,,in the hot language at the time. And I Dialogue: 0,0:05:22.93,0:05:24.19,Default,,0000,0000,0000,,was, I was glad that I was able to Dialogue: 0,0:05:24.19,0:05:27.36,Default,,0000,0000,0000,,work at a software development company, where\NI could Dialogue: 0,0:05:27.36,0:05:31.69,Default,,0000,0000,0000,,work on software for sale instead of working\Nin Dialogue: 0,0:05:31.69,0:05:33.63,Default,,0000,0000,0000,,the cost center at a, at a big bank Dialogue: 0,0:05:33.63,0:05:37.09,Default,,0000,0000,0000,,or something like that, right. Dialogue: 0,0:05:37.09,0:05:40.24,Default,,0000,0000,0000,,So I was working as a Java developer, and Dialogue: 0,0:05:40.24,0:05:42.27,Default,,0000,0000,0000,,if you've ever done any Java web development,\Nyou Dialogue: 0,0:05:42.27,0:05:46.62,Default,,0000,0000,0000,,know that it can be pretty painful, right.\NAt Dialogue: 0,0:05:46.62,0:05:48.40,Default,,0000,0000,0000,,the time, the, the best way to do Java Dialogue: 0,0:05:48.40,0:05:53.50,Default,,0000,0000,0000,,web development was struts and hibernate.\NBut we didn't Dialogue: 0,0:05:53.50,0:05:56.96,Default,,0000,0000,0000,,use either of those. We used raw Java servelettes Dialogue: 0,0:05:56.96,0:06:03.37,Default,,0000,0000,0000,,and hand coded J, JDBC queries to our database. Dialogue: 0,0:06:03.37,0:06:07.00,Default,,0000,0000,0000,,So the, the real problem with Java as a, Dialogue: 0,0:06:07.00,0:06:09.92,Default,,0000,0000,0000,,as a web development platform, at least in\Nthose Dialogue: 0,0:06:09.92,0:06:12.74,Default,,0000,0000,0000,,days, was it, it has a really long edit, Dialogue: 0,0:06:12.74,0:06:16.79,Default,,0000,0000,0000,,compile, debug loop. Or, in the case of, of Dialogue: 0,0:06:16.79,0:06:20.83,Default,,0000,0000,0000,,Java web development, it's the edit, compile,\Ndeploy, debug Dialogue: 0,0:06:20.83,0:06:24.22,Default,,0000,0000,0000,,loop. Because you have to restart your app\Nserver, Dialogue: 0,0:06:24.22,0:06:25.54,Default,,0000,0000,0000,,and we used Web Sphere, so that took a Dialogue: 0,0:06:25.54,0:06:26.99,Default,,0000,0000,0000,,long time. Dialogue: 0,0:06:26.99,0:06:29.93,Default,,0000,0000,0000,,So if I needed to write a new page Dialogue: 0,0:06:29.93,0:06:33.05,Default,,0000,0000,0000,,for, for our app, it, it was a pretty Dialogue: 0,0:06:33.05,0:06:35.81,Default,,0000,0000,0000,,involved process. So we used raw servelettes,\Nso that's Dialogue: 0,0:06:35.81,0:06:38.47,Default,,0000,0000,0000,,sort of like using a raw CGI library, where Dialogue: 0,0:06:38.47,0:06:41.98,Default,,0000,0000,0000,,it's very low-level. And if, when you work\Nin Dialogue: 0,0:06:41.98,0:06:44.31,Default,,0000,0000,0000,,Java, it's very verbose and you have to read Dialogue: 0,0:06:44.31,0:06:47.00,Default,,0000,0000,0000,,from input streams and write to output streams.\NAnd Dialogue: 0,0:06:47.00,0:06:49.54,Default,,0000,0000,0000,,it just doesn't have the conveniences of Ruby\Nor Dialogue: 0,0:06:49.54,0:06:51.15,Default,,0000,0000,0000,,a scripting language. Dialogue: 0,0:06:51.15,0:06:52.45,Default,,0000,0000,0000,,So I'd have to write my servelette, then I'd Dialogue: 0,0:06:52.45,0:06:54.69,Default,,0000,0000,0000,,have to write a bunch of XML files, or Dialogue: 0,0:06:54.69,0:06:56.81,Default,,0000,0000,0000,,XML code in the web dot xml file to Dialogue: 0,0:06:56.81,0:07:00.44,Default,,0000,0000,0000,,map it up. And then you'd compile everything\Nand Dialogue: 0,0:07:00.44,0:07:02.94,Default,,0000,0000,0000,,get it working and then restart your app server, Dialogue: 0,0:07:02.94,0:07:06.81,Default,,0000,0000,0000,,which would take several minutes. And then\Nbrowse to Dialogue: 0,0:07:06.81,0:07:10.07,Default,,0000,0000,0000,,the new page to, to see what it, what's Dialogue: 0,0:07:10.07,0:07:11.23,Default,,0000,0000,0000,,going on there. Dialogue: 0,0:07:11.23,0:07:13.81,Default,,0000,0000,0000,,And that's where the fun would start, because\Nthat's Dialogue: 0,0:07:13.81,0:07:17.28,Default,,0000,0000,0000,,when the JSPs came into play. So JSP is Dialogue: 0,0:07:17.28,0:07:21.31,Default,,0000,0000,0000,,just like ERB, right. Instead of Ruby, it's\NJava. Dialogue: 0,0:07:21.31,0:07:24.39,Default,,0000,0000,0000,,But Java a much more heavy-weight language,\Nand it Dialogue: 0,0:07:24.39,0:07:27.36,Default,,0000,0000,0000,,doesn't have, you know, friendly looping constructs\Nor mapping Dialogue: 0,0:07:27.36,0:07:30.50,Default,,0000,0000,0000,,constructs like Ruby does. So writing view\Ncode in Dialogue: 0,0:07:30.50,0:07:33.43,Default,,0000,0000,0000,,Ruby, or in Java is not very much fun. Dialogue: 0,0:07:33.43,0:07:35.43,Default,,0000,0000,0000,,But worst of all, the way that JSPs work Dialogue: 0,0:07:35.43,0:07:37.81,Default,,0000,0000,0000,,is that it takes the Java, or the JSP Dialogue: 0,0:07:37.81,0:07:39.83,Default,,0000,0000,0000,,code that you write and it compiles it into Dialogue: 0,0:07:39.83,0:07:42.05,Default,,0000,0000,0000,,a Java class file. And then that Java class Dialogue: 0,0:07:42.05,0:07:47.35,Default,,0000,0000,0000,,file gets compiled into code. So when you\Nget Dialogue: 0,0:07:47.35,0:07:50.25,Default,,0000,0000,0000,,an error, when you're debugging, you'd get\Nthis stack Dialogue: 0,0:07:50.25,0:07:53.87,Default,,0000,0000,0000,,trace, and it would be like, NullPointer exception\Non Dialogue: 0,0:07:53.87,0:08:00.08,Default,,0000,0000,0000,,line 12,075 of line 20,082, and you'd sit\Nthere Dialogue: 0,0:08:00.08,0:08:06.80,Default,,0000,0000,0000,,and you'd think, ah. What was I doing in Dialogue: 0,0:08:06.80,0:08:09.84,Default,,0000,0000,0000,,my JSP that could cause a NullPointer exception? Dialogue: 0,0:08:09.84,0:08:11.96,Default,,0000,0000,0000,,And you'd look at the JSP and you'd look Dialogue: 0,0:08:11.96,0:08:14.48,Default,,0000,0000,0000,,at the stack trace, and they had no correspondence Dialogue: 0,0:08:14.48,0:08:19.70,Default,,0000,0000,0000,,whatsoever, right. So it's really painful.\NAnd if you Dialogue: 0,0:08:19.70,0:08:21.77,Default,,0000,0000,0000,,were smart, you would, there was a setting,\Nlike Dialogue: 0,0:08:21.77,0:08:23.45,Default,,0000,0000,0000,,a secret setting you could use for Web Sphere Dialogue: 0,0:08:23.45,0:08:27.57,Default,,0000,0000,0000,,to keep around the compiled Java files. So\Nthen Dialogue: 0,0:08:27.57,0:08:29.42,Default,,0000,0000,0000,,you could open that up in your web browser Dialogue: 0,0:08:29.42,0:08:33.95,Default,,0000,0000,0000,,and look at line 12,075 and be like, oh. Dialogue: 0,0:08:33.95,0:08:36.57,Default,,0000,0000,0000,,That's what I was doing in the JSP. Dialogue: 0,0:08:36.57,0:08:41.24,Default,,0000,0000,0000,,So, web development in Java, especially in\N2004, not Dialogue: 0,0:08:41.24,0:08:44.82,Default,,0000,0000,0000,,very much fun. But there was, there was also Dialogue: 0,0:08:44.82,0:08:48.11,Default,,0000,0000,0000,,at that time a glimmer that something better\Nwas Dialogue: 0,0:08:48.11,0:08:53.57,Default,,0000,0000,0000,,on the way, that the web could do more. Dialogue: 0,0:08:53.57,0:08:55.90,Default,,0000,0000,0000,,There was a new sense that the web was Dialogue: 0,0:08:55.90,0:08:59.93,Default,,0000,0000,0000,,a powerful platform for delivering software.\NAnd I think Dialogue: 0,0:08:59.93,0:09:04.40,Default,,0000,0000,0000,,that the earliest glimmerings of this come\Nfrom Microsoft's Dialogue: 0,0:09:04.40,0:09:08.57,Default,,0000,0000,0000,,Outlook web app. This was the first application\Nto Dialogue: 0,0:09:08.57,0:09:12.08,Default,,0000,0000,0000,,use what we would call today Ajax, without\Nrequiring Dialogue: 0,0:09:12.08,0:09:14.25,Default,,0000,0000,0000,,any kind of browser plugins. Dialogue: 0,0:09:14.25,0:09:18.99,Default,,0000,0000,0000,,So that, that came out in 2001. And people, Dialogue: 0,0:09:18.99,0:09:20.84,Default,,0000,0000,0000,,people didn't pay much attention to it because\Nit Dialogue: 0,0:09:20.84,0:09:24.61,Default,,0000,0000,0000,,was IE only and it, it wasn't clear how Dialogue: 0,0:09:24.61,0:09:27.54,Default,,0000,0000,0000,,it was working, right. And then Google launched\NGoogle Dialogue: 0,0:09:27.54,0:09:31.09,Default,,0000,0000,0000,,Suggest. And people dissected that, and they\Nsaw how Dialogue: 0,0:09:31.09,0:09:35.74,Default,,0000,0000,0000,,it was working. And they also launched Gmail,\Nwhich Dialogue: 0,0:09:35.74,0:09:37.74,Default,,0000,0000,0000,,gave people a new sense of what was possible Dialogue: 0,0:09:37.74,0:09:39.84,Default,,0000,0000,0000,,in a web app. That, that web apps could Dialogue: 0,0:09:39.84,0:09:44.18,Default,,0000,0000,0000,,automatically refresh as things were changing\Non the server. Dialogue: 0,0:09:44.18,0:09:46.05,Default,,0000,0000,0000,,So there was a new sense of what was Dialogue: 0,0:09:46.05,0:09:49.06,Default,,0000,0000,0000,,possible. That, that, that maybe there was\Na better Dialogue: 0,0:09:49.06,0:09:52.38,Default,,0000,0000,0000,,way of writing web apps. And in 2004 I Dialogue: 0,0:09:52.38,0:09:56.36,Default,,0000,0000,0000,,was also looking for something better. Because,\Nand I Dialogue: 0,0:09:56.36,0:09:58.07,Default,,0000,0000,0000,,attribute that to a book I read early in Dialogue: 0,0:09:58.07,0:10:01.53,Default,,0000,0000,0000,,my career. The Pragmatic Programmer by Dave\NThomas and Dialogue: 0,0:10:01.53,0:10:04.26,Default,,0000,0000,0000,,Andy Hunt. And in that book, which is, it's Dialogue: 0,0:10:04.26,0:10:06.51,Default,,0000,0000,0000,,a terrific book about becoming a better software\Ndeveloper, Dialogue: 0,0:10:06.51,0:10:10.27,Default,,0000,0000,0000,,a better software crafts man. In that book,\Nthey Dialogue: 0,0:10:10.27,0:10:13.72,Default,,0000,0000,0000,,talk about the importance of learning a scripting\Nlanguage. Dialogue: 0,0:10:13.72,0:10:16.24,Default,,0000,0000,0000,,And that's because, if you were working in\Na Dialogue: 0,0:10:16.24,0:10:19.15,Default,,0000,0000,0000,,language like Java, there's often things that\Nare too, Dialogue: 0,0:10:19.15,0:10:21.11,Default,,0000,0000,0000,,too small of a task to make it worth Dialogue: 0,0:10:21.11,0:10:23.99,Default,,0000,0000,0000,,writing a Java program to do. And, but a Dialogue: 0,0:10:23.99,0:10:25.64,Default,,0000,0000,0000,,scripting language you can, you know, knock\Nthat off Dialogue: 0,0:10:25.64,0:10:27.35,Default,,0000,0000,0000,,really easily. Dialogue: 0,0:10:27.35,0:10:28.94,Default,,0000,0000,0000,,So things that you might do manually, you\Ncan Dialogue: 0,0:10:28.94,0:10:33.02,Default,,0000,0000,0000,,instead write a script to do for you. And Dialogue: 0,0:10:33.02,0:10:35.41,Default,,0000,0000,0000,,so I took that to heart, and I went Dialogue: 0,0:10:35.41,0:10:38.01,Default,,0000,0000,0000,,to the book store. Remember, this was the\Nearly Dialogue: 0,0:10:38.01,0:10:42.58,Default,,0000,0000,0000,,2000s. There were still bookstores. And I\Nlooked at Dialogue: 0,0:10:42.58,0:10:44.78,Default,,0000,0000,0000,,all the books that they had about scripting\Nlanguages. Dialogue: 0,0:10:44.78,0:10:46.35,Default,,0000,0000,0000,,So there was a bunch of books about Perl. Dialogue: 0,0:10:46.35,0:10:49.62,Default,,0000,0000,0000,,There was a bunch of books about Python. And Dialogue: 0,0:10:49.62,0:10:52.22,Default,,0000,0000,0000,,there was this one book about Ruby by those Dialogue: 0,0:10:52.22,0:10:55.46,Default,,0000,0000,0000,,same guys, Dave Thomas and Andy Hunt. Dialogue: 0,0:10:55.46,0:10:58.27,Default,,0000,0000,0000,,So I immediately just started the books about\NPerl, Dialogue: 0,0:10:58.27,0:11:00.64,Default,,0000,0000,0000,,because I'd worked with Perl before and I\Nthought Dialogue: 0,0:11:00.64,0:11:05.37,Default,,0000,0000,0000,,it was terrible. And I looked at the books Dialogue: 0,0:11:05.37,0:11:07.62,Default,,0000,0000,0000,,about Python, and I'm like, this looks OK.\NI Dialogue: 0,0:11:07.62,0:11:09.71,Default,,0000,0000,0000,,can see myself using this. And then I looked Dialogue: 0,0:11:09.71,0:11:13.17,Default,,0000,0000,0000,,at the book about Ruby. And, unfortunately,\Nwhat I Dialogue: 0,0:11:13.17,0:11:14.75,Default,,0000,0000,0000,,saw in the book about Ruby was a lot Dialogue: 0,0:11:14.75,0:11:18.73,Default,,0000,0000,0000,,of dollar signs and dollar sign underscores\Nand at Dialogue: 0,0:11:18.73,0:11:23.00,Default,,0000,0000,0000,,signs and at at signs. And I thought, this Dialogue: 0,0:11:23.00,0:11:26.45,Default,,0000,0000,0000,,looks just like Perl. I don't, I don't want Dialogue: 0,0:11:26.45,0:11:28.84,Default,,0000,0000,0000,,to learn this. This, this is, this is, this Dialogue: 0,0:11:28.84,0:11:30.55,Default,,0000,0000,0000,,is crappy. Dialogue: 0,0:11:30.55,0:11:33.61,Default,,0000,0000,0000,,So I decided then to become a Python programmer. Dialogue: 0,0:11:33.61,0:11:35.92,Default,,0000,0000,0000,,And I was actually able to use Python for Dialogue: 0,0:11:35.92,0:11:37.70,Default,,0000,0000,0000,,a number of things in my job and my Dialogue: 0,0:11:37.70,0:11:41.35,Default,,0000,0000,0000,,personal programming. I wrote a script to\Nmigrate from Dialogue: 0,0:11:41.35,0:11:44.04,Default,,0000,0000,0000,,one bug database to the other. I wrote a Dialogue: 0,0:11:44.04,0:11:46.44,Default,,0000,0000,0000,,script that tied our subversion check ins\Nto our Dialogue: 0,0:11:46.44,0:11:48.64,Default,,0000,0000,0000,,bug database so you could reference bug numbers\Nand Dialogue: 0,0:11:48.64,0:11:51.67,Default,,0000,0000,0000,,link up the commits and stuff. Dialogue: 0,0:11:51.67,0:11:55.36,Default,,0000,0000,0000,,And I, I wrote some personal scripts. But\Nwhat Dialogue: 0,0:11:55.36,0:11:58.32,Default,,0000,0000,0000,,I really wanted to do was write web apps. Dialogue: 0,0:11:58.32,0:12:00.58,Default,,0000,0000,0000,,Because that's, throughout my career, that's\Nalways what I've Dialogue: 0,0:12:00.58,0:12:03.57,Default,,0000,0000,0000,,been most excited about. Because I've always\Nloved the Dialogue: 0,0:12:03.57,0:12:06.68,Default,,0000,0000,0000,,potential of the web as a platform for enabling Dialogue: 0,0:12:06.68,0:12:10.77,Default,,0000,0000,0000,,communication. It's, it's the most powerful\Nand widely distributed Dialogue: 0,0:12:10.77,0:12:14.60,Default,,0000,0000,0000,,way that you can connect people. Dialogue: 0,0:12:14.60,0:12:16.10,Default,,0000,0000,0000,,And so every time I would have an idea Dialogue: 0,0:12:16.10,0:12:19.77,Default,,0000,0000,0000,,for a web app in Python, I would start Dialogue: 0,0:12:19.77,0:12:22.06,Default,,0000,0000,0000,,thinking about how it, or, I would start thinking Dialogue: 0,0:12:22.06,0:12:23.83,Default,,0000,0000,0000,,about how it should work and what it should Dialogue: 0,0:12:23.83,0:12:25.62,Default,,0000,0000,0000,,do. And I'd get excited about it, and want Dialogue: 0,0:12:25.62,0:12:28.20,Default,,0000,0000,0000,,to build it. And then I'd start reading about Dialogue: 0,0:12:28.20,0:12:30.04,Default,,0000,0000,0000,,how to build web apps in Python. And get Dialogue: 0,0:12:30.04,0:12:31.50,Default,,0000,0000,0000,,really frustrated. Dialogue: 0,0:12:31.50,0:12:33.77,Default,,0000,0000,0000,,Because, then there was no clear way. There\Nwas Dialogue: 0,0:12:33.77,0:12:38.37,Default,,0000,0000,0000,,no Jengo. There was CGI in the core library, Dialogue: 0,0:12:38.37,0:12:40.50,Default,,0000,0000,0000,,but, you know, who wants to write at that Dialogue: 0,0:12:40.50,0:12:46.60,Default,,0000,0000,0000,,low-level? There was, then, a myriad of templating\Noptions Dialogue: 0,0:12:46.60,0:12:50.19,Default,,0000,0000,0000,,and different object relational mappers and\Ndifferent ways of Dialogue: 0,0:12:50.19,0:12:53.32,Default,,0000,0000,0000,,publishing your objects to the web and different\Ndatabase Dialogue: 0,0:12:53.32,0:12:57.37,Default,,0000,0000,0000,,drivers. And, there was no clear way of deploying Dialogue: 0,0:12:57.37,0:12:58.50,Default,,0000,0000,0000,,the software, either. Dialogue: 0,0:12:58.50,0:13:02.17,Default,,0000,0000,0000,,So I would have this idea for what I Dialogue: 0,0:13:02.17,0:13:04.57,Default,,0000,0000,0000,,thought would be the next great app, and then Dialogue: 0,0:13:04.57,0:13:08.21,Default,,0000,0000,0000,,I would start reading about Python, how to\Nimplement Dialogue: 0,0:13:08.21,0:13:11.45,Default,,0000,0000,0000,,it in Python and get frustrated and give up. Dialogue: 0,0:13:11.45,0:13:13.98,Default,,0000,0000,0000,,But I didn't know it at the time, but Dialogue: 0,0:13:13.98,0:13:16.32,Default,,0000,0000,0000,,there was something better on the way. Dialogue: 0,0:13:16.32,0:13:23.26,Default,,0000,0000,0000,,So let's turn now to 2014, and think about Dialogue: 0,0:13:23.26,0:13:27.38,Default,,0000,0000,0000,,what would a programmer from 2004 think about\Nhow Dialogue: 0,0:13:27.38,0:13:30.05,Default,,0000,0000,0000,,we work today. Dialogue: 0,0:13:30.05,0:13:31.20,Default,,0000,0000,0000,,And I think if you could take someone from Dialogue: 0,0:13:31.20,0:13:33.24,Default,,0000,0000,0000,,then and bring them forward to now, I think Dialogue: 0,0:13:33.24,0:13:36.37,Default,,0000,0000,0000,,they would be amazed. Because it's truly a\Ngreat Dialogue: 0,0:13:36.37,0:13:40.68,Default,,0000,0000,0000,,time to be a programmer. We're all walking\Naround Dialogue: 0,0:13:40.68,0:13:43.04,Default,,0000,0000,0000,,with a computer in our pockets that's more\Npowerful Dialogue: 0,0:13:43.04,0:13:47.05,Default,,0000,0000,0000,,than the desktop I had in 2004. And it Dialogue: 0,0:13:47.05,0:13:50.31,Default,,0000,0000,0000,,has a, a better web browser, too. Dialogue: 0,0:13:50.31,0:13:53.95,Default,,0000,0000,0000,,So think about what's different between now\Nand then. Dialogue: 0,0:13:53.95,0:13:58.27,Default,,0000,0000,0000,,In 2004, Ajax was in its infancy. The term Dialogue: 0,0:13:58.27,0:14:04.32,Default,,0000,0000,0000,,hadn't even been coined yet. Today, rich Ajax\Nframeworks Dialogue: 0,0:14:04.32,0:14:08.94,Default,,0000,0000,0000,,come with every web application framework.\NSo you can, Dialogue: 0,0:14:08.94,0:14:12.67,Default,,0000,0000,0000,,you can build rich, interactive applications\Nmuch easier. Dialogue: 0,0:14:12.67,0:14:15.55,Default,,0000,0000,0000,,And, you can even write your entire frontend\Nin Dialogue: 0,0:14:15.55,0:14:19.76,Default,,0000,0000,0000,,JavaScript if you want to. Web browsers are\Nimmeasurably Dialogue: 0,0:14:19.76,0:14:25.29,Default,,0000,0000,0000,,more powerful now than they, than they were\Nthen. Dialogue: 0,0:14:25.29,0:14:28.90,Default,,0000,0000,0000,,Deployment is much easier, too. In 2004, it\Nwas Dialogue: 0,0:14:28.90,0:14:30.42,Default,,0000,0000,0000,,really hard to figure out how you should get Dialogue: 0,0:14:30.42,0:14:33.83,Default,,0000,0000,0000,,your app up on the web. You could colo, Dialogue: 0,0:14:33.83,0:14:37.10,Default,,0000,0000,0000,,but that was expensive. You could use shared\Nhosting, Dialogue: 0,0:14:37.10,0:14:41.11,Default,,0000,0000,0000,,like, DreamHost or something like that. But\Nthose servers Dialogue: 0,0:14:41.11,0:14:44.32,Default,,0000,0000,0000,,were underpowered and kind of weak. Dialogue: 0,0:14:44.32,0:14:46.87,Default,,0000,0000,0000,,Today, you can spin up a server with the Dialogue: 0,0:14:46.87,0:14:49.94,Default,,0000,0000,0000,,click of a button. You can manage everything\Nyourself Dialogue: 0,0:14:49.94,0:14:53.04,Default,,0000,0000,0000,,if you want to use EC2, or you can Dialogue: 0,0:14:53.04,0:14:56.77,Default,,0000,0000,0000,,rely on platform services like Heroku or Google\NApp Dialogue: 0,0:14:56.77,0:15:00.82,Default,,0000,0000,0000,,Engine. And this is really great for programmers,\Nbecause Dialogue: 0,0:15:00.82,0:15:03.49,Default,,0000,0000,0000,,you don't have to be a great programmer and Dialogue: 0,0:15:03.49,0:15:06.67,Default,,0000,0000,0000,,a great sys admin now to launch a web Dialogue: 0,0:15:06.67,0:15:10.70,Default,,0000,0000,0000,,application. You can let other people handle\Nthat part. Dialogue: 0,0:15:10.70,0:15:11.91,Default,,0000,0000,0000,,And that's terrific. Dialogue: 0,0:15:11.91,0:15:14.92,Default,,0000,0000,0000,,Another thing that I think is really powerful\Nabout Dialogue: 0,0:15:14.92,0:15:20.95,Default,,0000,0000,0000,,how we work today is that in, today we Dialogue: 0,0:15:20.95,0:15:24.16,Default,,0000,0000,0000,,have access to all of these web service APIs, Dialogue: 0,0:15:24.16,0:15:27.38,Default,,0000,0000,0000,,with a simple HTTP request. You can extend\Nthe Dialogue: 0,0:15:27.38,0:15:30.29,Default,,0000,0000,0000,,functionality of your app really easily by\Nleveraging these Dialogue: 0,0:15:30.29,0:15:30.94,Default,,0000,0000,0000,,services. Dialogue: 0,0:15:30.94,0:15:34.27,Default,,0000,0000,0000,,There's everything from search, like my, my\Ncompany provides, Dialogue: 0,0:15:34.27,0:15:36.97,Default,,0000,0000,0000,,to payments from companies like Stripe, and\Neven telephony Dialogue: 0,0:15:36.97,0:15:39.56,Default,,0000,0000,0000,,from companies like Twillio. Dialogue: 0,0:15:39.56,0:15:42.64,Default,,0000,0000,0000,,So with just an HTTP request, you can add Dialogue: 0,0:15:42.64,0:15:46.50,Default,,0000,0000,0000,,that kind of functionality into your application\Nsuper easily. Dialogue: 0,0:15:46.50,0:15:49.32,Default,,0000,0000,0000,,And best of all, you're us- they use JSON Dialogue: 0,0:15:49.32,0:15:51.44,Default,,0000,0000,0000,,instead of XML. So there's no XML setups like Dialogue: 0,0:15:51.44,0:15:55.66,Default,,0000,0000,0000,,there was back in the early 2000s. Dialogue: 0,0:15:55.66,0:15:58.28,Default,,0000,0000,0000,,But what about Rails? Like, what would a programmer Dialogue: 0,0:15:58.28,0:16:02.06,Default,,0000,0000,0000,,from 2004 think about Ruby on Rails? Well,\NI Dialogue: 0,0:16:02.06,0:16:04.93,Default,,0000,0000,0000,,think if you could bring someone, or talk\Nto Dialogue: 0,0:16:04.93,0:16:07.61,Default,,0000,0000,0000,,somebody in 2004 and say, in ten years the Dialogue: 0,0:16:07.61,0:16:09.38,Default,,0000,0000,0000,,best way to make a web app is gonna Dialogue: 0,0:16:09.38,0:16:11.92,Default,,0000,0000,0000,,be this thing called Ruby on Rails. I think Dialogue: 0,0:16:11.92,0:16:15.32,Default,,0000,0000,0000,,what they would say is, what on Rails? Dialogue: 0,0:16:15.32,0:16:19.30,Default,,0000,0000,0000,,It's difficult to overstate how marginal the\NRuby community Dialogue: 0,0:16:19.30,0:16:26.30,Default,,0000,0000,0000,,was in 2004. When David publicly demo'd Rails\Nat Dialogue: 0,0:16:27.83,0:16:31.83,Default,,0000,0000,0000,,RubyConf 2004, there were probably less people\Nin the Dialogue: 0,0:16:31.83,0:16:36.07,Default,,0000,0000,0000,,room than there are right now. That, there\Nwere Dialogue: 0,0:16:36.07,0:16:39.17,Default,,0000,0000,0000,,about sixty people at that conference. Dialogue: 0,0:16:39.17,0:16:43.01,Default,,0000,0000,0000,,Today, there's dozens of conferences around\Nthe world, and Dialogue: 0,0:16:43.01,0:16:46.79,Default,,0000,0000,0000,,thousands of people make their livings using\NRuby and Dialogue: 0,0:16:46.79,0:16:52.88,Default,,0000,0000,0000,,Rails. The community has grown tremendously\Nsince those days. Dialogue: 0,0:16:52.88,0:16:58.24,Default,,0000,0000,0000,,But what about the features? The features\Nwere really Dialogue: 0,0:16:58.24,0:17:02.85,Default,,0000,0000,0000,,what made Rails succeed. And if I think back Dialogue: 0,0:17:02.85,0:17:05.43,Default,,0000,0000,0000,,on what I first thought about Rails when I Dialogue: 0,0:17:05.43,0:17:09.20,Default,,0000,0000,0000,,saw it, like, what impressed me. Things that,\Nthat Dialogue: 0,0:17:09.20,0:17:12.79,Default,,0000,0000,0000,,really stand out in my mind are things like Dialogue: 0,0:17:12.79,0:17:14.73,Default,,0000,0000,0000,,live reloading. Dialogue: 0,0:17:14.73,0:17:16.77,Default,,0000,0000,0000,,Compared to how I was working in Java, where Dialogue: 0,0:17:16.77,0:17:18.30,Default,,0000,0000,0000,,it was like, a really long cycle to get Dialogue: 0,0:17:18.30,0:17:20.83,Default,,0000,0000,0000,,anything up on the screen, in Rails, you could Dialogue: 0,0:17:20.83,0:17:24.15,Default,,0000,0000,0000,,edit any file. You could edit your model,\Nyou're, Dialogue: 0,0:17:24.15,0:17:27.05,Default,,0000,0000,0000,,you're views. Even your database schema. And\Nreload your Dialogue: 0,0:17:27.05,0:17:30.13,Default,,0000,0000,0000,,browser and it was right there. And that was Dialogue: 0,0:17:30.13,0:17:31.20,Default,,0000,0000,0000,,tremendously exciting. Dialogue: 0,0:17:31.20,0:17:33.63,Default,,0000,0000,0000,,And, if you had an exception in your, in Dialogue: 0,0:17:33.63,0:17:36.22,Default,,0000,0000,0000,,your view, you would see exactly which line\Nof Dialogue: 0,0:17:36.22,0:17:39.20,Default,,0000,0000,0000,,code caused it, and not have to wade through Dialogue: 0,0:17:39.20,0:17:41.78,Default,,0000,0000,0000,,these huge stack traces that had nothing to\Ndo Dialogue: 0,0:17:41.78,0:17:45.70,Default,,0000,0000,0000,,with what you were working on. And that was Dialogue: 0,0:17:45.70,0:17:47.81,Default,,0000,0000,0000,,tremendous for developer productivity. Dialogue: 0,0:17:47.81,0:17:50.35,Default,,0000,0000,0000,,Another thing that was a real big win for Dialogue: 0,0:17:50.35,0:17:55.25,Default,,0000,0000,0000,,developer productivity, for me anyway, was\Nthe development console. Dialogue: 0,0:17:55.25,0:17:57.53,Default,,0000,0000,0000,,Rails let you just type a single command and Dialogue: 0,0:17:57.53,0:17:59.49,Default,,0000,0000,0000,,get full access to all of the code that Dialogue: 0,0:17:59.49,0:18:01.80,Default,,0000,0000,0000,,you'd been writing. So, for me, I keep that Dialogue: 0,0:18:01.80,0:18:03.80,Default,,0000,0000,0000,,open all the time. And I am always constantly Dialogue: 0,0:18:03.80,0:18:06.98,Default,,0000,0000,0000,,trying out things and experimenting and trying\Nto figure Dialogue: 0,0:18:06.98,0:18:09.91,Default,,0000,0000,0000,,out how different APIs work by using the developer Dialogue: 0,0:18:09.91,0:18:11.30,Default,,0000,0000,0000,,console. Dialogue: 0,0:18:11.30,0:18:12.91,Default,,0000,0000,0000,,This is something that I'd been able to get Dialogue: 0,0:18:12.91,0:18:15.78,Default,,0000,0000,0000,,working in the Java world using a tool called Dialogue: 0,0:18:15.78,0:18:18.24,Default,,0000,0000,0000,,BeanShell, which is like a Java scripting\Nframework. But Dialogue: 0,0:18:18.24,0:18:20.72,Default,,0000,0000,0000,,it was nowhere near as good as the Rails Dialogue: 0,0:18:20.72,0:18:24.01,Default,,0000,0000,0000,,console, and, you know, it just was a lot Dialogue: 0,0:18:24.01,0:18:27.70,Default,,0000,0000,0000,,harder to, to get working. Dialogue: 0,0:18:27.70,0:18:29.65,Default,,0000,0000,0000,,Related to that is just the idea of having Dialogue: 0,0:18:29.65,0:18:33.40,Default,,0000,0000,0000,,separate development environments. Rails came\Nright out of the Dialogue: 0,0:18:33.40,0:18:36.59,Default,,0000,0000,0000,,box with development, production, and test,\Nand has separate Dialogue: 0,0:18:36.59,0:18:38.48,Default,,0000,0000,0000,,databases for all of those things. So you\Ndidn't Dialogue: 0,0:18:38.48,0:18:40.54,Default,,0000,0000,0000,,have to worry about mixing your code together. Dialogue: 0,0:18:40.54,0:18:43.67,Default,,0000,0000,0000,,You could have separate configurations for\Ntesting and production Dialogue: 0,0:18:43.67,0:18:47.22,Default,,0000,0000,0000,,and development. And that really helped with\Nthe software Dialogue: 0,0:18:47.22,0:18:49.41,Default,,0000,0000,0000,,engineering side of Rails. Dialogue: 0,0:18:49.41,0:18:52.52,Default,,0000,0000,0000,,Finally, the, the, the last big feature that\NI Dialogue: 0,0:18:52.52,0:18:56.17,Default,,0000,0000,0000,,think really stood out to me was ActiveRecord\Nand Dialogue: 0,0:18:56.17,0:19:00.10,Default,,0000,0000,0000,,migrations. ActiveRecord was super exciting,\Nbecause here, this, this, Dialogue: 0,0:19:00.10,0:19:02.56,Default,,0000,0000,0000,,this, this code is sort of magically intuiting\Nthe, Dialogue: 0,0:19:02.56,0:19:05.20,Default,,0000,0000,0000,,the fields from the structure of your database.\NYou Dialogue: 0,0:19:05.20,0:19:06.95,Default,,0000,0000,0000,,didn't have to write any code at all. And Dialogue: 0,0:19:06.95,0:19:10.48,Default,,0000,0000,0000,,for someone who was writing SQL statements\Nby hand, Dialogue: 0,0:19:10.48,0:19:12.60,Default,,0000,0000,0000,,that was really exciting. Dialogue: 0,0:19:12.60,0:19:14.80,Default,,0000,0000,0000,,And migrations were awesome, too, because\Nyou always need Dialogue: 0,0:19:14.80,0:19:17.75,Default,,0000,0000,0000,,to transition the state of your database in\Nyour, Dialogue: 0,0:19:17.75,0:19:18.69,Default,,0000,0000,0000,,in your application. Dialogue: 0,0:19:18.69,0:19:21.61,Default,,0000,0000,0000,,And, again, this is something that we had\Nbuilt Dialogue: 0,0:19:21.61,0:19:24.94,Default,,0000,0000,0000,,at my job. But ours was not as good. Dialogue: 0,0:19:24.94,0:19:28.94,Default,,0000,0000,0000,,It, it used raw SQL, so you would write Dialogue: 0,0:19:28.94,0:19:32.04,Default,,0000,0000,0000,,SQL statements to, to transition the database.\NAnd it Dialogue: 0,0:19:32.04,0:19:34.42,Default,,0000,0000,0000,,was tied directly to the app version that,\Nthat Dialogue: 0,0:19:34.42,0:19:36.96,Default,,0000,0000,0000,,we had. So, when you would release a new Dialogue: 0,0:19:36.96,0:19:39.35,Default,,0000,0000,0000,,version of the app, you would have to sync Dialogue: 0,0:19:39.35,0:19:41.65,Default,,0000,0000,0000,,that with the database. The database version\Nwould have Dialogue: 0,0:19:41.65,0:19:42.89,Default,,0000,0000,0000,,to be synced with that. Dialogue: 0,0:19:42.89,0:19:44.69,Default,,0000,0000,0000,,So there was, there was no way to independently Dialogue: 0,0:19:44.69,0:19:46.61,Default,,0000,0000,0000,,migrate the database. Dialogue: 0,0:19:46.61,0:19:47.97,Default,,0000,0000,0000,,And there was no way to go down. So Dialogue: 0,0:19:47.97,0:19:50.98,Default,,0000,0000,0000,,you had to get it right. Rails was better Dialogue: 0,0:19:50.98,0:19:53.19,Default,,0000,0000,0000,,than that. Dialogue: 0,0:19:53.19,0:19:56.15,Default,,0000,0000,0000,,But why did Rails win? Why, why was Rails Dialogue: 0,0:19:56.15,0:19:59.07,Default,,0000,0000,0000,,exciting to people? Because all these features\Nwere available Dialogue: 0,0:19:59.07,0:20:03.17,Default,,0000,0000,0000,,elsewhere. I think there's three reasons. Dialogue: 0,0:20:03.17,0:20:04.96,Default,,0000,0000,0000,,First of all, while each of these features\Nwas Dialogue: 0,0:20:04.96,0:20:07.70,Default,,0000,0000,0000,,something that you could get in other web\Nprogramming Dialogue: 0,0:20:07.70,0:20:11.76,Default,,0000,0000,0000,,frameworks, Rails brought them all together.\NRails was the Dialogue: 0,0:20:11.76,0:20:18.69,Default,,0000,0000,0000,,whole package. So Rails took things that were\Npossible Dialogue: 0,0:20:18.69,0:20:21.54,Default,,0000,0000,0000,,and made them easy. It, even that, it made Dialogue: 0,0:20:21.54,0:20:22.97,Default,,0000,0000,0000,,them the default. Dialogue: 0,0:20:22.97,0:20:25.33,Default,,0000,0000,0000,,So Rails took a lot of best practices and Dialogue: 0,0:20:25.33,0:20:27.57,Default,,0000,0000,0000,,put them together in one thing that you could Dialogue: 0,0:20:27.57,0:20:31.20,Default,,0000,0000,0000,,use super simply. And that was really exciting\Nto Dialogue: 0,0:20:31.20,0:20:34.55,Default,,0000,0000,0000,,people. Even, even for me, because I was able Dialogue: 0,0:20:34.55,0:20:36.31,Default,,0000,0000,0000,,to, to do some of the things that Rails Dialogue: 0,0:20:36.31,0:20:39.42,Default,,0000,0000,0000,,had. Having it together in one package was\Nsuper Dialogue: 0,0:20:39.42,0:20:41.26,Default,,0000,0000,0000,,exciting. Dialogue: 0,0:20:41.26,0:20:43.33,Default,,0000,0000,0000,,The second reason I think Rails succeeded\Nis the Dialogue: 0,0:20:43.33,0:20:46.28,Default,,0000,0000,0000,,triumph of hype. If you go back and read Dialogue: 0,0:20:46.28,0:20:49.49,Default,,0000,0000,0000,,the early blog posts about Rails, it's really\Ninteresting Dialogue: 0,0:20:49.49,0:20:53.20,Default,,0000,0000,0000,,because it really caused a furor in the Java Dialogue: 0,0:20:53.20,0:20:55.47,Default,,0000,0000,0000,,and the Python world. Because people were\Nlike, well, Dialogue: 0,0:20:55.47,0:20:57.95,Default,,0000,0000,0000,,why can't we do this? And in the middle Dialogue: 0,0:20:57.95,0:21:01.81,Default,,0000,0000,0000,,of all that, you saw DHH. He was constantly Dialogue: 0,0:21:01.81,0:21:06.23,Default,,0000,0000,0000,,promoting Rails and getting into discussions\Nand arguments with Dialogue: 0,0:21:06.23,0:21:10.57,Default,,0000,0000,0000,,other people and blogging about it. And he,\Nhe Dialogue: 0,0:21:10.57,0:21:13.60,Default,,0000,0000,0000,,was relentless in promoting Rails, and the\Nearly Rails Dialogue: 0,0:21:13.60,0:21:16.93,Default,,0000,0000,0000,,community was relentless in sharing their\Nenthusiasm for this Dialogue: 0,0:21:16.93,0:21:18.42,Default,,0000,0000,0000,,new thing. Dialogue: 0,0:21:18.42,0:21:20.45,Default,,0000,0000,0000,,And I think that that matters a lot, because Dialogue: 0,0:21:20.45,0:21:23.81,Default,,0000,0000,0000,,it's not enough to have great code and just Dialogue: 0,0:21:23.81,0:21:26.72,Default,,0000,0000,0000,,put it up on the internet. That, that never Dialogue: 0,0:21:26.72,0:21:29.17,Default,,0000,0000,0000,,works. You need to tell people about what\Nyou're Dialogue: 0,0:21:29.17,0:21:32.97,Default,,0000,0000,0000,,doing in order for them to know about it. Dialogue: 0,0:21:32.97,0:21:36.49,Default,,0000,0000,0000,,And you need to explain clearly and concisely\Nwhy Dialogue: 0,0:21:36.49,0:21:40.48,Default,,0000,0000,0000,,it's better than what they're doing now. And\NRails, Dialogue: 0,0:21:40.48,0:21:44.15,Default,,0000,0000,0000,,David and the Rails community really succeeded\Nat that. Dialogue: 0,0:21:44.15,0:21:48.92,Default,,0000,0000,0000,,Third. Another reason that Rails succeeded\Nis the triumph Dialogue: 0,0:21:48.92,0:21:53.38,Default,,0000,0000,0000,,of community. From really early days, Rails\Nhad the Dialogue: 0,0:21:53.38,0:21:56.32,Default,,0000,0000,0000,,ability to be extended with plugins. And so\Npeople Dialogue: 0,0:21:56.32,0:21:59.51,Default,,0000,0000,0000,,wrote plugins that would take care of default\Nareas, Dialogue: 0,0:21:59.51,0:22:02.22,Default,,0000,0000,0000,,or not, not default areas, but common areas\Nof Dialogue: 0,0:22:02.22,0:22:06.04,Default,,0000,0000,0000,,your application, like logging in or uploading\Nfiles. Dialogue: 0,0:22:06.04,0:22:07.43,Default,,0000,0000,0000,,These are the things that you needed in your Dialogue: 0,0:22:07.43,0:22:10.64,Default,,0000,0000,0000,,app, but they weren't core to your app. And Dialogue: 0,0:22:10.64,0:22:13.98,Default,,0000,0000,0000,,so knowing that you could take advantage of\Nthese, Dialogue: 0,0:22:13.98,0:22:18.44,Default,,0000,0000,0000,,these plugins and later gems really made picking\NRails Dialogue: 0,0:22:18.44,0:22:24.91,Default,,0000,0000,0000,,an easier choice. Dialogue: 0,0:22:24.91,0:22:27.82,Default,,0000,0000,0000,,So ultimately, Rails was successful. But what\Nabout the Dialogue: 0,0:22:27.82,0:22:31.16,Default,,0000,0000,0000,,future? What does the future have in store\Nfor Dialogue: 0,0:22:31.16,0:22:36.02,Default,,0000,0000,0000,,Rails? I think that Rails does face challenges\Nin Dialogue: 0,0:22:36.02,0:22:40.80,Default,,0000,0000,0000,,the future, because, because the web is changing.\NWhat Dialogue: 0,0:22:40.80,0:22:42.85,Default,,0000,0000,0000,,people want to do on the web is, is Dialogue: 0,0:22:42.85,0:22:46.08,Default,,0000,0000,0000,,becoming different. And indeed the, the future\Nof the Dialogue: 0,0:22:46.08,0:22:48.87,Default,,0000,0000,0000,,web I think is even in question. Dialogue: 0,0:22:48.87,0:22:51.77,Default,,0000,0000,0000,,So let's look at two challenges to Rails.\NFirst Dialogue: 0,0:22:51.77,0:22:55.100,Default,,0000,0000,0000,,of all, now that browsers are more powerful,\Npeople Dialogue: 0,0:22:55.100,0:22:58.22,Default,,0000,0000,0000,,are able to write more of their app on Dialogue: 0,0:22:58.22,0:23:01.80,Default,,0000,0000,0000,,the frontend. And so, when you do this, you Dialogue: 0,0:23:01.80,0:23:05.53,Default,,0000,0000,0000,,don't need the kind of classic web app that Dialogue: 0,0:23:05.53,0:23:08.12,Default,,0000,0000,0000,,Rails is. Rails is really good at generating\Na Dialogue: 0,0:23:08.12,0:23:10.62,Default,,0000,0000,0000,,lot of HTML and shipping it down to the Dialogue: 0,0:23:10.62,0:23:14.77,Default,,0000,0000,0000,,client. Kind of the classic web app like base Dialogue: 0,0:23:14.77,0:23:16.59,Default,,0000,0000,0000,,camp. Dialogue: 0,0:23:16.59,0:23:19.20,Default,,0000,0000,0000,,But when you're writing your entire app in\NJavaScript Dialogue: 0,0:23:19.20,0:23:21.65,Default,,0000,0000,0000,,in the client, what you need is the ability Dialogue: 0,0:23:21.65,0:23:24.63,Default,,0000,0000,0000,,to talk to the server with an API. And Dialogue: 0,0:23:24.63,0:23:28.38,Default,,0000,0000,0000,,when that's all you're doing, people can question,\Nwhy Dialogue: 0,0:23:28.38,0:23:29.86,Default,,0000,0000,0000,,do I need Rails? Why do I need all Dialogue: 0,0:23:29.86,0:23:33.21,Default,,0000,0000,0000,,of this extra stuff that Rails does? I'm,\Nmaybe Dialogue: 0,0:23:33.21,0:23:35.48,Default,,0000,0000,0000,,I should just use node.js, and then I can Dialogue: 0,0:23:35.48,0:23:38.10,Default,,0000,0000,0000,,write, you know, the same language on the\Nclient Dialogue: 0,0:23:38.10,0:23:40.49,Default,,0000,0000,0000,,and the server. Dialogue: 0,0:23:40.49,0:23:45.98,Default,,0000,0000,0000,,Similarly, mobile apps are becoming increasingly\Npopular, because you Dialogue: 0,0:23:45.98,0:23:47.72,Default,,0000,0000,0000,,can do so much more with a mobile app Dialogue: 0,0:23:47.72,0:23:49.98,Default,,0000,0000,0000,,than you can with a web app. The user Dialogue: 0,0:23:49.98,0:23:54.17,Default,,0000,0000,0000,,interaction is much richer and, and faster\Nand, and Dialogue: 0,0:23:54.17,0:23:58.92,Default,,0000,0000,0000,,just cleaner. And, again, these kind of apps\Ntalk Dialogue: 0,0:23:58.92,0:24:02.54,Default,,0000,0000,0000,,to the server with an API. And so people Dialogue: 0,0:24:02.54,0:24:05.83,Default,,0000,0000,0000,,think, well, I don't need Rails, then. Dialogue: 0,0:24:05.83,0:24:07.38,Default,,0000,0000,0000,,And I think that this, this is a threat Dialogue: 0,0:24:07.38,0:24:10.66,Default,,0000,0000,0000,,to Rails. But there's two key things to remember Dialogue: 0,0:24:10.66,0:24:14.48,Default,,0000,0000,0000,,about this. One, Rails is great at this kind Dialogue: 0,0:24:14.48,0:24:18.44,Default,,0000,0000,0000,,of thing. In our application, we serve hundreds\Nof Dialogue: 0,0:24:18.44,0:24:23.51,Default,,0000,0000,0000,,millions of API requests a day, a month, using Dialogue: 0,0:24:23.51,0:24:25.99,Default,,0000,0000,0000,,Rails. And the way that we do that is Dialogue: 0,0:24:25.99,0:24:28.27,Default,,0000,0000,0000,,not using action Controller. Dialogue: 0,0:24:28.27,0:24:30.25,Default,,0000,0000,0000,,But Rails makes it easy to pick out only Dialogue: 0,0:24:30.25,0:24:33.86,Default,,0000,0000,0000,,the parts of Rails that you need to use. Dialogue: 0,0:24:33.86,0:24:35.74,Default,,0000,0000,0000,,And so you can, you can take Rails much Dialogue: 0,0:24:35.74,0:24:40.19,Default,,0000,0000,0000,,further than many people think, I believe. Dialogue: 0,0:24:40.19,0:24:43.51,Default,,0000,0000,0000,,Second, even if you are building an API heavy Dialogue: 0,0:24:43.51,0:24:45.70,Default,,0000,0000,0000,,app, not all of your app is going to Dialogue: 0,0:24:45.70,0:24:49.30,Default,,0000,0000,0000,,be API based. You are going to need a Dialogue: 0,0:24:49.30,0:24:54.18,Default,,0000,0000,0000,,management console to handle the backend of\Nyour application. Dialogue: 0,0:24:54.18,0:24:55.90,Default,,0000,0000,0000,,Pretty much every app has this. You need a Dialogue: 0,0:24:55.90,0:24:59.40,Default,,0000,0000,0000,,way to look up your users and, you know, Dialogue: 0,0:24:59.40,0:25:02.01,Default,,0000,0000,0000,,change their account status and things like\Nthat. Dialogue: 0,0:25:02.01,0:25:04.64,Default,,0000,0000,0000,,And, are you gonna build an iPad app for Dialogue: 0,0:25:04.64,0:25:06.86,Default,,0000,0000,0000,,that? I don't think so. Because it would be Dialogue: 0,0:25:06.86,0:25:09.60,Default,,0000,0000,0000,,too expensive and slow. The web is still the Dialogue: 0,0:25:09.60,0:25:13.31,Default,,0000,0000,0000,,best way and the easiest way to distribute\Nan Dialogue: 0,0:25:13.31,0:25:15.06,Default,,0000,0000,0000,,application. Dialogue: 0,0:25:15.06,0:25:17.12,Default,,0000,0000,0000,,So Rails has a real, I think, has a Dialogue: 0,0:25:17.12,0:25:20.88,Default,,0000,0000,0000,,place for that. Or, there's a place for Rails, Dialogue: 0,0:25:20.88,0:25:24.97,Default,,0000,0000,0000,,even in an API-driven application. Dialogue: 0,0:25:24.97,0:25:27.53,Default,,0000,0000,0000,,But even if the web, as a platform, and Dialogue: 0,0:25:27.53,0:25:30.31,Default,,0000,0000,0000,,Rails as a, as a framework, can't adapt and Dialogue: 0,0:25:30.31,0:25:32.53,Default,,0000,0000,0000,,fall by the wayside, I think the legacy of Dialogue: 0,0:25:32.53,0:25:36.05,Default,,0000,0000,0000,,Rails will really live on for a long time. Dialogue: 0,0:25:36.05,0:25:40.69,Default,,0000,0000,0000,,Because this idea of taking things that were\Npossible Dialogue: 0,0:25:40.69,0:25:44.12,Default,,0000,0000,0000,,and making them simple, making them easy to\Ndo, Dialogue: 0,0:25:44.12,0:25:47.91,Default,,0000,0000,0000,,is really powerful. And it inspired programmers\Nin many Dialogue: 0,0:25:47.91,0:25:52.68,Default,,0000,0000,0000,,different programming languages to, to copy\NRails and to Dialogue: 0,0:25:52.68,0:25:57.100,Default,,0000,0000,0000,,try to get those benefits for themselves. Dialogue: 0,0:25:57.100,0:26:00.15,Default,,0000,0000,0000,,So I think no matter what the next platform Dialogue: 0,0:26:00.15,0:26:03.80,Default,,0000,0000,0000,,is, people will be inspired by that aspect\Nof Dialogue: 0,0:26:03.80,0:26:06.04,Default,,0000,0000,0000,,Rails, and they will want to write the Rails Dialogue: 0,0:26:06.04,0:26:09.01,Default,,0000,0000,0000,,of whatever. Dialogue: 0,0:26:09.01,0:26:10.98,Default,,0000,0000,0000,,I'd also like to look at the reaction against Dialogue: 0,0:26:10.98,0:26:15.26,Default,,0000,0000,0000,,Rails. Because that's part of Rails's legacy,\Ntoo. There's Dialogue: 0,0:26:15.26,0:26:17.94,Default,,0000,0000,0000,,two examples that I'd like to talk about here. Dialogue: 0,0:26:17.94,0:26:21.05,Default,,0000,0000,0000,,First of all, there's Jengo. So Jengo can't\Nbe Dialogue: 0,0:26:21.05,0:26:26.02,Default,,0000,0000,0000,,considered to be inspired by Rails, because\Nit was Dialogue: 0,0:26:26.02,0:26:28.46,Default,,0000,0000,0000,,developed at the same time or even earlier\Nthan Dialogue: 0,0:26:28.46,0:26:29.31,Default,,0000,0000,0000,,Rails. Dialogue: 0,0:26:29.31,0:26:34.05,Default,,0000,0000,0000,,But since, the, the two frameworks have been\Nreally Dialogue: 0,0:26:34.05,0:26:36.11,Default,,0000,0000,0000,,similar and, and, and have learned a lot from Dialogue: 0,0:26:36.11,0:26:39.86,Default,,0000,0000,0000,,each other I think. But the way that Jengo Dialogue: 0,0:26:39.86,0:26:42.98,Default,,0000,0000,0000,,works, it is really driven by the Python philosophy Dialogue: 0,0:26:42.98,0:26:47.19,Default,,0000,0000,0000,,of explicit is better than implicit. So in,\Nin Dialogue: 0,0:26:47.19,0:26:50.61,Default,,0000,0000,0000,,Jengo, when you, when you like what to map Dialogue: 0,0:26:50.61,0:26:53.46,Default,,0000,0000,0000,,up a url on your server, you think really Dialogue: 0,0:26:53.46,0:26:55.89,Default,,0000,0000,0000,,hard about what that url is going to be. Dialogue: 0,0:26:55.89,0:27:00.81,Default,,0000,0000,0000,,It doesn't happen automatically. And your\Ndatabase models tell Dialogue: 0,0:27:00.81,0:27:04.76,Default,,0000,0000,0000,,the database what its fields should be, instead\Nof Dialogue: 0,0:27:04.76,0:27:08.33,Default,,0000,0000,0000,,the other way around. In Rails, of course,\Nwe Dialogue: 0,0:27:08.33,0:27:11.81,Default,,0000,0000,0000,,follow convention over configuration, right.\NBut if you've ever Dialogue: 0,0:27:11.81,0:27:14.38,Default,,0000,0000,0000,,tried to teach someone Rails, you know that\Nthis Dialogue: 0,0:27:14.38,0:27:17.89,Default,,0000,0000,0000,,can be a double-edged sword. Dialogue: 0,0:27:17.89,0:27:20.19,Default,,0000,0000,0000,,Convention over configuration lets you write\Nless code, but Dialogue: 0,0:27:20.19,0:27:23.44,Default,,0000,0000,0000,,it also makes it less clear what's happening.\NWhen Dialogue: 0,0:27:23.44,0:27:26.50,Default,,0000,0000,0000,,you're teaching somebody Rails, it can be\Nreally confusing Dialogue: 0,0:27:26.50,0:27:29.33,Default,,0000,0000,0000,,that you edit a route in this file over Dialogue: 0,0:27:29.33,0:27:32.20,Default,,0000,0000,0000,,here and therefore your controller over here\Nneeds to Dialogue: 0,0:27:32.20,0:27:35.85,Default,,0000,0000,0000,,be named this and it has these methods available Dialogue: 0,0:27:35.85,0:27:40.64,Default,,0000,0000,0000,,to it that respond to these HTTP requests.\NOr Dialogue: 0,0:27:40.64,0:27:42.32,Default,,0000,0000,0000,,HTTP methods. Dialogue: 0,0:27:42.32,0:27:44.06,Default,,0000,0000,0000,,That is not at all obvious. And so it Dialogue: 0,0:27:44.06,0:27:49.82,Default,,0000,0000,0000,,takes time to learn all those conventions.\NAnd, I Dialogue: 0,0:27:49.82,0:27:51.29,Default,,0000,0000,0000,,mean, I don't think one is better than the Dialogue: 0,0:27:51.29,0:27:54.32,Default,,0000,0000,0000,,other. They're just, you know, different sides\Nof the Dialogue: 0,0:27:54.32,0:27:56.90,Default,,0000,0000,0000,,same coin. Different ways of looking at how\Nprogramming Dialogue: 0,0:27:56.90,0:27:59.48,Default,,0000,0000,0000,,should work. Dialogue: 0,0:27:59.48,0:28:01.67,Default,,0000,0000,0000,,Kind of related to that is the second example, Dialogue: 0,0:28:01.67,0:28:06.57,Default,,0000,0000,0000,,which is microframeworks. Like Sinatra. These\Nhave been incredibly Dialogue: 0,0:28:06.57,0:28:09.47,Default,,0000,0000,0000,,influential. And I love using Sinatra. It's\Njust, it's Dialogue: 0,0:28:09.47,0:28:11.17,Default,,0000,0000,0000,,like such a thing of beauty, when you can Dialogue: 0,0:28:11.17,0:28:13.86,Default,,0000,0000,0000,,have your whole web app in one file. And Dialogue: 0,0:28:13.86,0:28:16.54,Default,,0000,0000,0000,,the, the urls that are, that are in your Dialogue: 0,0:28:16.54,0:28:19.82,Default,,0000,0000,0000,,web app are just tightly connected to the\Ncode Dialogue: 0,0:28:19.82,0:28:22.14,Default,,0000,0000,0000,,that's going to run when someone goes to that Dialogue: 0,0:28:22.14,0:28:22.100,Default,,0000,0000,0000,,url. Dialogue: 0,0:28:22.100,0:28:27.14,Default,,0000,0000,0000,,It, that is like a really wonderful feeling,\NI Dialogue: 0,0:28:27.14,0:28:31.33,Default,,0000,0000,0000,,think. And Sinatra has been probably even\Nmore influential Dialogue: 0,0:28:31.33,0:28:35.18,Default,,0000,0000,0000,,than Rails. There are copies of Sinatra, or\NSinatra-inspired Dialogue: 0,0:28:35.18,0:28:39.35,Default,,0000,0000,0000,,microframeworks anyway, in just about every\Nprogramming language you Dialogue: 0,0:28:39.35,0:28:43.46,Default,,0000,0000,0000,,can think of. Anything from Java to PHP to Dialogue: 0,0:28:43.46,0:28:48.30,Default,,0000,0000,0000,,Clojure, Go, JavaScript. Even Haskall. Dialogue: 0,0:28:48.30,0:28:52.100,Default,,0000,0000,0000,,All of these have a version of Sinatra. Dialogue: 0,0:28:52.100,0:28:57.96,Default,,0000,0000,0000,,And in some languages, these microframeworks,\Nthe microframework inspired Dialogue: 0,0:28:57.96,0:29:00.99,Default,,0000,0000,0000,,by Sinatra is the default way people write\Nweb Dialogue: 0,0:29:00.99,0:29:05.39,Default,,0000,0000,0000,,apps. It's the best way that they have. And Dialogue: 0,0:29:05.39,0:29:07.61,Default,,0000,0000,0000,,I think that that is kind of a problem, Dialogue: 0,0:29:07.61,0:29:12.02,Default,,0000,0000,0000,,because while I love using Sinatra, when an\Napp Dialogue: 0,0:29:12.02,0:29:14.13,Default,,0000,0000,0000,,gets above a certain size, I find myself pulling Dialogue: 0,0:29:14.13,0:29:16.18,Default,,0000,0000,0000,,in more and more of Rails. Dialogue: 0,0:29:16.18,0:29:19.51,Default,,0000,0000,0000,,And at some point I feel, well, I might Dialogue: 0,0:29:19.51,0:29:22.01,Default,,0000,0000,0000,,as well just switch to Rails. And so, in Dialogue: 0,0:29:22.01,0:29:23.69,Default,,0000,0000,0000,,these, I feel bad for these programmers in\Nthese Dialogue: 0,0:29:23.69,0:29:26.20,Default,,0000,0000,0000,,other languages, because they don't have the\Nchoice to Dialogue: 0,0:29:26.20,0:29:30.18,Default,,0000,0000,0000,,switch, necessarily, to something as good\Nas Rails. Dialogue: 0,0:29:30.18,0:29:31.81,Default,,0000,0000,0000,,So I think, I think Rails actually has a Dialogue: 0,0:29:31.81,0:29:34.30,Default,,0000,0000,0000,,bright future ahead of it, because it, it's\Nshown Dialogue: 0,0:29:34.30,0:29:38.17,Default,,0000,0000,0000,,the ability to adapt and respond to change.\NThink Dialogue: 0,0:29:38.17,0:29:41.33,Default,,0000,0000,0000,,about Rails 1 point 2 and the addition of Dialogue: 0,0:29:41.33,0:29:43.98,Default,,0000,0000,0000,,REST and making that the default way that\Nwe Dialogue: 0,0:29:43.98,0:29:48.52,Default,,0000,0000,0000,,think about controllers and resources on the\Nweb. Dialogue: 0,0:29:48.52,0:29:51.74,Default,,0000,0000,0000,,So I think that if people want to use Dialogue: 0,0:29:51.74,0:29:55.44,Default,,0000,0000,0000,,Rails to back JavaScript-based applications,\NRails will get better Dialogue: 0,0:29:55.44,0:29:57.64,Default,,0000,0000,0000,,at that. And if people want to use it Dialogue: 0,0:29:57.64,0:30:00.19,Default,,0000,0000,0000,,to back mobile applications, it will get better\Nthan, Dialogue: 0,0:30:00.19,0:30:02.78,Default,,0000,0000,0000,,at that. But you'll still have the ability\Nto Dialogue: 0,0:30:02.78,0:30:05.01,Default,,0000,0000,0000,,use Rails for what it's good at when you Dialogue: 0,0:30:05.01,0:30:06.30,Default,,0000,0000,0000,,need to. Dialogue: 0,0:30:06.30,0:30:11.62,Default,,0000,0000,0000,,All right. So we've talked about what programming\Nwas Dialogue: 0,0:30:11.62,0:30:16.61,Default,,0000,0000,0000,,like in 2004. We've talked a little bit about Dialogue: 0,0:30:16.61,0:30:19.28,Default,,0000,0000,0000,,the features of Rails that made people want\Nto Dialogue: 0,0:30:19.28,0:30:23.23,Default,,0000,0000,0000,,use it and made it win. And we've talked Dialogue: 0,0:30:23.23,0:30:26.20,Default,,0000,0000,0000,,about what could happen in the future. What\Nis Dialogue: 0,0:30:26.20,0:30:29.21,Default,,0000,0000,0000,,the, what's the legacy of Rails and will it Dialogue: 0,0:30:29.21,0:30:33.32,Default,,0000,0000,0000,,be able to adapt? Dialogue: 0,0:30:33.32,0:30:35.89,Default,,0000,0000,0000,,So a hundred years ago, or, actually, more\Nthan Dialogue: 0,0:30:35.89,0:30:39.37,Default,,0000,0000,0000,,a hundred years ago, when Edward Bellamy was\Nfrustrated Dialogue: 0,0:30:39.37,0:30:41.97,Default,,0000,0000,0000,,with the way things were going, with how society Dialogue: 0,0:30:41.97,0:30:45.11,Default,,0000,0000,0000,,was working, he took up his pen and he Dialogue: 0,0:30:45.11,0:30:48.79,Default,,0000,0000,0000,,used his imagination to create a new world.\NThis, Dialogue: 0,0:30:48.79,0:30:51.58,Default,,0000,0000,0000,,this utopian novel, where he could explain\Nhow he Dialogue: 0,0:30:51.58,0:30:53.74,Default,,0000,0000,0000,,thought things ought to work. Dialogue: 0,0:30:53.74,0:30:56.89,Default,,0000,0000,0000,,Now, that may seem kind of pointless. Because\Nit's Dialogue: 0,0:30:56.89,0:31:01.58,Default,,0000,0000,0000,,the twenty-first century. America is not a\Nsocialist utopia. Dialogue: 0,0:31:01.58,0:31:05.50,Default,,0000,0000,0000,,But that book was incredibly influential.\NIn the years Dialogue: 0,0:31:05.50,0:31:09.28,Default,,0000,0000,0000,,after its publication, hundreds of Bellamy\Nclubs were started Dialogue: 0,0:31:09.28,0:31:12.51,Default,,0000,0000,0000,,across the country, and millions of people\Nwere inspired Dialogue: 0,0:31:12.51,0:31:15.50,Default,,0000,0000,0000,,by the ideas written in the book. Dialogue: 0,0:31:15.50,0:31:19.69,Default,,0000,0000,0000,,And those people, and those clubs formed the\Nnucleus Dialogue: 0,0:31:19.69,0:31:23.80,Default,,0000,0000,0000,,of the progressive movement in the early twentieth\Ncentury, Dialogue: 0,0:31:23.80,0:31:27.24,Default,,0000,0000,0000,,that broke the trusts and monopolies, and\Nultimately paved Dialogue: 0,0:31:27.24,0:31:30.62,Default,,0000,0000,0000,,the way for social security and the American\Nwelfare Dialogue: 0,0:31:30.62,0:31:31.22,Default,,0000,0000,0000,,state. Dialogue: 0,0:31:31.22,0:31:34.06,Default,,0000,0000,0000,,So the book did have a huge influence on, Dialogue: 0,0:31:34.06,0:31:35.46,Default,,0000,0000,0000,,on the world. Dialogue: 0,0:31:35.46,0:31:37.96,Default,,0000,0000,0000,,Programming, on the other hand, is a little\Nmore Dialogue: 0,0:31:37.96,0:31:43.93,Default,,0000,0000,0000,,concrete. So when DHH was frustrated by how\Nprogramming, Dialogue: 0,0:31:43.93,0:31:48.49,Default,,0000,0000,0000,,web programming worked in 2003 or whatever,\Nhe was Dialogue: 0,0:31:48.49,0:31:51.83,Default,,0000,0000,0000,,able to do something about it. He cracked\Nopen Dialogue: 0,0:31:51.83,0:31:54.29,Default,,0000,0000,0000,,his text editor and got to work and built Dialogue: 0,0:31:54.29,0:31:57.14,Default,,0000,0000,0000,,something that people found inspiring. Dialogue: 0,0:31:57.14,0:31:59.34,Default,,0000,0000,0000,,And when they saw it, they wanted to meet Dialogue: 0,0:31:59.34,0:32:01.68,Default,,0000,0000,0000,,other people who were interested in that.\NAnd that Dialogue: 0,0:32:01.68,0:32:04.43,Default,,0000,0000,0000,,was the genesis of the Rails community. And\Nso Dialogue: 0,0:32:04.43,0:32:09.18,Default,,0000,0000,0000,,today, you know, we're all here today because\Nof Dialogue: 0,0:32:09.18,0:32:13.07,Default,,0000,0000,0000,,the Rails community and because of what, what\Ndeveloped Dialogue: 0,0:32:13.07,0:32:17.35,Default,,0000,0000,0000,,over those, those last ten years. So I'm really, Dialogue: 0,0:32:17.35,0:32:19.83,Default,,0000,0000,0000,,really pleased to be a part of that community, Dialogue: 0,0:32:19.83,0:32:23.32,Default,,0000,0000,0000,,and really honored to be speaking to you today Dialogue: 0,0:32:23.32,0:32:24.94,Default,,0000,0000,0000,,about that. Dialogue: 0,0:32:24.94,0:32:27.26,Default,,0000,0000,0000,,And it, it's made a huge impact in the Dialogue: 0,0:32:27.26,0:32:30.49,Default,,0000,0000,0000,,direction of my career. And I just find it Dialogue: 0,0:32:30.49,0:32:33.74,Default,,0000,0000,0000,,inspiring. I find it inspiring that as programmers,\Nwe Dialogue: 0,0:32:33.74,0:32:36.59,Default,,0000,0000,0000,,can see something that's broken and we can\Nfix Dialogue: 0,0:32:36.59,0:32:39.73,Default,,0000,0000,0000,,it. We can create a new reality for ourselves Dialogue: 0,0:32:39.73,0:32:42.87,Default,,0000,0000,0000,,with code. And I think that that's a really Dialogue: 0,0:32:42.87,0:32:45.67,Default,,0000,0000,0000,,powerful, really powerful notion. Dialogue: 0,0:32:45.67,0:32:47.52,Default,,0000,0000,0000,,And we also shouldn't forget the lessons of\NRails Dialogue: 0,0:32:47.52,0:32:50.30,Default,,0000,0000,0000,,as we did that. Because Rails didn't just\Nwin Dialogue: 0,0:32:50.30,0:32:53.45,Default,,0000,0000,0000,,because it was, because it was better, though\NI, Dialogue: 0,0:32:53.45,0:32:55.63,Default,,0000,0000,0000,,I do think it was. It won because of Dialogue: 0,0:32:55.63,0:32:58.60,Default,,0000,0000,0000,,the community around it and because of the,\Ntheir Dialogue: 0,0:32:58.60,0:33:01.68,Default,,0000,0000,0000,,passion for telling people about what was\Nso good Dialogue: 0,0:33:01.68,0:33:03.13,Default,,0000,0000,0000,,about Rails. Dialogue: 0,0:33:03.13,0:33:06.22,Default,,0000,0000,0000,,So most of us probably are not going to Dialogue: 0,0:33:06.22,0:33:10.72,Default,,0000,0000,0000,,write the next great framework. I, I, I don't Dialogue: 0,0:33:10.72,0:33:13.88,Default,,0000,0000,0000,,imagine that I will. But I think that this, Dialogue: 0,0:33:13.88,0:33:15.92,Default,,0000,0000,0000,,we can take to heart the lessons of Rails Dialogue: 0,0:33:15.92,0:33:18.59,Default,,0000,0000,0000,,in our own work and in the libraries that Dialogue: 0,0:33:18.59,0:33:19.92,Default,,0000,0000,0000,,we're writing. Dialogue: 0,0:33:19.92,0:33:23.18,Default,,0000,0000,0000,,Don't forget to, to, to try to make things Dialogue: 0,0:33:23.18,0:33:25.41,Default,,0000,0000,0000,,easy. To try to make it easy for your Dialogue: 0,0:33:25.41,0:33:28.68,Default,,0000,0000,0000,,fellow programmers. And don't forget to tell\Npeople about Dialogue: 0,0:33:28.68,0:33:32.42,Default,,0000,0000,0000,,it and explain why they should use what you've Dialogue: 0,0:33:32.42,0:33:34.72,Default,,0000,0000,0000,,written. And I think if you do that, you Dialogue: 0,0:33:34.72,0:33:36.64,Default,,0000,0000,0000,,can help make the world a better place. Dialogue: 0,0:33:36.64,0:33:37.94,Default,,0000,0000,0000,,Thanks.