Programming Throwdown - 146: RubyShield, Ruby Central, and Shopify with Mike Dalessio and Evan Phoenix

Episode Date: November 14, 2022

In this tour-de-force, Mike Dalessio – Engineering Director at Shopify – and Evan Phoenix – self-described “long-time Rubyist” – join us for a practical discussion of all things R...uby! Ruby is a beautiful language, and we're really excited to cover the history and present of this language with two experts. 00:01:03 Introductions00:01:49 Mike’s Ruby journey00:12:28 Evan’s own Ruby experience00:18:20 The pickaxe book00:20:34 Weird programming interests00:25:11 MINASWAN00:30:33 Language conferences00:36:38 Wrong answers on StackOverflow00:41:53 RubyCentral00:44:50 In-depth examination of Ruby00:47:57 How Shopify sticks to vanilla Rails00:50:28 A tale of two developers00:59:59 Bringing Ruby up to Python’s level01:04:48 Shopify’s largest app monolith01:11:12 Tuning the knobs01:18:01 How not to learn the hard way01:18:57 Opportunities at Shopify01:29:14 Working with the RubyShield program01:32:07 Rails for API servers01:33:21 Mike and Evan’s advice for listeners01:36:00 FarewellsResources mentioned in this episode:Links:RubyCentral:Website: https://rubycentral.org/RubyShield: https://rubycentral.org/ruby-shieldTwitter: https://twitter.com/rubycentralorgShopify:Website: https://www.shopify.com/Careers: https://www.shopify.com/careersDev Degree Program: https://devdegree.ca/pages/programHashiCorpWebsite: https://www.hashicorp.com/Careers: https://www.hashicorp.com/jobsMike Dalessio:Website: http://mike.daless.io/Twitter: https://twitter.com/flavorjonesEvan Phoenix:Website: https://github.com/evanphxTwitter: https://twitter.com/evanphxRubyConf 2022 (Nov. 29 – Dec. 1, 2022):Website: https://rubyconf.org/Other Episodes:Episode 47: RubyShow Link: https://www.programmingthrowdown.com/2015/10/episode-47-ruby.html References:“The Pickaxe Book” aka Programming Ruby: The Pragmatic Programmer’s Guide 2nd Edition:Amazon: https://www.amazon.com/Programming-Ruby-Pragmatic-Programmers-Second/dp/0974514055 If you’ve enjoyed this episode, you can listen to more on Programming Throwdown’s website: https://www.programmingthrowdown.com/ Reach out to us via email: programmingthrowdown@gmail.com You can also follow Programming Throwdown on Facebook | Apple Podcasts | Spotify | Player.FM  Join the discussion on our DiscordHelp support Programming Throwdown through our Patreon ★ Support this podcast on Patreon ★

