LUKE FRANCL: Good afternoon. I'd like to get started if, I think, everybody's ready. Cool. Cool. Thank, thank you for joining me this afternoon. I'm excited to be here. And thanks for, thanks for choosing this talk. So it's been ten years since the first public release on Rails, so I think that's a good time to think back and reflect on where Rails has come from, where it might be going, and what the future has in store. So, I've been thinking a lot about the early days of Rails, lately, because the company I work for, Swiftype, makes site search software. So I use my own website for testing. So I index my site and then have to do searches on it, and I'll search for Rails. Just cause I'm not super creative and I need to search for something, right. And, in doing so, I found some old blog posts that I wrote in early 2005, when I first discovered Rails. And it was really interesting for me to read, because back then, I was, I was working as a Java developer and I was really interested in Python. And Rails was neither of those things. So I was pretty skeptical of Rails. Like, I was impressed with it, but I wasn't sure it was worth learning Ruby over. So I thought, I'll just sit back and let the Python people catch up. And I waited and I waited and I waited, and that never really seemed to happen. And so after a few months, I jumped into Rails and started learning it and I started learning Ruby so that I could use Rails. And then that fall, I got wind of a new group starting in my home town. The Ruby Users of Minnesota. And so I was, I was there at the first meeting when there was twelve people talk, who were just really excited about Ruby and really excited about Rails. And at that point I joined the, the Ruby community and became a part of that and really have not, have not looked back since then. And I've been working with Rails professionally now for about eight years. So this made me think about a book I read once called Looking Backward by Edward Bellamy. So in this book, which was written in the late 1800s and takes place at that time, a rich, upperclass man is hypnotized. And he falls asleep for over a hundred years. And when he wakes up, everything has changed. America is now a socialist utopia. And so, you know, he had it pretty good before, right. He, he was wealthy. He had servants. And now everyone is equal. And so he's pretty skeptical of this new order. So it takes him awhile, but as he's shown the new way of doing things, he becomes convinced that this is actually a better way. And that made me think of, think of my situation, where I was, I was skeptical of Rails, and, but eventually won over. So today, what I'd like to talk about is the idea of what would a programmer from 2004 think if they could time travel forward to today and experience our web development utopia. What would that be like, for them, to see how we work today? So, what I'd like to do today is first talk about what web development was like in 2004. Then, I'd like to jump forward to the present and think about what a programmer from 2004 would think about our web development utopia of today. And finally I'd like to take a look at what the future might have in store for Rails, and what the, what the legacy of Rails might be. So first, let's talk a little bit about what development was like in 2004. So if I can set the stage for a minute, I see a lot of Mac Books here today. There were no Mac Books in 2004. The top of the line Apple laptop was a Power Mac G4. And, you know, Apple had not completely penetrated the web development community like it has now. There were only, I, I used Linux at work myself. And, a Windows at home, actually. And the most popular phone, like, maybe not the most popular, but the hottest phone in 2004 was a Motorrola Razr. So, right? So things were pretty different there. Things were pretty different then. And I was working as a Java developer at the time. And I was pretty excited about that, because I graduated in 2001, right after the dot com bust. And things were pretty sketchy there for awhile. It was hard for me to find a job. And so I was excited that I was able to work as a Java developer, in the hot language at the time. And I was, I was glad that I was able to work at a software development company, where I could work on software for sale instead of working in the cost center at a, at a big bank or something like that, right. So I was working as a Java developer, and if you've ever done any Java web development, you know that it can be pretty painful, right. At the time, the, the best way to do Java web development was struts and hibernate. But we didn't use either of those. We used raw Java servelettes and hand coded J, JDBC queries to our database. So the, the real problem with Java as a, as a web development platform, at least in those days, was it, it has a really long edit, compile, debug loop. Or, in the case of, of Java web development, it's the edit, compile, deploy, debug loop. Because you have to restart your app server, and we used Web Sphere, so that took a long time. So if I needed to write a new page for, for our app, it, it was a pretty involved process. So we used raw servelettes, so that's sort of like using a raw CGI library, where it's very low-level. And if, when you work in Java, it's very verbose and you have to read from input streams and write to output streams. And it just doesn't have the conveniences of Ruby or a scripting language. So I'd have to write my servelette, then I'd have to write a bunch of XML files, or XML code in the web dot xml file to map it up. And then you'd compile everything and get it working and then restart your app server, which would take several minutes. And then browse to the new page to, to see what it, what's going on there. And that's where the fun would start, because that's when the JSPs came into play. So JSP is just like ERB, right. Instead of Ruby, it's Java. But Java a much more heavy-weight language, and it doesn't have, you know, friendly looping constructs or mapping constructs like Ruby does. So writing view code in Ruby, or in Java is not very much fun. But worst of all, the way that JSPs work is that it takes the Java, or the JSP code that you write and it compiles it into a Java class file. And then that Java class file gets compiled into code. So when you get an error, when you're debugging, you'd get this stack trace, and it would be like, NullPointer exception on line 12,075 of line 20,082, and you'd sit there and you'd think, ah. What was I doing in my JSP that could cause a NullPointer exception? And you'd look at the JSP and you'd look at the stack trace, and they had no correspondence whatsoever, right. So it's really painful. And if you were smart, you would, there was a setting, like a secret setting you could use for Web Sphere to keep around the compiled Java files. So then you could open that up in your web browser and look at line 12,075 and be like, oh. That's what I was doing in the JSP. So, web development in Java, especially in 2004, not very much fun. But there was, there was also at that time a glimmer that something better was on the way, that the web could do more. There was a new sense that the web was a powerful platform for delivering software. And I think that the earliest glimmerings of this come from Microsoft's Outlook web app. This was the first application to use what we would call today Ajax, without requiring any kind of browser plugins. So that, that came out in 2001. And people, people didn't pay much attention to it because it was IE only and it, it wasn't clear how it was working, right. And then Google launched Google Suggest. And people dissected that, and they saw how it was working. And they also launched Gmail, which gave people a new sense of what was possible in a web app. That, that web apps could automatically refresh as things were changing on the server. So there was a new sense of what was possible. That, that, that maybe there was a better way of writing web apps. And in 2004 I was also looking for something better. Because, and I attribute that to a book I read early in my career. The Pragmatic Programmer by Dave Thomas and Andy Hunt. And in that book, which is, it's a terrific book about becoming a better software developer, a better software crafts man. In that book, they talk about the importance of learning a scripting language. And that's because, if you were working in a language like Java, there's often things that are too, too small of a task to make it worth writing a Java program to do. And, but a scripting language you can, you know, knock that off really easily. So things that you might do manually, you can instead write a script to do for you. And so I took that to heart, and I went to the book store. Remember, this was the early 2000s. There were still bookstores. And I looked at all the books that they had about scripting languages. So there was a bunch of books about Perl. There was a bunch of books about Python. And there was this one book about Ruby by those same guys, Dave Thomas and Andy Hunt. So I immediately just started the books about Perl, because I'd worked with Perl before and I thought it was terrible. And I looked at the books about Python, and I'm like, this looks OK. I can see myself using this. And then I looked at the book about Ruby. And, unfortunately, what I saw in the book about Ruby was a lot of dollar signs and dollar sign underscores and at signs and at at signs. And I thought, this looks just like Perl. I don't, I don't want to learn this. This, this is, this is, this is crappy. So I decided then to become a Python programmer. And I was actually able to use Python for a number of things in my job and my personal programming. I wrote a script to migrate from one bug database to the other. I wrote a script that tied our subversion check ins to our bug database so you could reference bug numbers and link up the commits and stuff. And I, I wrote some personal scripts. But what I really wanted to do was write web apps. Because that's, throughout my career, that's always what I've been most excited about. Because I've always loved the potential of the web as a platform for enabling communication. It's, it's the most powerful and widely distributed way that you can connect people. And so every time I would have an idea for a web app in Python, I would start thinking about how it, or, I would start thinking about how it should work and what it should do. And I'd get excited about it, and want to build it. And then I'd start reading about how to build web apps in Python. And get really frustrated. Because, then there was no clear way. There was no Jengo. There was CGI in the core library, but, you know, who wants to write at that low-level? There was, then, a myriad of templating options and different object relational mappers and different ways of publishing your objects to the web and different database drivers. And, there was no clear way of deploying the software, either. So I would have this idea for what I thought would be the next great app, and then I would start reading about Python, how to implement it in Python and get frustrated and give up. But I didn't know it at the time, but there was something better on the way. So let's turn now to 2014, and think about what would a programmer from 2004 think about how we work today. And I think if you could take someone from then and bring them forward to now, I think they would be amazed. Because it's truly a great time to be a programmer. We're all walking around with a computer in our pockets that's more powerful than the desktop I had in 2004. And it has a, a better web browser, too. So think about what's different between now and then. In 2004, Ajax was in its infancy. The term hadn't even been coined yet. Today, rich Ajax frameworks come with every web application framework. So you can, you can build rich, interactive applications much easier. And, you can even write your entire frontend in JavaScript if you want to. Web browsers are immeasurably more powerful now than they, than they were then. Deployment is much easier, too. In 2004, it was really hard to figure out how you should get your app up on the web. You could colo, but that was expensive. You could use shared hosting, like, DreamHost or something like that. But those servers were underpowered and kind of weak. Today, you can spin up a server with the click of a button. You can manage everything yourself if you want to use EC2, or you can rely on platform services like Heroku or Google App Engine. And this is really great for programmers, because you don't have to be a great programmer and a great sys admin now to launch a web application. You can let other people handle that part. And that's terrific. Another thing that I think is really powerful about how we work today is that in, today we have access to all of these web service APIs, with a simple HTTP request. You can extend the functionality of your app really easily by leveraging these services. There's everything from search, like my, my company provides, to payments from companies like Stripe, and even telephony from companies like Twillio. So with just an HTTP request, you can add that kind of functionality into your application super easily. And best of all, you're us- they use JSON instead of XML. So there's no XML setups like there was back in the early 2000s. But what about Rails? Like, what would a programmer from 2004 think about Ruby on Rails? Well, I think if you could bring someone, or talk to somebody in 2004 and say, in ten years the best way to make a web app is gonna be this thing called Ruby on Rails. I think what they would say is, what on Rails? It's difficult to overstate how marginal the Ruby community was in 2004. When David publicly demo'd Rails at RubyConf 2004, there were probably less people in the room than there are right now. That, there were about sixty people at that conference. Today, there's dozens of conferences around the world, and thousands of people make their livings using Ruby and Rails. The community has grown tremendously since those days. But what about the features? The features were really what made Rails succeed. And if I think back on what I first thought about Rails when I saw it, like, what impressed me. Things that, that really stand out in my mind are things like live reloading. Compared to how I was working in Java, where it was like, a really long cycle to get anything up on the screen, in Rails, you could edit any file. You could edit your model, you're, you're views. Even your database schema. And reload your browser and it was right there. And that was tremendously exciting. And, if you had an exception in your, in your view, you would see exactly which line of code caused it, and not have to wade through these huge stack traces that had nothing to do with what you were working on. And that was tremendous for developer productivity. Another thing that was a real big win for developer productivity, for me anyway, was the development console. Rails let you just type a single command and get full access to all of the code that you'd been writing. So, for me, I keep that open all the time. And I am always constantly trying out things and experimenting and trying to figure out how different APIs work by using the developer console. This is something that I'd been able to get working in the Java world using a tool called BeanShell, which is like a Java scripting framework. But it was nowhere near as good as the Rails console, and, you know, it just was a lot harder to, to get working. Related to that is just the idea of having separate development environments. Rails came right out of the box with development, production, and test, and has separate databases for all of those things. So you didn't have to worry about mixing your code together. You could have separate configurations for testing and production and development. And that really helped with the software engineering side of Rails. Finally, the, the, the last big feature that I think really stood out to me was ActiveRecord and migrations. ActiveRecord was super exciting, because here, this, this, this, this code is sort of magically intuiting the, the fields from the structure of your database. You didn't have to write any code at all. And for someone who was writing SQL statements by hand, that was really exciting. And migrations were awesome, too, because you always need to transition the state of your database in your, in your application. And, again, this is something that we had built at my job. But ours was not as good. It, it used raw SQL, so you would write SQL statements to, to transition the database. And it was tied directly to the app version that, that we had. So, when you would release a new version of the app, you would have to sync that with the database. The database version would have to be synced with that. So there was, there was no way to independently migrate the database. And there was no way to go down. So you had to get it right. Rails was better than that. But why did Rails win? Why, why was Rails exciting to people? Because all these features were available elsewhere. I think there's three reasons. First of all, while each of these features was something that you could get in other web programming frameworks, Rails brought them all together. Rails was the whole package. So Rails took things that were possible and made them easy. It, even that, it made them the default. So Rails took a lot of best practices and put them together in one thing that you could use super simply. And that was really exciting to people. Even, even for me, because I was able to, to do some of the things that Rails had. Having it together in one package was super exciting. The second reason I think Rails succeeded is the triumph of hype. If you go back and read the early blog posts about Rails, it's really interesting because it really caused a furor in the Java and the Python world. Because people were like, well, why can't we do this? And in the middle of all that, you saw DHH. He was constantly promoting Rails and getting into discussions and arguments with other people and blogging about it. And he, he was relentless in promoting Rails, and the early Rails community was relentless in sharing their enthusiasm for this new thing. And I think that that matters a lot, because it's not enough to have great code and just put it up on the internet. That, that never works. You need to tell people about what you're doing in order for them to know about it. And you need to explain clearly and concisely why it's better than what they're doing now. And Rails, David and the Rails community really succeeded at that. Third. Another reason that Rails succeeded is the triumph of community. From really early days, Rails had the ability to be extended with plugins. And so people wrote plugins that would take care of default areas, or not, not default areas, but common areas of your application, like logging in or uploading files. These are the things that you needed in your app, but they weren't core to your app. And so knowing that you could take advantage of these, these plugins and later gems really made picking Rails an easier choice. So ultimately, Rails was successful. But what about the future? What does the future have in store for Rails? I think that Rails does face challenges in the future, because, because the web is changing. What people want to do on the web is, is becoming different. And indeed the, the future of the web I think is even in question. So let's look at two challenges to Rails. First of all, now that browsers are more powerful, people are able to write more of their app on the frontend. And so, when you do this, you don't need the kind of classic web app that Rails is. Rails is really good at generating a lot of HTML and shipping it down to the client. Kind of the classic web app like base camp. But when you're writing your entire app in JavaScript in the client, what you need is the ability to talk to the server with an API. And when that's all you're doing, people can question, why do I need Rails? Why do I need all of this extra stuff that Rails does? I'm, maybe I should just use node.js, and then I can write, you know, the same language on the client and the server. Similarly, mobile apps are becoming increasingly popular, because you can do so much more with a mobile app than you can with a web app. The user interaction is much richer and, and faster and, and just cleaner. And, again, these kind of apps talk to the server with an API. And so people think, well, I don't need Rails, then. And I think that this, this is a threat to Rails. But there's two key things to remember about this. One, Rails is great at this kind of thing. In our application, we serve hundreds of millions of API requests a day, a month, using Rails. And the way that we do that is not using action Controller. But Rails makes it easy to pick out only the parts of Rails that you need to use. And so you can, you can take Rails much further than many people think, I believe. Second, even if you are building an API heavy app, not all of your app is going to be API based. You are going to need a management console to handle the backend of your application. Pretty much every app has this. You need a way to look up your users and, you know, change their account status and things like that. And, are you gonna build an iPad app for that? I don't think so. Because it would be too expensive and slow. The web is still the best way and the easiest way to distribute an application. So Rails has a real, I think, has a place for that. Or, there's a place for Rails, even in an API-driven application. But even if the web, as a platform, and Rails as a, as a framework, can't adapt and fall by the wayside, I think the legacy of Rails will really live on for a long time. Because this idea of taking things that were possible and making them simple, making them easy to do, is really powerful. And it inspired programmers in many different programming languages to, to copy Rails and to try to get those benefits for themselves. So I think no matter what the next platform is, people will be inspired by that aspect of Rails, and they will want to write the Rails of whatever. I'd also like to look at the reaction against Rails. Because that's part of Rails's legacy, too. There's two examples that I'd like to talk about here. First of all, there's Jengo. So Jengo can't be considered to be inspired by Rails, because it was developed at the same time or even earlier than Rails. But since, the, the two frameworks have been really similar and, and, and have learned a lot from each other I think. But the way that Jengo works, it is really driven by the Python philosophy of explicit is better than implicit. So in, in Jengo, when you, when you like what to map up a url on your server, you think really hard about what that url is going to be. It doesn't happen automatically. And your database models tell the database what its fields should be, instead of the other way around. In Rails, of course, we follow convention over configuration, right. But if you've ever tried to teach someone Rails, you know that this can be a double-edged sword. Convention over configuration lets you write less code, but it also makes it less clear what's happening. When you're teaching somebody Rails, it can be really confusing that you edit a route in this file over here and therefore your controller over here needs to be named this and it has these methods available to it that respond to these HTTP requests. Or HTTP methods. That is not at all obvious. And so it takes time to learn all those conventions. And, I mean, I don't think one is better than the other. They're just, you know, different sides of the same coin. Different ways of looking at how programming should work. Kind of related to that is the second example, which is microframeworks. Like Sinatra. These have been incredibly influential. And I love using Sinatra. It's just, it's like such a thing of beauty, when you can have your whole web app in one file. And the, the urls that are, that are in your web app are just tightly connected to the code that's going to run when someone goes to that url. It, that is like a really wonderful feeling, I think. And Sinatra has been probably even more influential than Rails. There are copies of Sinatra, or Sinatra-inspired microframeworks anyway, in just about every programming language you can think of. Anything from Java to PHP to Clojure, Go, JavaScript. Even Haskall. All of these have a version of Sinatra. And in some languages, these microframeworks, the microframework inspired by Sinatra is the default way people write web apps. It's the best way that they have. And I think that that is kind of a problem, because while I love using Sinatra, when an app gets above a certain size, I find myself pulling in more and more of Rails. And at some point I feel, well, I might as well just switch to Rails. And so, in these, I feel bad for these programmers in these other languages, because they don't have the choice to switch, necessarily, to something as good as Rails. So I think, I think Rails actually has a bright future ahead of it, because it, it's shown the ability to adapt and respond to change. Think about Rails 1 point 2 and the addition of REST and making that the default way that we think about controllers and resources on the web. So I think that if people want to use Rails to back JavaScript-based applications, Rails will get better at that. And if people want to use it to back mobile applications, it will get better than, at that. But you'll still have the ability to use Rails for what it's good at when you need to. All right. So we've talked about what programming was like in 2004. We've talked a little bit about the features of Rails that made people want to use it and made it win. And we've talked about what could happen in the future. What is the, what's the legacy of Rails and will it be able to adapt? So a hundred years ago, or, actually, more than a hundred years ago, when Edward Bellamy was frustrated with the way things were going, with how society was working, he took up his pen and he used his imagination to create a new world. This, this utopian novel, where he could explain how he thought things ought to work. Now, that may seem kind of pointless. Because it's the twenty-first century. America is not a socialist utopia. But that book was incredibly influential. In the years after its publication, hundreds of Bellamy clubs were started across the country, and millions of people were inspired by the ideas written in the book. And those people, and those clubs formed the nucleus of the progressive movement in the early twentieth century, that broke the trusts and monopolies, and ultimately paved the way for social security and the American welfare state. So the book did have a huge influence on, on the world. Programming, on the other hand, is a little more concrete. So when DHH was frustrated by how programming, web programming worked in 2003 or whatever, he was able to do something about it. He cracked open his text editor and got to work and built something that people found inspiring. And when they saw it, they wanted to meet other people who were interested in that. And that was the genesis of the Rails community. And so today, you know, we're all here today because of the Rails community and because of what, what developed over those, those last ten years. So I'm really, really pleased to be a part of that community, and really honored to be speaking to you today about that. And it, it's made a huge impact in the direction of my career. And I just find it inspiring. I find it inspiring that as programmers, we can see something that's broken and we can fix it. We can create a new reality for ourselves with code. And I think that that's a really powerful, really powerful notion. And we also shouldn't forget the lessons of Rails as we did that. Because Rails didn't just win because it was, because it was better, though I, I do think it was. It won because of the community around it and because of the, their passion for telling people about what was so good about Rails. So most of us probably are not going to write the next great framework. I, I, I don't imagine that I will. But I think that this, we can take to heart the lessons of Rails in our own work and in the libraries that we're writing. Don't forget to, to, to try to make things easy. To try to make it easy for your fellow programmers. And don't forget to tell people about it and explain why they should use what you've written. And I think if you do that, you can help make the world a better place. Thanks.