1 00:00:23,100 --> 00:00:26,500 LUKE FRANCL: Good afternoon. I'd like to get started if, I 2 00:00:26,500 --> 00:00:30,140 think, everybody's ready. Cool. Cool. 3 00:00:30,140 --> 00:00:33,550 Thank, thank you for joining me this afternoon. I'm 4 00:00:33,550 --> 00:00:36,750 excited to be here. And thanks for, thanks for 5 00:00:36,750 --> 00:00:38,550 choosing this talk. 6 00:00:38,550 --> 00:00:41,070 So it's been ten years since the first public 7 00:00:41,070 --> 00:00:43,960 release on Rails, so I think that's a good 8 00:00:43,960 --> 00:00:48,280 time to think back and reflect on where Rails 9 00:00:48,280 --> 00:00:51,180 has come from, where it might be going, and 10 00:00:51,180 --> 00:00:53,870 what the future has in store. 11 00:00:53,870 --> 00:00:58,480 So, I've been thinking a lot about the early 12 00:00:58,480 --> 00:01:01,420 days of Rails, lately, because the company I work 13 00:01:01,420 --> 00:01:05,269 for, Swiftype, makes site search software. So I use 14 00:01:05,269 --> 00:01:09,369 my own website for testing. So I index my 15 00:01:09,369 --> 00:01:11,439 site and then have to do searches on it, 16 00:01:11,439 --> 00:01:13,729 and I'll search for Rails. Just cause I'm not 17 00:01:13,729 --> 00:01:15,880 super creative and I need to search for something, 18 00:01:15,880 --> 00:01:16,570 right. 19 00:01:16,570 --> 00:01:18,509 And, in doing so, I found some old blog 20 00:01:18,509 --> 00:01:20,850 posts that I wrote in early 2005, when I 21 00:01:20,850 --> 00:01:23,840 first discovered Rails. And it was really interesting for 22 00:01:23,840 --> 00:01:27,950 me to read, because back then, I was, I 23 00:01:27,950 --> 00:01:32,079 was working as a Java developer and I was 24 00:01:32,079 --> 00:01:35,060 really interested in Python. And Rails was neither of 25 00:01:35,060 --> 00:01:37,439 those things. So I was pretty skeptical of Rails. 26 00:01:37,439 --> 00:01:39,119 Like, I was impressed with it, but I wasn't 27 00:01:39,119 --> 00:01:43,090 sure it was worth learning Ruby over. 28 00:01:43,090 --> 00:01:45,039 So I thought, I'll just sit back and let 29 00:01:45,039 --> 00:01:49,439 the Python people catch up. And I waited and 30 00:01:49,439 --> 00:01:51,990 I waited and I waited, and that never really 31 00:01:51,990 --> 00:01:55,130 seemed to happen. And so after a few months, 32 00:01:55,130 --> 00:01:58,499 I jumped into Rails and started learning it and 33 00:01:58,499 --> 00:02:00,409 I started learning Ruby so that I could use 34 00:02:00,409 --> 00:02:04,590 Rails. And then that fall, I got wind of 35 00:02:04,590 --> 00:02:06,509 a new group starting in my home town. The 36 00:02:06,509 --> 00:02:09,508 Ruby Users of Minnesota. And so I was, I 37 00:02:09,508 --> 00:02:10,989 was there at the first meeting when there was 38 00:02:10,989 --> 00:02:13,480 twelve people talk, who were just really excited about 39 00:02:13,480 --> 00:02:15,849 Ruby and really excited about Rails. 40 00:02:15,849 --> 00:02:18,770 And at that point I joined the, the Ruby 41 00:02:18,770 --> 00:02:22,010 community and became a part of that and really 42 00:02:22,010 --> 00:02:24,909 have not, have not looked back since then. And 43 00:02:24,909 --> 00:02:27,069 I've been working with Rails professionally now for about 44 00:02:27,069 --> 00:02:28,650 eight years. 45 00:02:28,650 --> 00:02:31,400 So this made me think about a book I 46 00:02:31,400 --> 00:02:35,409 read once called Looking Backward by Edward Bellamy. So 47 00:02:35,409 --> 00:02:37,459 in this book, which was written in the late 48 00:02:37,459 --> 00:02:41,590 1800s and takes place at that time, a rich, 49 00:02:41,590 --> 00:02:45,260 upperclass man is hypnotized. And he falls asleep for 50 00:02:45,260 --> 00:02:48,620 over a hundred years. And when he wakes up, 51 00:02:48,620 --> 00:02:49,879 everything has changed. 52 00:02:49,879 --> 00:02:54,069 America is now a socialist utopia. And so, you 53 00:02:54,069 --> 00:02:57,219 know, he had it pretty good before, right. He, 54 00:02:57,219 --> 00:03:00,939 he was wealthy. He had servants. And now everyone 55 00:03:00,939 --> 00:03:03,340 is equal. And so he's pretty skeptical of this 56 00:03:03,340 --> 00:03:05,090 new order. 57 00:03:05,090 --> 00:03:09,379 So it takes him awhile, but as he's shown 58 00:03:09,379 --> 00:03:11,709 the new way of doing things, he becomes convinced 59 00:03:11,709 --> 00:03:16,879 that this is actually a better way. And that 60 00:03:16,879 --> 00:03:20,959 made me think of, think of my situation, where 61 00:03:20,959 --> 00:03:24,200 I was, I was skeptical of Rails, and, but 62 00:03:24,200 --> 00:03:29,019 eventually won over. 63 00:03:29,019 --> 00:03:32,700 So today, what I'd like to talk about is 64 00:03:32,700 --> 00:03:36,450 the idea of what would a programmer from 2004 65 00:03:36,450 --> 00:03:39,310 think if they could time travel forward to today 66 00:03:39,310 --> 00:03:42,650 and experience our web development utopia. What would that 67 00:03:42,650 --> 00:03:45,260 be like, for them, to see how we work 68 00:03:45,260 --> 00:03:46,299 today? 69 00:03:46,299 --> 00:03:49,739 So, what I'd like to do today is first 70 00:03:49,739 --> 00:03:53,389 talk about what web development was like in 2004. 71 00:03:53,389 --> 00:03:55,930 Then, I'd like to jump forward to the present 72 00:03:55,930 --> 00:03:59,209 and think about what a programmer from 2004 would 73 00:03:59,209 --> 00:04:02,650 think about our web development utopia of today. And 74 00:04:02,650 --> 00:04:05,430 finally I'd like to take a look at what 75 00:04:05,430 --> 00:04:07,870 the future might have in store for Rails, and 76 00:04:07,870 --> 00:04:13,400 what the, what the legacy of Rails might be. 77 00:04:13,400 --> 00:04:16,060 So first, let's talk a little bit about what 78 00:04:16,060 --> 00:04:19,680 development was like in 2004. 79 00:04:19,680 --> 00:04:22,220 So if I can set the stage for a 80 00:04:22,220 --> 00:04:24,690 minute, I see a lot of Mac Books here 81 00:04:24,690 --> 00:04:28,660 today. There were no Mac Books in 2004. The 82 00:04:28,660 --> 00:04:30,590 top of the line Apple laptop was a Power 83 00:04:30,590 --> 00:04:35,150 Mac G4. And, you know, Apple had not completely 84 00:04:35,150 --> 00:04:39,289 penetrated the web development community like it has now. 85 00:04:39,289 --> 00:04:42,380 There were only, I, I used Linux at work 86 00:04:42,380 --> 00:04:49,050 myself. And, a Windows at home, actually. And the 87 00:04:49,050 --> 00:04:51,990 most popular phone, like, maybe not the most popular, 88 00:04:51,990 --> 00:04:54,810 but the hottest phone in 2004 was a Motorrola 89 00:04:54,810 --> 00:04:58,460 Razr. So, right? 90 00:04:58,460 --> 00:05:01,770 So things were pretty different there. Things were pretty 91 00:05:01,770 --> 00:05:04,560 different then. And I was working as a Java 92 00:05:04,560 --> 00:05:07,180 developer at the time. And I was pretty excited 93 00:05:07,180 --> 00:05:10,660 about that, because I graduated in 2001, right after 94 00:05:10,660 --> 00:05:14,340 the dot com bust. And things were pretty sketchy 95 00:05:14,340 --> 00:05:15,990 there for awhile. It was hard for me to 96 00:05:15,990 --> 00:05:19,229 find a job. And so I was excited that 97 00:05:19,229 --> 00:05:20,960 I was able to work as a Java developer, 98 00:05:20,960 --> 00:05:22,930 in the hot language at the time. And I 99 00:05:22,930 --> 00:05:24,190 was, I was glad that I was able to 100 00:05:24,190 --> 00:05:27,360 work at a software development company, where I could 101 00:05:27,360 --> 00:05:31,690 work on software for sale instead of working in 102 00:05:31,690 --> 00:05:33,629 the cost center at a, at a big bank 103 00:05:33,629 --> 00:05:37,090 or something like that, right. 104 00:05:37,090 --> 00:05:40,240 So I was working as a Java developer, and 105 00:05:40,240 --> 00:05:42,270 if you've ever done any Java web development, you 106 00:05:42,270 --> 00:05:46,620 know that it can be pretty painful, right. At 107 00:05:46,620 --> 00:05:48,400 the time, the, the best way to do Java 108 00:05:48,400 --> 00:05:53,500 web development was struts and hibernate. But we didn't 109 00:05:53,500 --> 00:05:56,960 use either of those. We used raw Java servelettes 110 00:05:56,960 --> 00:06:03,370 and hand coded J, JDBC queries to our database. 111 00:06:03,370 --> 00:06:07,000 So the, the real problem with Java as a, 112 00:06:07,000 --> 00:06:09,919 as a web development platform, at least in those 113 00:06:09,919 --> 00:06:12,740 days, was it, it has a really long edit, 114 00:06:12,740 --> 00:06:16,789 compile, debug loop. Or, in the case of, of 115 00:06:16,789 --> 00:06:20,830 Java web development, it's the edit, compile, deploy, debug 116 00:06:20,830 --> 00:06:24,220 loop. Because you have to restart your app server, 117 00:06:24,220 --> 00:06:25,539 and we used Web Sphere, so that took a 118 00:06:25,539 --> 00:06:26,990 long time. 119 00:06:26,990 --> 00:06:29,930 So if I needed to write a new page 120 00:06:29,930 --> 00:06:33,050 for, for our app, it, it was a pretty 121 00:06:33,050 --> 00:06:35,810 involved process. So we used raw servelettes, so that's 122 00:06:35,810 --> 00:06:38,470 sort of like using a raw CGI library, where 123 00:06:38,470 --> 00:06:41,979 it's very low-level. And if, when you work in 124 00:06:41,979 --> 00:06:44,310 Java, it's very verbose and you have to read 125 00:06:44,310 --> 00:06:47,000 from input streams and write to output streams. And 126 00:06:47,000 --> 00:06:49,539 it just doesn't have the conveniences of Ruby or 127 00:06:49,539 --> 00:06:51,150 a scripting language. 128 00:06:51,150 --> 00:06:52,449 So I'd have to write my servelette, then I'd 129 00:06:52,449 --> 00:06:54,690 have to write a bunch of XML files, or 130 00:06:54,690 --> 00:06:56,810 XML code in the web dot xml file to 131 00:06:56,810 --> 00:07:00,440 map it up. And then you'd compile everything and 132 00:07:00,440 --> 00:07:02,940 get it working and then restart your app server, 133 00:07:02,940 --> 00:07:06,810 which would take several minutes. And then browse to 134 00:07:06,810 --> 00:07:10,069 the new page to, to see what it, what's 135 00:07:10,069 --> 00:07:11,229 going on there. 136 00:07:11,229 --> 00:07:13,810 And that's where the fun would start, because that's 137 00:07:13,810 --> 00:07:17,280 when the JSPs came into play. So JSP is 138 00:07:17,280 --> 00:07:21,310 just like ERB, right. Instead of Ruby, it's Java. 139 00:07:21,310 --> 00:07:24,389 But Java a much more heavy-weight language, and it 140 00:07:24,389 --> 00:07:27,360 doesn't have, you know, friendly looping constructs or mapping 141 00:07:27,360 --> 00:07:30,500 constructs like Ruby does. So writing view code in 142 00:07:30,500 --> 00:07:33,430 Ruby, or in Java is not very much fun. 143 00:07:33,430 --> 00:07:35,430 But worst of all, the way that JSPs work 144 00:07:35,430 --> 00:07:37,810 is that it takes the Java, or the JSP 145 00:07:37,810 --> 00:07:39,830 code that you write and it compiles it into 146 00:07:39,830 --> 00:07:42,050 a Java class file. And then that Java class 147 00:07:42,050 --> 00:07:47,349 file gets compiled into code. So when you get 148 00:07:47,349 --> 00:07:50,250 an error, when you're debugging, you'd get this stack 149 00:07:50,250 --> 00:07:53,870 trace, and it would be like, NullPointer exception on 150 00:07:53,870 --> 00:08:00,080 line 12,075 of line 20,082, and you'd sit there 151 00:08:00,080 --> 00:08:06,800 and you'd think, ah. What was I doing in 152 00:08:06,800 --> 00:08:09,840 my JSP that could cause a NullPointer exception? 153 00:08:09,840 --> 00:08:11,960 And you'd look at the JSP and you'd look 154 00:08:11,960 --> 00:08:14,479 at the stack trace, and they had no correspondence 155 00:08:14,479 --> 00:08:19,699 whatsoever, right. So it's really painful. And if you 156 00:08:19,699 --> 00:08:21,770 were smart, you would, there was a setting, like 157 00:08:21,770 --> 00:08:23,449 a secret setting you could use for Web Sphere 158 00:08:23,449 --> 00:08:27,569 to keep around the compiled Java files. So then 159 00:08:27,569 --> 00:08:29,419 you could open that up in your web browser 160 00:08:29,419 --> 00:08:33,950 and look at line 12,075 and be like, oh. 161 00:08:33,950 --> 00:08:36,570 That's what I was doing in the JSP. 162 00:08:36,570 --> 00:08:41,240 So, web development in Java, especially in 2004, not 163 00:08:41,240 --> 00:08:44,820 very much fun. But there was, there was also 164 00:08:44,820 --> 00:08:48,110 at that time a glimmer that something better was 165 00:08:48,110 --> 00:08:53,570 on the way, that the web could do more. 166 00:08:53,570 --> 00:08:55,900 There was a new sense that the web was 167 00:08:55,900 --> 00:08:59,930 a powerful platform for delivering software. And I think 168 00:08:59,930 --> 00:09:04,400 that the earliest glimmerings of this come from Microsoft's 169 00:09:04,400 --> 00:09:08,570 Outlook web app. This was the first application to 170 00:09:08,570 --> 00:09:12,080 use what we would call today Ajax, without requiring 171 00:09:12,080 --> 00:09:14,250 any kind of browser plugins. 172 00:09:14,250 --> 00:09:18,990 So that, that came out in 2001. And people, 173 00:09:18,990 --> 00:09:20,840 people didn't pay much attention to it because it 174 00:09:20,840 --> 00:09:24,610 was IE only and it, it wasn't clear how 175 00:09:24,610 --> 00:09:27,540 it was working, right. And then Google launched Google 176 00:09:27,540 --> 00:09:31,090 Suggest. And people dissected that, and they saw how 177 00:09:31,090 --> 00:09:35,740 it was working. And they also launched Gmail, which 178 00:09:35,740 --> 00:09:37,740 gave people a new sense of what was possible 179 00:09:37,740 --> 00:09:39,840 in a web app. That, that web apps could 180 00:09:39,840 --> 00:09:44,180 automatically refresh as things were changing on the server. 181 00:09:44,180 --> 00:09:46,050 So there was a new sense of what was 182 00:09:46,050 --> 00:09:49,060 possible. That, that, that maybe there was a better 183 00:09:49,060 --> 00:09:52,380 way of writing web apps. And in 2004 I 184 00:09:52,380 --> 00:09:56,360 was also looking for something better. Because, and I 185 00:09:56,360 --> 00:09:58,070 attribute that to a book I read early in 186 00:09:58,070 --> 00:10:01,530 my career. The Pragmatic Programmer by Dave Thomas and 187 00:10:01,530 --> 00:10:04,260 Andy Hunt. And in that book, which is, it's 188 00:10:04,260 --> 00:10:06,510 a terrific book about becoming a better software developer, 189 00:10:06,510 --> 00:10:10,270 a better software crafts man. In that book, they 190 00:10:10,270 --> 00:10:13,720 talk about the importance of learning a scripting language. 191 00:10:13,720 --> 00:10:16,240 And that's because, if you were working in a 192 00:10:16,240 --> 00:10:19,150 language like Java, there's often things that are too, 193 00:10:19,150 --> 00:10:21,110 too small of a task to make it worth 194 00:10:21,110 --> 00:10:23,990 writing a Java program to do. And, but a 195 00:10:23,990 --> 00:10:25,640 scripting language you can, you know, knock that off 196 00:10:25,640 --> 00:10:27,350 really easily. 197 00:10:27,350 --> 00:10:28,940 So things that you might do manually, you can 198 00:10:28,940 --> 00:10:33,020 instead write a script to do for you. And 199 00:10:33,020 --> 00:10:35,410 so I took that to heart, and I went 200 00:10:35,410 --> 00:10:38,010 to the book store. Remember, this was the early 201 00:10:38,010 --> 00:10:42,580 2000s. There were still bookstores. And I looked at 202 00:10:42,580 --> 00:10:44,780 all the books that they had about scripting languages. 203 00:10:44,780 --> 00:10:46,350 So there was a bunch of books about Perl. 204 00:10:46,350 --> 00:10:49,620 There was a bunch of books about Python. And 205 00:10:49,620 --> 00:10:52,220 there was this one book about Ruby by those 206 00:10:52,220 --> 00:10:55,460 same guys, Dave Thomas and Andy Hunt. 207 00:10:55,460 --> 00:10:58,270 So I immediately just started the books about Perl, 208 00:10:58,270 --> 00:11:00,640 because I'd worked with Perl before and I thought 209 00:11:00,640 --> 00:11:05,370 it was terrible. And I looked at the books 210 00:11:05,370 --> 00:11:07,620 about Python, and I'm like, this looks OK. I 211 00:11:07,620 --> 00:11:09,710 can see myself using this. And then I looked 212 00:11:09,710 --> 00:11:13,170 at the book about Ruby. And, unfortunately, what I 213 00:11:13,170 --> 00:11:14,750 saw in the book about Ruby was a lot 214 00:11:14,750 --> 00:11:18,730 of dollar signs and dollar sign underscores and at 215 00:11:18,730 --> 00:11:23,000 signs and at at signs. And I thought, this 216 00:11:23,000 --> 00:11:26,450 looks just like Perl. I don't, I don't want 217 00:11:26,450 --> 00:11:28,840 to learn this. This, this is, this is, this 218 00:11:28,840 --> 00:11:30,550 is crappy. 219 00:11:30,550 --> 00:11:33,610 So I decided then to become a Python programmer. 220 00:11:33,610 --> 00:11:35,920 And I was actually able to use Python for 221 00:11:35,920 --> 00:11:37,700 a number of things in my job and my 222 00:11:37,700 --> 00:11:41,350 personal programming. I wrote a script to migrate from 223 00:11:41,350 --> 00:11:44,040 one bug database to the other. I wrote a 224 00:11:44,040 --> 00:11:46,440 script that tied our subversion check ins to our 225 00:11:46,440 --> 00:11:48,640 bug database so you could reference bug numbers and 226 00:11:48,640 --> 00:11:51,670 link up the commits and stuff. 227 00:11:51,670 --> 00:11:55,360 And I, I wrote some personal scripts. But what 228 00:11:55,360 --> 00:11:58,320 I really wanted to do was write web apps. 229 00:11:58,320 --> 00:12:00,580 Because that's, throughout my career, that's always what I've 230 00:12:00,580 --> 00:12:03,570 been most excited about. Because I've always loved the 231 00:12:03,570 --> 00:12:06,680 potential of the web as a platform for enabling 232 00:12:06,680 --> 00:12:10,770 communication. It's, it's the most powerful and widely distributed 233 00:12:10,770 --> 00:12:14,600 way that you can connect people. 234 00:12:14,600 --> 00:12:16,100 And so every time I would have an idea 235 00:12:16,100 --> 00:12:19,770 for a web app in Python, I would start 236 00:12:19,770 --> 00:12:22,060 thinking about how it, or, I would start thinking 237 00:12:22,060 --> 00:12:23,830 about how it should work and what it should 238 00:12:23,830 --> 00:12:25,620 do. And I'd get excited about it, and want 239 00:12:25,620 --> 00:12:28,200 to build it. And then I'd start reading about 240 00:12:28,200 --> 00:12:30,040 how to build web apps in Python. And get 241 00:12:30,040 --> 00:12:31,500 really frustrated. 242 00:12:31,500 --> 00:12:33,770 Because, then there was no clear way. There was 243 00:12:33,770 --> 00:12:38,370 no Jengo. There was CGI in the core library, 244 00:12:38,370 --> 00:12:40,500 but, you know, who wants to write at that 245 00:12:40,500 --> 00:12:46,600 low-level? There was, then, a myriad of templating options 246 00:12:46,600 --> 00:12:50,190 and different object relational mappers and different ways of 247 00:12:50,190 --> 00:12:53,320 publishing your objects to the web and different database 248 00:12:53,320 --> 00:12:57,370 drivers. And, there was no clear way of deploying 249 00:12:57,370 --> 00:12:58,500 the software, either. 250 00:12:58,500 --> 00:13:02,170 So I would have this idea for what I 251 00:13:02,170 --> 00:13:04,570 thought would be the next great app, and then 252 00:13:04,570 --> 00:13:08,210 I would start reading about Python, how to implement 253 00:13:08,210 --> 00:13:11,450 it in Python and get frustrated and give up. 254 00:13:11,450 --> 00:13:13,980 But I didn't know it at the time, but 255 00:13:13,980 --> 00:13:16,320 there was something better on the way. 256 00:13:16,320 --> 00:13:23,260 So let's turn now to 2014, and think about 257 00:13:23,260 --> 00:13:27,380 what would a programmer from 2004 think about how 258 00:13:27,380 --> 00:13:30,050 we work today. 259 00:13:30,050 --> 00:13:31,200 And I think if you could take someone from 260 00:13:31,200 --> 00:13:33,240 then and bring them forward to now, I think 261 00:13:33,240 --> 00:13:36,370 they would be amazed. Because it's truly a great 262 00:13:36,370 --> 00:13:40,680 time to be a programmer. We're all walking around 263 00:13:40,680 --> 00:13:43,040 with a computer in our pockets that's more powerful 264 00:13:43,040 --> 00:13:47,050 than the desktop I had in 2004. And it 265 00:13:47,050 --> 00:13:50,310 has a, a better web browser, too. 266 00:13:50,310 --> 00:13:53,950 So think about what's different between now and then. 267 00:13:53,950 --> 00:13:58,270 In 2004, Ajax was in its infancy. The term 268 00:13:58,270 --> 00:14:04,320 hadn't even been coined yet. Today, rich Ajax frameworks 269 00:14:04,320 --> 00:14:08,940 come with every web application framework. So you can, 270 00:14:08,940 --> 00:14:12,670 you can build rich, interactive applications much easier. 271 00:14:12,670 --> 00:14:15,550 And, you can even write your entire frontend in 272 00:14:15,550 --> 00:14:19,760 JavaScript if you want to. Web browsers are immeasurably 273 00:14:19,760 --> 00:14:25,290 more powerful now than they, than they were then. 274 00:14:25,290 --> 00:14:28,900 Deployment is much easier, too. In 2004, it was 275 00:14:28,900 --> 00:14:30,420 really hard to figure out how you should get 276 00:14:30,420 --> 00:14:33,830 your app up on the web. You could colo, 277 00:14:33,830 --> 00:14:37,100 but that was expensive. You could use shared hosting, 278 00:14:37,100 --> 00:14:41,110 like, DreamHost or something like that. But those servers 279 00:14:41,110 --> 00:14:44,320 were underpowered and kind of weak. 280 00:14:44,320 --> 00:14:46,870 Today, you can spin up a server with the 281 00:14:46,870 --> 00:14:49,940 click of a button. You can manage everything yourself 282 00:14:49,940 --> 00:14:53,040 if you want to use EC2, or you can 283 00:14:53,040 --> 00:14:56,770 rely on platform services like Heroku or Google App 284 00:14:56,770 --> 00:15:00,820 Engine. And this is really great for programmers, because 285 00:15:00,820 --> 00:15:03,490 you don't have to be a great programmer and 286 00:15:03,490 --> 00:15:06,670 a great sys admin now to launch a web 287 00:15:06,670 --> 00:15:10,700 application. You can let other people handle that part. 288 00:15:10,700 --> 00:15:11,910 And that's terrific. 289 00:15:11,910 --> 00:15:14,920 Another thing that I think is really powerful about 290 00:15:14,920 --> 00:15:20,950 how we work today is that in, today we 291 00:15:20,950 --> 00:15:24,160 have access to all of these web service APIs, 292 00:15:24,160 --> 00:15:27,380 with a simple HTTP request. You can extend the 293 00:15:27,380 --> 00:15:30,290 functionality of your app really easily by leveraging these 294 00:15:30,290 --> 00:15:30,940 services. 295 00:15:30,940 --> 00:15:34,270 There's everything from search, like my, my company provides, 296 00:15:34,270 --> 00:15:36,970 to payments from companies like Stripe, and even telephony 297 00:15:36,970 --> 00:15:39,560 from companies like Twillio. 298 00:15:39,560 --> 00:15:42,640 So with just an HTTP request, you can add 299 00:15:42,640 --> 00:15:46,500 that kind of functionality into your application super easily. 300 00:15:46,500 --> 00:15:49,320 And best of all, you're us- they use JSON 301 00:15:49,320 --> 00:15:51,440 instead of XML. So there's no XML setups like 302 00:15:51,440 --> 00:15:55,660 there was back in the early 2000s. 303 00:15:55,660 --> 00:15:58,280 But what about Rails? Like, what would a programmer 304 00:15:58,280 --> 00:16:02,060 from 2004 think about Ruby on Rails? Well, I 305 00:16:02,060 --> 00:16:04,930 think if you could bring someone, or talk to 306 00:16:04,930 --> 00:16:07,610 somebody in 2004 and say, in ten years the 307 00:16:07,610 --> 00:16:09,380 best way to make a web app is gonna 308 00:16:09,380 --> 00:16:11,920 be this thing called Ruby on Rails. I think 309 00:16:11,920 --> 00:16:15,320 what they would say is, what on Rails? 310 00:16:15,320 --> 00:16:19,300 It's difficult to overstate how marginal the Ruby community 311 00:16:19,300 --> 00:16:26,300 was in 2004. When David publicly demo'd Rails at 312 00:16:27,830 --> 00:16:31,830 RubyConf 2004, there were probably less people in the 313 00:16:31,830 --> 00:16:36,070 room than there are right now. That, there were 314 00:16:36,070 --> 00:16:39,170 about sixty people at that conference. 315 00:16:39,170 --> 00:16:43,010 Today, there's dozens of conferences around the world, and 316 00:16:43,010 --> 00:16:46,790 thousands of people make their livings using Ruby and 317 00:16:46,790 --> 00:16:52,880 Rails. The community has grown tremendously since those days. 318 00:16:52,880 --> 00:16:58,240 But what about the features? The features were really 319 00:16:58,240 --> 00:17:02,850 what made Rails succeed. And if I think back 320 00:17:02,850 --> 00:17:05,429 on what I first thought about Rails when I 321 00:17:05,429 --> 00:17:09,199 saw it, like, what impressed me. Things that, that 322 00:17:09,199 --> 00:17:12,789 really stand out in my mind are things like 323 00:17:12,789 --> 00:17:14,730 live reloading. 324 00:17:14,730 --> 00:17:16,770 Compared to how I was working in Java, where 325 00:17:16,770 --> 00:17:18,299 it was like, a really long cycle to get 326 00:17:18,299 --> 00:17:20,829 anything up on the screen, in Rails, you could 327 00:17:20,829 --> 00:17:24,148 edit any file. You could edit your model, you're, 328 00:17:24,148 --> 00:17:27,049 you're views. Even your database schema. And reload your 329 00:17:27,049 --> 00:17:30,129 browser and it was right there. And that was 330 00:17:30,129 --> 00:17:31,200 tremendously exciting. 331 00:17:31,200 --> 00:17:33,629 And, if you had an exception in your, in 332 00:17:33,629 --> 00:17:36,220 your view, you would see exactly which line of 333 00:17:36,220 --> 00:17:39,200 code caused it, and not have to wade through 334 00:17:39,200 --> 00:17:41,779 these huge stack traces that had nothing to do 335 00:17:41,779 --> 00:17:45,700 with what you were working on. And that was 336 00:17:45,700 --> 00:17:47,809 tremendous for developer productivity. 337 00:17:47,809 --> 00:17:50,350 Another thing that was a real big win for 338 00:17:50,350 --> 00:17:55,250 developer productivity, for me anyway, was the development console. 339 00:17:55,250 --> 00:17:57,529 Rails let you just type a single command and 340 00:17:57,529 --> 00:17:59,490 get full access to all of the code that 341 00:17:59,490 --> 00:18:01,799 you'd been writing. So, for me, I keep that 342 00:18:01,799 --> 00:18:03,799 open all the time. And I am always constantly 343 00:18:03,799 --> 00:18:06,980 trying out things and experimenting and trying to figure 344 00:18:06,980 --> 00:18:09,909 out how different APIs work by using the developer 345 00:18:09,909 --> 00:18:11,299 console. 346 00:18:11,299 --> 00:18:12,909 This is something that I'd been able to get 347 00:18:12,909 --> 00:18:15,779 working in the Java world using a tool called 348 00:18:15,779 --> 00:18:18,240 BeanShell, which is like a Java scripting framework. But 349 00:18:18,240 --> 00:18:20,720 it was nowhere near as good as the Rails 350 00:18:20,720 --> 00:18:24,009 console, and, you know, it just was a lot 351 00:18:24,009 --> 00:18:27,700 harder to, to get working. 352 00:18:27,700 --> 00:18:29,649 Related to that is just the idea of having 353 00:18:29,649 --> 00:18:33,399 separate development environments. Rails came right out of the 354 00:18:33,399 --> 00:18:36,590 box with development, production, and test, and has separate 355 00:18:36,590 --> 00:18:38,480 databases for all of those things. So you didn't 356 00:18:38,480 --> 00:18:40,539 have to worry about mixing your code together. 357 00:18:40,539 --> 00:18:43,669 You could have separate configurations for testing and production 358 00:18:43,669 --> 00:18:47,220 and development. And that really helped with the software 359 00:18:47,220 --> 00:18:49,409 engineering side of Rails. 360 00:18:49,409 --> 00:18:52,519 Finally, the, the, the last big feature that I 361 00:18:52,519 --> 00:18:56,169 think really stood out to me was ActiveRecord and 362 00:18:56,169 --> 00:19:00,100 migrations. ActiveRecord was super exciting, because here, this, this, 363 00:19:00,100 --> 00:19:02,559 this, this code is sort of magically intuiting the, 364 00:19:02,559 --> 00:19:05,200 the fields from the structure of your database. You 365 00:19:05,200 --> 00:19:06,950 didn't have to write any code at all. And 366 00:19:06,950 --> 00:19:10,480 for someone who was writing SQL statements by hand, 367 00:19:10,480 --> 00:19:12,600 that was really exciting. 368 00:19:12,600 --> 00:19:14,799 And migrations were awesome, too, because you always need 369 00:19:14,799 --> 00:19:17,750 to transition the state of your database in your, 370 00:19:17,750 --> 00:19:18,690 in your application. 371 00:19:18,690 --> 00:19:21,610 And, again, this is something that we had built 372 00:19:21,610 --> 00:19:24,940 at my job. But ours was not as good. 373 00:19:24,940 --> 00:19:28,940 It, it used raw SQL, so you would write 374 00:19:28,940 --> 00:19:32,039 SQL statements to, to transition the database. And it 375 00:19:32,039 --> 00:19:34,419 was tied directly to the app version that, that 376 00:19:34,419 --> 00:19:36,960 we had. So, when you would release a new 377 00:19:36,960 --> 00:19:39,350 version of the app, you would have to sync 378 00:19:39,350 --> 00:19:41,649 that with the database. The database version would have 379 00:19:41,649 --> 00:19:42,889 to be synced with that. 380 00:19:42,889 --> 00:19:44,690 So there was, there was no way to independently 381 00:19:44,690 --> 00:19:46,610 migrate the database. 382 00:19:46,610 --> 00:19:47,970 And there was no way to go down. So 383 00:19:47,970 --> 00:19:50,980 you had to get it right. Rails was better 384 00:19:50,980 --> 00:19:53,190 than that. 385 00:19:53,190 --> 00:19:56,149 But why did Rails win? Why, why was Rails 386 00:19:56,149 --> 00:19:59,070 exciting to people? Because all these features were available 387 00:19:59,070 --> 00:20:03,169 elsewhere. I think there's three reasons. 388 00:20:03,169 --> 00:20:04,960 First of all, while each of these features was 389 00:20:04,960 --> 00:20:07,700 something that you could get in other web programming 390 00:20:07,700 --> 00:20:11,759 frameworks, Rails brought them all together. Rails was the 391 00:20:11,759 --> 00:20:18,690 whole package. So Rails took things that were possible 392 00:20:18,690 --> 00:20:21,539 and made them easy. It, even that, it made 393 00:20:21,539 --> 00:20:22,970 them the default. 394 00:20:22,970 --> 00:20:25,330 So Rails took a lot of best practices and 395 00:20:25,330 --> 00:20:27,570 put them together in one thing that you could 396 00:20:27,570 --> 00:20:31,200 use super simply. And that was really exciting to 397 00:20:31,200 --> 00:20:34,549 people. Even, even for me, because I was able 398 00:20:34,549 --> 00:20:36,309 to, to do some of the things that Rails 399 00:20:36,309 --> 00:20:39,419 had. Having it together in one package was super 400 00:20:39,419 --> 00:20:41,259 exciting. 401 00:20:41,259 --> 00:20:43,330 The second reason I think Rails succeeded is the 402 00:20:43,330 --> 00:20:46,279 triumph of hype. If you go back and read 403 00:20:46,279 --> 00:20:49,490 the early blog posts about Rails, it's really interesting 404 00:20:49,490 --> 00:20:53,200 because it really caused a furor in the Java 405 00:20:53,200 --> 00:20:55,470 and the Python world. Because people were like, well, 406 00:20:55,470 --> 00:20:57,950 why can't we do this? And in the middle 407 00:20:57,950 --> 00:21:01,809 of all that, you saw DHH. He was constantly 408 00:21:01,809 --> 00:21:06,230 promoting Rails and getting into discussions and arguments with 409 00:21:06,230 --> 00:21:10,570 other people and blogging about it. And he, he 410 00:21:10,570 --> 00:21:13,600 was relentless in promoting Rails, and the early Rails 411 00:21:13,600 --> 00:21:16,929 community was relentless in sharing their enthusiasm for this 412 00:21:16,929 --> 00:21:18,419 new thing. 413 00:21:18,419 --> 00:21:20,450 And I think that that matters a lot, because 414 00:21:20,450 --> 00:21:23,809 it's not enough to have great code and just 415 00:21:23,809 --> 00:21:26,720 put it up on the internet. That, that never 416 00:21:26,720 --> 00:21:29,169 works. You need to tell people about what you're 417 00:21:29,169 --> 00:21:32,970 doing in order for them to know about it. 418 00:21:32,970 --> 00:21:36,490 And you need to explain clearly and concisely why 419 00:21:36,490 --> 00:21:40,480 it's better than what they're doing now. And Rails, 420 00:21:40,480 --> 00:21:44,149 David and the Rails community really succeeded at that. 421 00:21:44,149 --> 00:21:48,919 Third. Another reason that Rails succeeded is the triumph 422 00:21:48,919 --> 00:21:53,379 of community. From really early days, Rails had the 423 00:21:53,379 --> 00:21:56,320 ability to be extended with plugins. And so people 424 00:21:56,320 --> 00:21:59,509 wrote plugins that would take care of default areas, 425 00:21:59,509 --> 00:22:02,220 or not, not default areas, but common areas of 426 00:22:02,220 --> 00:22:06,039 your application, like logging in or uploading files. 427 00:22:06,039 --> 00:22:07,429 These are the things that you needed in your 428 00:22:07,429 --> 00:22:10,639 app, but they weren't core to your app. And 429 00:22:10,639 --> 00:22:13,980 so knowing that you could take advantage of these, 430 00:22:13,980 --> 00:22:18,440 these plugins and later gems really made picking Rails 431 00:22:18,440 --> 00:22:24,909 an easier choice. 432 00:22:24,909 --> 00:22:27,820 So ultimately, Rails was successful. But what about the 433 00:22:27,820 --> 00:22:31,159 future? What does the future have in store for 434 00:22:31,159 --> 00:22:36,019 Rails? I think that Rails does face challenges in 435 00:22:36,019 --> 00:22:40,799 the future, because, because the web is changing. What 436 00:22:40,799 --> 00:22:42,850 people want to do on the web is, is 437 00:22:42,850 --> 00:22:46,080 becoming different. And indeed the, the future of the 438 00:22:46,080 --> 00:22:48,870 web I think is even in question. 439 00:22:48,870 --> 00:22:51,769 So let's look at two challenges to Rails. First 440 00:22:51,769 --> 00:22:55,999 of all, now that browsers are more powerful, people 441 00:22:55,999 --> 00:22:58,220 are able to write more of their app on 442 00:22:58,220 --> 00:23:01,799 the frontend. And so, when you do this, you 443 00:23:01,799 --> 00:23:05,529 don't need the kind of classic web app that 444 00:23:05,529 --> 00:23:08,120 Rails is. Rails is really good at generating a 445 00:23:08,120 --> 00:23:10,620 lot of HTML and shipping it down to the 446 00:23:10,620 --> 00:23:14,769 client. Kind of the classic web app like base 447 00:23:14,769 --> 00:23:16,590 camp. 448 00:23:16,590 --> 00:23:19,200 But when you're writing your entire app in JavaScript 449 00:23:19,200 --> 00:23:21,649 in the client, what you need is the ability 450 00:23:21,649 --> 00:23:24,629 to talk to the server with an API. And 451 00:23:24,629 --> 00:23:28,379 when that's all you're doing, people can question, why 452 00:23:28,379 --> 00:23:29,860 do I need Rails? Why do I need all 453 00:23:29,860 --> 00:23:33,210 of this extra stuff that Rails does? I'm, maybe 454 00:23:33,210 --> 00:23:35,480 I should just use node.js, and then I can 455 00:23:35,480 --> 00:23:38,100 write, you know, the same language on the client 456 00:23:38,100 --> 00:23:40,490 and the server. 457 00:23:40,490 --> 00:23:45,980 Similarly, mobile apps are becoming increasingly popular, because you 458 00:23:45,980 --> 00:23:47,720 can do so much more with a mobile app 459 00:23:47,720 --> 00:23:49,980 than you can with a web app. The user 460 00:23:49,980 --> 00:23:54,169 interaction is much richer and, and faster and, and 461 00:23:54,169 --> 00:23:58,919 just cleaner. And, again, these kind of apps talk 462 00:23:58,919 --> 00:24:02,539 to the server with an API. And so people 463 00:24:02,539 --> 00:24:05,830 think, well, I don't need Rails, then. 464 00:24:05,830 --> 00:24:07,379 And I think that this, this is a threat 465 00:24:07,379 --> 00:24:10,659 to Rails. But there's two key things to remember 466 00:24:10,659 --> 00:24:14,480 about this. One, Rails is great at this kind 467 00:24:14,480 --> 00:24:18,440 of thing. In our application, we serve hundreds of 468 00:24:18,440 --> 00:24:23,509 millions of API requests a day, a month, using 469 00:24:23,509 --> 00:24:25,990 Rails. And the way that we do that is 470 00:24:25,990 --> 00:24:28,269 not using action Controller. 471 00:24:28,269 --> 00:24:30,249 But Rails makes it easy to pick out only 472 00:24:30,249 --> 00:24:33,860 the parts of Rails that you need to use. 473 00:24:33,860 --> 00:24:35,740 And so you can, you can take Rails much 474 00:24:35,740 --> 00:24:40,190 further than many people think, I believe. 475 00:24:40,190 --> 00:24:43,509 Second, even if you are building an API heavy 476 00:24:43,509 --> 00:24:45,700 app, not all of your app is going to 477 00:24:45,700 --> 00:24:49,299 be API based. You are going to need a 478 00:24:49,299 --> 00:24:54,179 management console to handle the backend of your application. 479 00:24:54,179 --> 00:24:55,899 Pretty much every app has this. You need a 480 00:24:55,899 --> 00:24:59,399 way to look up your users and, you know, 481 00:24:59,399 --> 00:25:02,009 change their account status and things like that. 482 00:25:02,009 --> 00:25:04,639 And, are you gonna build an iPad app for 483 00:25:04,639 --> 00:25:06,860 that? I don't think so. Because it would be 484 00:25:06,860 --> 00:25:09,600 too expensive and slow. The web is still the 485 00:25:09,600 --> 00:25:13,309 best way and the easiest way to distribute an 486 00:25:13,309 --> 00:25:15,059 application. 487 00:25:15,059 --> 00:25:17,119 So Rails has a real, I think, has a 488 00:25:17,119 --> 00:25:20,879 place for that. Or, there's a place for Rails, 489 00:25:20,879 --> 00:25:24,970 even in an API-driven application. 490 00:25:24,970 --> 00:25:27,529 But even if the web, as a platform, and 491 00:25:27,529 --> 00:25:30,309 Rails as a, as a framework, can't adapt and 492 00:25:30,309 --> 00:25:32,529 fall by the wayside, I think the legacy of 493 00:25:32,529 --> 00:25:36,049 Rails will really live on for a long time. 494 00:25:36,049 --> 00:25:40,690 Because this idea of taking things that were possible 495 00:25:40,690 --> 00:25:44,119 and making them simple, making them easy to do, 496 00:25:44,119 --> 00:25:47,909 is really powerful. And it inspired programmers in many 497 00:25:47,909 --> 00:25:52,679 different programming languages to, to copy Rails and to 498 00:25:52,679 --> 00:25:57,999 try to get those benefits for themselves. 499 00:25:57,999 --> 00:26:00,149 So I think no matter what the next platform 500 00:26:00,149 --> 00:26:03,799 is, people will be inspired by that aspect of 501 00:26:03,799 --> 00:26:06,039 Rails, and they will want to write the Rails 502 00:26:06,039 --> 00:26:09,009 of whatever. 503 00:26:09,009 --> 00:26:10,980 I'd also like to look at the reaction against 504 00:26:10,980 --> 00:26:15,259 Rails. Because that's part of Rails's legacy, too. There's 505 00:26:15,259 --> 00:26:17,940 two examples that I'd like to talk about here. 506 00:26:17,940 --> 00:26:21,049 First of all, there's Jengo. So Jengo can't be 507 00:26:21,049 --> 00:26:26,019 considered to be inspired by Rails, because it was 508 00:26:26,019 --> 00:26:28,460 developed at the same time or even earlier than 509 00:26:28,460 --> 00:26:29,309 Rails. 510 00:26:29,309 --> 00:26:34,049 But since, the, the two frameworks have been really 511 00:26:34,049 --> 00:26:36,110 similar and, and, and have learned a lot from 512 00:26:36,110 --> 00:26:39,860 each other I think. But the way that Jengo 513 00:26:39,860 --> 00:26:42,980 works, it is really driven by the Python philosophy 514 00:26:42,980 --> 00:26:47,190 of explicit is better than implicit. So in, in 515 00:26:47,190 --> 00:26:50,610 Jengo, when you, when you like what to map 516 00:26:50,610 --> 00:26:53,460 up a url on your server, you think really 517 00:26:53,460 --> 00:26:55,889 hard about what that url is going to be. 518 00:26:55,889 --> 00:27:00,809 It doesn't happen automatically. And your database models tell 519 00:27:00,809 --> 00:27:04,759 the database what its fields should be, instead of 520 00:27:04,759 --> 00:27:08,330 the other way around. In Rails, of course, we 521 00:27:08,330 --> 00:27:11,809 follow convention over configuration, right. But if you've ever 522 00:27:11,809 --> 00:27:14,379 tried to teach someone Rails, you know that this 523 00:27:14,379 --> 00:27:17,889 can be a double-edged sword. 524 00:27:17,889 --> 00:27:20,190 Convention over configuration lets you write less code, but 525 00:27:20,190 --> 00:27:23,440 it also makes it less clear what's happening. When 526 00:27:23,440 --> 00:27:26,499 you're teaching somebody Rails, it can be really confusing 527 00:27:26,499 --> 00:27:29,330 that you edit a route in this file over 528 00:27:29,330 --> 00:27:32,200 here and therefore your controller over here needs to 529 00:27:32,200 --> 00:27:35,850 be named this and it has these methods available 530 00:27:35,850 --> 00:27:40,639 to it that respond to these HTTP requests. Or 531 00:27:40,639 --> 00:27:42,320 HTTP methods. 532 00:27:42,320 --> 00:27:44,059 That is not at all obvious. And so it 533 00:27:44,059 --> 00:27:49,820 takes time to learn all those conventions. And, I 534 00:27:49,820 --> 00:27:51,289 mean, I don't think one is better than the 535 00:27:51,289 --> 00:27:54,320 other. They're just, you know, different sides of the 536 00:27:54,320 --> 00:27:56,899 same coin. Different ways of looking at how programming 537 00:27:56,899 --> 00:27:59,480 should work. 538 00:27:59,480 --> 00:28:01,669 Kind of related to that is the second example, 539 00:28:01,669 --> 00:28:06,570 which is microframeworks. Like Sinatra. These have been incredibly 540 00:28:06,570 --> 00:28:09,470 influential. And I love using Sinatra. It's just, it's 541 00:28:09,470 --> 00:28:11,169 like such a thing of beauty, when you can 542 00:28:11,169 --> 00:28:13,860 have your whole web app in one file. And 543 00:28:13,860 --> 00:28:16,539 the, the urls that are, that are in your 544 00:28:16,539 --> 00:28:19,820 web app are just tightly connected to the code 545 00:28:19,820 --> 00:28:22,139 that's going to run when someone goes to that 546 00:28:22,139 --> 00:28:22,999 url. 547 00:28:22,999 --> 00:28:27,139 It, that is like a really wonderful feeling, I 548 00:28:27,139 --> 00:28:31,330 think. And Sinatra has been probably even more influential 549 00:28:31,330 --> 00:28:35,179 than Rails. There are copies of Sinatra, or Sinatra-inspired 550 00:28:35,179 --> 00:28:39,350 microframeworks anyway, in just about every programming language you 551 00:28:39,350 --> 00:28:43,460 can think of. Anything from Java to PHP to 552 00:28:43,460 --> 00:28:48,299 Clojure, Go, JavaScript. Even Haskall. 553 00:28:48,299 --> 00:28:52,999 All of these have a version of Sinatra. 554 00:28:52,999 --> 00:28:57,960 And in some languages, these microframeworks, the microframework inspired 555 00:28:57,960 --> 00:29:00,989 by Sinatra is the default way people write web 556 00:29:00,989 --> 00:29:05,389 apps. It's the best way that they have. And 557 00:29:05,389 --> 00:29:07,610 I think that that is kind of a problem, 558 00:29:07,610 --> 00:29:12,019 because while I love using Sinatra, when an app 559 00:29:12,019 --> 00:29:14,129 gets above a certain size, I find myself pulling 560 00:29:14,129 --> 00:29:16,179 in more and more of Rails. 561 00:29:16,179 --> 00:29:19,509 And at some point I feel, well, I might 562 00:29:19,509 --> 00:29:22,009 as well just switch to Rails. And so, in 563 00:29:22,009 --> 00:29:23,690 these, I feel bad for these programmers in these 564 00:29:23,690 --> 00:29:26,200 other languages, because they don't have the choice to 565 00:29:26,200 --> 00:29:30,179 switch, necessarily, to something as good as Rails. 566 00:29:30,179 --> 00:29:31,809 So I think, I think Rails actually has a 567 00:29:31,809 --> 00:29:34,299 bright future ahead of it, because it, it's shown 568 00:29:34,299 --> 00:29:38,169 the ability to adapt and respond to change. Think 569 00:29:38,169 --> 00:29:41,330 about Rails 1 point 2 and the addition of 570 00:29:41,330 --> 00:29:43,980 REST and making that the default way that we 571 00:29:43,980 --> 00:29:48,519 think about controllers and resources on the web. 572 00:29:48,519 --> 00:29:51,739 So I think that if people want to use 573 00:29:51,739 --> 00:29:55,440 Rails to back JavaScript-based applications, Rails will get better 574 00:29:55,440 --> 00:29:57,639 at that. And if people want to use it 575 00:29:57,639 --> 00:30:00,190 to back mobile applications, it will get better than, 576 00:30:00,190 --> 00:30:02,779 at that. But you'll still have the ability to 577 00:30:02,779 --> 00:30:05,009 use Rails for what it's good at when you 578 00:30:05,009 --> 00:30:06,299 need to. 579 00:30:06,299 --> 00:30:11,619 All right. So we've talked about what programming was 580 00:30:11,619 --> 00:30:16,610 like in 2004. We've talked a little bit about 581 00:30:16,610 --> 00:30:19,279 the features of Rails that made people want to 582 00:30:19,279 --> 00:30:23,230 use it and made it win. And we've talked 583 00:30:23,230 --> 00:30:26,200 about what could happen in the future. What is 584 00:30:26,200 --> 00:30:29,210 the, what's the legacy of Rails and will it 585 00:30:29,210 --> 00:30:33,320 be able to adapt? 586 00:30:33,320 --> 00:30:35,889 So a hundred years ago, or, actually, more than 587 00:30:35,889 --> 00:30:39,369 a hundred years ago, when Edward Bellamy was frustrated 588 00:30:39,369 --> 00:30:41,970 with the way things were going, with how society 589 00:30:41,970 --> 00:30:45,110 was working, he took up his pen and he 590 00:30:45,110 --> 00:30:48,789 used his imagination to create a new world. This, 591 00:30:48,789 --> 00:30:51,580 this utopian novel, where he could explain how he 592 00:30:51,580 --> 00:30:53,739 thought things ought to work. 593 00:30:53,739 --> 00:30:56,889 Now, that may seem kind of pointless. Because it's 594 00:30:56,889 --> 00:31:01,580 the twenty-first century. America is not a socialist utopia. 595 00:31:01,580 --> 00:31:05,499 But that book was incredibly influential. In the years 596 00:31:05,499 --> 00:31:09,279 after its publication, hundreds of Bellamy clubs were started 597 00:31:09,279 --> 00:31:12,509 across the country, and millions of people were inspired 598 00:31:12,509 --> 00:31:15,499 by the ideas written in the book. 599 00:31:15,499 --> 00:31:19,690 And those people, and those clubs formed the nucleus 600 00:31:19,690 --> 00:31:23,799 of the progressive movement in the early twentieth century, 601 00:31:23,799 --> 00:31:27,239 that broke the trusts and monopolies, and ultimately paved 602 00:31:27,239 --> 00:31:30,619 the way for social security and the American welfare 603 00:31:30,619 --> 00:31:31,220 state. 604 00:31:31,220 --> 00:31:34,059 So the book did have a huge influence on, 605 00:31:34,059 --> 00:31:35,460 on the world. 606 00:31:35,460 --> 00:31:37,960 Programming, on the other hand, is a little more 607 00:31:37,960 --> 00:31:43,929 concrete. So when DHH was frustrated by how programming, 608 00:31:43,929 --> 00:31:48,489 web programming worked in 2003 or whatever, he was 609 00:31:48,489 --> 00:31:51,830 able to do something about it. He cracked open 610 00:31:51,830 --> 00:31:54,289 his text editor and got to work and built 611 00:31:54,289 --> 00:31:57,139 something that people found inspiring. 612 00:31:57,139 --> 00:31:59,340 And when they saw it, they wanted to meet 613 00:31:59,340 --> 00:32:01,679 other people who were interested in that. And that 614 00:32:01,679 --> 00:32:04,429 was the genesis of the Rails community. And so 615 00:32:04,429 --> 00:32:09,179 today, you know, we're all here today because of 616 00:32:09,179 --> 00:32:13,070 the Rails community and because of what, what developed 617 00:32:13,070 --> 00:32:17,350 over those, those last ten years. So I'm really, 618 00:32:17,350 --> 00:32:19,830 really pleased to be a part of that community, 619 00:32:19,830 --> 00:32:23,320 and really honored to be speaking to you today 620 00:32:23,320 --> 00:32:24,940 about that. 621 00:32:24,940 --> 00:32:27,259 And it, it's made a huge impact in the 622 00:32:27,259 --> 00:32:30,489 direction of my career. And I just find it 623 00:32:30,489 --> 00:32:33,739 inspiring. I find it inspiring that as programmers, we 624 00:32:33,739 --> 00:32:36,590 can see something that's broken and we can fix 625 00:32:36,590 --> 00:32:39,730 it. We can create a new reality for ourselves 626 00:32:39,730 --> 00:32:42,869 with code. And I think that that's a really 627 00:32:42,869 --> 00:32:45,669 powerful, really powerful notion. 628 00:32:45,669 --> 00:32:47,519 And we also shouldn't forget the lessons of Rails 629 00:32:47,519 --> 00:32:50,299 as we did that. Because Rails didn't just win 630 00:32:50,299 --> 00:32:53,450 because it was, because it was better, though I, 631 00:32:53,450 --> 00:32:55,629 I do think it was. It won because of 632 00:32:55,629 --> 00:32:58,600 the community around it and because of the, their 633 00:32:58,600 --> 00:33:01,679 passion for telling people about what was so good 634 00:33:01,679 --> 00:33:03,129 about Rails. 635 00:33:03,129 --> 00:33:06,220 So most of us probably are not going to 636 00:33:06,220 --> 00:33:10,720 write the next great framework. I, I, I don't 637 00:33:10,720 --> 00:33:13,879 imagine that I will. But I think that this, 638 00:33:13,879 --> 00:33:15,919 we can take to heart the lessons of Rails 639 00:33:15,919 --> 00:33:18,590 in our own work and in the libraries that 640 00:33:18,590 --> 00:33:19,919 we're writing. 641 00:33:19,919 --> 00:33:23,179 Don't forget to, to, to try to make things 642 00:33:23,179 --> 00:33:25,409 easy. To try to make it easy for your 643 00:33:25,409 --> 00:33:28,679 fellow programmers. And don't forget to tell people about 644 00:33:28,679 --> 00:33:32,419 it and explain why they should use what you've 645 00:33:32,419 --> 00:33:34,720 written. And I think if you do that, you 646 00:33:34,720 --> 00:33:36,640 can help make the world a better place. 647 00:33:36,640 --> 00:33:37,940 Thanks.