Transcript
Discussion (0)
Starting point is 00:00:00 Hey everybody. Ruby Central and Shopify with Mike D'Alessio and Evan Phoenix. Take it away, Jason. Hey, everybody. So 99 episodes ago, we covered Ruby back in 2015. If any of you kind of heard that episode, you might have been sort of shaking your fist in the car or at the stereo. Patrick and I have done a little bit of Ruby know we did our best to do it justice but i'm so thankful that here we are almost 100 episodes later the podcast has really kind of come a long way i'm really uh it's kind of wild just thinking about it but we have two amazing folks who know ruby way better than patrick and i will probably ever know in our whole lives. So we have Mike D'Alessio, engineering director at Shopify, and we have Evan Phoenix,
Starting point is 00:01:09 long time Rubyist on the show to talk about Ruby. Also talk about Ruby Shield, Ruby Central, how Ruby plays a big role at Shopify and plenty of other companies and, and really just dive deep into where the language has gone. So thanks so much, both of you, for coming on the show. It's great to be here. Thanks for having us. Absolutely. Happy to be here. Cool. So maybe we'll jump in just with a couple of backgrounds. Maybe, Mike, you want to go first
Starting point is 00:01:37 and tell us sort of what your journey has been like, what your experience with Ruby has been over the years, and what kind of is the journey, the path that took you to Shopify? Sure. I guess my journey to Ruby starts before I used Ruby. When I started my career, I was working in physics and then later financial services using Fortran and C, which are two of the least user-friendly languages you can imagine. And so by the time I hit like mid-career, you know, mid-2000s at this point, let's call it 2005, 2006, I started to use Ruby for a couple of hobby projects. And it just, it made sense to me, like something clicked, like Ruby is just, it's very easy to use. And you can tell that one of the principles behind the language from the creator maths is to make developers
Starting point is 00:02:32 happy. Like it definitely made me happy and something clicked in my brain and it became my primary language for writing like one-off scripts or even for doing bigger projects. I tried as hard as I could to use it for my next full-time job, which I did. And it's kind of been downhill ever since. I even got my start in open source with Ruby as well. I started contributing back upstream and some very friendly people in the Ruby community were very encouraging and it was painless. And I said, I guess I'll do this some more. And so now I've been using Ruby for something like 16 years and showing no signs of going back to Fortran at this point. Nice. So like, that's a really interesting thing. You fell in love with Ruby and then you said, you know, I would like to find a career where I can do Ruby.
Starting point is 00:03:18 And so my impression is that might be challenging in something like physics. And so you probably have to switch disciplines, right? So what was that like? And it must be a really interesting sort of set of calculus there to say, okay, I really love Ruby. I love physics. I can't really do both of these. I'm going to pick Ruby. And how did that whole thing go? Well, for me, I had already left financial services where you're expected to use C or C++ or, you know, on a bad day, Fortran. And I was already working at a small startup where I had the opportunity to play around with Python and PHP and Ruby. And like Ruby is kind of what I really like. I really rocked it and I really understood it well and it resonated with me.
Starting point is 00:04:03 So then my next job was at a small startup with a friend from college. And we had the opportunity to build a new app, essentially for, let's call it energy trading. It wasn't really trading, but it was a company that owns some power plants. You need to bid your energy into the market and do some light trading. And I was like, I'm going to write this in Rails and it's going to be great. And it all came together in about three weeks. I had built a replacement for their previous system that looked almost identical. And that was the opportunity for me was to kind of put a bunch of my skills together and write this new greenfield thing in Ruby at a new job at a startup where we
Starting point is 00:04:38 had a lot of flexibility around the tech stack. I think that was the key bit for me is Ruby was not a common language in 2007. And so I had to make my own opportunities in a way. We've come a long way since then. I think Ruby is very much enterprise-y at this point in time for a lot of companies. Yeah, that makes a ton of sense. We talked to a gentleman earlier who worked a lot with Dask and said something similar where they really wanted to use Dask and they found the only place at least local to them was a startup. And so it does seem like startups are a good place to have sort of more greenfield, which is kind of counterintuitive, right? You would think like big companies with zillions of dollars to burn would be the place to go to experiment with
Starting point is 00:05:24 new languages. But in practice, you find that they've built all the infrastructure around C. And so everyone's using C. And if you want to use Ruby, you're going to have to fight through like 17 layers of the organization or something. Yeah, I think that you're right on the money that it does work that way in large companies. And I think it's economies of scale. I think at some point, companies get to a size and scale where they say, listen, exceptions are really expensive to track and take care of and limit the flexibility, right? Like, oh, you want to do this project in Haskell?
Starting point is 00:05:59 Fantastic. You're one of three people who work for the company that know Haskell. And if you leave, then we're stuck with a Haskell project that nobody understands. We'll have to throw it away and start over. Like there's a lot of risks that big companies just don't want to take on new languages and new frameworks a lot of the time. Cool. That makes sense. So you're at this energy kind of management or energy trading startup. Did you go from there to Shopify or was there a string of opportunities in between? Oh yeah. There's a bunch of stuff in between. So from that startup, imagine it as I wrote some code for six months to try to get us
Starting point is 00:06:32 a beta version that we could build and sell. We were in startup mode. And then I needed to go actually pay my mortgage. So I got a day job and I was doing that at night. And my day job was at Pivotal Labs, which back in the day was a well-known agile consultancy that specialized in Ruby and Rails applications at the time. child welfare management, which is a really, really complex business domain. And Rails helped us focus on the business logic and not on the incidental complexity of building a large system. And that's when I really got sold on Rails as the easiest and fastest way to get something new up and running. I later became a client at another startup of Pivotal. Then I went back to Pivotal
Starting point is 00:07:23 again, where I ran their New York consulting business. And then finally, I worked on Cloud Foundry, which is like, it's like Heroku for enterprises, right? You want your developers to have that ease of pushing an app, but you have your own data center. Like, what do you do? You buy Cloud Foundry and you run it internally. And Cloud Foundry, as it turns out, was originally built by VMware in Ruby.
Starting point is 00:07:44 Weird coincidence. It was built in Ruby. But it turns out that Ruby is not great at doing things like handling, at least in 2016, it was not good at handling 10,000 simultaneous network connections, the kind of things that you need to run this big platform as a service. And so then we started selectively rewriting pieces in Go. But for the most part, there were big chunks of Cloud Foundry that today are still in Ruby. And so I ran engineering for Cloud Foundry for about four years too. And then I came to Shopify finally. Ah, nice. Very cool. So I'm trying to do the math here. So you joined Shopify four or five years ago? It was about two and a half years ago. Oh, two and a half years ago. Okay.
Starting point is 00:08:24 Two and a half years ago. Yeah. I was at pivotal for about 12 years total ah really long time really long time yeah that is awesome so pivotal is is is more like targeting developers different than so shopify is more of like a b2c or i guess it is a b2b but it but it has a different sort of customer base. And so was there any shearing effect going from Pivotal to Shopify? What was sort of the biggest differences there? So definitely the biggest differences were, you know, CloudFoundry, we were selling to like the Fortune 100 companies, right? We're selling to like huge financial institutions, huge retail institutions. And Shopify is selling a product to a lot of mom and pop store owners, especially during the pandemic. A lot of mom and pop store owners
Starting point is 00:09:10 who no longer could open their store and wanted to get online. And Shopify was a really easy way for someone who has inventory and a store and a business model to start selling online. That's what Shopify is really all about. It's trying to make in the same way that a great language will help a developer focus on the business logic that's important. Shopify helps a store owner focus on the business and not on the problems of accounting and how do I get connected to a payment gateway. If someone's not a software developer, they don't want to deal with that part of running an online store. And that's what Shopify takes care of.
Starting point is 00:09:49 Got it. That makes sense. So when you joined Shopify, there must be a legacy of Ruby at Shopify for it to really pique your interest. There is. So Toby is our CEO. He's only got one name. He's like Madonna. Toby, Toby Lutke. He is an old school Rubyist himself. And he, in fact, was one of the early collaborators on the Rails framework, which is the big web framework in the Ruby community. So he started Shopify. He was like the second person ever to use Rails, right? He and David Hansen were friends and he started using it to build Shopify.
Starting point is 00:10:28 And I think he feels very strongly, if you asked him, he would tell you that he feels strongly that Shopify was successful because he was able to move so quickly, right? He was able to get to production faster than his competitors. And there were a couple of instances that we have an internal podcast at Shopify where he talks about this. And he said that there were a couple of occasions where Shopify was close to going out of business. And the fact that he was able to ship new features and get new customers in a matter of weeks made a real fundamental difference in whether Shopify was going to make it through those tough times. And since then, we've, of course,
Starting point is 00:11:04 IPO'd and now we're a multi-billion dollar company. So it's all in the past. But I think he credits Ruby and Rails with a lot of Shopify success. And so we have a very strong opinion internally that that's the default stack we use. Cool. That makes a ton of sense. Yeah, I have not a counter example, but a correlated example where we were trying to build a while ago at another company. We were trying to build a like a new another company, we were trying to build a, like a new product, a new area for the company. And because so much was done in Java, they said,
Starting point is 00:11:31 we'll write the whole thing in Java. And I actually, and this is a bit of my personal, like anecdotal opinion here, take it with a grain of salt, but I feel like Java really caused the product to slow down, the product development. And part of it was not, it wasn't just that it was in Java, but it was also that it was hooked into all these other systems that were written in all sorts of different languages. And so they all had different APIs. Oh, there isn't a Java API for this backend. So now we're all just sitting on our hands. And I think that's one of the reasons why that project just couldn't get off the ground is that it couldn't move fast enough. So we'll
Starting point is 00:12:09 definitely talk about, you mentioned several times agility with Ruby and Rails. We'll definitely cover that, but we'll put a bookmark in it for now and switch gears and talk to Evan. Evan, why don't you tell us what your background is and what your sort of connection is with Ruby? Sure. So my story starts in the first tech bubble, the bursting of the first tech bubble. So I graduated from college in 2002, which was the uniformly known as the worst possible time to get a programming job. Uh, like every, every single place was firing. No place was hiring. I remember that same time I was in undergrad, graduated a little bit after you in 2004. And I remember my, uh, my dad basically shaking his head saying, I told you,
Starting point is 00:13:00 you should have got a math degree. You went and got a CS degree. Look at you now. I mean, you were right in the end, but at that time, it was tough. So it was 2002. I had just graduated. I moved to Seattle. My then girlfriend, now wife, and I moved to Seattle. She was starting her master's program. And I'm not a great student, I had no interest in continuing on with higher education. So I was like, I'm just gonna figure it out. And so I tried to get a job couldn't get a job, ended up getting a job with a local ISP. It was a three person ISP. And I basically put sat like 802.11 not be so pre B standard 802.11 dishes on people's roofs for this ISP because it was a wireless ISP. And so I would spend afternoons on roofs, retirement buildings on roofs,
Starting point is 00:13:57 lots of roofs. I've seen so many of the roofs of Seattle. I should have started a scrapbook in retrospect, so many roofs. So I'm at this job, and I don't want to be do I wanted to be a programmer, like that was what I had done. I'd actually done open source in college. I had worked on some programming language stuff in college, because it was really interesting to me. But now I didn't have any opportunity for that. But when I moved to Seattle, I was very active in a specific IRC channel from college and so and one of the people in the IRC channel actually was like hey I'm writing this really interesting thing and I found he he was also in Seattle coincidentally this guy even though we'd been talking for years and uh he
Starting point is 00:14:36 was like hey I'm writing this thing and um it's in this programming language called Ruby and I was like hi I'd never heard of that and so I went to go look at it and it took me about a couple of weeks before I was like, because I had done Perl and PHP almost exclusive, well, and C++ and C at that point in time, but on the sort of Ruby-ish side of things, PHP and Perl. And so it took me a while to get the feel for Ruby. But once I did, I was like, oh, this is great. I like this a lot better than the stuff for Ruby. But once I did, I was like, oh, this is great. I like this
Starting point is 00:15:05 a lot better than the stuff that I've been doing before. It's much more, it's easy to express what I want. I'm not fighting with pearl sigils, which is a little symbol you put at the beginning all the time. I liked it a lot. I ended up getting involved with Ruby and then not seeing that RubyConf, which was like the Ruby conference that started in 2000, I actually missed it by a week. It was in Seattle. It was down the block from me. Didn't go because I didn't realize. I literally was just like, oh yeah, Ruby, that's a cool thing. Oh, the conference was here last week. It was pretty amusing. But I did get involved with some other Ruby people in Seattle, Ryan Davis and Eric Hodel. And we started the first, it's hard to say if it's the first, but effectively people used to call it the first Ruby user group, Seattle RB.
Starting point is 00:15:55 And it was just the three of us. We used to meet at Ryan's work and just putz around and do random talk about things. We ended up getting, like I remember one time, we got a review copy of the Pickaxe book, which is like the canonical, the original reference book for Ruby that Dave Thomas wrote. And we did a review of that to set Dave notes because I think Ryan knew him at the time. Anyway, so that's how
Starting point is 00:16:26 it started so you were you're working for this uh ISP you're you're mounting uh dishes wi-fi dishes on roofs and but but uh but you were involved in a lot of these kind of uh social groups and and and sort of you know building up this Ruby ecosystem. And yeah, that's actually a testament, you know, I think where there's so many companies talking about this looming recession. I don't know what's going to happen. Nobody really does. But something to sort of foreshadow or some foresight based on your experience is to, you know, even if the job market does contract to get difficult to there's always
Starting point is 00:17:06 so much that you can do, you know, as an individual, there's so many different conventions you can go to people you can meet. And that is going to be more and more important. We sort of, you know, go through this, like kind of small lull here. Yeah, I mean, recessions affect the economies of monetary policy, not people's enthusiasm or interest. Right. Right. Yeah. Yeah. Like, yeah, at the time it was impossible to get a Ruby job. Well, at the time, Ruby jobs did not exist. It was not a thing. Matt's had only begun Ruby in 1996 and it didn't, it only lived on his laptop for the first couple of years anyway.
Starting point is 00:17:47 And so we're talking 2002 ish timeframe, maybe 2003, a little bit now. And Dave Thomas, the guy who wrote the pickaxe book was, is kind of credited with bringing Ruby to the English speaking world. Matt's is Japanese. Dave has a great story. I can't remember the exact details, so I'll probably butcher it. But effectively, he saw Ruby, he saw some of the original documentation, he was getting into technical book publishing, and he wrote the first English version of the pickaxe book, the root, we call it the pickaxe books, it has a pickaxe on the
Starting point is 00:18:20 cover. And so he wrote the original version of that that basically was the only guide to Ruby that was written in Japanese. And I think, so I'll fast forward a little bit. I ended up stumbling into another job accidentally, working as the Windows IT administrator, which was better than putting dishes on roofs. So I went to go do that. And then I, but I still wanted to be programming. And so I started just it was a startup in Seattle, I started attending all the engineering meetings, they started, they had a meeting where they were like, hey, like, we want to we want to redo the back end for this thing, because it's not working very well. It's really cobbled together,
Starting point is 00:19:00 we want to actually use like, basically it was like sort of a Linux system administration slash programming project. And I was like, I am very interested in this. If no one else has, I've actually done this before because I'd done it in college. I will, I'd be happy to take this on. And they're like, sure. I was, again, I was still the Windows IT admin. And so I was doing the Windows IT administration, keeping the mail server up, making sure people could log in, and writing this new backend. And when I was writing this new backend, I was like, this is sort of what you were talking about earlier. Nobody was telling me anything. They were just, get it done.
Starting point is 00:19:35 We just need a thing. And I was like, great. I'm going to write it in Ruby because that was way more interesting than writing it in anything else at the time. So I started writing it in anything else at the time. So I started writing it in Ruby. I wrote this amazing gateway so that PHP could call Ruby methods on the same machine because all the front end people were writing PHP. It was great. It was an insane system. PHP, Ruby, Interop. Yeah. It's somewhere out there. It might not be on the internet even. Anyway, so I worked there for a while. Ended up leaving a couple of years. Oh, like that, they got built up.
Starting point is 00:20:08 We ended up doing a lot of Ruby at that company. I ended up leaving and then going to another small startup for about six months, basically writing a Rails app. And then in 2006, that was in 2000. That was like the beginning of 2006. In 2007, I was still living in Seattle, it's gonna move down to LA, I ended up going to RailsConf that year. This is another sort of diatribe, we'll keep it short, which is, I have weird programming interests. I had been writing a new version of Ruby, the programming language, the interpreter. So Ruby, as a as any
Starting point is 00:20:43 kind of dynamic language is just a program that reads other programs and runs them, right? It's like a chef that's running a recipe, but the program is the chef. And so I had all these interests in how to make Ruby better, and I had started writing my own version of the actual interpreter, the engine to run Ruby programs and i had been doing that for a year and a half two years at that point and i had i had a thing that was interesting um i ended up giving a little talk about it at rails conf which is in portland that year i drove down from seattle to portland to talk about it and the cto of engine, who was an early Rails hosting company, saw my talk and he's like, I think your thing's cool. Tom Marnini is his name, CTO.
Starting point is 00:21:32 I think your thing is really cool. Would you be interested in coming and working for Engine Yard? And we'll let you work on this thing. And I was like, this is the dream. Oh, that's amazing. This is the dream, right? Like someone wants to pay me to work on my open source project. So I said yes as fast as I could. And then I did that for five years. I just worked on my own, well, an open source Ruby implementation for about five years called Rubinius. And yeah, that was super intense. There's lots of stories about that.
Starting point is 00:22:02 Where did Rubinius go? Like did parts of it get folded into Ruby or are folks still using it? Well, it had a lot of contributions. I would say that a big portion of the stuff that we wrote, it lives out on the internet, but it's probably not in heavy usage. Probably there's a couple of people who still use it for random things. What ended up happening was I started writing Rubinius when Ruby was at version 1.8.2. That was in 2006. And at that time, Ruby was actually moving pretty slowly in terms of the API, the functionality, all that kind of stuff. And so it made it easy if I was like somebody's trying to come in and being like, I want to implement this API, which is just the program languages API. And it was about a year after that or so that the mats and the Ruby core team really started to speed things up.
Starting point is 00:22:55 And it only got faster and faster over the next couple of years. And it's hard. It's very hard to write a thing that's chasing something else and you don't have any control over it. You're just chasing this other thing. And after about five years of working on it, I was personally like, I want to be more in control of my own destiny. Like every time, like every day I was coming in and being like, what crazy weird API do I have to implement today that I don't want to? And that's not fun as a job. I ended up leaving there and going to LivingSocial. But yeah, that was that bit. Oh, interesting. I think there's one other thing I want to throw in here
Starting point is 00:23:31 while we're talking about Rubinius. If you look at Ruby on the decades-long timescale, one of the, I think, most important outcomes from the Rubinius project was actually RubySpec, which is the specification for Ruby. It was an executable, it was tests, right? They were an executable specification for Ruby because the original Ruby interpreter, it was just like, well, it behaves how it behaves. Like it's the only Ruby interpreter. And so there were a lot of edge cases that were kind of undefined behavior. And as part of the Rubinius project, that Ruby spec project is actually still alive and kicking today and unifies all the Ruby interpretations because there's like JRuby,
Starting point is 00:24:10 which is built on the JVM, and there's TruffleRuby, which is built on GraalVM, as well as Ruby and Rubinius and a few others that are all using Ruby spec as the de facto standard for the Ruby language now. I think that that is a really important outcome as well. Yeah, that totally makes sense. I think the you know, the parallel that comes to my mind is io.js, right? So Node had some deficiencies. So I think it was maybe the original Node author. I don't actually remember. I might be getting that wrong. But somebody wrote EO. And long story short, EO and Node merged later on. And so a lot of the best parts of EO made it into Node. And so I think, yeah, it sounds like something similar that
Starting point is 00:24:52 happened here where as a consequence of Rubinius, you have this specification for the language, and that created a huge harmony among all these different interpreters and push the language forward. Yeah. One of the most interesting things, the Ruby community is a, it's a by-product of, there's a, there's a saying in the Ruby community called Minaswan, which is maths is nice. So we are nice. And that there's a big, there's a big, it seems like a thing that people wouldn't actually say, but people, people mention it all the time. It's really part of the ethos of the Ruby community. The Ruby community has spread its wings as it's gotten bigger in time. And I think one of the most interesting things is that, this is my skewed perception, but my perception is that the Ruby community is one of the first communities that really took TDD, test-driven development, to heart. It existed mostly from
Starting point is 00:25:46 Kent Beck in the Smalltalk world, but there isn't that many Smalltalk developers. And a lot of the Smalltalk developers ended up in Ruby or were influenced into Ruby at various times. And I remember being exposed to TDD in 2002, 2003, when nobody was doing it. And that was a big impact on Rubinius writing RubySpec. Brian Shirai, who was like the second or third person to work on Rubinius with me, started that specifically because it was like, hey, we got to know what we're doing. We got to write some tests. We got to write specification for this thing.
Starting point is 00:26:25 And still to this day has a huge impact. So Ruby spec ended up being adopted into the mainline Ruby interpreter. They still write those specs. One of the big things about Rubinius was I tried to write all of or as much of the Ruby API in Ruby itself. So you could go and look at the implementation of array and it would be written in ruby for instance that code made its way over to truffle ruby which is a very specialized implementation of ruby and has evolved since then they have they've edited it's they you know they're perfectly much more owned by them at this point but um it's kind of seeded itself in different ways very cool so after Rubinius, at that point,
Starting point is 00:27:06 what's the sort of link between that and and Ruby gems, which is, which is what your focus is on now? What's the path there? Yeah, so I had been going, I started going to Ruby conferences in 2005, which was in San Diego, I got to, I got to watch the first release of Rails be released. They released it at RubyConf, which is just Toby and David in the front of the room releasing it. It was very interesting. So I ended up starting going to Ruby conferences then. And they were great. I was in the community. I was super interested in it. And I kind of just kept going. As my second job or whatever in this story showed, I fall into system administration jobs fairly regularly. Tasks maybe is probably the right word, rather than actual jobs. And in 2011, there was a thing called RubyForge, which was a hosting platform that was meant to,
Starting point is 00:28:02 this is pre-GitHub. So it started pre-GitHub. It was basically a place for people to store their Ruby code, right? That was really what it was for. And it was sort of an alternative to SourceForge, which some of your audiences heard of and some of your audiences has not. It was a sort of a precursor for where to store your code on the internet. Yeah, SourceForge, if you've ever needed an old library and you end up clicking on 14 ads and you don't actually get the zip file of the library, that was SourceForge. That was SourceForge, yeah. Oh, man, you could do a three-hour thing about the evolution of SourceForge as well. So there was RubyForge, which really just ran.
Starting point is 00:28:37 There was a package called GForge, which was just like you could run your own SourceForge-like thing. And so there was a thing called a couple of Ruby developers ran a thing called Ruby forge, just ruby forge.org, people would upload their things. And then in 2007, or so I'd have to go back and check if it was 2006, seven or eight, I can't remember a couple of Ruby developers, Chad Fowler and David Black, who are all directors at Ruby Central, which is the nonprofit that puts on the conference, start basically at a conference. We're like, we need our own like Java jar like thing. So let's start, let's write one. And so they basically wrote Ruby gems. The first version was a couple of weeks, maybe probably the first version was probably
Starting point is 00:29:22 at the conference. So within a couple of days, and then they wired in the ability to start to to handle Ruby gems inside RubyForge. So if you uploaded a gem file to RubyForge, it would be available for you to do gem install. That was the first version of RubyGems. So fast forward again back to 2011, I got wind that they were still running RubyForge. Well, I knew they were still running RubyForge and that there was only one person who was this administrator for this whole system. And I was like, that's not cool. That's not fair. And I was like, that's not I'm going to reach out and I'm going to say, like, I'm happy to help you out run this thing. And so I reached out just to say, like, do you need to have another hand, another person who can basically help you on call, because the guy who was running it is a wonderful guy, but it was not fair to him to basically be doing this whole thing. So that's how I got involved with Ruby gems. Originally, it was basically I'm going to help out run. Well, a little bit, I got involved with Ruby, Ruby gems software a little bit earlier
Starting point is 00:30:23 than that. But the bulk of it was really the stuff we're talking about today is really helping out run the server, debug some crazy things, and then, yeah, that was how it began. So what is it like going to a language conference? So let's say you're a college student. You really love, I'm just going to pick a language. You really love Ruby. Maybe you've made pick a language, you really love Ruby, maybe you've made a few commits to the sort of core, you know, Ruby interpreter or other parts
Starting point is 00:30:52 of the ecosystem. But you just love programming in Ruby, you know, is like, what would someone like that get out of a conference? How would you recommend getting the most out of a conference if it's your first time? What's that whole thing like? I've been to, personally, I've been to a lot of conferences, but admittedly, I've never been to a programming language conference. It's on my bucket list. But you kind of described to us all what that is like and what you would expect to see there and how to really have an effective time there. Let me take a whack at answering this real quick. So my strong opinion here is that there's a spectrum of conferences and there's like some conferences are small. Like I used to organize, co-organize the Gotham Ruby conference
Starting point is 00:31:37 in New York City, which was one day, one track, very intimate conference. So everyone had the same shared experience. You show up, you sit next to somebody, you get to know them, you go to lunch, you come back, there's some more talks, then we'd go on a boat and have dinner. And it was great. I think that for me was my introduction to software language conference. It helps you build a local network of people, and there's usually a really great mix of introductory talks as well as some more advanced talks. And then I think once you get comfortable and you go
Starting point is 00:32:14 to one or two of those, then maybe you want to say, okay, I'm going to get on a plane, and I'm going to go to a bigger conference, and maybe I go to a three-day Ruby conference in New Orleans, which was my big experience at my first big, a bigger conference. And maybe I go to like a three-day Ruby conference in New Orleans, which was like my big experience at my first big, huge software conference. And like, that's like a really big deal.
Starting point is 00:32:31 And then the social network that you've built locally can help you there. But again, there's usually a great mix of both introductory and more advanced talks at all of these conferences. So you can kind of pick and choose which ones you're interested in and want to pay attention to. And you get to talk to the speakers afterwards. And it's as much about the social network you're building as it is about what you're learning inside any individual talk for me.
Starting point is 00:32:57 I don't know, Evan, what's your experience been? Yeah, I, the background, I didn't give this at the beginning, but like I helped run RubyConf and RailsConf for about 10 years. And so I have like, there's three different styles of programming language event, I recall that. The first, like Mike was talking about, is a seminar. That's really the way to think about it, right? Which is basically, you're going to show up, you're going to all sit in the same room, you're going to all watch the same talks, you're going to find out about interesting things that you didn't know that you were interested in, or and maybe they're going
Starting point is 00:33:31 to be over your head, but then you're going to go sit with people at lunch. And you're going to say, can you explain this to me a little bit more, because it seems interesting, and I don't really get it. And you're going to have some some nice person's going to say, like, I'd be happy to, you explain to them, now your friends, now when you get on the boat later on, maybe you meet their friends. And that's a seminar in general, right? It doesn't even have to be programming language specific. That's how all seminars generally work, which is that everybody sees the same thing. Everybody talks about the same things.
Starting point is 00:33:58 And then you all sort of bond over that and you learn, right? So when you go home, you go like, I found out about testing, I found out about asynchronous programming, whatever it is, and you want to take that back with you and kind of let that percolate, figure out where it's going to come out in your in your day to day job. Second one is programming language conference, like just regular conference, which is like multi track conference, RubyConf is an example of this, you have a lot of different you have like three or four two three or four talks going on at the same time you have to pick
Starting point is 00:34:30 what you're going to go to there's lunch there's a keynote talk there's that kind of thing it's it's definitely a little more overwhelming people have to figure out where do i what do i go to right and i would always people always ask me that at those conferences and i would say like just if you don't know what to go to, just walk into a room, just wander into one of those rooms and sit down in the back and be like, what are we talking about? Right. Those are some of the best experiences you're going to have is if you never knew what you
Starting point is 00:34:54 were looking for until you sat in the back of the room and you found out, found somebody talking about Ruby reflection or something like that. So that's not, that's number two. Number three is sort of trade show. RailsConf kind of fits into this, this one, which is more like a trade show, which is really where you have an actual exhibit floor, you have exhibitors, you have people who are going to show you interesting things, you have sponsors, you can solve talks as well. Trade shows always have like continuing education. But there are a lot of places where
Starting point is 00:35:25 people are looking for jobs. People are showing off their companies. People are networking. That is more of a trade show and they all have their place. They're all sort of on the level of overwhelming. Those are ratcheting up the overwhelmingness on that thing. But yeah, there's sort of those three. Those are the three kind of
Starting point is 00:35:45 blends. So cool. That makes sense. Yeah. If any of your listeners are worried about whether the conference is right for them, like, I would say if you think it's for you, it is for you. And you'll be surprised when you show up and there are 200 other people that have common interests that you can chat to about. So even if you're introverted, or you're shy, or you're not really sure, like what you're going to talk about, generally, folks are going to turn up because they're interested in the same things as you. And it's usually a very welcoming experience I found. Yeah, definitely. You'd be surprised to if you have, you might be sitting at home very introverted. But if you have a topic that's really passionate to you, you'd be amazed at how quickly you will become an extrovert when you're surrounded by other people who have the same interests. I saw this joke the other day where someone said when they have trouble with their CS homework, they ask a question on Stack Overflow.
Starting point is 00:36:40 And then they have a second account, a dummy account where they give the wrong answer. And then that's what they need to do to get like hundreds of right answers. So, you know, there's so many things where when you dive into the details, there's, you know, it comes from, there's sort of differing opinions and not really any right answer. And so you're going to come with your opinion that you've calcified, you've spent a lot of time and energy on, you're going to find someone with a totally different opinion. And the two of you are going to have a really engaging discussion. And at the end of it, you probably get to a place of even better balance than when you started. So yeah, that was
Starting point is 00:37:19 one thing I found. I was pretty introverted, I was going to a bunch of machine learning conferences, but I found when I was at the conference, then it was like, Oh, yeah, I really want to explain this thing. And here's my take on it. And all of a sudden, like all these words start coming out. I wanted to say one thing, which is that I want to highlight what effectively I don't know what other people call it, but we call it the hallway track, which is the thing that happens when you're not in the sessions, but is during the conference time. So it's not at lunch or whatever, right? Because at Ruby conferences, at least the hallway track is as just as valuable as any other time that you will be there. Mike and I, I think,
Starting point is 00:38:02 I think our first time meeting was in Orlando outside the ballroom. Basically, this is RubyConf 2006, I'm going to say. It was in Orlando. It was in a hotel where we couldn't leave, basically. It was in kind of nowheresville in Orlando. We're all sort of sequestered in this hotel, but it was a nice hotel. And we all, the hallway track was amazing because there was like these U-shaped couches where there'd ended up, there would end up being like 12 people sitting in a U-shape, one of these U-shapes,
Starting point is 00:38:35 some on the floor, some on the couches working on things. I think, I don't know if you're working on Nocaguiri or H-Percat at that point in time, but, and then, you know, yeah, we would talk. Like, I remember debugging WebXML issues with you and Aaron at that point in time. Like, you know, does anybody know how this thing works? And someone would be like, oh, I've dealt with that before. And you kind of just do that dance, right? And then you find
Starting point is 00:38:58 that, like, oh, I didn't realize that other people were also interested in this or whatever, right? Something else I want to call out, Evan, I mean, I don't know if you have these numbers handy, but at every RailsConf or RubyConf I've been to, during the initial keynote, you ask, for how many people is this your first RubyConf?
Starting point is 00:39:16 And like half the room raises their hand usually, right? Yeah, so it's always half the room. Crazy as that may be, it's always half the room. I mean, I'm up on stage when I ask this question, so my perspective is a little skewed. But it's the most interesting thing that it's half the room. And I think for the audience who are listening to this and thinking, like, you know, is Rails something that I, like, are there people still picking it up? Is it a thing? It's very much still a thing.
Starting point is 00:39:44 And there are so many people who are just learning Rails for the first time every single year. It's learned in boot camps. It's done in all kinds of different places at small scale, at large scale. And the fact that it's 50% at RailsConf is so important to me because of what it says is that the community is always changing. It's always vibrant. It's not the same 500 people who show up every single year to talk about the same thing they did last year. You know, we talk about that when we would work on the programming for, you know, the scheduling for what talks we're going to have. We always think, should we have this talk again? And I
Starting point is 00:40:19 have to remind people, 50% of this conference will be brand new. So you can have the same talk every single year. And, and people would 50% of people would never have heard it before. Yeah, that's, that's wild. So, so you're, you're helping the support on this, I think it was a Ruby project. And, and was that was that Ruby Central? Or is Ruby Central something in the future? Yeah, so Ruby Central is an actual nonprofit set up in the United States that maintains. It was set up originally actually to run the conference, to run RubyConf. They needed an entity that could basically take the insurance load, if you will, of running a conference. And that was how it started. And then after I started helping out with RubyForge and rubyjumps.org, I was asked by the then directors of Ruby Central if I wanted to be
Starting point is 00:41:17 on the board if I wanted to help out with with Ruby Central at that point. And I was like, yeah, I do. Because I want to make sure that stuff actually happens. So I, yeah, I started helping out with on with rubygems.org as a board member, and then started helping out with the conferences. We almost tanked the whole thing at RailsConf 2012. That's a longer story than this podcast is available for. But I'm happy to tell it as some future junction. It's great. It has to deal with eating pot pies for three days. It's great. It's a longer story than this podcast is available for, but I'm happy to tell it at some future junction. It's great. It has to deal with eating pot pies for three days. It's great.
Starting point is 00:41:48 It's a great story. But, yeah, so I started getting involved then. And Ruby Central is the entity. So Ruby Central exists. There's directors. They have staff now. They didn't have staff back then, which is why we almost tanked it. But there's staff. which is why we almost tanked it. But their staff and it basically maintains
Starting point is 00:42:05 and organizes the RubyConf and RailsConf is an entity that can just basically, all it exists to do is improve the Ruby language and their community. And so it is the entity that pays for rubygems.org. It pays all those bills. It manages all of the things related to that. So it sort of is the owner of a lot of community resource.
Starting point is 00:42:26 So yeah, okay. So there's, I went to SciPyCon this year, which is, I guess, the closest thing I've been to a language conference. But it was an entity, and I'm totally drawing a blank on the entity that runs it. But I had a chance to talk to some of the directors and it was wild was wild i mean basically
Starting point is 00:42:46 they that same entity also you know make sure that numpy scipy dask all these core languages have sort of a healthy ecosystem you know one thing a lot of people take for granted is you know if you file if you get you know an equivalent of of internal compiler error or internal interpreter error at Ruby, and you file an issue on GitHub, someone has to be there to catch that. And so that's a huge amount of a tragedy of the commons where everyone is kind of taking, but there isn't really somebody who can contribute and contribute in a really organized, focused way. Yeah. One thing I wanted to say about Ruby Central as well, because I think that this has been a misunderstanding over the years. It's fine because we didn't correct it. Ruby Central doesn't really make money. It's a nonprofit. It exists basically to just put money back into the community. So when we run a conference, it's really just to pay the bills
Starting point is 00:43:52 for rubygems.org. So we always tell people, how can I contribute to rubygems.org? I say, go to one of the conferences, buy a ticket. Prior to 2012, RailsConf was actually run by O'Reilly, the book publisher. And so and that was run kind of O'Reilly ran it as a for profit entity. Right. Because that was what they were in. That's why they run conferences is for profit. Ruby Central took it over. We continue to run it. But we were like, hey, now we can tell you where this money goes. It goes it's for you. We we were like, hey, now we can tell you where this money goes. It's for you. We basically take in the money, but we basically give it back to you in the form of these community
Starting point is 00:44:30 resources. So there's not some big corporate entity where they're just taking in profits to buy jets or something like that. It literally just goes in there to basically be pumped back out into the community yeah totally that makes sense so cool yeah this would be a good time maybe to talk about about ruby at a high level my my first interaction with ruby was through um this this uh software called jekyll where you could spin up a static website which I needed for a GitHub project and the thing that I was really impressed with with with Ruby and Rails was how easy it was to switch databases and and things like that so I had I had a development version which was using a SQLite database and then I had a production version that was using some type of hosted, I think it was like a hosted MySQL database. And all of that
Starting point is 00:45:32 back in the, when I was writing data, web services in Python, I would have to build all of that from scratch. I'd have to say, okay, check some environment variable. If it's this, then use the development database. And oh, you know, I don't have the, or I don't have the MySQL library. So I have to go pull that in. It was a lot of manual effort. With Ruby on Rails, you kind of get all of that for free. That was the thing that I really noticed. So yeah, maybe, you know, with your kind of expertise, you know, what kind of separates Ruby on Rails from from um you know what kind of makes it distinct so i like to think about rails as being like really well vertically integrated pieces of
Starting point is 00:46:14 software right like you can come at building a website from like oh i'll pick my own like artisanal database adapter and then i'll figure out what how to render views then I'll figure out how to render views. And what Rails did and continues to do is put together pretty strong opinions. This is how you want to interact with the database. This is how you want to render your views. This is how you do your controller. This is how you do all of your models. And this is how you unit test all of your models. And those conventions are really liberating, I think, as a developer. I like not having to think about the small details, like, well, what directory do I stick this file in when I do the thing? Like you just say, I need a new model and all of these things like self inflate for you. And I feel like over the years, other web
Starting point is 00:46:58 frameworks have borrowed a lot of those same like strong conventions and opinions like Django. If you're if you're running an app in Django, I think Django has borrowed a lot of stuff from Rails over the years. So for me, at least, again, like if you're going for, I want to get something up and running on the internet as quickly as possible, that's going to set me up to continue
Starting point is 00:47:16 to add new functionality and continue at this really high velocity over time. Like Rails really sets you up as a software developer to do all of that from day one out of the box. And if you want to color outside the lines a little bit, Rails does allow you to go ahead and configure it however you want. And there are a lot of really interesting plugins and alternatives for parts of Rails. But for the most part, I think Vanilla Rails is a great way to run a business.
Starting point is 00:47:46 This is what Shopify does. And part of what my team does is make sure that Shopify is running as vanilla a flavor of Rails as we possibly can. And if we need something special, we try to push that back upstream into open source so that everybody can benefit. And I think if you look at other companies like GitHub and Airbnb, they've made contributions back upstream to Rails over the years as well to make it a better framework. And now I'm going to like grind my open source axe for you a little bit and just be like,
Starting point is 00:48:11 this is what makes open source so wonderful is that these companies that are using the software in anger to do something real are all motivated to contribute back to keep that flywheel going of making the software great and attracting new developers to the community. Yeah, I think DHH, David Hannon, the originator of Rails, he said it a couple of times, I'll paraphrase, which is basically that having constraints helps you be more creative.
Starting point is 00:48:38 And that philosophy also is true in just how you set up your stack, right? So having all those opinions also means that there's more constraints like, oh, I have to use this, I have to do this, I have to use this one piece. Now, yes, that basically means that like, if I don't want to use it that way, maybe that's annoying. But the flip side of having those constraints and assuming that they're going to be there is that all of those things work really well in concert together. And they allow you to basically say like, okay, maybe I didn't want to spend or most people don't want to spend, you know, months trying to just figure out how to write the best SQL query. Great. You don't have to do that. You can use active record. And
Starting point is 00:49:20 that as a part of the stack as constraint, but it also adds an incredible amount of commonality. So that as a lot of developers will know, when you move from one project to another, so you move between companies, right? You move between companies and they're both writing web apps means almost nothing about the idea that you will be able to pick up the new company's app, right? It could be a different language. It could be, even if they're both JavaScript, they could be completely different, like off the wall different, right? If you move between two companies and both of them say, hey, we're both writing Rails, you'll probably be productive on your first day at the new company.
Starting point is 00:50:00 You'll probably go in and be like, okay, did you do this? Did you make this decision or this decision? Oh, you made this one? Cool. Got it. And then you're often off to the races, right? And that has such power in being able to have people be productive, fulfill what they need, and also be expressive at the same time. I love the talk about sort of the opinionated framework and being able to build something that lasts. I think it's such an important piece. And it's also a trap. I'll give kind of a quick tale of two developers. I have two buddies in college.
Starting point is 00:50:32 The three of us were eating pizza and talking about video games. And the two of them both wanted to become video game developers. And I was just sitting there eating pizza. It's not my thing. developers, and I was just sitting there eating pizza. But one of them said, I want to use Unity, because even back in, I guess it was like 2005, Unity was around, and it was an easy way to get started. And the other one was saying, no, I can't do this and this and this in Unity, and I can't do all these really specific things. I think we should write everything from scratch, like build our own game engine, our own everything.
Starting point is 00:51:08 And I actually don't know what happened to that second guy. So I don't know. Maybe he made his own game engine. I don't know. But the first one actually started a game indie game studio and did really well. And so I think this trap that we fall into as creative people is we want to have the most creative medium. And the most creative medium is arguably like, I don't know, assembly or something, right? Where you can do absolutely everything. But the problem is that actually when you're getting started is when you need to be as
Starting point is 00:51:36 least creative as possible with the particular paradigm you're working on. So if you've never built a website before, you should focus on having a nice end product and being able to be creative there by iterating quickly and not spend a lot of time saying, oh, how am I going to, you know, like, what if I need to use this really esoteric graph database, right? So don't worry about that stuff, just get the thing up and running. And the opinionated thing, whether you're talking about Next, or whether you're talking about Rails, it's going to put really polished ivory handcuffs on you. And in the beginning, you're going to say, oh, I'm getting all these weird errors. And, you know, oh, it's not letting me, you know,
Starting point is 00:52:29 put everything in the same folder, all the source code in the same folder, because at least for next, you know, the folder, the directory structure determines the API. So you find all these road blocks. But then once you've figured out how to make your thing fit in that paradigm, all of a sudden, you get all of these benefits that you are, that were outside of your, your conscious coherence. So all of a sudden you realize, Oh, now I see how, you know, if I wanted to add a piece, I can do that without, without breaking everything else. Right. So yeah, I think this is a trap I've personally have fallen into a lot as well, where I say, Oh, this, this piece of software doesn't easily let me do X. So I'm going to write my own thing. And then sure enough, your own thing never actually gets done.
Starting point is 00:53:10 I was just going to say, I have been through this many times. And the way that I like to think of programming specifically is it's an artistic tradecraft, right? Like you can just like plumbing, you can pick up programming. You can start doing it. You can learn from other people. You can read a book. You can just ask somebody. You can be an apprentice. You can do all those things and you can be the best programmer in the world. That definition makes it a tradecraft. But so is watercolor painting. Watercolor painting is also a tradecraft. You just sit down and you start watercolor painting. You read a book, you look at it, how somebody did it. You just start doing it, right? Programming is somewhere between plumbing and watercolor, right? And one of the most interesting things about, say, watercolor is that when you decide to do that, it is so constricting. You're like, oh my gosh, I can only make colors like this. I've only got these kinds
Starting point is 00:54:05 of paints. It only works on this kind of paper, right? But think of the artistic creativity that's come out of just doing watercolors, right? The world over, right? That constraint breeds creativity in other ways that are potentially much more interesting than just being like, oh, well, I need to express myself. And so I need to spend two years making my own paper. Great. Maybe you will achieve something great. But more likely, if you sat down and just learned how to watercolor on normal paint for two years, you'd be able to express yourself potentially better than saying, I need the best paper in the world. Thank you for saying that, Evan. I agree 100%. There's a wonderful article, a blog post from 2015 by Dan McKinley, who if you all just, if you're listeners, Google for choose boring technology,
Starting point is 00:55:00 you will find this essay. And he introduces this really interesting concept of innovation tokens. Like if you're building a thing, you should say, okay, I have two tokens that I can use for some innovative technology and everything else I do has to be boring. And this forces you to make the choice about where do you want to take that risk? Where do you want to spend that time to rewrite a gaming engine or go grind your own watercolor paint color or make your own paper? And think about what is the core competency that you're going for? Like if you want to start a new gaming company that's predicated on faster frame rates, maybe you want to go build your own gaming engine. Yes. But if you want to build a gaming company built around like super fun stuff, maybe the gaming engine is a distraction
Starting point is 00:55:49 and you should use something that's standard off the shelf and put your time and effort into making that game super fun. And I think about web development the same way. Like I could write my own like socket handler from scratch, or I could just use like a load balancer off the shelf and just, you know, there's, there's a ton of trade-offs that you can make along the way and people should feel free to make those trade-offs, but like choose boring where you don't actually need a competitive advantage is how I would think about it. Yeah, that makes sense. It's actually a paradox, right? Because if you can make something fit, I'm thinking about the watercolor example. You see examples where people take a style that's very difficult to express in watercolor or in any other medium and they make it happen
Starting point is 00:56:36 and people really appreciate that. It's sort of like when you see these pixel art, your gigantic landscapes and pixel art and all of that. And so, and so, um, uh, you know, that could be sort of part of the challenge instead of saying, well, I'm going to write everything from scratch. And, uh, that way I could be as creative as possible, say, I'm going to make this work in this framework. And that actually is going to force me to be as creative as possible. You know, ostensibly, Ruby is a language, Rails is a set of frameworks, but, you know, like, where is sort of the gap there? What other things is Ruby used for?
Starting point is 00:57:16 Other than Rails, like, what kind of captures a lot of the Ruby market share? And how do we sort of differentiate these two things for people? Yeah, I think if we were having this conversation six years ago, I would probably say DevOps was also in that group, right? So famously, Puppet and Chef are both written in Ruby. Oh, I didn't know that.
Starting point is 00:57:38 Yeah. So if you go to write Chef cookbooks, you write Ruby. If you go write Puppet thingamabobs, I can't remember what the noun is for puppet. Plans, I don't know. Yeah, you go to write puppet Pinocchios, then you actually write them in Puppets specific DSL, but that DSL is actually parsed in Ruby. So if you wanted to extend Puppet, do different things, you actually write Ruby on the backend. So that was big. Those things were both that were born out of this time, this interesting time in the programming community. The zeitgeist of Ruby circa 2010, 2009, around that time where people were like,
Starting point is 00:58:18 hey, let's write everything in Ruby. And DevOps was coming up and cloud was getting big and we hadn't really hit containers yet. And that was really the era of those tools. Those tools still exist. People still use them every day. I would say that they're probably on the down slope a little bit right now because cloud and containerization
Starting point is 00:58:40 have given people different ways of solving the problems that those same things solved. And so you don't see them as used as much anymore. I think Rails is still the 800-pound gorilla in the Ruby community. I think there are other people. You can write, I mean, it's Turing complete.
Starting point is 00:58:58 You can certainly write other programs in it. People write all kinds of other services, non-Rails, web services, internal services, all kinds of stuff like that in Ruby as well. But I think that service-based applications, be it web or otherwise, are probably the lion's share of what we see in Ruby today. What do you think, Mike? Yeah, I would agree. I think there's a healthy number of people who are pushing Ruby towards being a better platform for big data analysis. The big Ruby conference in Japan happened last week, Ruby Kaigi. There's been a series of talks over the last few years
Starting point is 00:59:41 about how to integrate Ruby with Apache Arrow and how to get low latency data access and how to do OLTP and OLAP. And I think that's really, really interesting because I think Python has been the dominating language for a lot of that. And there's no reason Ruby can't be equivalent, except that we don't have a lot of the same libraries that the Python community has invested in over the years. And so I do see some hints there of like, well, what are the interesting things that Ruby hasn't traditionally been used for, like big data and pushing in that direction,
Starting point is 01:00:18 which I really like. Yeah, that makes sense. There was a big effort, Swift Torch, it was this effort to do tensor processing in Swift. And that, I think it was Google actually was pushing that, even though Swift is an Apple thing. I think Google is really pushing this like Swift TensorFlow and Swift Torch. I don't know what happened to that, but I think there is a space for other languages to be in that domain. I think there's a lot of times you need to do tensor processing, you know, no matter where you are. So imagine if you are trying to do some analytics on, you know, within your web service. You're seeing a lot of this now where, you know, as the third party cookies and other things are getting blocked, you know, people have to push the analytics to the server side. So it used to be just a bit of background used to be, you know, anytime you would, well, depending on how they set up the website,
Starting point is 01:01:14 but maybe every time you click on something, you know, it would send a little packet of information over to Google that would then make its way into that company. So for example, you're running a website for your pizza place, and you want to know how many times are people clicking on your menu bar. So you would set up Google Analytics. Every time someone clicks on your menu bar, it fires a little packet of energy to Google. Google accumulates all these and sends it to you. So now if someone's using Brave or using, I think the new Safari has this, those are all blocked. So, you know, if I'm talking to, you know, PizzaHut.com, I can't actually, my browser will actually block packets going to Google if I'm supposed to be talking to Pizza Hut.
Starting point is 01:01:59 And so what that does is it forces all the analytics to have to go to the back end. So that, to use this example, every time I click on the menu, I send a little packet over to Pizza Hut, and then Pizza Hut can then pass it on to Google, or they could even do the analytics themselves. And so that's where I think we'll start to see more of a need to do these kind of tensor operations and calculating distributions and these other things in Ruby, in Node, in all of these different languages. So rewind your mind back to 2004. What was the piece of software that
Starting point is 01:02:37 started with web that analyzed your Apache logs and basically gave you these really great graphs of like, who is accessing your website from where and all that kind of stuff. Basically, it's fascinating that we're returning to that era of things. I know exactly what you're talking about. I can see the graph in my head. Yeah. Yeah. I ran that for a while for my research lab. Yeah. Anyway, on the topic of like, you know, what does Ruby use for? I think that one of the things that you see over and over again in the apps, the kinds of programs that Ruby is really good at, is they're largely applications
Starting point is 01:03:13 that are highly dynamic. And by that, I mean that they go through heavy development cycles constantly, right? That is where Ruby and Ruby is supremely, supremely good at and Rails makes it even better, right? In that same way that like, for instance, if you were like, I need to write an app, and I'm never going to change it and needs to be as fast as possible. Ruby ends up being kind of a weird use case, because it's like, it's not really optimized for that kind of use usage. Right. And then on the flip side, right. If you write, if you want to write a web, little web thing, and it's going to go inside to say, uh, a wifi router, right. You might write that and see, because I got to just, I got to write it one time and I needs to run in like the tiniest memory footprint possible because it's running on a little teeny MIPS chip, right? But I'm never going to change it. So it might be awful to write the
Starting point is 01:04:09 first time, but I'm never going to go back to it. And so I don't really care, right? And so that spectrum of dynamism is really where you find Ruby at that far end where you're like, hey, look, every day, like Mike can speak to this better than I can. But one of the amazing things about Ruby and Rails is the number of people that you can have that are simultaneously working on the same code base and not stepping on each other's toes. That probably is the biggest feature of Ruby. Rails enables that with convention, but it is astounding. I mean, Mike, maybe you can speak to this. What is the largest team that works on a single app inside Shopify, you think? I mean, the big monolith that we have on any given week probably has 800
Starting point is 01:04:58 contributors. To one app, to one GitHub repo. To one GitHub repository, one Rails application. Yeah. I mean, just hundreds of PRs a day get shipped to production. How do you A-B test that? We test to production. No, I'm joking. So I think we really embrace the fast rollback paradigm, right? It's like we're going to be fast to ship it.
Starting point is 01:05:21 And we have great observability into what's going on in production. And if something's wrong, we can roll back instantly. And so that makes the risk of failure really, really low, which means that we generally will roll forward. If something is wrong at production, we'll roll forward as often as we can. When we need to, we can back out. And we do have A-B testing frameworks, don't get me wrong. But for the most part, I think we're all developing on main. We're pushing from main. And it's managed to scale. We just have A-B testing frameworks, don't get me wrong. But for the most part, I think we're all developing on main. We're pushing from main and it's managed to scale. We just have great tooling.
Starting point is 01:05:50 Wow, that's awesome. Yeah, that is such a, like, if I were to, someone said, you got to spend money to buy a banner that basically says like why someone should use Rails. It would probably be that. It would probably be like, hey, do you want to work on the same app with 800 of your friends? This is probably what like, Hey, do you want to work on the same app with 800 of your
Starting point is 01:06:05 friends? This is probably what you should use, right? Because I think if you were to try to go around and evaluate that condition amongst different languages and different places, you find all of these places where stuff falls down. Oh, well, everybody has to write to this and then that, right? The fact that that is, i don't know that they necessarily meant that to happen but the the conditions allowed for it to to be the case that makes sense what about uh scalability so so i mean clearly rail scales because look at where it's being used but you know how does that actually work so is rails um is is Rails like sitting on a thread pool or do you spin up a bunch of copies of it on a single server? Like what's the scalability part like?
Starting point is 01:06:54 Yeah, that's all me. So one of the things I did during Rubinius was I wrote a web server for Ruby. And it was specifically to make advantage of the characteristics of Rubinius. One of the characteristics of Rubinius was it had native threads available to it that could run concurrently. And so I was like, okay, I need a web server that can really take advantage of that situation. And I coded it in a certain way that it could take advantage of it, but it used the normal API. That web server was called Puma. And that web server has sort of become the dominant Ruby web server today. And it uses techniques that come from WebRick, which is
Starting point is 01:07:32 the original web server framework that actually built into Ruby itself. Techniques that come from Unicorn, which was a web server that was created in the 2007, 8-esque era that still powers GitHub and kind of combines a bunch of different elements in order to give people all the right knobs that they need to do things. So what generally people do is a combination of three things. They utilize a thread pool in a single process. So it's like, okay, great. I know that my app's going to be blocked on talking to the database a good amount of the time anyway. I'm going to use a thread pool and I'm just going to basically handle requests through a thread pool. Ruby's concurrency model is the similar to Python's and that it's, you're not going to have multiple native threads running concurrently.
Starting point is 01:08:19 They're going to be blocked in IO. They're going to switch control, but in a web app, very rarely matters because a lot of times you're waiting on backend for processing and that kind of thing. Yeah. Let me just like dive into that a little bit for folks at home. So it sounds like there's like a global interpreter lock in Ruby, similar to Python. Yeah. So the way these languages work, imagine you have a, so using like Python or Ruby, you have automatic garbage collection. You have all these features that are built into the language. And so it becomes really difficult if you have to handle concurrency there.
Starting point is 01:08:53 So imagine you have a Python instruction that's adding a reference to an object. And you have another Python instruction that is removing that reference. If they can both run at the same time, you have race conditions. And that's just one of many examples where it becomes extremely difficult. So what most languages do is they say, you can only execute one instruction in a process at a time. Now, what happens is your instruction might say, I'm waiting for a packet to arrive over the network.
Starting point is 01:09:27 And so you want all the other threads to be blocked just because this one instruction hasn't finished yet. So certain instructions can what's called release the lock, where they can say, I'm waiting on this network packet. Until it arrives, someone else can execute instructions because I know that I'm waiting for this packet, and I'm not going to change the reference count on the objects, for example. And so then when this network packet arrives, then that same instruction says, oh, now I'm awake
Starting point is 01:09:55 again. Now I'm going to get the lock. I'm going to do some work with this packet. And then when I'm done with that instruction, now it'll go back to the, to the machine to, to decide what instruction to run next. And so, you know, if you, and so in this way, like, even though you can only execute any one instruction at a time, you can still get a ton of concurrency as long as most of the time you're releasing this lock because you're talking to a database or waiting for a network packet or something like that. Yep, exactly right. So you have these three knobs, right? You have threads, which you can tune up and down basically how many requests you want an individual process to handle at the same time, basically locking and unlocking. And you have workers, which is effectively how many
Starting point is 01:10:44 processes you want, right? It's going to use Unix forking in order to basically say like, I need more of these things. And then all of those things aren't going to share memory so they can run truly concurrent, they can share the same socket so they can handle different things uses the same technique that the Apache web server came up with back in time memoriam, right of like, I'm gonna just have multiple processes listing on the same socket on the Unix side, right? And so basically, what I tell people is, you just sit there, and you just tune those knobs, right? You say like, okay, great, like, I need to, I want to hit a certain request per second, okay, I'm going to turn up the threads, you know, at a certain
Starting point is 01:11:19 point, turning up the threads will actually hurt your request per second, because you'll basically be handling, you'll be accepting more requests than you can actually handle in your throughput for how quickly you can get around to threads. So then you, oh yeah, that was too many. Let me turn it back down. Let me turn the workers up a little bit. Because every time you turn workers up, you increase your memory footprint, right? So you just turn those two knobs and eventually you find a sweet spot that's for your app.
Starting point is 01:11:41 And once you find that sweet spot, then you say like, okay, great. Wherever you're running, your container engine, your VMs, whatever you say, like, okay, great. That's our multiplier, or that's our fixed number of requests per second. Now I want to multiply it. And then you just, you just apply a multiplier of instances. You say like, okay, we got 1000, we need to hit 1000 requests per second. And one of our tuning can hit a hundred requests per second, let's just say. So now I need 10 of those things. Great. Let me just fire up 10 of them and you're done.
Starting point is 01:12:10 You go to lunch. Yeah. Is having multiple processes, how does that compare to running multiple pods in Kubernetes? Right. So you can, in Kubernetes, you can say, you know, I want four pods and you might get all four pods on the same machine. Is that like, what efficiency loss is there between that and just running four processes? So there is an efficiency. It's not as significant, but the reason that it exists to do it natively is to take advantage of a functionality that's built into Unix operating systems, which is what people mostly deploy on,
Starting point is 01:12:45 called copy on write memory. So what you will do is you'll load your app in, right? Let's just say you have a fairly big app, and it's going to load the whole app into memory. It's going to parse it, load all the objects, do all the initialization, and let's say that your footprint is 150 megabytes, right? So you loaded all that stuff in, it was 150 megabytes. So you load it into one process. And then what you do is you fork that process. So basically, you make a clone of it. And what happens when you make a clone of it is that clone has its own memory, it never gonna, it's never gonna touch the parent. But what Unix systems do is they actually don't they delay performing the copy until the latest possible time.
Starting point is 01:13:25 So if I can still read memory and it reads from the parent, and if I write to it, it will copy it. That's the copy on write. And so what happens is that if you do that, what you get is memory efficiency by using that sort of worker model where you can fork because you will get this shared sort of memory pool that comes from the original start and that the memory that's used by the individual worker processes will just be the memory that's required to process each individual request. So you can achieve some memory savings. And again, it kind of depends on the size of your
Starting point is 01:13:59 application, what you're doing a little bit with it, that kind of thing. It might also be worth mentioning here, I'll give a shout out to my colleague, Jean Boussier, who has recently proposed in Ruby to have an API call that says, now we are ready to do that copy and write, to fork a new process to do the copy and write thing so that the Ruby VM is now being optimized for the web context that is running in for Rails, which is really interesting. It's like Rails requirements making its way into Ruby. But the idea is that Ruby does as much upfront as it possibly can. And then you signal, okay, now I'm ready to fork so that as much memory as possible won't be written to afterwards like that that mechanism that evan just explained we're going to defer more and more and more of that writing or try to do it up front if we can yeah that makes sense um yeah i saw this uh this really compelling
Starting point is 01:14:58 um it was a blog or a tutorial where someone was using ZFS, which has copy on write as well. And so what they were able to do is basically take their, I think it was their family photos or something that was really large, like gigabytes and gigabytes, and basically copy it this you say oh there's a cron job that's doing you know uh cp directory directory and this directory is 20 gig and it's doing it every day oh my god this can't possibly be sustainable but but under the hood zfs is is is smart enough to say oh just keep references here and if someone changes a file now actually just transparently make the copy um and so yeah fork does something similar for memory i've gotten burned by fork in the past i don't remember exactly what it was but there was something with uh it had to do with cuda and the gpu um so when you start getting into gpu memory and some of these things you have to to be careful. I know Torch now switched to using Spawn
Starting point is 01:16:05 instead of Fork, which does make like a complete copy, a deep copy of everything. But yeah, if you're not doing crazy GPU stuff, Fork is more than adequate. Yeah, I think that there are so many foot guns around Fork specifically, because one of the other... I love that word, foot gun. Yeah, one of the other specific ones yeah yeah what what are the other specific ones and this is probably what you hit is that the semantics of fork are uh let's see it's 2022 now so the semantics of fork are 50 years old now or so and so there's all these efficiencies that were built into fork that aren't useful anymore but we we still pay for by pay for in the quantity of foot guns that are available to you on a daily basis. And so like the resources, so for instance,
Starting point is 01:16:54 file descriptors are shared between two processes, right? So if you open a file and you fork that other thing still has access to the same file. Yeah's cool that's maybe useful it can be very useful it is so problematic if you don't know that it's happening in certain cases right there's two processes that are advancing the file just the file at the same time and trend and getting parts of it and all kinds of crazy stuff things like semaphores and all kinds of os related handles are copied. They're not copied. They're shared between those two. It's really just memory, for the most part, that is a copy.
Starting point is 01:17:30 Everything else ends up being this share. And I think Spawn lets you say, I want a whole fresh new coat of paint here. Don't share any. I don't want the same cup holders as the old one. I don't want the same gas pedal as the same. I want all new stuff. And so, yeah. Yeah. So this is a perfect time to just remind people, if you don't want to have to learn the hard way about fork versus spawn and spend days on it, like we have, use Ruby on Rails. Like, don't build your own web service, you know, that's just one rabbit hole
Starting point is 01:18:05 you'll end up having to go down. And actually, you know, if you're really interested in that level of detail, that's great. I mean, you can work on making any one of these frameworks a lot better. But chances are, you'll want to at least start by doing something high level and using something like Rails. Let's jump a little bit into, you know, what you all have kind of been up to and how folks can kind of contribute and be a part of this. So I think, you know, if someone is, you know, super enthusiastic about Rails, you know, it sounds like like Shopify and Ruby Central are both kind of places where they can go to and contribute and learn more about. Why don't you maybe talk about what are some of the opportunities out there for folks maybe who are just graduating college or maybe they're still in college?
Starting point is 01:18:56 Sure. Well, I think that the first thing I would say is there are indeed Ruby and Rails jobs out there. They're in demand and they pay well. So number one, if you're interested in doing Ruby, you can always reach out to Shopify or a number of other Ruby shops, which is great. There's my plug for Shopify hiring. What is the state with remote? And is it sort of US?
Starting point is 01:19:22 Is it global? Shopify is hiring globally right now. So we, post-pandemic, moved into a post-office world. We don't have offices anymore. Everyone is fully remote. That was a big step change for Shopify because Shopify had kind of built its identity
Starting point is 01:19:39 around in-person offices with great perks, right? Where people could go after work and go to 3D print something or play ping pong or have a great lunch with their colleagues. And the in-person experience is just not available anymore. But the flip side of that is that we can now hire amazing people anywhere they are in the world. And so teams generally find a few time zones that they are affiliated with,
Starting point is 01:20:07 right? So like maybe a team chooses to be mainly East Coast US, but also work a little bit earlier to handle European colleagues or vice versa. They're on the West Coast and maybe they shift a little bit later to have some PACRIM colleagues in Japan or Australia. And so it's a really, really flexible place to work. And if you're interested at all, please reach out. What about internships? Are there internship opportunities for people who are still students? Yes, absolutely. So we have internships, of course. And I think we also have a really great program called the Dev Degree Internship, which is for folks who are in college and need co-op opportunities. They can actually spend a few years alternating between
Starting point is 01:20:49 a semester at school and a semester working at Shopify on a real team. And I think the conversion rate of that program has been huge. A lot of really talented folks have stuck around and taken full-time jobs afterwards. And that's a great opportunity as well. It's called the Dev Degree Program. Cool. That makes sense. Just out of curiosity, Shopify, I believe it was in Canada. Is that right? Before the remote thing? It is a Canadian company at its heart. Yes. Everyone is super nice, just like all Canadians are. Shopify was founded and the main headquarters has always been in Ottawa. Got it. Ottawa is not exactly a gigantic metropolis.
Starting point is 01:21:29 It's kind of, I would call it like maybe a second tier city. It's not in New York or Chicago or in LA. But Shopify built this reputation as being the best tech employer in Ottawa. And that fueled a lot of its growth for about a decade. Wow, that is wild. So is it kind of like totally remote now? Is it since like the lease is disbanded and there isn't an office? So I think we still have some real estate in a few offices, but we use that for like team off sites.
Starting point is 01:21:59 Essentially, we use the verb burst for it because the teams come together and they like burst in happiness and productivity. But they're mainly used as like co-working sites where teams come together for three or four days to maybe finish a project, shape up style. And there's nobody going into that office every day for work anymore. That is wild. So the things you talked about, the 3D printing and the perks, all of that, what have you work to be missing. And so Shopify has done a bunch of things, I think, to try to address this. We do a lot of social events, so teams get together. My team has a show and tell or a social thing on a Tuesday afternoon. We do coffee on Friday afternoon.
Starting point is 01:23:02 We have a couple of other events that we do. And that at least gives us an opportunity to get together and just chat and be social, which is great. We try to get together as often as we can, like at least a few times a year. Most teams will get together in person at these like off sites. Shopify also has really great perks for at home. Like we, you know, I think new employees will get a budget to build out a home office so that they're comfortable at least if they can't have an office to commit to, they can be comfortable at home. And I think that it's a trade-off though, right? So folks who really... I find a lot of folks who
Starting point is 01:23:37 are right out of college, their social lives become the network of people that they know from work. I know I did this, right? I married my wife who I met at work at my first job, right? I think that it is, it's a choice that everybody has to make for themselves, whether they want to be in person now that we're kind of like, I don't want to say we're past the pandemic, because I don't think that's true. But a lot of places have their offices open again. And I think that's a choice everybody needs to make for themselves. But I've been super happy at Shopify. I really love it. Yeah, that makes sense. So when folks do get together in person, that's got to be a fascinating thing. I mean, I remember I recently went to a new job. I took a
Starting point is 01:24:17 new job about a year ago and were in person. But before that, there were people who I had brought on to the team maybe two years prior. And even two years later, I'd never met them in person. And so, you know, getting together, it's really interesting. You kind of have to say, well, you know, here's my sort of, here's the nonverbal side of me. You know, here's like the part of me, like outside of the rectangle of the Zoom call, right? And then also at the same time, maybe we could do something productive while we're here. Yeah, for my day job, I work for HashiCorp, which we haven't talked about here
Starting point is 01:24:50 because it's not really Ruby related, but we do the same thing. And I was just going to say, whenever we're also fully remote and have been for quite some time, one of the things I always have to tell people is, by the way, I'm 6'4", just so you know, because you can't tell at all. And so the first time people meet me, they're like, oh my God, I had no idea. I was like, I know it's because my head is well proportioned
Starting point is 01:25:14 with my shoulders. So there's no way you could tell on Zoom that I'm this tall. And we make this joke every single time. And yet every single time I meet people in person for the first time, they're like, you weren't kidding. And I was like, no, I was not. So I have the same thing where I have my, I think part of it too, is my camera. I don't use my laptop camera because just the way my desk is set up, I would be like heavily backlit. It would, it would look like I'm in a witness protection program or something. So I got a camera and it just happens to have a pretty wide lens. So my, my head and my body just looks small because there's so much other room. And then people meet me and I'm 6'2". And they're like, oh my God, you're so tall. Yeah, that's wild. shopify.com slash careers or slash jobs, we'll put the right link up in the show notes for folks. So if you're listening at home, go to the show notes. Almost any podcast app has a little notes
Starting point is 01:26:11 section. And so we'll put a link in there. You can just click straight in. Cool. I didn't mean to turn that into a whole employment pitch for Shopify, but I really do love working with Shopify. No, it's cool. I'm a big fan of following Shopify. There was a really interesting blog post that the CEO of Shopify made. I'll have to go back and find it. But it really struck me. It had to do with, so basically, you know, Shopify is sort of has this like content farms where they're creating all of this content, but then the content creators are not really connected to the ad system. The ad system is really the centralized YouTube thing. And so it's almost like, like there are kickbacks, but it's completely up to YouTube versus Shopify is like truly a marketplace that's like sort of building up, as you said, a lot of small businesses, which is really nice to see. Yeah, that's absolutely right.
Starting point is 01:27:11 I think the store owners own their own brand. They have their own domain. Maybe the flip side of that would be Amazon, where if you have something to sell, people are still going to Amazon.com and searching. And then Amazon gets to show competitors up against your thing too. And for us, it really is about putting the merchant front and center, allowing them to build their brand, allowing them to build an audience or customers that come back over and over again. And they own that asset, right? It happens to run on Shopify's Rails app on our hardware, but they actually own that storefront themselves and all the information about their customers they own and not Shopify. Yeah, I happen to be looking for an e-bike for
Starting point is 01:27:58 my wife and I was gone to Aventon.com. They sell e-bikes. And it actually is a Shopify site. And the reason why I started going directly to these companies was something kind of, you know, sometimes something small happens, but ends up kind of leaving a big impact. And for me, I was searching for, I typed in Duracell batteries, and I got Amazon Basics batteries as the first choice. And for some reason, that had a really big impact on me. I was thinking, wow, I'm probably missing out on actually the best product here. So yeah, I think it's an amazing platform. It's really cool stuff.
Starting point is 01:28:36 If you're looking out there for internships, jobs, definitely a good place to go. And there's no physical limitation there. So you could be out in Idaho, you could be anywhere and you should definitely reach out. What about you, Evan? Like are there folks, you have hiring opportunities
Starting point is 01:28:54 either at HashiCorp or through Ruby Central? Yeah, I mean, Ruby Central, I think is really small. I think that there's not a lot of positions. And I resigned as a director there a couple of months ago. So I don't have the latest either. But one of the things that I know that Ruby Central is doing right now is working with the Ruby Shield program with Shopify to take some of the, to basically to use the money, the funds that have been income available to hire people. So like one of the things that we're looking to do is hire people who are interested in Ruby
Starting point is 01:29:27 gems and that sort of thing. And I think that that effort is starting up. And I guess if someone out there listening is like, you know what, I have this really great proposal to improve this, that, and the other thing. Yeah, I'll figure out a link in the show notes to shoot over to that for that. For HashiCorp specifically, yeah, I mean, we've been all remote since the inception. So almost a decade now. The co-founders were remote from each other or have been remote from each other for eight of those decades, eight of those 10 years or so.
Starting point is 01:30:01 So we have HashiCorp.com slash jobs, I believe, working on all kinds of different things. A number of Ruby jobs as well. Cool. Yeah, I've used, I think Terraform and Vault are both Hashicorp projects. Yeah, I didn't realize there was a big Ruby footprint there. Yeah, Terraform Cloud, which is our Terraform app, The SaaS offering is all written in Rails. Wow. Did not know that. That is what, actually, this is a bit curious. If you are going to a website, is there a telltale sign that this was written in Rails? Is there something that kind of gives it away? Like I'm trying to think like maybe it's a developer tools. Not as much anymore. As everybody has moved to RESTful routes, it's harder to tell.
Starting point is 01:30:48 You could probably look at maybe some of the headers to try and figure out like, oh, this looks like the pattern that is injected by this asset management framework that's available in Rails. But that's pretty minor because everybody has sort of copied the same techniques over time so not as much anymore yeah no people stop putting the old powered by php buttons on the bottom of the in the footers you know what do you think i'm all for it yeah yeah i love those i love the powered by uh you know linux powered by php little buttons that people put down there so that was in the days pre like what we're talking about at the top of the show of pre-cookies cookie tracking and
Starting point is 01:31:33 all that kind of thing those those images would go into someone's log so they could find out how many people hit this thing so i could figure out how many people are actually on this website so yep yep very cool actually I just kind of a random question. And then we can we can close it out. But you talked about rest API's. Is there a connection between rails and open API or schwagger? Are these other things? Is there a way to generate that? Is that a is that a thing? Or like, I guess maybe the higher level question is, are people using Rails for API servers? Or is it really just mostly for front-end web servers? 100%.
Starting point is 01:32:12 People are definitely using Rails as both a full-stack website, but also just an API server, like 100%. In fact, I think there's actually an option you can pass to the Rails new command, which is like a dash dash API. And what it'll do is it'll just optimize that installation for like a headless API only version of Rails. Shopify's big monolith is primarily a GraphQL API server for the most part, right? Because we do a lot of React on the front end. And so the React is just hitting GraphQL APIs or REST APIs on the back end. And you find that that's where all the complicated business logic is. Anyway,
Starting point is 01:32:51 it's not like it's not easier just because you're not having to render views, right? But yeah, absolutely. Rails is fantastic as an API server. Cool. That's awesome. Well, I want to give both of you some time to just kind of close it out. You know, if there's there's tons of folks out there, a lot of students out there who are just getting started. And what kind of advice would you give them? Maybe, Mike, I'll start with you. Hmm. Stay curious. Hmm. I guess that would be my advice is every every every, um, I think looking back on a 25 year career, all the really fun things I did were because I noticed something that was like broken or wasn't quite right. And I was like, why is that doing that? And then like you do the deep dive and you learn a little bit about your tools and you learn how things break, which teaches you how
Starting point is 01:33:42 they're supposed to work, which makes you a better engineer. And usually you get like a great cocktail party story out of it at the end of it all too, where you go, you're not going to believe what I found at work today. And just stay curious. And as long as you, as long as you're doing that, I think that's, that's the best advice I can give anyone. Yeah. I'll piggyback on that and push it even more. I've, I've talked about this with, with other people before, but like, I'm not generally a life planner, right? Like I don't plan, I didn't plan out a career. I didn't plan out most of anything. Vacations is basically what I plan out. That's about it. And, but I feel like I've been very lucky and looking back on my luck over time, I feel like it's one of those elements where I mostly just took the thing that
Starting point is 01:34:28 was most interesting that really, I trusted my gut about the thing that was most interesting to just go and say like, I'm going to do that next. That's the thing I'm going to do next, right? I'm interested in it. So I had to have interest. So again, to Mike's point, like be curious, like, you know, like if you think that this sounds interesting, like, just do a little research, look it up, like, like, be try different things, right? I think that you will be amazed at how those things more than more so than even a cocktail party, you know, you'd be amazed at like, oh, I looked at this thing. And now it's perfectly applicable to what I'm doing every day or or in your interview. And you may say, like, do you have an interesting story?
Starting point is 01:35:08 And you tell them the story and be like, that's amazing. I had the same problem like those. The tech community is amazingly small, but amazingly wide in terms of breadth. Right. So, like, if you had some weird little thing that you did, you might find that somebody else had that same thing. And that might be you're in to have a conversation with them about a job. Or if you are really interested in this thing that maybe you can't figure out how to do right now, you might just continue to cultivate that and find out that later on. Now there's that thing sort of appears.
Starting point is 01:35:40 It might feel like luck, but really it's you making your own luck. Yeah, really, really well said. You might even get to the point where you've only done machine learning. You could still talk about fork and spawn and how painful they are. Exactly. Someone who's done Ruby. Yeah. It's amazing. A real treasure and a pleasure having you both on the show. I really appreciate it. Absolutely fascinating interview. Thank you again on the show. I really appreciate it.
Starting point is 01:36:07 Absolutely fascinating interview. Thank you again for your time. Thank you for having us. Oh, my pleasure. Yeah. Cool. And thank you folks out there for listening, supporting us on Patreon. It's getting close to the holiday episode. By the time this goes out, it'll probably be about two months away, maybe six weeks.
Starting point is 01:36:25 But Patrick and I are already planning a pretty awesome holiday episode at the end of the year to kind of round it out. And yeah, thanks again for supporting us on Audible and sending us emails. We really appreciate all of the feedback that we get. Thanks a lot, guys. See you later. Music by Eric Barndollar. Programming Throwdown is distributed under a Creative Commonsons attribution share alike 2.0 license you're free to share copy distribute transmit the work to remix adapt the work but you must provide attribution to patrick and i and share alike in kind

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.