WEBVTT 99:59:59.999 --> 99:59:59.999 Good morning .. ahh I'm really excited to 99:59:59.999 --> 99:59:59.999 do this talk because it's actually the 99:59:59.999 --> 99:59:59.999 first time I can give a talk about Elixir 99:59:59.999 --> 99:59:59.999 and assume that the audience knows what 99:59:59.999 --> 99:59:59.999 Elixir is, right? 99:59:59.999 --> 99:59:59.999 (laughter) 99:59:59.999 --> 99:59:59.999 So that's really great, that's really..ah 99:59:59.999 --> 99:59:59.999 changing face because usually I'm going 99:59:59.999 --> 99:59:59.999 to other conferences and I'm always giving 99:59:59.999 --> 99:59:59.999 the introductory talk, right? What Elixir 99:59:59.999 --> 99:59:59.999 is about, what are the language goals. 99:59:59.999 --> 99:59:59.999 So this talk is not about that okay? 99:59:59.999 --> 99:59:59.999 This talk is about Elixir past and future. 99:59:59.999 --> 99:59:59.999 I think it's kind of expected to talk 99:59:59.999 --> 99:59:59.999 about from where the language came, 99:59:59.999 --> 99:59:59.999 because now we are close to reach 1.0. 99:59:59.999 --> 99:59:59.999 And I think there are important lessons, 99:59:59.999 --> 99:59:59.999 things that happened throughout this 99:59:59.999 --> 99:59:59.999 process that we could share, that could 99:59:59.999 --> 99:59:59.999 help the community grow.. ah.. together. 99:59:59.999 --> 99:59:59.999 So if we want to talk about Elixir past, 99:59:59.999 --> 99:59:59.999 one think we could do is that we could go 99:59:59.999 --> 99:59:59.999 to the Elixir timeline. So this, I got it 99:59:59.999 --> 99:59:59.999 from GitHub. So, the vertical, we got the 99:59:59.999 --> 99:59:59.999 number of commits, and I think it's per 99:59:59.999 --> 99:59:59.999 week, and we have the whole year of 2011 99:59:59.999 --> 99:59:59.999 in there. And the first commit was right 99:59:59.999 --> 99:59:59.999 at the beginning of 2011, okay, it was 99:59:59.999 --> 99:59:59.999 like 9 January or something like that. But 99:59:59.999 --> 99:59:59.999 I actually want to rewind a little bit 99:59:59.999 --> 99:59:59.999 more, okay, I want to go a little bit back 99:59:59.999 --> 99:59:59.999 before 2011 but not too much.. it's not 99:59:59.999 --> 99:59:59.999 about my birth or anything like that. It's 99:59:59.999 --> 99:59:59.999 when...I'm going back to 2005 and I choose 99:59:59.999 --> 99:59:59.999 this article, The Free Lunch is Over, 99:59:59.999 --> 99:59:59.999 because it was about this time that I was 99:59:59.999 --> 99:59:59.999 personally starting to get aware of the 99:59:59.999 --> 99:59:59.999 changes that are happening. So The Free 99:59:59.999 --> 99:59:59.999 Lunch is Over is a paper from Sutter and 99:59:59.999 --> 99:59:59.999 basically what he's referring to .. ah .. 99:59:59.999 --> 99:59:59.999 the free lunch, it's not about this 99:59:59.999 --> 99:59:59.999 conference, you still have free lunch, so 99:59:59.999 --> 99:59:59.999 don't worry. But basically, what he was 99:59:59.999 --> 99:59:59.999 talking about is that ah throughout the 99:59:59.999 --> 99:59:59.999 previous two decades or even more, you 99:59:59.999 --> 99:59:59.999 wrote software and then you could just 99:59:59.999 --> 99:59:59.999 wait like two years? and your software 99:59:59.999 --> 99:59:59.999 will run twice faster, that was amazing 99:59:59.999 --> 99:59:59.999 right? You didn't need to do anything just 99:59:59.999 --> 99:59:59.999 wait and bam, it's faster. But..and we 99:59:59.999 --> 99:59:59.999 heard this story already, a couple of times 99:59:59.999 --> 99:59:59.999 now right? It's almost ten years since 99:59:59.999 --> 99:59:59.999 that article, that our machines are not 99:59:59.999 --> 99:59:59.999 getting any faster now, in terms of we're 99:59:59.999 --> 99:59:59.999 not having, we don't have machines with 99:59:59.999 --> 99:59:59.999 8 GHz, right, the CPUs. We're starting to 99:59:59.999 --> 99:59:59.999 have more and more core, so if we actually 99:59:59.999 --> 99:59:59.999 want to leverage all the capacity of the 99:59:59.999 --> 99:59:59.999 machine, it's not just waiting anymore, 99:59:59.999 --> 99:59:59.999 right, we need to change the way you 99:59:59.999 --> 99:59:59.999 write software. So, the free lunch is over 99:59:59.999 --> 99:59:59.999 And then, other important things happened 99:59:59.999 --> 99:59:59.999 for example in 2007, we had the 99:59:59.999 --> 99:59:59.999 Programming Erlang book, published by 99:59:59.999 --> 99:59:59.999 Pragmatic Programmers, by Joe Armstrong, 99:59:59.999 --> 99:59:59.999 which is one of the creators of the 99:59:59.999 --> 99:59:59.999 language. And I have it here because it 99:59:59.999 --> 99:59:59.999 was when I first started to hear about 99:59:59.999 --> 99:59:59.999 Erlang, right. It brought Erlang into 99:59:59.999 --> 99:59:59.999 other communities and in particular 99:59:59.999 --> 99:59:59.999 it brought it to communities I was 99:59:59.999 --> 99:59:59.999 involving with. And then, another event 99:59:59.999 --> 99:59:59.999 that happened in this timelines is that 99:59:59.999 --> 99:59:59.999 in 2009, Rails, we had a Rails release, 99:59:59.999 --> 99:59:59.999 that said that Rails was "threadsafe". 99:59:59.999 --> 99:59:59.999 And the reason why they did that, is the 99:59:59.999 --> 99:59:59.999 Rails Core Team, they did that, is because 99:59:59.999 --> 99:59:59.999 there was, if you were around the Rails 99:59:59.999 --> 99:59:59.999 community around that time, you.. there 99:59:59.999 --> 99:59:59.999 was a pressure, at that time right, on the 99:59:59.999 --> 99:59:59.999 Rails Core Team, exactly that we need to 99:59:59.999 --> 99:59:59.999 make Rails threadsafe, exactly because 99:59:59.999 --> 99:59:59.999 Rails developers wanted to leverage the 99:59:59.999 --> 99:59:59.999 ability of using all the cores on the 99:59:59.999 --> 99:59:59.999 machine, and use the machine efficiently. 99:59:59.999 --> 99:59:59.999 And one year later, I joined the Rails 99:59:59.999 --> 99:59:59.999 Core Team, and I actually found out ah 99:59:59.999 --> 99:59:59.999 that Rails was actually not really 99:59:59.999 --> 99:59:59.999 "threadsafe", that's why I put it in 99:59:59.999 --> 99:59:59.999 between quotes. Because I was constantly 99:59:59.999 --> 99:59:59.999 fixing bugs, and there was actually many 99:59:59.999 --> 99:59:59.999 reasons, not going to go into details, 99:59:59.999 --> 99:59:59.999 that Rails was not actually threadsafe. So 99:59:59.999 --> 99:59:59.999 I was working on fixing those bugs, and it 99:59:59.999 --> 99:59:59.999 was kind of frustrating, it was kind of 99:59:59.999 --> 99:59:59.999 hard, and it was about that time that I 99:59:59.999 --> 99:59:59.999 start to put the pieces together, right? 99:59:59.999 --> 99:59:59.999 So if I'm doing this work and it feels 99:59:59.999 --> 99:59:59.999 hard, it feels frustrating, but I know 99:59:59.999 --> 99:59:59.999 that concurrency is becoming more and 99:59:59.999 --> 99:59:59.999 more important, and I know that there 99:59:59.999 --> 99:59:59.999 are languages like Erlang and many other 99:59:59.999 --> 99:59:59.999 languages, that solve this concurrency 99:59:59.999 --> 99:59:59.999 well, okay, um, I need to do something, 99:59:59.999 --> 99:59:59.999 right? I don't want to, we need to see 99:59:59.999 --> 99:59:59.999 ways, I can make this situation better. 99:59:59.999 --> 99:59:59.999 And then I started to study, learn, play 99:59:59.999 --> 99:59:59.999 with other languages, and throughout this 99:59:59.999 --> 99:59:59.999 process, so I was reading many books, 99:59:59.999 --> 99:59:59.999 trying to get ideas from different places. 99:59:59.999 --> 99:59:59.999 I found this book, 7 Languges in 7 Weeks 99:59:59.999 --> 99:59:59.999 by Bruce who'll be speaking later today. 99:59:59.999 --> 99:59:59.999 And I was actually familiar with the 99:59:59.999 --> 99:59:59.999 majority of the language in the book, but 99:59:59.999 --> 99:59:59.999 the thing that really stood out in that 99:59:59.999 --> 99:59:59.999 book is that it got languages like Haskell 99:59:59.999 --> 99:59:59.999 Scala, Clojure, Erlang, and a few other 99:59:59.999 --> 99:59:59.999 more, and it was talking about those 99:59:59.999 --> 99:59:59.999 languages, and also their concurrency 99:59:59.999 --> 99:59:59.999 models but it was, to me, the book really 99:59:59.999 --> 99:59:59.999 put them, like, in separate places, right, 99:59:59.999 --> 99:59:59.999 and okay, this the advantages of the 99:59:59.999 --> 99:59:59.999 approach, followed by this language, 99:59:59.999 --> 99:59:59.999 here are the advantages, here are the 99:59:59.999 --> 99:59:59.999 trade-offs. And after I read the book, 99:59:59.999 --> 99:59:59.999 what really stood out, was the Erlang 99:59:59.999 --> 99:59:59.999 virtual machine. I was saying, I want to 99:59:59.999 --> 99:59:59.999 write software that going to run on this 99:59:59.999 --> 99:59:59.999 runtime, on this ecosystem, and so that's 99:59:59.999 --> 99:59:59.999 the lesson I got from it. And the way I 99:59:59.999 --> 99:59:59.999 like to say is that I like it so I went 99:59:59.999 --> 99:59:59.999 and bought more books on Erlang, and I 99:59:59.999 --> 99:59:59.999 also actually really like Clojure after I 99:59:59.999 --> 99:59:59.999 read the book so I went to study Clojure 99:59:59.999 --> 99:59:59.999 too. It kinda shows later in the languages 99:59:59.999 --> 99:59:59.999 some of our features. And the way I like 99:59:59.999 --> 99:59:59.999 to say about when I was studying Erlang, 99:59:59.999 --> 99:59:59.999 writing software in Erlang now, trying to 99:59:59.999 --> 99:59:59.999 put some things in production, is that 99:59:59.999 --> 99:59:59.999 I like it, everything I saw, but I hated 99:59:59.999 --> 99:59:59.999 the things I didn't see. Okay, and at 99:59:59.999 --> 99:59:59.999 first, the things I didn't see was a 99:59:59.999 --> 99:59:59.999 little bit unclear, but I decided okay, so 99:59:59.999 --> 99:59:59.999 I want to try my own language, just for 99:59:59.999 --> 99:59:59.999 fun, to see if I could get some of those 99:59:59.999 --> 99:59:59.999 ideas, some of those things I'm missing, 99:59:59.999 --> 99:59:59.999 if I can get it there, and see how it's 99:59:59.999 --> 99:59:59.999 going to play out.