The How and Why of Fitting Things Together - Joe Armstrong

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
okay thank you good morning the you're probably wondering what this talk is about I just stuck this down it's it's um yeah this is I'm going to sort of touch on these things performance correctness blame and guilt and that's all performance there's a common thing of people who designed programming languages care about correctness not about performance the performance problem is solved it's really easy if you've got a program I can you take a program and you want it to go a thousand times faster just wait ten years it goes fast guys faster that's solved if you're on a million times faster you wait twenty years so that problem solved and that's that's why Airlines really fast today because we waited a long time so I tell the management at Ericsson so what we've got to do is write the software in a beautiful way so that it's correct it doesn't matter if it's slow and then we wait and then it before us tonight and then we can phase that in and throw out all this rubbish software it'll be fine so so performance is solved correctness well if you read kerning and improper and sorry going on and Richie and things like that they will say make it right before you make it fast because they know to make it fast to wait ten years but they know that the most difficult thing to do is to make it correct and why did the designers of programming language is want correctness well it's because whenever if you write a program in our line and it turns out to be incorrect I get the blame but if it works you get the credit you see so programming languages designers really don't like their children to be abused and they don't like errors to occur and because they get blamed and of course if you if I actually go around the same well would it be a good idea to design a nuclear power plant control system in Erlang and when I say yeah yeah will it be better and but by that I mean yes it'd be better than doing it in C++ or Java um because I think that's the best bet but if you guys went and did that and if the control system failed and killed a few million people I would feel very guilty about that so so that's why I'm interested in correctness because I don't want you to go and kill a lot of people and I don't want to get blown so to get to correctness I have to tell a few stories and I'm going to talk about some design patterns that are in Erlang these are what Christopher Alexander calls the things without names they are so obvious that we don't give them names I could to give some of them names I'm going to highlight two design patterns which I believe to be central to Erlang and let's try to tell you AI cetera rather checkered story Allen will sort of come in at the end perhaps not at the beginning you might not see where I'm going in the beginning but the threads will draw together as we go on so right so are you sitting comfortably yes good right then we'll begin so once upon a time in a far-off snowy land Gunnar Erickson ask me a question he was the managing director of Elam tells were we worked at the time and he said he sat down next to me at lunch II said nah he'll airings pretty good you know people tell me Alex it's not a technical guy but he talks to people he says and likes pretty good and then C++ it's pretty good so we got this airline and we've got this C++ so why didn't just sort of gloom together and so I replied well Airlines write Meccano a carlo is very good i had telugu view of Meccano and your kids yeah I love the carnot I built all these things that's not me actually so Ellen fight makar know you build wonderful things with Meccano and they're absolutely beautiful and C++ sil oh it's like lego yeah the thing goes wonderful I didn't actually like Lego as much as Meccano but it was ok my kids like Lego more than more than mechanic um but there isn't any glue the glue that you use to glue Meccano and Lego together doesn't work you imagine making something out of my car no these little metal things and something out of Lego and you just care you what do you do you go to the store buy big two-barrel diet stick it together it's a mess right so what what what's all this got to do with life absolutely nothing you're thinking but somehow okay so I want to look about to the basics of programming so at the deepest fundamental level of programming we have black boxes that's a black box well sort of black circle or a process and really we would like two levels of abstraction one level of abstraction says what's going on inside the black box and the other level of the fraction says what's happening between black boxes so this is a this is a C or a C++ or a Java or a blower or a blower or a blog or a ruby or a program because they're sequential you've got one black box because it's a sequential language well it's slightly different that's air lang you've got lots and lots and lots of little black boxes well round bound things and they send messages to each other and you can derive an awful lot of information so this this has been changing this time so I saw the conquer --ax displays yesterday and they were showing exactly these pictures and visualizing them in a beautiful way and it struck me that this is fantastic this is a quantum leap in abstraction because it says we can understand how a system works without understanding what's happening inside the black boxes now most people have been looking inside the black boxes and try to understand how they work and I think they've been looking in the wrong place there shouldn't be looking at inside the black box is to understand how programs work they should be looking at how the things are interconnected and what they do right so if they've got something like this at a macroscopic level what does it look like at a microscopic level well we have to understand this now why do we want to understand this what's the reason for wanting to understand that well the reason is that programs don't work okay they haven't worked for years they didn't work when I started proudly they still don't work now and I think the reason for that is that we can write little programs but when we write big programs and glue them together they don't work so that's a glue problem so let's look at the glue problem and I just am I the only person in the world who thinks that oh good but I thought I'd find some quotes so um you know rich okie he writes on the mailing mailing list wonderful insightful comments and on his homepage he said I would sum up my research interest by saying everything connects and my biggest problem is just about everything is interesting and what have we got my biggest concern is that most programs don't work and hence my interest in software so I think you know Richard wrote this but this could be on my home page I could write this this is exactly what I think yeah everything is interesting everything does connect programs don't work so is there anything we can do about this I'm going to have a quiz I just quote the quiz is to name where the quote comes from and there's one person in the audience who I think will get it really quickly because they said yesterday so they're not to answer I don't watch counsel will leave you guessing until the end ok so here's a nice long crowd I'll read it you it soon became clear from a study the system sorry it soon became clear that the study of the system was nearly impossible it's dimensionally from simply awesome and documented documentation accordingly sparse answers to questions that were momentarily pressing could best be obtained by interviewing the systems designer who all in-house in doing so we made the shocking discovery that often we could not understand their language explanations were fraught with jargon and references to other parts of the system which remained equally enigmatic to us and you're thinking hey they're describing my company this is Ericsson fantastic no it's not not Ericsson but it's pretty typical it's another quote from the book same book and had I not repeatedly experienced an inadequate and frustrating program could be program from scratch in a fraction of the code used in the original design yeah sure why do we write why do we write things from scratch all the time in re-implementing because it's quicker than finding another program that does it we can't find that program and if we did find it it does something slightly different to what we wanted and it's quicker to write a new program to modify the old program okay so we all know that and a clue to where that if you can identify the guy without the underpants on you'll know where the quotes come from so take a look at the guy without the underpants and then you'll guess where it comes from right so Joe's got frameworks growing complexity and known until nobody can use them right nothing for its true and that well Bill Clinton that's because the bits don't fit together stupid right so let's look at some things ok so inside black boxes you find programs programs communicate I don't care how they work two systems are equivalent if you cannot tell the difference by observing their inputs and outputs it's a principle observational equivalence didn't really matter if they're functional or imperative or monads or any of that rubbish it doesn't matter provided they're equivalent now a lot of people spent an awful lot of time looking inside those black boxes and asking the question what language should we program the black boxes in and then they get all excited and they say let's use Ruby your rifle Nord rifle nor live long all Fortran go long and do or whatever it's called but they're looking in the wrong place what's inside the red arrow why aren't they looking inside the arrows to see what's going on there because that's telling you how the things interact I don't know how your brains work inside so if we want to talk we have to use a common language like English or something that all of us understand understanding English is much more important than understanding what's going on inside our brains because we will never get our navigator I dressed in brain to figure out how his brain works and he'll never get inside my brain we just send these messages to each other so sometimes when programs communicate by sending messages it works quite nicely when it when it works quite nicely if the messages are like files so files a message so if we make a jpg file or PDF file we don't care Carrie it was created and we got this good notion and that's because it's a sort of one-off exchange and what's in that thing is well specified but when we start sending messages backwards and forth we get into a bit of a mess so to understand this I want to look at the history of connecting things together right so this is a quote from McElroy McElroy was Dennis Ritchie and Brian Kernighan boss at Bell Labs and this was the kind of specification of UNIX and there's some type written as if you go to Dennis Ritchie is a webpage still his website still there a bit like that Hathorne and it's got these wonderful source of information and there this was this is a spec for UNIX ok and it says point 1 we should have some way of coupling programs what's he say we should have somewhere coupling programs like a garden hose screw the segment's in when it becomes necessary to massage the data in some way so this was the pipe the hose pipe he I'm my shadow you can see the UNIX pipe which allow programs to work together with no knowledge of each other this is a fantastic invention ok and these are quotes from this webpage points one garden hose analogy connection is the one that ultimately whacked us on the head to best effect if you understand yeah that's a great idea Doug has been enforced fear on them I don't think they wanted to do it itself that's that's what kind of gonna Ritchie say right the pipes pipes are wonderful they are beautiful things them yesterday in the keynote there we said that you know nothing about pipes is you don't care what's going through the pipes it all works nicely don't care if it's water or oil or something it's how they're connected together that's the interesting thing this is plumbing ok so actually I was preparing this lecture I just it's sort of a bit funny because I thought um yeah I'll talk about pipes since I wanted an illustration of pipes and I searched for this and I found this thing and it was on a website called plumbing disasters and so I I thought hang on let's read these things and I thought they're describing software it's absolutely fantastic so when you move into a new house or property try to locate the main stopcock which shuts off the water supply to the house do not wait until you have a major problem until it'll be too late so when you move into a new data center try and find where the major switches an Ethernet cable comes in from the wall make sure you turn it off if there's a problem right if it's service valve on all your water pipes and think so you can turn them off yes so when you've got your server make sure you can turn them off and move the cables around and yeah wait a moment if you've got a leak and you've no idea when it's coming from call a professional plumber who will analyze your system you see now you guys have built these tools to find out where the leaks are you're the professional plumbers and all look it's leaking over there and water all over the floor and there's all sorts of things about plumbing like if you if you've got a big tank and you pour water into it water goes out of it if the water goes out of it slower then the water goes into it then it will overflow right that's a webserver right you're more requests that you can satisfy it overflows and it doesn't work so if you go to sites on plumbing search for plumbing disasters you'll find a whole list and they're a software architecture for you right and so when it becomes into it's even worse when you when the wires are easy to connect you know so this is a typical server Hall have you been do not touch any of the wires when I had a company we used to go blue tail used to go into these sir but don't touch anything sometimes I said we were sort of pulled a cable out take like a week to figure out why the network didn't work and where you should plug it in again I mean if it's a good fun that stuff so you know there's an stack clean your room your mother told you when you were little with it it's quite easy once you've cleaned your room you've got a nice tidy but this is a nice airline system okay so it's got pipes and it's got boilers and we can do boiler change on the fly this is how I used to explain code change on the fly to airline people if you want to change your boiler you make sure it's got pointer here yo you make sure it's got valves and you turn them off turn them off turn them off turn off and then you get a hex or you cut them off and lift out the boiler you put a new boiler in well with them on and you turn that's boiler change on the fly that's how we do it in inhaling so it's all quite good and so because we can take our inspiration from this I thinking maybe we should inspire the boiler industry so I think in boiler net you could do boiler change on the fly boiler balancing 6/9 boiler reliability baler services on demand water on demand poop down the pipe all sorts of things because we we don't care what's in the pipes so it's all quite fun right so right server interactions ah how do they interact a few weeks ago I discovered a program called Chandler and I was very taken by this is a web shot a screenshot of the web version of China that's not my clone I've written a clam writing a clone of it which you can download from my website my github page sort of almost at that level now not like a child is a brilliant thing is a brilliant program anybody know it yeah isn't it is lovely it's to do lists but with a twist because to-do lists are stupid right they say to do kick yes or no but hang on to do isn't binary and it's things that are done or not done there may be so charlie is a triage model from the hospitals you know it classifies tasks into urgent do them later and done and it realizes that task can be reclassified all the time so so Chandler said well we start off with his tasks been doing out it's urgent and then you sort them by that name out do it late as he reclassified as later and you sort of manage it that way also the value of to do is not a boolean which is yes or no it's gray it's text and it changes with time and it says very nice I love John love so I was writing this and I thought well they've given up from this project which is a shame and I thought I'd like to re-implement it and I thought to myself that this should be easy because they've written the client and a server and all I want to do is write the server in airline or keep the client and so I thought with it well hang on did this there should be something that's easy we've got a client and we've got a server and they're separated by a socket so that's easy I've just replacing one of these all I have to do is reproduce what I see on the wire which should be easy but it's not because the client is described by a state machine and they describe it very nicely you know when you do client you describe the state machine of the client and the server is defined by a state machine that's all done very nicely but who described what seen on the wire well nobody because it's not in the description of the client and it's not in the description of the server it's in this remember the diagram of the red line it's in the middle of the red line but nobody's described what it is so we don't actually know what and and they didn't think it was important to describe it so if you read the client code what's on the wire is sort of they're they're they're dotted around in a weird kind of way you can't find if you read what's in the service or a dotted around in it it's not thought to be important it's not described then I thought well okay let's um let's do the client okay I'm not real good at web programmers I looked on it and I found this quote I thought was nice you know when you're choosing how to build the client oh oh dear you don't know I can't keep up with all this Ruby on Rails and nails and stuff and then oh dear right so let's see it is related to the first problem so we've got a problem the bits are connected together but we don't know how they're connected together because we haven't described the connection and then there's another problem software doesn't work we don't really know why right so what Gandalf say well ah see suppose the bits were connected together and we did know why and then if the software didn't work we would know why right so what do we do we put a contract checker in the middle there's the notion of a contractor and that describes what's going on the wire that's a sort of legal thing and I learned this many years ago this was my first big mistake in software you know I was about 28 or something like that and a good age to make your first major disaster so I work for the Swedish based corporation and we were building a satellite and the satellite was delivered by Boeing and Boeing had written a load of software and I have been involved in the contracts and everything and we wrote a contract and we wrote a test document test procedure two weeks of testing heavy testing had to pass all these tests it has to be connected some other equipment that also had test tonight wrote all that stuff went to Boeing and tested it took two weeks and I signed off ah it works I went to this other company and I signed off but but but uh it works we took them both back to Stockholm and connected them together and they didn't work right and then I went to Boeing and said when I connect it to the other stuff that is supposed to be connected to it doesn't work and they said well it's your problem mate because you signed the agreement that it's accepted now enter the other people Nessa bull that's your problem mate because you've signed the agreement we had to rewrite all the bloody software all of it to make it work I mean so I never believed this stuff because it wasn't a contract for what was in the middle there was a con you know that was Boeing at one end there and that was our other supplier there we had contracts with both of them fine but when we connected it together it didn't work because we didn't have a contract for what should happen in the middle and we didn't check we should have brought both of those things together put them in the lab together put the contract checker in the middle the contract checker would say which of those two guys is faulty otherwise it works that's the contract checker contracts right so purpose of contracts as you all know is to actually that is to assign blame when things go wrong that's why we have lawyers if nothing goes wrong you don't look at the contract but if things go wrong you look at the contract and you assign blame so here's the contract checker sort of line it will pounce on you if you make a mistake so kind of thought well this is a you know it's funny so their company to make clients and companies that make servers so there's like 2,000 rfcs or something four major things so there's like two thousand business ideas there's two thousand companies waiting to be made there to go and that's the sort of that sort of business idea that's a meta business idea it's had a form of thousand companies things like Wireshark would be greatly enhanced if they not just sort of printed out the binary messages that go back with thoughts if you had a contractual thing there that said that is now not following this contract right therefore god contracts where do we put them well doesn't really matter I put the cloud might put them somewhere else how we're going to write the contracts not so let's look at some a bit of history again post Elle's law an implementation should be conservative in its sending behavior and liberal in its receiving behavior this is what I call is making matters worse law because you know if you get a sort of message that comes into your system and you're kind of forgiving and say well I really meant to do that so I'll correctly already party downstream you're just making matters worse it didn't matter when pasta always did he only had sort of two things connected together and you didn't have malicious hackers in the network now we have hundreds of things connected together and if you pass Arizona downstream you just make matters worse also Postell was assuming that the people who were sending him bad data were doing so for good reasons you know they just made a mistake in their code people might send you bad data for bad reasons so for example if it's in an HTTP request bytes at a time with a one-second delay between and open up 5,000 sessions to do that it's probably a denial of service attack but Postell would say oh it's just the programmer who's made a mistake of quick just it's not a good idea to do this so we should actually do the opposite this is Joe's law crash crash crash crash crash as soon as possible right oh and fail early fail fast crash no defensive program don't accept it blah blah blah blah but it's don't these are all these are sort of fail early fail fast crash and all that stuff I usually say they're all instances of this rule which is the don't make matters worse rule okay that's a meta rule right you don't want to make matters worse right pasto actually had a little bit of a point because at the time you only had sequential programming language if you've got one process crashing is a big deal nobody else can greatly over every it's not a problem millions of processes floating around and they have different roles some do jobs others correct errors so if you're thinking in you know this wall one process horrible you know C++ Java Ruby you name it horrible because you've only got one place to fix Sarah air like you've got zillions of alternatives to fix the error about the language on the wire right so Postell again he I think I was going back in the history of RFC's the first RFC I could find that used this protocol of a verb our keywords male from a numerical reply 250 okay seems to be an RFC 8 to 1 which was the Simple Mail Transfer Protocol by Postell and his friends bad ideas in computer science anywhere are sticky you see if the first idea was a bad idea then because it worked people sort of repeat it into the next idea right so 1791 our FCS later we go to HTTP GET duck Duck Duck link 200 okay right no yeah I don't have to tell you why do I I mean it's silly okay so what you want we don't want thousands of ad-hoc passes okay it's a big opportunity 1791 trousers have to be written by 1791 companies and 10,000 programmers have to write this stuff but it's ad hoc all those classes are ad hoc there's no type system there's no formal definition there's an English definition of the protocol and it's very inefficient so what do we want instead well we can rule out XML well it could have used Postell no couldn't have used XML and JSON because hadn't been invented possibly could have used Lisp it would have been good it's some other alternate asn.1 it's very nice see la external format is very nice this is the wire format and there's something called UBF which I invented which is beautiful UBF is not widely used anybody use UBF oh great isn't it lovely thank you now there's a problem with UBF and that was my publicity model right so I did UBF in a three week period I wrote a paper about it when I was at six and I posted the code online there's a tarball and then I wrote one or two posts to the Alli mailing list and and then I didn't really get much interest so I left it for 10 years and about every 10 years I wake it up and did a few gift or anybody interested nobody's interested you see so this publicity model is wrong okay so you can go and look and tweet please tweet and if you've got an hour or half an it that you're half an hour to read it read it might be half an hour well spent in all tweeter bound or go there and probably six will see a denial of service attack then wonders of what happens though it would be very interesting right so that's a universal protocol I'm going to show you what you can do with universal protocols a bit later and of course universality but the nice thing about these three things is m1l an external format you bet they're not past they are they're reconstructed terms all these Jason lists best especially XML need parsing when they come in parties means you've got to look at every single character there's no there's no alternative to that these are reconstructed if things are sn1 we'll say okay now this 500 bytes wolf you don't need to look at those 500 eyes you just hop over them if you reconstruct the terms rather than parsing them UBF is just a it's actually it's not a data structure that you send its a program it's a byte coded program it's a virtual machine that you execute when it when you get it and it's got curly brackets in but the curly brackets are op codes in the virtual machine because the byte code for a curly bracket can be used as an opcode in your virtual machine for byte code machine so it looks as if it's a term but it's not it's a program and these two that these are my favorite friends in time to binary binary to term because they're parsers binary term is apart what sorry it's not a part of its a memory constructor it allows you these together allow you to serialize and deserialize anything put in it in a database that's why you can do these are the basis for the sort of no SQL databases that are written in a link that's why they work that's a fundamental thing why they work right and once you've got universality in messaging you can write Universal probe so this little program in airline y'all no air like this great most conferences you definitely so this is an email server an instant messaging failure and HTTP server or FTP server whatever you want to call it right does all three because what's email yeah you receive email from so you open an inbox and you're right to it okay that's what a email client does haven't got a GUI okay not very pretty but it but it's the logic what's that instant message what is instant messaging you get a message and you display it that's what instant messaging is there's nothing more complicated in that okay I've got a GUI it's your instant messaging what's that that's some anything you like is FTP it's HTTP what is F what's the difference between FTP and HTTP GET a file from a rope machine that's what he is us the guts of the thing okay it's got keep alive and all this stuff on the socket but that's a deed extra fundamental utility of that program is to transfer files petite machines I hang on I just do all three in one process why can't I send instant messages to a file why can't I email a room I also a silly you know you can email people we can email things why well if I want to book a room I just send an email to it sort of email to room number 203 could I book you next Tuesday yeah thanks me more why do we have these different things it's crazy just have one universal thing right so how I'm gonna write the contracts how we do for time mmm contracts well can't use api's api's don't work here's an API this is what you see you open a file close it open a file gives you a okay handle error close it give a handle okay read it if you handle do you think that's okay to describe the program no choice it's not because that won't tell you that that program is illegal the type checks in any known language in the world but has that kind of specification says okay open a file close it and then read it right it's wrong doesn't work a type system says it works if it doesn't tell you anything so the protocol has to do more than an API more than a type signature right so let's try and write one you have to add a finite state machine to a type system and that gives you a contract so here's a here's a finite state machine added to the API when you're in the state start and you get open ok handing the state ready and we're going to state ready and you get close you go to the state closed and when you're in the state ready you can read and it's okay so if you have the type system like that it would tell you that your program was incorrect that's what you can stick in the contract checkers between the two things so let's write some simple contracts site login protocol the contracts are for two pools you've got a stage in message stage and you've got message out the state out and there we are it's a finite oh and I learned a big word yesterday the keynote it's a mealy machine and a moon ad so this is very good stuff and so there's that moon it with a mealy machine that tells you to do log ins and I wrote in JavaScript just for fun because I actually wanted to run it in the client not not in Erlang so there's a JavaScript client and here's the type so there's a state machine some some people like that other people like things like that that you are equivalent and here's the type system and here's an example sequence and we just run it through tired contract checker and it you know it'll find errors so it assigns blame when things are wrong that's very nice that's our contract checker that's one of the abstractions it's incredibly useful when we're gluing large systems together and the idea is not much use but I said Facebook giving a talk and I met their technical director chapter or is he closed it I forget her name we talked about any code I said yeah we should have contracted you you lit up like a candle you know and glow yeah yeah yeah I've been telling people for years he said some contracts good news assigns blame when things go wrong formalizes the relationships between the endpoints and it's written in a well understood language right now there's another abstract this is the abstraction without a name but you think we're all using it when we write our Lang but we don't give it a name it is so bloody obvious that we don't even know we're doing it because when when you write code like this oh forget it I'll go forward you know the example I showed you when you write code like this you are communicating with things on the outside world that you believe to be air loan this thing I showed you this bit of code that could do email instant messaging and file transfers was listening for airline messages so you believe that whatever it is out there is not FTP or something it's a lie that's your belief and there's an abstract I call the middle bat well it's the middleman for the middleman job is to sit between the outside world and create the illusion that the outside world is airline okay so doesn't matter if you've got HTTP here you have the middleman and outcome Erlang terms and airline programmers don't really realize that because you're inside the airline world and everything is airline terms so this is the thing you've forgotten because all these drivers they're in the libraries when you want to do something new in and you implement a new driver stick it in the in the library and then it starts you start getting error messages coming to you right so imagine this is fantastic this is a fantastic abstraction because imagine you've got you want to fit them and it's gonna speak Spanish Japanese French and English of you and you've got to join these things together like Woolworths the thing like this so they this part of the applications got to understand English and French and this he's got to learn Spanish and Japanese oh this one's this one's got to understand English Spanish and Japanese okay so writing that code is an order n-squared problem okay where n is the number of different things you've got to have they interacting N squared well actually n times n minus 1 over tip but that's all great script ok so if you put the middleman in like this it becomes a complexity order n not n squared so here's the middleman okay English comes in here Spanish comes in here Japanese comes in here and we convert to a common language that everybody understands for example Swedish and then we write all of these in Swedish well they yet delete the fantastical it for Allah first order there apart from the odd person doesn't speak Swedish so this is why you know there's a secret plan in Stockholm you know we're writing everything in Swedish sending them all generic running man so the middleman is the bringer of sorry-ass pitous exercise the middleman is the bringer of order okay because it makes you think that the external everything in the external world is an airline process and this is the airline model actually airline model of the world has more than the middleman it's got the failure model as well so Robert and I keep going on about the aring model you've got to make everything look like airline processes and the reason for that is it it turns order n-squared problems into order n problems right so the middleman is the higgs-boson avere because it it imposes order the higgs-boson it's a creator of mass all particles get their mass because of the Higgs boson yeah you know that I have a secret history I used to be doing a P I have I'm a failed PhD in elementary particle physics which you know so actually when the Higgs boson came I was actually explaining was z0 be zones and Fineman diagrams on the backboard how it worked it's quite good and I subscribe to particle physicists jokes so you know they were Higgs boson walked into a church and the rector the vicar priest said you can't come into this church you're not allowed to go to Mass and Higgs boson well why not I am the creator of all mass move and the particle physicists tell jokes like that there's a wholesome subculture a particle physicist jokes which a round of applause please you thank you right so the Higgs boat sorry not the higgs boson the middleman brings conceptual integrity to the system because what appeared to be a mess what appeared to be thousands of different protocols now becomes one protocol what appeared to be thousands of different languages becomes one language what appeared to have an N squared complexity becomes an order n complexity and I believe this is why things like ops code in Facebook where they're dealing with large numbers of protocols by converting them all into Erlang and working internally in Erlang they've reduced this from an order N squared problems an order n problem if they haven't thought about just sort of doing it that way they should think about doing it that way because that's the way to make systems right quick commercial break a very quick commercial break the second edition of my book will be out on April the 17th for the PDF file and I'm actually taking up middlemen and things like that as specific ways of programming just to try and popularize this idea a bit more in commercial break tweet tweet tweet my editor said I should do that yeah or quits right so who's the man without the underpants any takers come on no who's a dame with funny 90 nope that's Oberon the king of the fairies that's mrs. mrs. Oberon and project Elrond and these quotes are all from it's a fantastic book have you read it who's read the book yeah isn't it great I mean I had a spirit it's an inspiration to everybody because he he he he decides I don't know how old he was about 64 or something also I've never written an operating system or not I'll do write an operating system this is subject to the constraint that I can only work part-time got to write a book and do all these other things and he redesigned absolutely everything Network he said well if I'm going to do it myself with with my my buddy um we've got to rethink everything I think he made one mistake he redesigned networking we didn't do tcp/ip and open system can't talk to anything I think that was a mistake but apart from that it's wonderful so finally all right sum all this up youth contracts where appropriate something like you'll be up with any one person you think probably your problems aren't difficult enough to need this okay but if you want to do if you want to isolate clients and service and it properly you should actually have a description not of the state of the client and the state of the server but a description of the state of what's in the middle use middlemen make things that fit together and make software that works so Keep Calm code LA alt book and that's about it coke any any question a man at the back and I haven't done that so I don't know oh sorry what's my experience in I don't drink of other things like UBF with contract checkers and things like quick check or proper answer don't know because they haven't done it no experience but I mean I think it'd be good idea the fantastic idea have you have you done that and what was the result first time yeah think about the contract check it's amazing when you run I have done some little projects with contract checkers and when he says dot dot dot dot dot dot dot wrong and you look at it can nnnn right I can't see those little spelling mistakes you make and the little things you make the contractor has seized it it tells you that's wrong that's wrong no questions understood everything okay well thank you very much you
Info
Channel: Erlang Solutions
Views: 14,748
Rating: 4.858407 out of 5
Keywords: Erlang, Erlang Factory, Joe Armstrong, Keynote
Id: ed7A7r6DBsM
Channel Id: undefined
Length: 46min 39sec (2799 seconds)
Published: Fri May 10 2013
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.