SF Scala: Bruce Eckel, Rethinking Scala
Recording: SF Scala: Bruce Eckel, Rethinking Scala
okay so um also I've already put these slides up on SlideShare so if you can't see them for some reason um they're up there right now and we also have a videographer who I think was sponsored by typesafe so at some point you'll be able to search the web and find this video and let's see I think that's all we need to put here um Shameless plug this is the um my most recent book Atomic schola and you can get the first 25% in the just uh as a free download and that's in Kindle ePub PDF and HTML and I spent a lot of time figuring out how Kindle and UB worked and how to make it work with code listings and we had narrow code listings so you could actually hold it on your Kindle handheld device took a lot of effort um to make it work right um typ safe also has the first 50% as a PDF so um the other project that I've that I've been working on for the last number of years this is a picture of Mount Everest because I came across a book that said everybody should have their own personal Everest to climb my own personal Everest it turned out was that um the reason that I became a consultant is that I didn't want to work inside of a company because I had decided when I was in my teens that they were all horrible to work at and so I didn't want to have anything to do with them and then I got to this age and realized that maybe they wouldn't have to be so what I'm trying to do is figure out how do we make companies that are fun enough that even I would want to work with them and this has led me to a lot of interesting places including recently somebody turned me on to this book start with why and uh there's actually a TED Talk which is probably enough for you the book goes more into why businesses oh um one thing I wanted to say is there are seats around so if you guys there's like a bunch of them here so um if you guys don't want to stand which you know it's going to get boring um come up and grab seats um the Ted Talk is probably enough for you to get the idea and there's also a podcast that helps people figure the uh figure out you know what your why is so um it'll I I hope this will make sense why I'm going to start explaining this um it it turns out that well anyway let's oh wait a minute I have to back up a little so his premise is that most companies and individuals focus on what they're doing so people might say oh I'm a writer well a writer is what you put words on paper that's that's what it is that you're doing or that's how you're expressing yourself maybe I'm a writer of science fiction or travel or something like that the what is the science fiction and the travel the writing is how but why you're doing something isn't really expressed there and so the problem is it's really easy to lose track of what you know why you're doing things and kind of drift off into the weeds which I kind of felt like I had done and so I have been studying this and trying to figure out what my why is and so I initially came up with this idea that I what I was trying to do is break the chains around our brains that is nice rhymed um it fit with everything that I was doing I was going okay Okay the reason that I work with some of these programming languages is because the more primitive languages are holding us back and people get stuck into those and and then so they get chains around their brains and so I'm helping break those and the problem with that is that this is uh a how um that's that's how I'm doing well I don't know what is it that I'm what is it that I'm trying to achieve unstick something maybe or or but that's unstick what and and why am I trying to unstick things what what uh maybe what I'm really trying to do is find the Alternatives that are going to happen if you unstick wherever you're stuck on um little closer maybe trying to burst forward I'm trying to make us more productive perhaps so these are all happening like several days at a time I'll get an idea and I'll go yeah that's it that's it and then I'll think about it for a few days and then think no that's not really a why that's a what or that's a how so now I I actually made a painting about leverage uh a couple of years ago to to use in um in presentation so I think oh the fact that I did that maybe leverage has a lot to do with it I'm trying to help people grain gain greater leverage to try and move the world I I still don't know for sure um but that's the path I'm going down I'm trying to figure these things out and the reason that I said that is at the conference in Budapest that I was at in a couple a couple of weeks ago I created a presentation for them which was quite adequate it was called what makes a good development process and as I was giving the presentation um this guy I met and spent a bunch of time there with Dan North some of you may have uh encountered him he gave a presentation right before mine and it was really he was really connected and heartfelt and you know I could see oh that's what it means to be connected with the material that you're giving so then I get got up and gave mine and I wasn't I don't know I didn't really care about it I had created the material because I thought it fit the conference I was doing it for the conference and not because it came from the heart so I think the presentation I'm about to give you is the one that I should have given to them um and I would probably have titled it do languages matter and the answer is of course they matter I've spent a lot of my time years of my life I was on the C++ standards committee for eight years I've been writing books about languages oh yeah of course they matter maybe the question is do they still matter as much or to put it in terms of action does arguing about languages still matter yeah I know that sounds funny but really uh that's essentially a lot of what I've done is tried to I mean I don't really like full you know full pitched arguments but essentially what I've tried to do is argue for better things in software development and I think what I think what this comes down to is at the beginning arguing about languages was worth the effort and then we've slowly gotten to the point where maybe we're not gaining as much and if what I want is Big leverage that suggests that if I'm in this area that I'm I've gotten into the wrong Arena so back when I started there was a lot of people still doing Assembly Language and this idea of moving to this C language was kind of ridiculous because of all the inefficiencies that the compiler would produce over assembly we have seriously people argued this way and processors were slower so you could make a case for it but the productivity increased by moving to C so you didn't have to do all of that stuff by hand every time was huge and so yes that was certainly worth arguing for uh when we moved from C to C++ uh one of the things that happened here was it forced the existing C to be more standardized because pre ancc was kind of hacky and uh it was really designed to be a portable Assembly Language and so when C++ was coming along that forced some features into c um it hadn't the ANC process hadn't happened at that time and some features went from C++ to C and improved the language and um anyway made it a lot better but then with C++ we have um we're able to think about much higher level data structures and so again you know we're still on this part of the curve and Java comes along and yes Java had a lot of um questionable decisions but uh some of the things that it brought along were the AUD of virtual machines and garbage collection which when Java first appeared were still ridiculous Concepts that could never be efficient enough and there was you can see the pattern of argument it's like oh well it'll never be efficient enough and of course now we've had enough time to to not really think about the the efficiency of virtual machines and garbage collection it's basically proven we've had faster and faster hardware and we realize yeah our time is much better spent in um using a higher level language than it is chasing some of the bugs that happened without this kind of stuff all right so yeah this is all still good then at some point we started having an argument and and depends on you know how much you've followed my work over the time but you'll realize that yeah I started some of these arguments or I was at the beginning of some of these arguments I I don't know I don't know if I started you know that's I probably picked up on them and Amplified them or whatever but so here we have this statically typed versus dynamically typed languages and initially it was just like oh well yeah there's no way that you can possibly create a serious project using a dynamic language but time has passed and people have created big complex projects using things like Python and Ruby and other uh Dynamic languages and so it's harder and harder to argue that but initially it was just so obvious that oh well you could never use these things for serious work um and and this is an interesting change because I think we're we're kind of moving towards that part of it and by that I mean because instead of arguing about it we actually just do the experiment and then another argument that I seem to get involved with early I suggested that maybe checked exceptions weren't the best invention in the world world and oh man there was a lot of lot of fur over that one um yeah I I really wasn't trolling but it seemed that way I was trying to make reasoned arguments and then and then we get to things like concurrency and parallelism and at the argument that I made in that case was that you could you could have locks and threads at the very small level like the operating system level where you have to be very very careful to get it right or you're going to blow something up but for whole systems locks and threads are basically impossible to get right and when I first started suggesting this I always had people who would come up and say well you can't get it right but I I can do it you know and I'm thinking I don't ever want to work on a project with you um and and most of the languages that we're seeing being developed now like uh go and rust and you know a number of languages like that are moving more and more towards CSP um communicating sequential processes because that's the easiest model it's the one that you can teach like if you were teaching a seminar and go at the end of the week you could be teaching well actually all through you could be teaching okay here's how to do concurrency and people would be able to pick it up and they wouldn't have to to struggle with the kinds of things that we had to with Java with locks and threads which was an advanced topic that only very um you know special people were able to deal with so um we're moving and then of course now we have the oo versus functional revisiting that and I don't know I I think this is a situation where we're just learning by actually trying things out and one of the things that came up the the Java posi Roundup we just had our eth conference we've been holding it for eight years and we realized that for like the last 3 years nobody's really been talking about Java so the Java posy is kind of like closing their doors and we're going to change the name of the Roundup to something um more appropriate um because we realized oh you know we're we're just not talking about Java anymore so that's that's kind of another clue in the end it's not really a big deal to change languages like for example I had a Consulting client which had they had been using Java and having a lot of struggle with it and um but they couldn't imagine changing because they had all this investment or whatever and so I came in and showed them how because it was more appropriate for them how they could be much more productive in Python but I had to prove it by being there and they said well we have this thing we think it'll take a couple of months and I might be able to write it in a couple of days instead and after a while they started looking at this going yeah this looks like more fun now the last time I talked to them they had spontaneously decided to to change again to go which is for them a more appropriate choice but they didn't need any help doing that they had figured it out and I think a lot of people are more comfortable changing languages whereas before it used to be this big deal oh no we you know the changing the language would be a fundamental shift in the in the whole meaning of the company um the other thing is combining languages uh I ran into an erlang person at the conf and he was talking about uh how easy it is for earling to interface with other languages I haven't done this but I want to experiment with it we're also very used to rest apis uh we're we're used to talking to other systems now so it's a lot more comfortable with us and and uh for uis you know this is becoming the the global standard for UI so we're we're really getting more and more comfortable with using multiple languages and multiple systems and having them communicate with each other so I think um for me what I've done for a good portion of my professional life which is argued to consider new languages that no longer really fits my why because I don't think we're stuck there anymore and I don't think that uh is the biggest uh leverage that we can get because now people can just experiment and that's what they do they try things out and they go oh yeah this works for me and it doesn't it does you you don't really have to argue about it the reason that I'm telling you all of this is to give you some context in particular I'm not going to I'm not attacking your favorite language um I'm just asking whether we can make development a lot better because that's what I do I mean I don't know exactly what I do I don't completely know my why yet but I do know consistently that's what I've always done how can we do this more how can we get greater leverage that's um yeah so um so I I kind of look at things and I jiggle them to see is maybe there's some better way to do this um bill says that I hang out with early adopters and that causes a that affects my perspective that's probably true um but anyway so my main question that I want to ask is that yes people do seem to be much more productive in schola versus Java I I can see all the reasons for that um but is that the best Paradigm or are we falling into yet another hole could could is there some other way to get more productivity and most of these are just questions that I'm asking I don't necessarily have answers to this and I know there's been a lot of fur there's some people have left type safe and have talked about it and the the Scala um news groups and everything always have people who are complaining about this or that and uh that's not really what I'm talking about here but to me for to justify changing from one language to another you need to have some multiplication of productivity it can't just be yeah this is 50% better you know 20% better whatever I think to justify the effort you have to be able to multiply the productivity over the Alternatives and Scola does that yeah it does and um one of the cool things is that it maintains two-way transparency with Java and so that gives you a lot of Lage um from both ends you can use existing Java libraries and and if you want to create something amazing with skull and call it call it from Java or provide it to Java programmers all that works really well and um this is a big one not grid light gridlocked by backwards compatibility with Java Java I think immediately made a big mistake that um other languages have tried not to duplicate which is to say regardless of what errors we've made in the language design and the library design they're cast in stone and can't change and so um that has I think really held it back and that's caused a lot of productivity problems but I do have an interesting question I think without the constraint that well we want to be compatible with Java we want to work on the jvm all those things is schola still the best choice and I'm I'm just you know wondering about that um one of the things that I certainly encountered when waiting into the scholar world is community and I've had a lot of experience with I've spent a lot of time with python and their community and I would say that it may be the most friendly and welcoming of all communities that I am aware of for example despite the Kur fuffle that happened at the python conference a couple of years ago there's about 20% women which is higher than at least any conference that I'm aware of and they're not just showing up and being passive they're actively involved they're doing things they're making the conference happen they're having groups within the conference so I think that's a an important indicator of how friendly that Community is Scola on the other hand um those of you who know what League of Legends is have ever played the game I only know about it because my friend Barry was a director there for a while and now he is moved to um the company that makes World of Warcraft which has despite their name a much friendlier uh environment so League of Legends has this reputation of being the meanest game in the game World in other words people in that Community are really mean to each other and the riot knows about this and it's tried to do it's done some fascinating experiments to to get people to be nicer to each other um things that anthropologists and sociologists would love love to uh be involved in because at any time you've got maybe you know 300 or 400,000 people online and you can flip a bit and see Behavior changes among them and that's the kind of things that they've been doing really one one switch they would they flipped and it just changed the default setting and suddenly people were behaving nicer to each other it's it's kind of mind-blowing stuff well anyway this for whatever reason this behavior is the same kind of thing that we seem to have in The Scholar Community people are just mean and um I've been around the computer World long enough to go oh yeah that happens who cares um but so when I had to start asking questions for the book uh I accidentally stumbled into some Quagmire of of nasty people and they started saying mean things and I just went to another news group and asked questions I I don't know how many times you know changed once or twice pretty soon I found a news group that was friendly enough and you know they answered my questions and things but in Python there's always been Guido has always had this um thing that he says is be gentle on the internet the person who's asking the question might be only 14 and he wants he's always tried to create that culture and I think that's super important and we have not had that and culture starts kind of at the very beginning so it's it's something that hopefully it's not so far out of control now that it can't be reigned in um and I heard about this secondhand apparently there was some kind of rage over the title of atomic Scala there were people are going well if it has the word Atomic in it it should be about you know locks and threads and concurrency and stuff and you know you're not supposed to so for and for those of you who don't know the reason for the book title was that this is the first time that I've tried to create a book that was actually for well that could be used for beginners I understand I've had a lot of people tell me that both thinking in Java and thinking in C++ and I've written books before that but these are the first ones that I'd say I had kind of gotten The Knack of writing books um lots of people said oh yeah that was the book I learned from and I I said well that wasn't the intent the intent was for professional programmers so Diane and I wanted to make this book something that could be used for both beginners and professional programmers and so we did a lot of stuff for that but one of the things that we tried to do was because of my own experience reading books I discovered that I get this little endorphin bump every time I reach the end of a chapter it feels like an accomplishment somehow so the idea is well you make the chapters really small and you get that a lot you get that sense of accomplishment I know it sounds silly but it really you know I I think it makes a big difference especially when you're dealing with people who are just learning to program and a language as complex as scholar so the idea was to break the chapters down so they were so small that they couldn't be further divided thus the name Adam um from the from the original Greek and um so the chapters are only like a few pages long anyway that's that's where that came from um one of the things that came up at this conference in Budapest was uh Dan North said he he put it in an interesting way he said scull is the most unopinionated language that I've ever seen and by that he meant that there's like tons of different ways to do things and then another speaker said you can do things in so many different ways that each team or company has to develop its own culture which means that the code that you're going to look at is going to look different depend depending on from one culture to another and because language is about communication subcultures produce cognitive load it just means that when you're reading somebody else's code you have to spend a fair amount of time unraveling it and figuring out what it is that they meant and that well um so there's a price let's let's just say there's a price to be paid for that um and on the other hand look at the Go language even with that they have decided what standard code formatting looks like to remove eliminate the whole code formatting arguments they go we will have as part of the delivery as part of the package there will be this program called go format gum and uh it will format your go code in the standard way and that way when you're looking at go code you don't know if it's yours or somebody else's it all looks the same that's a good thing so um yeah so anyway I mean I I think the I think the Scola experiment is great it's just it it has these issues like the jumping complexity well when we were working on C++ the original term the actually the original name for C++ was C with classes so the idea was just to add object-oriented classes on top of c and then bunch of other things got added on top of it and um that became inappropriate but one of the benefits of SE withth classes is that you could go and this is the reason a lot of people say all the reason for the complexity of C++ was because the people who designed it were stupid and didn't know what they were doing no I I spent a lot of time with those people um and they're totally I mean they were really smart the problem was that the constraint was that you had to be able to program in C inside of C++ and that added all kinds of difficult complexities which caused misunderstanding uh for decades after uh including uh Gosling's decision to say well uh operator overloading is is uh complicated and difficult it's complicated and difficult in C++ yes because it had to be backwards compatible with C but as we've seen in Scala and Python and Ruby and uh you know lots of other languages uh operator overloading doesn't have to be that way if you got a garbage collector it makes it quite easy um anyway um but that was one of those decisions that because C because it looked complicated in C++ goling and and the team decided oh well it's too complicated to put in Java um the thing is Scola isn't Java with anything it's really different from java so you don't necess with with C++ the intent was to draw C programmers into a larger world with Scala the the familiarity is that basically it's running on the virtual machine and you can talk to Java but the language is pretty different and so it's a it's a big jump in complexity so there isn't really an advantage in in kn knowing Java if you're moving to schola and so there's a there's an interesting question do we even care about Java programmers or are we only doing this to work with existing Java libraries and the ubiquity of the jvm and I think this is a legitimate question because if we're not one of the things that we encountered was that virtually every Java book out there with no I think even yours was is the same case sorry every scholar book out there said okay so here's how you do it in Java and here's how we do it in schola so they all assume that you have this understanding of java which we didn't want to do um we wanted to be able to take somebody from being a non-programmer to a programmer uh a dedicated person not you know this isn't 24 hours or made simple or anything like that but um but I think this is a legitimate question do the are we really trying to bring people from java to schola or from other languages to schola or you know what what is the point even though all of the books out there do assume Java knowledge um and you know the bottom line is what is the why of Scola what what is its primary motivation one of the there was this fellow at at this conference in Budapest who was um he was telling me he he's a scholar programmer but he's he really likes closure and he what he made an interesting observation which is that he liked using closure libraries rather than scholar Frameworks or or Frameworks in general I think is what he said and so it occurred to me that yeah libraries always seem easier to use than Frameworks it seems like libraries have like one dimension of complexity and Frameworks seem like they might have two or three dimensions it my perception is that it's always been harder to to get used to a framework and you have to kind of figure out one of the difficulties about a framework is you don't know ahead of time uh are you going to run into a wall um what's the U benefit versus the cost of complexity and once I get comfortable with the framework how hard is it to change so um I don't know it's an interesting I'm just trying to make an observation here to to generate uh discussion there are also these other language options in other words we got skull over here is that is that the best choice should we look at maybe some of these other languages one of the examples I want to try is the thing that I uh recently learned about is start with an erlang controller which does concurrency and parallelism very well and use uh operations coded in Python and other languages and just kind of see how quickly the speaker was making an argument for being able to very quickly put together very robust systems that way I want to try that and then the rust language I was at um Mozilla talking to them in the last few months and ended up spending a lot of time discussing rust and then um dick wall and I at the end of the Java posi Roundup we spent half a day exploring rust and I thought rust was like some clone of go but actually it's quite different it draws a lot of features from other languages their argument is that they only use proven features and um but things like they have pattern matching that looks very similar to what Scola does it's not it's not a limited pattern matching is quite powerful um it's native compilation has a garbage collector the goal of rust is to create a language to create the next version of the browser in so that it can be really fast and robust and everything and so they're they're starting with the language but um it's I think it's helpful to have a goal like that when you're when you're creating a language because it kind of keeps you practical and anyway I I think there's a lot of possibilities with rust and I want to explore it further um so another we we had our first schola summit in Crested but this is the mountain in the summertime it's quite beautiful um and you can go to scholar summit.com to see when the next one is the next one because of Bill who's always saying oh can't we do things when the leaves might change it's hard to know exactly when the leaves are going to change in Crest aute but but I said okay well you know we'll move it a little forward so it's in September the leaves might be changing you you can never really tell but uh the weather is uh fantastic in in uh up it's this is at 9,000 fet in the Rockies anyway uh in the first scholar Summit a couple of the things that came up uh James Ward and I had been trying to figure out monads for I don't know a year and uh you those of you who' tried to do this know how it works you find an article or a video or something where the guy says Ah nobody else can explain monads but I can then they go on to try and explain him and you go I still don't get it in fact um I was at this at this conference I was talking to Dan North and he goes oh he says oh I have the perfect explanation for monads it involves school buses and old ladies and and I said okay I want to hear this and then for some reason we never uh the subject never came up again and so I still wonder what how is he going to explain that um so anyway uh I don't remember who said this um it was I think it was one of the types saafe guys and they said oh you don't actually need to understand mon ANS you can just use the language and because all this time I was thinking got to understand monads or else I won't be able to use it properly but no apparently you don't and the other the other thing the point that came up which was kind of mind-blowing was this idea that Scola is taking functional and oo which are two really different paradigms and kind of mashing them together and initially I was looking at this going yeah sure there's a they they fit together somehow but they actually don't fit together very well they this it's a collision and there's some sharp Corners here and there and what and and it was just really useful to have somebody say that because you you step back and you go oh yes this is why this thing doesn't fit here and this is why this doesn't fit here and so why sometimes sometimes you can have the O stuff and the functional stuff kind of work together but a lot of the time you have to kind of treat them as separate creatures because they don't really work well together and it helped clarify a lot of things so those were two things that came up so these conferences that I hold are called Open Spaces conferences which means that they're not pre-defined we get together and we have discussions we don't have speakers and so a lot of really interesting things come up with them and then we go outside and Hike um or ride mountain bikes or do outdoor things and it turns out that a lot of really interesting discussions happen during those too so um anyway um so uh last thing I wanted to point out was this is just here say of course it might have been from Bill I don't know anyway so schola 3 is coming along and it might make some significant nonb backwards compatible changes to the language which would probably be put to there to fix some important issues it could alienate some users I as Bill observed I hang out with early adopters I've always been somebody to push for changes rather than to um you know stick with the old stuff so my inclination is and and I heard this actually this came from strup working on the C++ committee he said you know we think that if we make this change now it's going to uh there's a lot of people complaining about it but he says right now we have only a small fraction of the users and if we don't make this change we're basically uh hurting the much larger portion of users that will adopt the language in the future and so I think it really is important to to per you know perhaps this is one of the better things that can happen and it might fix a bunch of those issues that I'm talking about here so re restating my question could a different Paradigm give us a lot more productivity or are we sticking ourselves in yet another box that we're going to be angry about and that's all I wanted to say um but um if you have questions or comments and you're not too hot from being packed into a room we can we can do that okay all right okay oh yes do you have any thoughts I was I was ined by your communi observation give me any thoughts about what genders a particular style is there something transing to a language itself that influences their Community or is it just some Randomness question yes repeat the question um yeah okay no I mean I'm sorry I didn't mean you repeat the question me repeat the question okay so wow so this was this was really a question about sociology um does the language C influence the community Community does the community influence the language are they completely separate um I guess well this is slightly oh okay I guess the experience that I've had oh that that's an amazing question um because my two deepest experiences have been with C+ I okay I I I guess I've spent a lot of time with the language designers of both C++ and python um I don't really know if goling knows that I exist or not so I I've really never spent any time with him and I don't know so my exposure is to the people who kind of lead and create the languages and um but see in that case you could argue that the C++ Community was a little crusty and so maybe even though I thought STW strip was well yeah except that I don't see the thing is I don't no he he wow I I think you've just described a research topic yeah I I'm I'm just going to skip that question yes if you say there are sharp Corners between o and functional I mean pretty much he just said that SC has a lot of problem because they're trying to mix this right yeah so can you talk a little bit about what do Corners um yeah okay so I talked about the sharp Corners between um o and functional because is well yeah exactly well no that was the that was the point that was brought up at the conference is that it was more of a uh just like it was okay not to understand monads it was okay to see these sharp Corners I think the thing is we were going in think well I was going in thinking oh um Martin has you know made this kind of seamless language and every time that I would see uh one of these kind of sharp corner difficulty things I was assuming that it was some misunderstanding on my part and what uh whoever it was who who pointed this out made me realize oh it's not always me it's not always my um it's not always my misunderstanding there are times when you simply don't want to take objects and try and use them in functional ways um but examples I think you you said uh what are examples of that I'm just saying that uh if we are here and talk about Scala right and you're saying there's a problem there I think you should talk a little bit what are those sharp Corners because I think that's yes you're right you're right that is a completely legitimate thing to ask for why do you have a observation well is it in the real world do you find more more people jumping into this uh not respecting um like immutability immutability rules when when they try to apply what they know about Java in Scola or that actually sounds like a good example yeah I mean cuz you're you're creating objects that aren't immutable and trying to pass them through functional things which are expecting immutability that's a good example I don't I that's the kind of thing that I would probably have to think about longer to prepare a good I mean I I think that could be a whole presentation I I agree that because in my opinion the functional stuff is much better organized than the whole stuff like you talking about before for example like a famous functional person said monad is is aun in a category Theory right so do say that again am monad is what maybe he's got it you you don't need to talk about grand grand grandmothers and Bops and stuff like that like a mon is an end funter in the category Theory cor right okay so which is something pretty precisely defined stri defining here right uh so when you try to map that onto the o kind of R from that point I think that's where it comes the problem so Scala trying to map all of that functionality functional stuff on Java in particular that's what it struggles with right so in my opinion that's the the toall order Scala has to to fit oh it is a tall order I agree what's your experience with that from what you're developing so far like where do you see the I don't know I think that's something that I mean I'm I'm kind of wondering if schola 3 might try and address some of those things more my man Bill might be uh might be a better uh he say because keep in mind that the book that Diane and I wrote was an introductory book that only went so far whereas he had he wrote this really thick yeah Martini doesn't really like the H way of doing things is trying to actually Define something in between lens of and functional which is different um and uh he really made the for expression so you could Implement you can use it to do monatic things but without knowing the word monad and I think that's about as far as he thinks that's what the scholars designed to do is pretty much that so all these things that they do it spell as or not in the language or in the library because he doesn't really to Direction so um people coming from house school who really like that they'll really be attracted to skull Zed because it it does sort of put a layer on top of what skull and scull is uh type system is expressive enough to do all that kind of stuff but the syntax is kind of clunky because it wasn't really designed to that wasn't really the intent uh but if you really want to do that kind of programming on the JPM this is the the best way to do it to me right so the equivalent would be like Prett much like Bruce was saying is like explaining advanc math stuff by using the Grand and bus stops right so it just doesn't work yes question about more productive ja uh productivity contains from three sides first is creation supporting and time so uh where what exact stage developer because you also stress to support langage write one different style it's very well scers don't understand each other why they so mean because somebody it could be nobody could understand it because it's so short and uh it's there language behind it so you to language where where okay yeah you know that's an interesting you okay let me see if I can can rephrase you said productivity comes from the creation of the code the maintenance of the code and then the runtime performance okay right and then you made uh basically a blog post of all the issues I I think what you just said was a good comment I um I mean I I I agree those are all really good observations and I don't know that I can makes our foram it's name check so you can read very easily English T right so it's also possible it's different it's defin good from functional because your mind is changing but still you suffer from language created it know return to this Yan the Pearl phenomenon right yeah just Y no I think these are all no those are all excellent observations yes John can you talk about your process of thinking about someone who had never programmed before and what they needed to learn first and why yeah um okay so the question is what what was my process of dealing with somebody you'd never programmed before and how to bring them in we um well I I guess I've had I've had some experience teaching but it's usually been people who are already programmers so I think we had to go back and think well you know what are our experience well Diane had two small children precocious but but young and um kind of interacting with non-programmer types kind of seeing this the sort of problems that they have um the one thing that I mentioned which was like give them small perks as they go on give them a sense of accomplishment that's I took a writing Workshop re it was just a like a half day thing recently and one of the things that the guy did was gave everybody little writing exercises and then people would read what they had written and then what other people in the room could do is come up with something that to say that they liked about the writing in other words it wasn't a critique it was really you the value of encouragement I think is really important to keep people moving forward because I guess the thing that I've seen most is when people can't understand something they get stuck and then they tend to want to give up the whole thing you know it's like oh this is too hard I'm too stupid and so the our biggest Focus was was on that and ordering so we wanted to give people something where okay you know do something simple that you already know about you know arithmetic or whatever uh and now do some exercises with that and now we move forward and each of the pages is I mean each of the chapters are only you know two three four pages long so they would get that sense of accomplishment um and then we also decided to just work with the subset of the language originally we were thinking that we would just focus on the object-oriented aspects of Scola but then it was it just became really hard to keep the functional stuff out and it it also became really kind of fascinating to put that in but I think we were able to we had to choose the things that were um what we thought were accessible but a lot of it was just uh you know we think this is reasonable we think this is too hard the very last chapter I couldn't resist putting in something about type classes because um we had enough tools to be able to show it it was the very last chapter so that if people didn't understand it it wouldn't prevent them from moving forward but I felt like it was so cool and something that I had struggled with with other languages and it came out so cleanly that I had to put it in so that was probably my one uh concession to um something that might be a little too complex but in the end maybe not uh yes uh in your experience do you find that advanced programming languages like Scola and mean Advanced I mean newer do they make architectural patterns as described in the gang of four book obsolete well I thought yeah so the question is um do Advanced programming languages make architectural design patterns like the those in the gang of four obsolete um I feel like there was somebody who observed that a design pattern expresses or indicates a language failing and I I really that really resonated with me because the gang of four was really designed around C++ predominantly and so there when you move to other languages there's a lot of things that you go wow we don't really need these design pattern you know some of these design patterns just don't really fit with some of these languages you realize oh you know that's a pretty good indicator that that that kind of thing happens so yeah um Let me let me you me the point that it's maybe less productive to argue about languages these days arguing about them yeah yeah because people can just sort of try them to experiment and I agree but I wonder why now and not before why is it easier now for people to do that I think it's cultural I uh I think it's a cultural change whereas before it just seemed like you you know such a big deal learn a language and you invested in it was like a was like a spoken language and it required much effort but then people started saying oh yeah just to keep on top of things you should learn a new language every year or something the the the the who is Dave and Andy Hunt were um talking like that and I think it's just become a kind of thing well it's like yeah we learn tools we learn languages we learn Frameworks and libraries and things language has has kind of demoted from being this big important thing to um just one of our set of tools yes um based on your experience of Des languages uh you Mee all these laries who are designing languages uh he travels uh could you give us your thoughts on two things one uh what is the state of language design currently and then two uh in the next 3 five years where are languages going where will we be okay so what's the state of language design and where are we going to be in three to five years with languages huh wow um that's another uh that's another whole presentation I don't even know if I'm qualified to to uh to to talk about that um H language design I don't know it just it seems like it's getting more sophisticated and I think it's just a matter of you know people like for example being able to build on top of a virtual machine gives tremendous power so we're starting to see people be perhaps more experimental and try out things and we're seeing you know Resurgence of things like closure uh and you know variation of lisp which is apparently supposed to have a lot of other benefits that I haven't looked into yet um and some of these other languages like rust it it seems like it's gotten easier to develop reasonable languages in maybe it's just because of our body of knowledge or experience or something like that um where do I see us in 3 to five years um it seems like things are going faster so we're starting to see see like the uptake of go and there's a lot of interest in Rust and there's you know a number of other languages which we're starting to see being um um people are starting to use more quickly and so I think perhaps there's going to be kind of more of an acceleration along those lines whereas you know way back when it was just you just felt like yeah you had to choose your language and stick with it maybe throughout your whole career so yeah um yes maybe slightly related is are those language developments are more philosophical or actually Teran well maybe I mean maybe in maybe in the case of Scala there is a certain philosophical bent to it because of his emphasis on types and is looking at you know let's take the object-oriented and functional paradigms and put them together and see what happens um whereas when you look at well for example rust seems like it's really practical they're saying they're saying we only want to include features that we've seen successfully used in other languages and we're trying to build a complex result with this language and so it it needs to be practical and and go also I think has that practicality into it so you probably yeah probably both those things are those I mean I mean unit say it's for uh data analyst you know are language or geared toward particular type of problems or type yeah you know situation or are those problems are evolving or how does that influence yeah um yeah I mean that's an interest I mean r is an interesting example because it's like you tuned to par particular thing you could you could probably argue that um Pearl was was originally designed for for a similar Focus um H special purpose languages and of course we've seen them for like scientific stuff um the what's that uh somebody help me out here what's what's the mat lab you know mat lab has you know that's kind of almost a language and then there's a there's an open source version of that and there's um yeah maybe it's a maybe maybe what we're seeing is kind of a smearing a kind of blending because sometimes you see languages python gets adapted a lot to solve special purpose problems and then sometimes you see languages created specifically to solve those kinds of problems that's I it's it's like one big ongoing experiment and we try stuff and we see what works which is I think the way we should be rather than saying oh I've chosen language and I never want to see it change it's a market mechanism or something yeah yeah I think you could look at it that way oh yes Bruce I have a one I have a comment on the community right so you say some I'm sorry to hear that so I actually started learning schola using IRC and the best way to learn it is just ask questions on IRC and you know five years ago I think mostly folks are really friendly however what happened in the last few years so we have now kind of functional tribe which are called cryptocal which are kind of you know it's hard to get a job using hcal but you actually can get a job using scolar and a lot of them by the way so U anybody needs a job using scholar just ask me I can put you in touch with other people who need developers uh so the I think what happened is uh there is all this Advanced tribe and recently we came the similar uh nure like we used but we have SC tribes we have you know new tribes which are Java s who have actually middle drives which maybe like Ruby people actually are more advanced than Java people in terms of FP and then we have this H skill way so we have fragmentation the high skill people are kind of on the outward trajectory so they're going into in dependent types they want something really really functional or AA and things like that so my question to you so so like how do we keep this community together how do we manage the extreme and like stick to the middle how do we kind of make the whole thing harmonious do you have any ideas based on what you've seen well I guess i' the most success that I've I can't repeat that question um it's too long um the most success I've seen has usually had like a community leader person somehow and like somebody like dick wall who's just the nicest guy and he wants everybody to be nice to each other and he's you know he's a good portion he's a good part of the scholar community so somebody like that um to to kind of try and lead the niceness faction and in Python this happened well right from the top because quido always wanted everybody to be nice to each other and so that's one way but my own research in the whole Reinventing business world has been away from the idea of leadership and more into flat organiz self-organized um organizations and so I'm thinking well is there a way to I I guess you could say the way Netflix structures its culture is that they're very careful about who comes into the fold and maybe that's a in a sense what Guido did with the python Community because he had the core python team it wasn't just him it was the team and I've hung out with those guys and they're all just super nice the nicest people you'd ever want to hang out with and so they in turn are a huge influence on the rest of the community so it isn't just Guido by himself so perhaps what you need is a is a you know a core group and that's the group that you're able to in a sense select for culture so I don't know maybe that's a possible approach yeah back on the on the on the multiple city of the languages I to also work we learn things from Javas that we use another language and what are you advice of anti development to to be more fluent in changing language and adapting you mean changing from completely other languages to make to be more able to change language I think one of them is to make I don't know which are driven by data so that's easy to say oh yeah here is the data and we can do these test in Java or in Scala and it's more L ready you don't have to okay what what are the pattern that you encourage to be ready to swap to language so are you thinking well so the question is what what sort of patterns or approaches are useful to try and um change from one language not necessarily Java right right okay any other language to to scholar I assume you're talking about or just any M yeah I I think I I always feel like you've got to look at motivation and and go from there in other words if and and I think you have to evaluate uh one of the problems that I found with a lot of Consulting companies or Consultants is the the kind of carpet bombing approach driveby they just they come in and they say well okay everything you're doing is wrong and stop doing that and do it my way and that has no effect at all and so what you really need to do you know as soon as they're gone you're going well what a fun guy that was um so but what you really I think what you really have to do is is understand the group that you're talking about and where they are and what they're ready to do and so you know you look at them and you say well are you like are they even Mo are they even possible to motivate to move to another language or are they just going to resist you the whole way and you have to kind of go in and get a feel for that and understand that because if they're not able to do that then you should spend your time doing something else I mean maybe well one of the things that um they talked about in the pragmatic programmer was that if you're not doing uh testing and Version Control and automation then all the rest of the stuff that you might want to do is is kind of meaningless you have to start with those and so and when you're working with a group that maybe isn't doing any of those you want to introduce those things one at a time so it might be that the I I'd say when coming from java Scala is an easier transition because you can say well um maybe we'll bring in something that was written in schola that does something something amazing that you can call from java and kind of begin to motivate that way you know people start getting curious wow this thing is amazing and uh it seems like it would have taken a huge amount of effort to write it in Java I wonder what's underneath the covers there but it I think the motivation is going to be different depending on the company the group the culture that you're working with and so I don't know that we're going to be able to come up with anything Universal we tried with our book we tried to make one aspect of that transition um as easy as we could imagine so people might be able to who are thinking about it might be able to go through and Sample it and by the time they reach the end they discover well yes I'd like to know more or no this this language really isn't for me so any else yes can you talk more about the mechanics of switching languages I thinking sort of java and SC is a special case where they're interoperable kind of but if you have a legacy code base that's written in one language you either have to rewrite it or you need integration points which can change the architecture how do you go about addes a clean way okay so what are the what are the what are the issues around changing languages especially when you're sticking with or or you have yeah see for example this one Consulting client I had they had a lot of code written in Java um problem was that it also had a lot of coding issues that probably would have taken longer to go in and root those out than it would be to at least for some of it to to just write clean code in their case clean code in Python um I guess uh I guess I kind of have to fall back on the same answer that I just gave the well it's a joke you know whenever you ask a consultant a question the answer is it depends and unfortun well and I think that is that's a that's the right answer for um these situations because you really have to it would be lovely I know we're computer programmers and we like to think of things in terms of absolutes and ones and zeros and everything is deterministic but um it really ends up being you have to look at the group that you're working with and the problems that you're working with and sometimes the answer is no sometimes the answer is you shouldn't change because the cost and the struggle and the time and whatever involved just doesn't justify making that change um or maybe the answer is okay we do the little experiment over here with a with a group of people and they come back and Report uh pluses and minuses um and and possibly teach the others draw draw the others in rather than it's I think it's much better to do that than to have outside sources uh teaching it because then it's somebody within your community there's there's a number of different approaches that you can use to this but the ultimate answer is well it kind of depends on what your situation is and you really do have to kind of look at these things and say is this the right thing to do or and if it is um what rate do we move at do we try and jump all at once do we jump partially um do we uh do some little projects in this while leaving the rest of it in our uh existing code base all those things are possibilities U so it makes sense it depends on the case but maybe uh can you talk more about that particular case is a case study like was it a a large Java code base that they wanted it was pretty significant they didn't that wasn't their initial thought initially they they wanted to like fix the Java codebase um but there were some things that could be so quickly solved using a different language that basically I was just doing it as a proof of concept and you know here's how to solve this problem um here's a proof and then if you want to you can take the algorithm and then go back and code it in Java I wasn't trying to force them to move into this new language I was simply saying well here's an easy way to think about the problem we can do a prototype of it using this language where we can do it very rapidly and then if you want to do it in Java you can but that they decided that they liked the speed and the clarity of what we were able to do in um in Python and eventually moved over to it so yes there was an example of yeah I couldn't have planned that I wasn't even try I was simply trying to give whatever help I could and um and they ended up deciding well you know we're going to be more productive this way so yes he um earlier in the presentation you sort of raised the idea of sort of SC scal falling into a pit and then towards the end of sort of us getting schol devel getting sort of Trapped in a box based on the development of language is that purely hypothetical warning or do you have specific Notions of areas that maybe we're already getting stuck in that that are going to be P points I guess the biggest one that I can think of would be where we where we might be stuck already is just the um the variable ways of expressing things you you could have the same piece of code you could understand this piece of code you see this and you have no idea what it says and you have to go and unravel it I would say that could be um that might be the biggest problem that we encounter because people often I mean Pearl used to have OB obfuscated code coding contests to say how and I mean did we did this I didn't somebody do this in Scola as well yeah having obscure Scola sure for everything right okay so fine but um but really when you when you have such a wide variety of expressiveness um and no culture behind it to say yeah this is the way we do things then it seems like that could be that could be one of the largest potential problems that I see off the top of my head yeah yes so when you did this transition between ja and did you consider so that you don't have yeah we did we we looked at that um well I think the reason that we we didn't really look at it in much depth is that the intent was wasn't to move from java to python it was just to prototype in Python and it the thing just grew legs of its own so the logical thing might have been to if if we had been thinking that that's where we were going the logical thing would have been to look at jython actually I think at one point I put them in touch with Jim Baker who was the um maintainer at the time but uh I don't know for some reason decided they decided they didn't want to go that way so all right uh maybe one more question if there is one or yes yeah so for me when I used Java um it's actually okay because of if I didn't have I would be like so how important do you think tooling is to language adoption and like do you think that should be a bigger area of focus to some extent I almost see it as more than the actual languages themselves but yeah no that's I mean that's an excellent point tooling um and the tolerability of java but of course you're talking about generating the code not necessarily comprehending it I mean it still makes compreh the the nature of java still makes comprehension a lot more difficult um sorry not actually just generating because of being able to like jump between classes pull dos well good point yeah yeah I was thinking of the the actual code itself still has more words and stuff in it and so your brain has to spend more time parsing it but yes the Tooling in general uh yeah that seems really important um if you're asking how important it is for adoption um I don't know it seems to be something that people are kind of insisting on now they're going where's the tooling are do you have a comment about that for compile speed like often moved away from um from using Scola for for more or less one uh large reason which was just a large Scola code base was really slow for our CI process which is unfortunate mhm and oh when that drove you away from scholar it was one fact okay yeah well a cultural a cultural Rift between those who really like job want toay with those who were advocating scholar but it was ammunition against scholar that was that was to and I and I do think build times I mean you have to keep in mind how long your attention span is and if the build takes more than a certain number of seconds you know which is like three or four or something you're you drift off and that makes a big difference that's not something to be um to be ignored uh because it allows you to be much you can you can go through many more uh Cycles if the build time is quick so um but of course that's different than like editor tooling that but also important you know it it adds I guess what you're really talking about is your experience of working with the language and if you have the right tools uh debuggers profilers all that kind of stuff and it's quite seamless then your experience of working with the language is going to be a lot better da I don't think we can argue with that and regardless of the language and and people are demanding more and more of that when they see a new language they go what is what is my experience going to be they don't they usually put it in terms of tooling But ultimately what they're asking is what is my experience going to be that's why a lot of people get excited about a language like go where where it seems like the cursor hasn't can't even reach the end of the next line before the compile is done and that makes a difference in in their experience so okay uh thanks everybody for uh coming and uh I guess we'll be around for a few minutes so if you want to if you want to talk informally we can thank you