00:00:12.200
okay so um this is build as a panel but it's not a panel um I fooled them uh
00:00:19.199
what I want to do is fundamentally I want to shut up which which will be difficult I know um and I want to see if
00:00:27.560
we can just have a conversation right so I don't want to sit here and ask questions and know what is your favorite
00:00:33.920
Pokémon um I instead whenever I meet these guys we just end up talking about
00:00:40.680
stuff you know and it's sometimes Tech sometimes not um and it's always
00:00:48.320
interesting and it's always fun and it's always sad when it ends so I would
00:00:53.399
really like to just try and get that Spirit across um these two people
00:01:01.719
changed my life in different ways um and I am eternally grateful to both of
00:01:09.439
them um but on top of that they are both just really nice people I don't know if you've noticed that or not um which is
00:01:17.759
really stunning uh that you know the two of them have both got communities which
00:01:24.720
reflect them so um as I say I'm going to to
00:01:30.560
maybe kick this off with just a a question and hopefully we can start a conversation going about it um could we
00:01:37.479
put that slide up thank you um if you would like to suggest a
00:01:44.119
question um take a picture of the QR code or whatever um that will take you to a Google form and if everything's
00:01:50.640
working I should be able to see questions come through I won't be able to get to everybody unless only one
00:01:55.799
person asks but uh we'll see what happens
00:02:01.759
are we good yeah excellent so I got a I got a question or this is the kind of
00:02:08.239
conversation we normally have after you know a lot very late at night um I got a theory and it's that objects
00:02:18.680
are well the idea of object orientation is a self-contained way of doing coding
00:02:25.360
is dying and that objects are going to move from being a primary to
00:02:33.879
being a secondary characteristic of coding style and the reason I say that is I'm seeing more and more of the
00:02:41.360
coding that I do as being Transformations as opposed to managing
00:02:49.080
State and so when I'm writing Ruby code for example I would say probably 90% of
00:02:55.040
my code now goes into modules and not into classes and and then the classes
00:03:00.800
are there when I need them but then they call out to just straight functions that do transformation work for me um funny
00:03:07.360
story there is I posted using extend self in a module to to turn all the methods into method and I got people
00:03:15.200
telling me that's not what you're supposed to do um but I think personally there's a there's a lot to that and I
00:03:20.760
was wondering if you guys had any thoughts on that
00:03:27.959
area well it's the definition of the object programming is the you know
00:03:35.080
changed in the history so that the original object oriented programming in
00:03:40.680
say in claimed by the Alan K is the basically the object Sending message
00:03:47.360
each other that no more no less and then but the the St object orientation is
00:03:56.079
which is the you know the object is kind of the structure and has stay and it can
00:04:01.640
be written and uh we can uh select the appropriate method according to the the
00:04:08.799
class of the the object or something like that and uh Ruby partially reflect
00:04:14.239
that part of the then the nowadays the people
00:04:22.199
uh you know uh leaving from the concept of the say inheritance or for example
00:04:29.400
the go or last do not have the concept the the The Inheritance but at the same
00:04:35.840
time it also uh have the ability to
00:04:43.000
uh import some kind of module like a trades or the object composition to to
00:04:50.360
the to the entity or object so the uh the the I think the your idea like a you
00:05:00.360
know the data structure through the piperine or something between the function should be the should can be
00:05:08.759
included in the the broader sense of the object orientation
00:05:14.240
the the some years ago I you know I thought about the the what is the the
00:05:22.639
The crucial concept of object orientation because you know of we often
00:05:28.319
say it's the you know in and captur and dynamic binding to as the
00:05:33.360
key components of the objectoriented programming but we we see lot of the object oriented
00:05:41.319
programming language and uh there are several uh object oriented programming
00:05:46.360
language lacks the the either of the concepts so that for example uh like
00:05:55.880
a like a rust and goal is a kind kind of object or programming but it doesn't
00:06:02.400
come with the inheritance and the common L object system laes the incaps duration
00:06:09.240
and uh for example the C is not does not
00:06:14.520
have the you know dynamic binding by default but you can write some kind of
00:06:20.160
the object oriented programming in c as well so that that that means that those
00:06:25.240
three concept is not crucial at all so that uh then I got the conclusion that
00:06:34.039
the to for object programming we have the there there are two very important
00:06:40.479
things and then one is the the you know identity by uh I mean the identity of
00:06:48.560
the object this object is the object things okay you you may represent it by
00:06:54.759
the reference you may represent it as a pointer or something but uh the identity
00:07:00.840
is very important I can distinguish this entity and that entity the the other
00:07:07.759
part is that uh if if you have the dynamic binding which
00:07:13.560
is much easier to do object but not crucial so the identity is very uh most
00:07:20.759
important and the the dynamic binding is the second best I think so there uh even
00:07:28.160
elixir in in that in that definition even alixa is the you know the part of
00:07:35.120
the object program yeah I I I like that I like what
00:07:42.080
it said a lot and um when when they was asking the question I was thinking that
00:07:47.840
what we have seen in or I have seen in the last decade is that it's exactly
00:07:53.680
like when we talked about objects it was meant to be this bundle of features right like polymorphis inheritance right
00:08:01.759
and what we've seen is that the programming languages knew they get some of those features right for quite some
00:08:08.919
time uh people believe that oh if you don't have objects you don't have polymorphism right but then you mention
00:08:14.960
go that has interfaces rust has traits so I think we have been over time like
00:08:20.759
looking at at what we would generally think it's objects or like the C++
00:08:26.039
definition of objects or Java looking at those features and say oh I want this
00:08:31.159
and this and this and making them part of the language but I like a lot when
00:08:37.039
you said that uh a definition of object is is identity
00:08:44.160
yeah but then what about this um if you look at people actually doing
00:08:51.200
it in practice they are using classes and objects simply as
00:09:00.200
a way of writing a code as opposed to a pattern of actually using objects so we have situations like in rails you know
00:09:07.880
the controllers well controller is stateless right it takes a request do a response it's a transformation but no
00:09:14.440
it's a it's a class right we have service objects which is the most ridiculous concept ever invented right
00:09:25.079
um oh wow there's people out there um but I mean why why would I want to
00:09:30.440
create an object just so I could call a function on it if it's stateless right but those kind of
00:09:36.839
ideas worry me because it's kind of like a uh Corruption of what we're supposed
00:09:43.560
to be doing with objects and I don't know I'm I'm just trying to struggle to find how we can
00:09:50.040
actually help people use objects appropriately but then don't use objects when it's not appropriate
00:10:00.519
right well I don't know but uh at the same time uh the even pury object or U pury
00:10:10.000
functional programming language requires some kind of the the side effect and the
00:10:15.560
state changes like the H scale use model to to represent the side effect and then
00:10:22.040
uh or IO to to represent the the the states and
00:10:29.959
for me sort of you know denying side effect uh as a whole is not a good idea
00:10:38.160
because we have side effect we require side effect for application that no one
00:10:44.800
no one wants to no one wants uh the the web application that that does not have
00:10:51.160
side effect so the we you cannot buy anything you cannot make a the reservation in the
00:10:57.079
airport airline company or anything like that that we need side effect we need
00:11:03.279
State and so that denying that is the kind of the the contradiction or the the
00:11:09.920
avoiding the real world so that uh so in my opinion so the you know the
00:11:20.000
controlling and reducing side effect or the make making some functions or the
00:11:25.880
methods the the pury functional is a good idea but uh it is it is not to be
00:11:32.519
forced and it it should be disciplined yeah I think I think this is
00:11:39.200
a this is where we are going to like defer in philosophy because uh I would
00:11:45.680
take because for me it's a question of default what is your default is it
00:11:51.600
mut we couldn't talk about all kinds of side effects but I think the most common
00:11:56.680
we face as developers is the the mutable state if it should be mutable or
00:12:02.000
immutable by default and then I think um
00:12:07.320
and then depending on what you choose different conventions and different practices are going to to be born and
00:12:14.880
some things they're going to feel simpler some things are going to feel more awkward and and you have to to
00:12:21.760
build on top of that uh on that choice and that decision
00:12:30.120
so if you look at it from The Elixir point of view right
00:12:37.760
then you are far more concerned with the flow of data than the maintenance of
00:12:44.000
state would that be fair to say I think so I think that's a good
00:12:50.839
summary so have has that changed your view then of of the idea of stateful
00:12:57.160
objects as being a useful woman so um to me like my interpretation today
00:13:05.399
of how I see a uh an object today like uh in Ruby or
00:13:12.560
JavaScript is that it's really the bundling of three things it's the
00:13:18.000
bundling that we know of like the state it's the bundling of behavior and it's
00:13:23.560
the bundling of something that I was calling time but Matt just came with a
00:13:28.600
much better definition which is the identity right you are coupling those three things together right and that's
00:13:34.639
what you get with an object and uh for me what I'm what I try to understand is
00:13:43.160
well how can you decouple those three things right so when you're building software if I don't need identity I can
00:13:50.639
have just those two things which I believe are like data class maybe in in Ruby yeah so so you know so it's it's
00:14:00.880
more like well instead of he giving you like uh you know something that has
00:14:07.639
everything by default I give you the pieces and you can put those pieces together and manage that um and so if
00:14:16.560
you need you know so if you need the state you can optain into that
00:14:21.600
state and um and yeah and then and because the four things are decoupled
00:14:28.079
you're only going to bring State when you need it right right so does
00:14:34.480
immutability play into this as well immutability yeah immutability is uh
00:14:40.880
useful for most of the most cases many cases like a you data class is a mutable
00:14:46.560
values and and you can freeze and has and strings and Aries to to avoid the
00:14:55.000
mut uh mutation so that uh I agree with
00:15:00.199
the you know the control controlling the the modification but at the same times
00:15:08.079
in uh in some cases like uh we want to modify the existing value to say reduce
00:15:16.360
the location or maybe the uh the performance uh improve the performance
00:15:22.320
or the avoid the copying of the object or something like that I as a language
00:15:32.519
I I defer and that kind of decision up to
00:15:39.279
users that I'm Ru be not going to force users to for prohibit M mutation
00:15:48.000
or uh encourage mutation that we are just Neal about
00:15:54.519
mutability yeah and and I think like uh the I think identity is related
00:16:01.560
to to mutation because why you need identity is because something may change
00:16:07.000
over time so you need to establish what is the identity of that thing because like we have identities because we do
00:16:13.560
change over time right and when you have a data class the identity of the data class is the data class itself because
00:16:20.480
it doesn't change so if something doesn't change it identifies by itself but if something can change yeah yeah in
00:16:28.600
the to a functional programming language that there's no idty because of the you know the you cannot distinguish in any
00:16:36.680
way of the say list of the Z1 no matter where it allocated no
00:16:43.279
matter where it started it they values just values there's no way to distinct
00:16:49.720
them so that in that sense the pure functional programming language has no identity and it's thus they are not the
00:16:58.160
object programing language although the interesting side effect of not having
00:17:03.199
identity is you get time travel for free
00:17:08.240
yes but anyway so I'm gonna ask so I had a boatload of questions asked and a
00:17:15.280
whole bunch of people clearly want to see a fist fight take place
00:17:21.600
um uh so I've only had five people so far ask what is your favorite Pokemon
00:17:35.600
know uh if you could change one thing about your language what would it be and
00:17:42.640
then one person came up with a different way of expressing it which actually is kind of
00:17:47.679
interesting mattz if there was one thing you could change about Elixir what would it
00:17:53.120
be and Jose if there was one thing you could change about Ruby what would it be
00:18:00.360
yeah I I'm not familiar with the detail of the alixa but when I see the alixa
00:18:05.720
programs I kind slightly bed with the repeated uh
00:18:11.640
inam dot things yeah so that if we can make those kind of things in by you
00:18:20.240
know fix the scope on the just the the pipeline M pipeline list uh reduce or
00:18:28.000
something it would be better yeah no you you you can import a module but like the
00:18:35.679
so so that's one of the funny things right because so importing like me coming from Ruby I was like I you know I
00:18:42.120
want to import a modules I'm not typing things all the time but then like you
00:18:47.440
put the thing out there and then people use it and then like the best practices emerge and the this by for the community
00:18:55.919
the best practice is to not import it so so there are like a couple things
00:19:02.280
that you know like over time like the community as it grew got some like
00:19:08.280
consensus like okay we're not doing things this way yeah we are doing things
00:19:13.960
this other way yeah um yeah you know the in in Ruby the the
00:19:20.559
the VAR self represent the name space because of the method but uh in Alex
00:19:25.919
alexir it's just value so that there's no name space attached to the the the value
00:19:32.440
so that you have to say the en yes in it but uh I don't know by using the
00:19:40.840
importing not good idea but say uh the probably multiple disp parts or
00:19:46.120
something like that I don't know but yeah if I could drop these inarm so
00:19:52.240
those uh the module no no they not module specific
00:19:59.440
specification it would be much shorter and clearer I think no one
00:20:08.440
think ah I can't come up with something right now I want to say I want to say I
00:20:21.440
as a object Orient programming language and it's qu quite hard to to make them
00:20:27.120
immutable uh but you know it's like a lens so
00:20:32.440
that you every change must uh return the new value with uh keeping the old value
00:20:41.600
uh unchanged or something like that yeah like uh the first prototype I did for Elixir was uh it was actually objective
00:20:49.960
oriented and it had like a prototype base class uh model and it was exactly
00:20:56.520
that like you know now all the time you have to be building a new object because
00:21:01.840
right and it felt awkward and I was like ah this doesn't really work uh I I'm
00:21:07.120
going to hijack a question right here uh is there anything that you would like to
00:21:12.240
remove because people say remove from the from Ruby yeah but you cannot
00:21:19.279
because like because compatibility issue or something uh I'd like to remove the
00:21:24.919
you know the the the power oene Magic variables like dollar SL doll dot things
00:21:32.480
that that's kind of ancient things and then second one is that I'd like to remove sleds from the
00:21:38.159
language and then because the you know the rubby thread is uh you know half big
00:21:43.799
you know the Raptor is much better so in that sense so the I I'd like to remove
00:21:49.799
threads and use something similar to Raptor then the third things is probably
00:21:57.000
outload yeah outload yeah then utro has the you know the
00:22:03.520
unexpected side effect of by the re requiring
00:22:09.279
anytime access to the the constants when uh but you know uh Z and
00:22:16.559
the others especially rails use the the outload that much so that you can remove
00:22:22.120
that but I I regret adding outload to the language
00:22:29.159
okay so turnabout is fair play What Would you
00:22:34.400
remove
00:22:40.320
um I mean there they are definitely things say is perfect I know it
00:22:53.159
is like um if you go if you go to the documentation um we have like the
00:22:59.400
sidebar with all the modules and then if you scroll down we have a section
00:23:05.480
deprecations with everything that we've deprecated over time and it's a it's a
00:23:11.760
big list of the of the mistakes that are historically
00:23:17.559
archived but do you fix them most of them
00:23:23.120
allegedly because uh I I fixed something that was wrong but I don't know if I
00:23:29.120
introduce something that is right M right so like only time will tell you
00:23:34.960
know yeah yeah 30 years of history is kind of
00:23:40.640
Burden yeah Ruby four you start again no no not
00:23:47.039
that idea never again never again the restart is a bad idea so you actually
00:23:53.720
mentioned something interesting in passing and that is over time the community kind of comes up with a way of
00:24:00.600
doing something how often have you found each of you the community doing things in a
00:24:07.720
way that either surprised you and you liked or you didn't like but it's what
00:24:16.159
they chose well the the first surprise I had
00:24:22.919
was the I got one day I got the the email
00:24:28.880
the huge PCH attached and with this PCH the Ruby will be multil lingualized so
00:24:35.840
the uh it used to be support the the Japanese encoding only because I'm
00:24:42.399
Japanese but he sent me a pass to dynamically switch the
00:24:51.360
encoding of the of the language handles and I didn't have that kind of idea and
00:24:58.760
uh I was surprised and uh I applied the patch and tested and it worked and uh
00:25:05.120
that leads to the my idea of the the Cod set in character set independent
00:25:11.039
implementation of the Ruby 2 so that you know the the email from
00:25:18.039
nobody uh lead me to the the big Concept in the newer version of the Ruby
00:25:24.360
language that that was my first surprise the of the Comm
00:25:30.200
effort yeah I think I think like the one that I struggled the most with was with
00:25:35.240
the code for matter yeah so uh who here uses a code for
00:25:41.200
matter right and who here like do not like the idea at all of a code for
00:25:47.640
matter oh there's one no there's two three okay would everybody else please take these people and throw them out of
00:25:53.799
the room yeah so uh uh at some point like
00:25:59.520
the when the community was growing and we were starting to have like bigger things people they started like
00:26:14.120
know go ahead why are you
00:26:26.880
definitely her
00:26:32.799
hello carry on yeah and and then the community was
00:26:38.600
like we we want so we want a style guide we want an official style guide and uh
00:26:44.520
and then I was like no I don't want to have an official
00:26:49.720
style guide you know it's like like you know figure out what is going to be the
00:26:54.760
best and then but then I started feeling those pains myself myself as I was going through projects the alixir team was
00:27:01.559
growing and then they're like we want to write code in the same way as the alexir
00:27:07.000
code base and then you know so it took me and then and then everybody was saying well
00:27:12.440
we need a code for matter it's going to be important for the adoption and so on and I was like fine right let me do it
00:27:18.919
and uh so we got together we Elixir team implemented the formatter and it's part
00:27:24.600
of the language but it was really hard for me
00:27:29.760
to like I was when I was working on it like is this going to be a good idea or not so I wanted to try it I was like
00:27:37.880
really hard to convince but this is something that today it's like I can't live without because I think like the
00:27:45.080
the code so it it was like a lesson for me because to me like the code for matter it basically gives you a freedom
00:27:52.480
like you because today like if you don't have a code for matter what you do is that you're writing the code right and
00:27:57.919
then are formatting it at the same time you go and you add parentheses you add your style so you're thinking about this
00:28:03.600
all the time so now when I write code I just like write the most horrible code I
00:28:09.320
don't care about indentation about spaces I just you know mesh the keyboard
00:28:15.679
and then I press the key and it's like oh it's good and it was it was a lesson I was
00:28:21.760
like yeah yeah I would point out though that if you're the person that wrote The Format then it's probably formatting it
00:28:28.360
the way you wanted it for me so so that's and that's the thing like it it's
00:28:35.760
not my style because there are a couple things like that I realized this is that
00:28:41.600
uh a lot of my style was like I'm feeling the weather you know it's like did I did not have a room so if I try to
00:28:49.159
codify that it would not work out it would not be good or it would be like a bunch of exceptions so so that was it as
00:28:57.519
well it's like like at some point I'll be like look here here's how I was used to write the code
00:29:03.880
before and now it doesn't like that style does not does not scale let's say
00:29:10.440
cannot we cannot generalize it right and then we had to discuss and think about it so I had to let go of what I thought
00:29:17.919
was my favorite way of writing Elixir code but I mean this is kind of like um
00:29:23.440
in a way it's kind of an easy topic to talk about because everybody has an opinion about code for matters but I
00:29:29.480
remember the uh I think it was Elixir I mean it's like way back when um at one
00:29:35.200
point The Elixir forat used to remove trading commas from lists it still does
00:29:40.960
it does yeah still yeah should I go with the people yeah
00:29:56.799
mind goes beyond format because that's more than format that's
00:30:02.240
talking about uh almost it's not quite a design issue
00:30:07.919
but it's somewhere between formatting and design because by doing that it makes it harder to refactor my
00:30:15.440
code yeah so the reason why we don't support trailing commas is because like the formatter is meant to be General and
00:30:23.840
because we have optional parentheses you cannot have training commas with
00:30:29.039
optional parenthesis on on function calls but in lists and everything else you can yeah but then you start having
00:30:35.120
to specialize how you behave in different places and I went for like more a general approach right the good
00:30:41.600
news is that part of the community they created something called the freedom for a matter
00:30:48.240
where uh they can make all the decisions that they want and then there's a flag
00:30:54.559
there m my kind of people excellent EX excellent uh all right I have a question
00:31:02.000
for Jose and you know at the beginning uh no one knows alexir of
00:31:08.440
course it's it's a start and for me the Dave Thomas wrote the book the
00:31:14.399
programming Ruby and it it it is the start for Ruby how about you and to to
00:31:22.679
how did they sore yeah we did we we do share the Dave
00:31:29.519
Thomas uh history together you yeah um with the programming alixir
00:31:36.720
book but one of the things that um from my time in rails I think one of uh one
00:31:44.559
of the big biggest lessons was like if you create something and you want other
00:31:50.639
people to use it you have to go out and talk about so in the first years it was
00:31:55.880
you know going to a lot of conferences is like not a specific training programming language I would go to rubby
00:32:02.480
conferences as we we saw yesterday and talk about it and I think uh and I think
00:32:10.840
I think it actually after it started gaining because there the other there's the other thing that I like to say a lot
00:32:18.080
like elixir is running on top of their L machine so like all of the hard work
00:32:25.399
like you know Ruby got a jit you have to work for that Jet right I Airline got a
00:32:31.679
jet I could stay on the beach you know and elixir got a jet anyway so so I
00:32:37.799
think that was able to speed up a lot of the alexir adoption process especially
00:32:42.880
because airling has always had this kind of like um you know magical feeling in the
00:32:51.120
industry of like oh it's such a great technology that felt distant and we could make it more
00:32:58.240
and and yeah so I think like uh Dave Thomas got involved and then not like
00:33:05.240
soon after we started having the first alixir conference as well and things happened like very fast at that initial
00:33:13.080
moment yeah yeah you you took off very very quickly Ruby was a bit slower yeah uh yeah a bit slow I mean r
00:33:22.320
Ruby it's kind of interesting because I uh I can look at Book Sales and I don't know if that's a proxy for uses or not
00:33:29.440
but Ruby was very much linear in the early
00:33:35.080
2000s um and it grew and um there were
00:33:40.200
like two curve there's two two linear portions it's like a slow one at the beginning and then it ramps up and it
00:33:46.200
gets going and then rails comes along and it goes vertical yeah um but with
00:33:53.480
you it was actually noticeable I mean I didn't catch the very beginning of it but you had a a a ramp up like that from the
00:34:02.279
beginning and I don't know if that's because of better communication on the Internet or whatever it might be but um
00:34:09.240
yeah you you you had a pretty strong you came out of the gate first
00:34:14.359
yeah so one question people have
00:34:19.599
asked is what is the most difficult
00:34:25.240
non-technical area of being a language I don't know what the word would be
00:34:30.720
Creator or guardian or whatever uh yeah
00:34:36.720
uh the Ruby was released in the public in 1995 so that I started uh developing
00:34:43.399
Ruby in 1993 those two years two two almost three years the I I work along I
00:34:52.359
work on Ruby along and then if I stopped
00:34:57.920
the developing Ruby uh that no one no one has bed so that no one cares so that
00:35:05.599
uh you know the programming implementing programming language is pretty much fun
00:35:11.119
but at the same times it it's very complex and you know sometimes got tired
00:35:17.320
and uh I I failed several times that okay I it's it's it's kind of tough so
00:35:25.520
that what if I could I stopped this this de my personal project hobby project and
00:35:33.400
then yeah that is the the probably the biggest non-technical issue for Ruby but
00:35:41.560
then is it does it become more stressful the fact that now it's public you really can't uh the
00:35:50.079
after after releasing the public the people react so that uh people may uh
00:35:55.760
send uh people send it me sent me say the proposals and the B Po
00:36:02.119
and something and that that would rather motivate me so that after releasing the
00:36:08.440
public I didn't have any any such
00:36:15.200
issue any
00:36:21.520
longer um for me it's probably going to go a bit more on the personal level in
00:36:27.839
the sense that uh sometimes I struggle a lot with um the
00:36:36.079
expectations that people that are external they put on me and having to do
00:36:41.800
and manage that expectation sometimes it's quite hard and uh do you mean in
00:36:47.560
terms of people demanding things from you or for example similar or even like it
00:36:54.000
go I mean we it goes into all kinds of expect ations that people can place you
00:36:59.480
know uh into how you know how to lead the project how I communicate how I you
00:37:06.760
know if I am watching a talk in that event or if I am on the hallway track like so there is this constant you know
00:37:13.800
like U not constant well it is constant uh like expectation of how that person
00:37:19.160
should behave because you know and it's and and I understand it's kind of natural
00:37:25.119
because like you know probably the way we we interact people build this idea
00:37:31.000
but sometimes it's it's very hard right and uh I would rather focus more on like
00:37:38.280
on the community itself you know and uh on shared
00:37:44.200
responsibilities right so a lot there's like expectation of like oh if there is a problem in the community I should be
00:37:51.160
the one tackling it and I don't think that's how a community is supposed to work right should be a shared resp
00:37:57.480
responsibility I understand that I have a a big role right and what I say is
00:38:03.880
influential I know that that's the other side of the coin and that's exactly the balance like balancing those things that
00:38:11.240
it's hard do you do you
00:38:16.880
find so I got this thing where I I I'm not naturally like an outgoing person um
00:38:24.480
and I find that when I come back from conferences um my wife has learned not to talk to me
00:38:31.240
in the car coming back from the airport uh because I'm all kind of talked out you know do you find the same yeah I uh
00:38:40.480
I I don't know who said it but they said like they are you know like two kinds of persons the one that
00:38:46.599
when uh when they go out with people they come they come back with charge
00:38:52.400
like full of energy and the ones that you know when you go out it's like oh I I'm dra
00:38:57.960
right my social batter is gone and I'm definitely on on my social batter is
00:39:03.359
gone it's like you know yeah uh I don't know but my wife often
00:39:12.119
says that after the conference or the me events and then I talk uh I often talk
00:39:19.480
more so that probably I was energized by the the meeting people with the
00:39:26.079
community very nice
00:39:32.800
the question that's come up two or three times is to do with software
00:39:38.880
complexity and basically how the world seems to be getting exponentially more
00:39:44.079
complex as we go forward and I guess both of you are trying to
00:39:53.319
create some kind of antidote to that in a way but do you have any thoughts on the
00:40:00.960
overall direction that we're taking and the the complexities that we're creating
00:40:10.200
uh you know the software become uh become very complex very easily and
00:40:16.079
because of the the request from the society or the users are very complex so
00:40:23.319
that uh yeah it is it is wonderful when when we
00:40:32.920
can separate the and entangle those complexity into the combination of the
00:40:38.960
single simple Concepts that that is wonderful and that is nice but uh
00:40:48.480
unfortunately for me humans so that it is very difficult to make that kind of
00:40:54.599
that an tanglement of the complexity so that as a result our application tends
00:41:00.599
to be very very complex very easily uh
00:41:06.359
then uh the Ruby tries to make it a
00:41:11.480
little bit simpler uh by reducing the amount of code they wrote they write uh
00:41:19.640
then but uh you know the for complete Solutions
00:41:26.280
we have to uh un tangle the complexity and uh draw the architecture to to
00:41:32.400
support those kind of the uh the combination of the S simple things do
00:41:37.839
you think the complexity then is outside the software community and we're just responding yeah or do you think we're
00:41:45.079
creating that complexity uh I I it's the reflection of the outside world of comp
00:41:51.680
uh complexity in the outside world I I believe but wouldn't some of that complexity come from the tools that
00:41:57.760
we've given people to make life more complex uh if if so the it's the fault
00:42:04.640
of that tools or language okay so that the every language should uh should
00:42:10.640
should be designed in uh to reduce the complexity in
00:42:20.040
mind yeah I'm I'm I'm not sure where my thoughts are going to go
00:42:25.440
on this but I feel like like I like to say like for example take web development um my first website was I
00:42:35.440
did for my Bend University and it was a flash which is
00:42:41.359
Tad right it was a flash application that I put on HTML and I hosted it
00:42:47.040
somewhere right and then um and then I've been
00:42:52.880
involved sometimes on and off with web development but you know in like the last 15 years there is so much I'm not
00:43:01.599
sure if complexity is the best word but I'm I'm going to use that word because before you know even if you're using
00:43:07.559
like PHP right you were just writing something put it on a page and today
00:43:12.720
like you have to learn Git You have to do HTML you have to do CSS you have to
00:43:18.319
do maybe JavaScript you have to do the server side programing language and there is so much you and I'm I did not
00:43:24.920
cover everything so that thing that before was like simple right but
00:43:31.559
probably could not support the complexity of the world right now is
00:43:37.359
quite more complex and maybe maybe it better support some of the complexities
00:43:42.760
of the world but so so I think there is I think like we
00:43:49.599
do have we do have complexity we do have complexity that we get from our tools
00:43:56.400
and I think it's worth asking like and I think a lot of it we just what I would
00:44:02.520
be careful with is when you let's say you inherit some complexity because of the tools that you chose because of your
00:44:09.920
architecture you should be able to think about it and reevaluate it it's like is
00:44:15.400
this complexity what I actually need or not and that's how I would try to
00:44:21.280
approach the problem at this level like I think we do have complexity from
00:44:27.160
dependencies from languages because no language is perfect right and then um I
00:44:34.400
think if you can be given more time and more understanding for assessing where that complexity is and if that's worth
00:44:41.160
the cost that we're paying then maybe we can like try to leave some of that
00:44:46.800
behind so do you feel any respon not responsibility the wrong word any
00:44:51.839
pressure as kind of like the leader of an ecosystem to try and
00:44:58.040
keep that ecosystem simple um I don't I don't I don't so there's a
00:45:06.880
there's a funny story I was at an event uh and the person told me like oh I work
00:45:12.480
at a company that is responsible for managing all of the water subsystem like
00:45:19.160
in the state in the UK and I was like why are you telling me that right I don't need this responsibility in my life right like if I screw it up like
00:45:26.480
you know hundreds of thousands of people go water right right uh but ultimately I
00:45:32.400
think I I don't I don't put that pressure on myself because I think it's
00:45:37.559
also everybody's responsibility to um you know we were talking about
00:45:43.079
complexity and process and I think some of those things they are warranted like tests some people would say tests are
00:45:48.280
complexity right they are not necessary right but uh it's we have the shared
00:45:53.319
responsibility of working with whatever you want to do with softer verification
00:45:58.520
if you want to do code reviews as you're processing the team uh do that as well so um ultimately if like if I screw it
00:46:09.359
up it should be everybody's responsibility to find that as well and
00:46:14.520
give me feedback and we evolve together and that should not fall solidly on my
00:46:19.559
shoulders I absolutely I don't think it should um and I think interestingly the
00:46:25.240
two of you are of pretty much all the people I can
00:46:30.480
think of in your similar positions take a way more conservative view about
00:46:38.319
change and you're you're way less driven by you know current bright shiny things
00:46:45.119
you know you you don't chase after all the latest trends
00:46:50.559
um so I think from from that point of view I think you're doing a stellar job like I said this morning you know there
00:46:56.400
is still code that's 20 years old that would run on Ruby um typically my rails
00:47:02.520
app won't run in the next month if I update my rails so um you know that's
00:47:08.359
that's and that's actually part of what I get to is that it worries me that we have
00:47:14.599
um we don't really know what we're doing as developers and we are playing with front
00:47:22.720
end stuff for example right where does the code run that does the rendering does it run the server does it run on
00:47:27.760
the on the browser does it run in both you know does it run over in Manchuria somewhere I don't know right but nobody
00:47:34.440
knows and yet we're being told to try doing it this way try doing it that way and know and it switches every three
00:47:39.880
weeks and I don't know about you guys but I just feel Whiplash from that you
00:47:45.160
know everything is just going back and forth and back and forth
00:47:50.280
um you don't feel the pressure to try to to track that or you just carry on doing
00:47:55.960
it the way you're doing it uh the because of the field we are in
00:48:02.559
because uh you know the the programming language has the long history and that
00:48:08.760
we have the the you know the stock knowledge on of the the past programming
00:48:16.240
language and the we the programming language uh you know
00:48:23.680
the long lived the relatively table things that's the reason the the Ruby uh
00:48:30.760
can keep compatibility for a long time and but you know
00:48:36.559
in for example the web field the things things change so so drastically every
00:48:42.400
week and so that to adapt those the surrounding situation so the uh the
00:48:49.240
framework should be evolved very quickly and uh you know I some years ago I asked a
00:48:58.799
member of the the core commit in of the reals real teams and why you know every
00:49:06.520
version you break the compatibility and why we try the Ruby tried to keep the
00:49:13.200
compatibility for a long time and then but the rails uh do not supposed to try
00:49:19.760
to keep compatibility and then the answer was the you know uh the web web
00:49:26.720
situation has changed drastically and if we stop adopting new things and stop
00:49:34.119
changing and then probably uh stop breaking the compatibility so the
00:49:41.079
probably we are left out from the the industry so that to keep up the the you
00:49:49.680
know the the keep up the situation so
00:49:55.400
that you have to change fast and sometimes break compatibility and then
00:50:01.119
then that does not mean that we are right and they are wrong and such but uh know the
00:50:09.319
surrounding situation surrounding industry is
00:50:15.200
different yeah I I agree that as I think as a language it's uh we don't have that
00:50:22.319
much pressure to change sometimes there are things like you know like there are
00:50:28.200
some like let's say like macro topics like oh a type system perhaps or just in
00:50:33.880
time compiler or LSP but those are more like you know those things they happen
00:50:40.000
over long periods of time and uh it affords you know uh it makes our life
00:50:47.319
easier uh which is great um but for example like we were just talking about complexity and I think like the rate of
00:50:55.040
change in rails is a source of complexity that trickles down uh I was
00:51:00.160
like part of Ra's team I was I built libraries and I worked on projects I
00:51:05.839
have been like on all three steps and you see like when you have those break
00:51:11.040
changes it trickles down to everybody to the community it's additional work that everybody along that chain now they have
00:51:18.839
to do which could be put elsewhere right but now you have to focus on that thing
00:51:25.440
so uh um yeah I I understand that you know uh it's a way faster moving space
00:51:33.559
but I would you know ideally I would try to find mechanisms and ways to
00:51:40.000
conciliate those two right like what is the best way to
00:51:45.400
evolve um but uh preserving uh many of
00:51:51.160
the the cold that is out there yeah that's that's a really hard balance too because you know the were contradictory
00:51:57.839
so many ways so we've been going for I don't know what almost an hour I guess and um
00:52:06.640
it's the weekend coming up so I don't want to hold people for too much longer um one interesting question that came
00:52:12.760
through though and maybe we make this the last one would be what are you excited about for the future
00:52:28.079
we're not excited yeah uh it's yeah it's it's no surprised I'm
00:52:35.160
excited about many things uh so I you know like the things that I talk
00:52:42.240
yesterday and so I'm always trying to find and you said this in your talk as
00:52:47.920
well I'm always trying to find new things to discover new things should get excited about and think of different
00:52:55.520
ways of do doing uh thinking about programming and reason about it and I think that is
00:53:02.720
going to be a forever source of excitement for me right so exploring
00:53:08.920
something in that direction is something that uh I am um really enjoying I know there's a lot
00:53:17.280
that we have been talking about Ai and we talked about uh we didn't talk about
00:53:22.880
but we are aware of like the the consequences of AI and how some of that can be positive how how that can be
00:53:29.960
negative I am more on the optimistic side of things I think yeah we are going to do a lot of things that we're not
00:53:36.680
going to like that are going to be bad but uh I am hopeful that the outcome is
00:53:42.119
going to be more positive than negative maybe I be naive you know um yeah and I think like even with
00:53:51.119
uh programming languages there is always like exciting things happening you mentioned UNIS own and I think for
00:53:58.839
example since rust came out um I think it kind of like
00:54:06.079
regardless if you enjoy rust or not it kind of like shook the foundation a
00:54:11.480
little bit of how how people were thinking about software software security and uh how to WR perform
00:54:19.760
software that uh it is maintainable and and I think like it's just the beginning
00:54:26.680
of that and we are going to continue seeing like um more programming languages like rust is the beginning
00:54:33.880
really and we're going to see more programming languages trying to blur blurry the lines of what it is a
00:54:40.119
lowlevel programming language and a high level at the same time and try to because today we pretty much consider them to be two separate things right you
00:54:47.079
do Rust and then or sorry you do Ruby or Elixir and if you want performance you
00:54:52.400
write C and rust and I think we'll start seeing more and more approaches that try
00:54:58.480
to uh you know close this Gap uh if it's
00:55:05.480
going to be good I don't know but I'm excited to see what you know maybe we prefer to keep them separate after all
00:55:11.720
but I think it's exciting to to see what is going to happen there and and how people are going to innovate on some of
00:55:19.119
those old problems uh for me the one thing is the
00:55:24.200
jit compor and jit comp this is the old technology like from '90s but uh
00:55:29.599
recently we had just compar to the uh the Ruby then uh it first started as the
00:55:38.160
you know kind of toy like compar but nowadays we have the more you know
00:55:44.160
realistic per the G compiler was the more realistic performance then they reimplemented the everything into into
00:55:52.039
in Rust and then they supported the the the why originally support the intera
00:55:59.000
only but uh now they support the the the arm arm 64 as well because of the you
00:56:06.319
know the the apple and the the most developers has you know the MacBook
00:56:14.000
then even the jit compil developers using Mac and then if they don't support
00:56:20.319
the arm architecture that they don't get the the the benefit of the jit compiler
00:56:25.359
even if they develop the jit compare itself then support the jit uh the arm
00:56:31.960
64 then start in lining and add many uh improve uh optimization and the improve
00:56:40.319
the performance that would be very nice and things and uh the jet compiler and
00:56:46.160
the the you know the Improvement of the jet compiler itself is kind of impressive things and it leads to the
00:56:53.200
future of the Ruby language uh the python Community tries to improve the uh
00:57:00.599
performance of the C Python and in the faster C python project and it makes uh
00:57:08.520
p c python performance five times fast in four years or something like that and
00:57:15.319
yeah that but uh most of the challenges they they are trying to accomplish
00:57:21.880
already done in Ruby there is wonderful things and and
00:57:27.359
but yeah after those after those imp Improvement uh Ru is not still not five
00:57:35.359
times faster so that I I suspect that that kind of that their effort would be
00:57:41.839
their result and anyway uh the the performance Improvement is one things
00:57:47.839
that we expect for to the Future the second thing is AI and I I made user of
00:57:55.000
AI but uh recently I tried the which one uh the the
00:58:03.520
generator I probably I don't remember but probably just GPT and to write test
00:58:09.599
for my my code and then yeah I confess I hate to write test you know it's it's
00:58:16.280
not dry you know I I like to write cold but uh I don't I don't want to write
00:58:23.000
write you know right it's Behavior here as a test so that if the AI
00:58:31.920
generate the test from my code that would be that would be nice then
00:58:37.920
and and uh I asked ask it to infer the
00:58:45.039
the type of the arguments and the return value and then it it
00:58:51.880
says correct answer of the expected types by by mer living the living code
00:58:59.559
so that if I write the code so that the AI can infer the the type of the uh the
00:59:09.480
type signatures without writing any uh type declaration from
00:59:16.760
human and then it can also write test so that yeah
00:59:23.039
unnown F part of the programming can be done by the AI I expect the future and
00:59:30.240
then the bad things is that some people try to uh make AI write their code that
00:59:39.079
is that is bad things because the if AI write a code and you write a test and
00:59:45.079
the types you you you participate in the non F part and the past the very crucial
00:59:53.720
part and interesting part the yeahi that is that is wrong I believe so but if you
01:00:00.920
write use if if you use the AI right that you can focus on the very fun and
01:00:07.760
The crucial part of the the programming and then the rest you can uh pass the
01:00:14.400
rest of the programming to thei then that then it enhance it enhances the joy
01:00:21.039
and productivity and the uh of the of the programming I think you
01:00:27.760
got to be careful there though because if you if you relegate AI to writing
01:00:33.559
tests then when they take over they're going to be mad at
01:00:39.480
you yeah so I got okay so I I I get to answer that question too even though I
01:00:45.079
asked it um because I've just been thinking about the future and every now
01:00:50.440
and then when I start to look at the future I get kind of like a bit distressed right it just looks like
01:00:57.000
chaos sometimes um and I was actually thinking this is going to sound like I'm just
01:01:02.559
playing to you guys but I'm not coming to a conference like this the biggest
01:01:08.920
thing I've taken out of this is just talking to everybody here and I feel
01:01:14.039
like I have probably talked to everybody here but talking to everybody here I feel a lot more confident about the
01:01:19.280
future than I did before I got here um because I'm dealing with a group of very
01:01:26.240
smart and motivated and interesting people so that made me
01:01:32.119
feel a lot more comfortable so thank you very much for
01:01:43.480
that so with that I am going to let you guys go and actually have a life
01:01:49.880
um I really really I mean I got so much to thank you guys for but just now thank
01:01:55.400
you for putting up with this and playing along
01:02:01.520
um yeah so let me just ask you please to thank matz and Jose for all they've
01:02:09.880
done thank you