Computer Science - A Guide for the Perplexed • Joe Armstrong • GOTO 2018

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Music] good morning everybody thank you for coming oh yeah let me see yeah I'm the one who's a bit perplexed now um about I have to think now forty years ago I was a student of physics and I was letting quantum mechanics and there was a guy professor baroque and he said it must be very difficult to learn quantum mechanics because I've been doing it for 50 years and the advances in quantum mechanics they were pretty slow there'd be a new advance and I would learn something in the end I'd have a few years to accommodate those ideas and then there'd be a few more years and a new result and I would learn about that stuff and healer he learnt he went to the Cavendish lab in 1933 and Lord Rutherford with his advisor who the guy who discovered alpha and beta radiation and the father of nuclear physics and he said I don't know how you can learn all this stuff in a couple of years it's far too much and that's kind of what I think now I've been programming for 50 years and well when I started there wasn't much stuff and hello let's press this shouldn't this go forward when I press it no hello ah good yeah well computer science is confusing because it's not a science and there's an awful lot of stuff floating around and I'd say well you know the latest stuff that's not computer science right no this thing you know I'm a was a professor of fault-tolerant computing which is why I don't trust these things and it doesn't go for when I press the button should I it's wave if I wanted to yeah that's a great one look I press it and nothing happens okay well actually did move then I'll say it I can't say oh I'll say the last word I'd say if I want you to move it so so one of my goals hang on this no it doesn't work it doesn't work I told you it would slide right okay no no no no no you know my wife says why do you print your tickets out on paper before you fly anywhere why don't you use this app on your mobile phone and I say well I'm a professor a fault-tolerant computing why do you think okay so what I want to do is identify some problems worth solving and identify some stuff that's worth learning oh thank you very much right okay yeah okay well let's do a test brilliant thank you thank you very much okay so so fifty years ago when I started programming there was there wasn't much software so in principle you could learn everything there was when I started programming I was given the choice of learning Fortran or nothing because that was the only choice there was and so I learned Fortran things are slightly different than the turnaround time for a program of three weeks three weeks after you've written your program you got to see the first syntax error in it because the Fortran compiler stopped at the first syntax error and didn't go on to this lines that followed the first error and so once you've got your program back there was another three weeks delay and you could resubmit it and you get to the second error in your program that made debugging difficult of course there were no debuggers so that made it even more difficult but it did teach you to stare at your program before you submitted it and not after you submitted it well now the program compiles during the time that the spring underneath the enter button recoils so it's pretty quick twenty-five years ago thirty years ago it was about right there weren't that many programming languages there weren't that many operating systems so in principle you could understand more or less everything really maybe not everything but you could understand a large proportion of everything that existed and now there's just far too much I mean there's a heck of a lot of stuff III would if somebody said to me you know I'm just learning computer science what should I learn I say yeah well you should learn this and that's actually this talk is about that subject what should you learn because a lot of people say what should you learn and I'm thinking yeah I'll kind of reflect on what I've done and it's very biased it's it's the stuff I've learned stuff I've had use of so I thought I tell you guys right so there's also this sets of gaps as there's there's the problems that computer scientists study and and IIIi was looking at this and and looking at the thesis topics and say so so what what's the hot stuff in computer science what a lot of the research topics and and I was making lists of them and then I thought I'll ask my neighbors in the apartment where I build where I live and I said so so what problems have you got and is there any intersection between the problems that computer scientists study and the problems my neighbors have and I think the answer's no it's actually Noah you know my neighbors have completely different you know that computers don't work they don't know why and actually I don't know I mean I've III stream movies for examples Netflix and most of the time it works fine or I listen to music with Spotify and my sonar system so when I'm listening to music with my sonar system it will work at a time beautifully and it'll suddenly stop and I can't you know right in the middle of a Chopin waltz or something I think what the hell has happened and I don't know who to complain to do I complain too so no see all your software's [ __ ] up do I complain to my ISPs DNS failed as a modem fail and then I go through my I do what I tell my neighbors to do i if the problem won't go away the one that most often works is rebooting the modem the cable modem okay a hundred megabits per second fiber to the home it should be great but it just stops and I don't know why and I'm a professor of computer science and nobody no nobody on the planet knows why well perhaps somebody in this room knows why you know that catch me a coffee and tell me because I'd really like to know and then there's a problem is the industry solves now what problem does the computer industry solve it it solves the problem we want to make loads of money so they basically don't care about computer science and they don't care about the users what they care about is making loads of money and all of these are completely different what I kind of noticed that there's a sort of gap between the software that we can write and the software that we can understand and and a few years ago that gap was no backtrack that's not true there's always been a huge gap between that and and and that is largely due to mathematics so let's take a really simple problem the 3n plus one problem if n is odd replace it by 3n plus 1 and if n is even divided by 2 and the Gallants conjecture says well this process will eventually reach the number 1 for all starting values of n it appears to be true and nobody's managed to prove this you're right this is a program it's a tiny program it's a trivial program but the properties of that program cannot be proved and sepulveda says mathematics may be not ready for such problems so deep down in software there are fundamental problems of mathematics that we do not know how to solve and indeed girdle says that mathematics is decidable or inconsistent or it's in it's either inconsistent or undecidable and I guess programming with both undecidable and inconsistent so it's a kind of fun ok so back in this lectures your talk is he's done in 3 3 or 4 parts back in the 80s I had a plan that was how to find things how to store things and how to program things and I kind of thought about that a bit and that boiled down to some sub goals learn Emacs learn UNIX and learn a programming language that was that was my answer to how to do the first three things and what actually happened well there's been a little bit of progress in all these areas finding things yeah it's been a bit of progress Google and friends have made search engine so we can find things usually find the wrong stuff but we've saved things there's a small amount of progress there dropbox can save things but not forever Dropbox will save things as long as your credit card keeps on the payments so we don't know what's going to happen to that stuff in the future and one of the things that concerns me and concerns a lot of people is what will happen to our history you know in 200 years time will people be able to find the photos we've taken today or will they've all been put encrypted in the cloud and be inaccessible to people in the future it might well be that it will be as difficult for us to know what happened 200 years ago as it is for us to know what happened 2,000 years ago there's a shame because if we're going to learn from our mistakes we need to record our history and we need to be able to see it in the in the future programming things it has there been any progress in programming in the last 30 years not much actually a few little small things I don't see any really big breakthroughs prologue was the last thing that was radically different to the things that came before it i don't really see things maybe dependent types and things like that right okay so how did this the idea for this talk start well about two years ago I had the privilege of interviewing Alan Kay on stage at Coke machine London and I thought oh what do I ask what do I ask Oh what do I ask him so I thought I made up some questions I'm gonna ask him and one of the one of the questions was what are they what are the great ideas of computer science have we forgotten there are a lot of good ideas in the 60s and 70s some of them have evolved others have just been completely forgotten they're still waiting to be resurrected so I asked him this question and we talked about that and then I tweeted I'm interested in the Forgotten ideas the computer science and Twitter's great you know the next day I had 277 replies which I printed them out were 40 pages of PDF and I started looking at that so I started making some lists a lists are very easy things to make but always lists is that you have too many items on the list right there yep so the easy thing about a list is making lots of points in the list the difficult thing is removing items from it to reduce it to a very small list so I made a lot of lists about different areas of computer science and I give you an example suppose suppose I your professor that makes a reading list of books that you're supposed to read as a student well it's quite easy to make a list of 15 items and of course the teachers done a good job and of course the teacher also knows that the students will not read 15 books if you're given a reading list of 15 books you're not going to read 15 books there's just no way you're gonna do it so what I thought I'm not gonna give you lists of 15 books to read I'm gonna list I'm gonna give you a list of three books to read I think if you reduce these lists it's a it's a way of taking responsibility and and that's the difficult thing it's throwing your babies away or maybe it's nice list with 15 books in and now I have to remove them to a small enough number that you will remember that and there's a chance you might read them that's that's a very difficult thing and and and and it's one of the things I do a lot when it were never presented with a list of lots of things it's a good thing to ask which is the most important item on that list when I was working for Erickson 5g systems were very popular and a new project manager rushed in and he said ah you know 5 G's gonna do medicine and driverless cars and he had a list he had like 45 things on this slide and and I said what's the most important thing he looked at me strangely and I said look I'm I can only do one thing at a time you've got 45 things on this list I can implement the most important thing which which is the most important thing and he said he didn't know so I said well I don't know what to do then so whenever you see a list whatever you were in a project and this 20 items on that list just tell him I can only do one thing at a time and ask them which the most important thing is and if they can't answer get a new project manager so this talk is a merge into a kind of list of lists because it is a guide to the confused and it is what I think you should learn so I made some lists and there are a total of 80 things that's quite a lot actually this is a guide for the perplexed I mean I've got it down to a mere 80 things from must be thousands of things and it's very personal if stuff I think's good took two great papers to read and for old tools you should learn and three great books to read and so on I've given this talk twice and afterwards I got some tweets a piece it was really great so do you read the other one no and I read the other one that said yeah that was great as well and there's some fun stuff as well right so let's oh and the Forgotten ideas so that was cut it whoops oh come go backwards never mind okay two great papers to read a painfully a plea for lean software by Nicolas Viet and the Emperor's New Clothes the ACM Turing price elected by Tony Hoare anybody read any of them nobody that's wonderful that's great oh yeah were you working Dave Thomas is of course read all of this stuff and you'll have read all the books as well won't you well you don't know what the books are gonna be being away you'll read two of them yeah okay so there is these really good papers and knickers there it says in the middle of each paper the belief that a complex system because well armies of designers and program is wrong it's a system that is not understood in its entirety at least to a single a significant degree of individual by a single individual should possibly not be built he also says to gain experience there is no substitute for one's own programming effort organizing a team into managers designers programmers analysts is counterproductive I'm a full-stack developer I develop the language the frameworks and libraries and everything see I didn't grow the operating system that's a flaw in my and what did Tony Hoare say he said this you should read this paper it's really it's really readable he said he was in charge of his project he went wrong and the managing director of the company that sponsored it into his office it was a manager knew nothing about software at all and shouted at him he screamed at him and he said you know your project and Tony Hoare could he's a mild-mannered man and he said no people were doing and Tony Hoare thought hang on this guy is not a programmer he's a manager how on earth does he you know hopefully make statements like that many realized later he was right because the manager said that's the reason why projects always fail but people don't understand what they're doing and if you're ever in a big project and you're trying to find out how it works and you talk to people and they said well no I can't understand how this work but somebody you know something somebody else understands how this bit works then you can be sure that you're in a project is gonna go pear-shaped and not work so really you know you've gotta find somebody in these projects you understands how the stuff works otherwise it's just not gonna work okay for for all tools to learn Emacs or VI I'm not religious about these things I belong to the true Church of Emacs but some people some people say VI is good a good text editor that's small and fast and customizable it's the only scripting language you ever need to learn make is the only build tool you'll ever need to learn and and just how the shell works just a terminal shell and I would really recommend using make I cannot understand why people use specialized to build tools for their different languages I mean it's fine you're using malvern or something but java and groovy on jails or rails or whatever the bloody things called grumpy grumpy 2 or something and they're all got different build tools well why bother I mean he keeps make for everything once you've learned how a mate works and use it for everything and then you don't need to learn a new build tool when you change your programming language it's very easy to learn as well right for really bad things lack of privacy attempts to manipulate us through social media vent vendor lock-in that's a really bad thing should be aware of it I mean the world is full of these JVM people je vous aime je T aime je T aime je T aime je and and so we implement everything three times instead of once which of course is very good for the vendors but not very good for everybody else Oh in terms of terms and conditions I was just gonna write right hands up everybody who thread all the terms and conditions and understand them nobody okay yeah hands up everybody just clicks on except as soon as terms and conditions comes fight like me yes like the rest of the planet actually why don't I have I mean I don't if I buy a chair this battle does not come with terms and conditions you have to read the terms and conditions it might contain water it might be a quench thirst err and mad we get rid of software terms and condition [ __ ] it should just work just work I'm sorry okay three great books to a day if you've read three of them two of them you've read through them on you yeah okay so the one book of computer science you have to read is algorithms plus algorithms data structures equals programs why should you read this Nicolas Viet is in my opinion the greatest programmer ever I mean he's the only person who has made a programming language an operating system and the chips he's done the hardware design he's designed the chips he's made the operating system oberon and he's made the programming language Pascal which evolved into modular 2 which was used to programmer brawn and in this book he describes the fear of ll 1 parsing and how to go from diagrams to a byte coded virtual machine and he describes the interpreter for that virtual machine that's the P code machine the Pico machine is the precursor of the JVM and the.net virtual machines basically the dotnet virtual machine in the JVM are very very similar by coded machines once you've understood the P code machine from past from from vietze book you will understand completely how these things are engineered that the one in the book is a deliberately simplified version it's got about I had I guess 3540 op codes and a very simple implementation in Pascal very good book the mythical man-month is the one book you need to read about software engineering Brooks worked for IBM the project manager on the IBM 360 project which was delayed by a very large amount and Thomas J Watson asked him why was the project delayed so much and Brooks said well I gotta write a book to answer that and it came up with with some quite key ideas I think in software engineering there are one of the major ideas that comes from the book is that of partition herbal and non partition of all tasks any point further than if you want have a baby in one month you you shouldn't get nine women to do it for you having a baby is a non partition table job which takes nine months you can't you can't get nine women and do it in a month we can't get 18 women and and the software industry seems to think we can partition programs by getting whole teams of programmers and it'll go quicker and if that it goes slower that's a really good book and well the third one is this Dale Carnegie how to win friends and influence people if your program is you not only have to write code that works you've got to persuade people to use your code if you want to start a company you have to talk to venture capitalists you've got to talk to people and this is all about the interactions between people Dale Carnegie was a Salesman he studied the works of he said how do I become a great salesman and he went to the library and he read what Lincoln had written he read what all the great statesmen had written and he trying to encapsulated all this knowledge and really in this book this book anybody read it yeah it's good isn't it tell them tell the other guys it's good she'll read it once a year because you forget it it's very very the techniques are very powerful I've done some things myself it works it's good stuff right so why seven reasons why software is difficult well we are plagued with fast machines and huge memory hundreds of programming language huge programs note specification and reuse my goodness doesn't know don't all these things make software difficult I mean if we if we didn't reuse any software how to write it all and understand it well our systems might be correct every time we reuse something we inherit all the bugs in the stuff we reuse of course we're not aware of that in fact hundreds of programming languages to choose between and of course very fast machines hide very horrible algorithms having loads of memory means you can write any bloody crap you feel like oh and systems are distributed so not only not only can you make your own mistakes you can bugger up other people's programs and your programs right so 10 reasons why software is easier back in the day while we're great we had small machines and long memory and fuel-air know we didn't reuse we didn't have things for Xcode and oh just imagine imagine programming without Xcode how blissful life is we did not get should have like get blame and things like that so we didn't keep the old versions of our software so nobody could blame us when it didn't work and we can understand our programs because they were small yeah that was good let's click again oh yeah this is some this is kind of change gear this is one one one fun programming and anybody read this date you have what you yeah you have of course you have you see the old guys we've done all this stuff so down Engels bad angles is the guy who implemented small talk first he said do not read this paper you do not want to read this paper this is seriously bad news if you read this paper your brain will melt so what happens when somebody tells you not to read a paper it's seriously bad news do not read this paper yeah of course you read it this is the first meta system where it's written entirely in itself and it becomes extensible and and your brain will melt and you will have grateful you can implement this in any programming language under the Sun and just have fun with it and it'll sort of evolve in its own way it's really quite fun a little bit of history few want to go into history I have a different talk about history these are some machines you might like to look at they're the the bay my holiday if I go around I take my wife to computer museums and we have a great time we and we we have a great time looking at early computers she goes oh yeah that's interesting no this is this is good fun this is it and the pdp-11 mean I have proton all of these apart the first in the last one the the nvidia tesla p100 is that's like 10,000 Cray ones and I mean it's ridiculous this is this is the one that's gonna make us obsolete and the cray-1 I mean my little this this is a like 200 Cray ones the cray-1 was the first supercomputer in the world it weighed eight I waited I ate tons it cost eight million dollars I saw one at CERN it was attended by serious-looking people in long white coats lab coats and you weren't allowed near it you could you could you could it's like a religious symbol you wouldn't it's a Cray one oh and now somebody said somebody said can you program am I gonna last beep I you know a little low powered computer I said hang on last we play that's like eight Cray ones eight Cray ones it's like two hundred times more powerful than the computer we developed they're laying on of course you can do it of course you can do it how can you make things go faster better algorithms this this is just what happened them in my experience if you if you get a better algorithm and you don't change programming language you can you can get a better outcome maybe maybe a program six times faster if you change programming language you can get a lot faster so when I was developing and we went from prologue to see they went about what I say there may be 50 times faster but of course these aren't the big performance games the big performance games come from doing sod-all and waiting because Moore's laws as applied I'm a published world flies in different ways he goes into the multi court in the future but we get about a factor of a thousand every ten years the only program to go a million times faster you do nothing and wait for twenty years well see she cares a million times faster and then everything yeah a really smart program you prime guys a million times faster the cloaks mitts the hardware guys if you if you if you want if you're really fast software don't bother changing language if don't bother finding smart algorithms go find a hardware friend what sniff around what the hardware guys are doing and beyond the beyond the leading edge with hardware hard hardware's where all the improvements that come from clock speeds of gigahertz petabytes and Vetta bison them god no you know it's crazy right there Oh some five five or more plus YouTube videos to watch these are these are really good um this nice one the computer revolution has not happened yet Alan Kay that's nice a nice provocative title I mean everybody thinking hey we've had this wonderful computer revolution Alan's disappoint no it hasn't actually happened yet you know what kind of we're still waiting for it to happen and he if he get a lot of his I do a lot of these ideas come from Ted Nelson and if you google or you go to youtube and he searched for computers for phoenix you'll find a series of lectures by ted nelson and strangely very few people who've watched these I mean like 2,000 people have watched them so Ted is a guy who invented hypertext and he what we see in the world wide web is a kind of poor shadow of his vision of computation there's some other stuff there which which you could look at but the big stuff six things you shouldn't do then put Mac doors in your software and don't violate people's privacy and don't put microphones in everybody's houses and don't hijack our attention systems that so and don't sell us crap that we don't want and we don't need it's not much good five sins crap documentation crap websites crap dependencies crap build instructions in groupthink no no you do this I'm sure I'm sure you all right beautiful documentation I hear word for now I hear laughter it's now four languages to learn yeah I see see everybody should learn C and Prolog they're very different languages I've even put Erlangen JavaScript there air links a little favorite of mine Airlink combines object-oriented programming with functional programming in sort of the bridge you see two little worlds and of course javascript is a very nice language and people took jobs on said jobs good yes it is actually it's great fun I mean it's it's got its little things and you know I've got quite a few gray hairs from from JavaScript but I got even more for mailing and then Prolog and C so see I've got a lot of it grey hairs we'll see let's have a look oh now we're getting on to students we've got forgotten ideas linda tuple spaces this is the idea of a shared blackboard you you you basically have a shared blackboard where you write problems and you have a whole parallel sea of observers that are observing the blackboard and they can just deterministically pluck off something and do the computation right answer back onto the backboard when they finished it's a very nice computation it's a very nice way of parallelizing things it was a very good idea not people do use super spaces today but but not as much as they should do then there's an idea so the call flow based programming by John Paul Morrison I see a nodding man in the audience flow based programming is really great it's a book which I hear you think you can find free someone and web John it's pretty old now and this ideas never really caught on but they were great and then vana do Ted no see this is this is the stuff this this is what the web should have been this is this is cool this has been called the greatest day per where project ever I mean like 50 years later or however many years it's still not completely implemented I'll talk a little bit more about that well not really forgotten but not really used let's see so pipes I just have a little mention about pipes yeah the you know the old eunuchs are the output of my program should be the input to your program so we could just pipe things together a pipe lead pipe see and it and text flows across the boundary so this makes it very easy to connect things together in particular we can connect things together that are written in different programming languages and it's very very simple this has been killed by gooeys they got do these aren't text-based gooeys are poke your little finger on the mouse and sort of click on something based so how the heck can you pipe them together even worse apps apps are apps on your mobile phone and on your iPad are inventions of the devil I mean they they are just not pipeable together you can't take one app and pipe it results into the next app and you can't just that you don't apps sandbox you they lock you into their little infrastructure oh I've got this great photo editor it creates a JPEG file or a PNG file can connect can that foppy youth buy another app no way no way no you can't share data oh that would be a security thing so it so these apps lock us into sandals then into Sun boxes and make sure that things don't interact with each other they even lock you into the platform so you know of course your iOS apps that can't interact with you was your Android apps for things things should be pipe holes together they should be connectable right apps yeah and all apps I mean they're all kind of I mean don't get me wrong some of the individual apps are very very very very good and they worth paying for but they can you program the damn things no way would they have a programmable interface we've made simpler computers and handed them out to everybody and then made sure that they're very difficult to program which is tragic right let's have a look what we got now six areas to do research in robotics AI programmable robot sir I don't know if anybody saw there's the akia robot that can assemble a flat back chair which makes us wonder if this was the purpose of the human race is to invent a robot that can assemble a flat pack chair and basically if robots can just make other robots using solar power or something we can just you know that's it they'll be on the planet until the Sun becomes a red giant assembling flat packed chairs and we'll have tied out programmer productivity yeah I still believe well I still hope that we can improve the productivity of programming languages logs and things like that a pretty damn good unfortunate of the languages that are commonly used and widely used today have their roots in about nineteen eighteen twenty seventy five something like that things have actually progressed since then but the best languages are not actually being used energy efficiency we need we need to we need to use our energy wisely precision medicine this is this is coming on really really nicely I mean I think analysis of our genome to find out which medicines we should treat various ailments with is proceeding at an enormous rate so up to now treatment a lot of disease is a pretty pretty haphazard if you if you need to reduce your blood pressure you don't really know which combination of drugs is going to work but presumably we will know this fairly soon and security a lot of bad people trying to mess up with our rules there's a good areas to research to danger for ideas that were obvious now and strange at first indentation you know I was reading the my Daniel B McCracken's guide to Fortran for he you know two ideas haven't occurred to him one was sorting the the line number labels the other was inventing the programs to denote structure very strange versioning that was though that was a that was a neat idea putting a version number in you know if you look at the if you look at the RFC's for HTTP and things like that they didn't have a version you know now says HTTP 1.1 or HTTP 1.2 in the header that's a relatively new idea nobody only actually thought of doing that so if you look at the history here the first internet protocols had no name they were identified by the port number she knew that port whatever it was was with mail and port 80 with HTTP then they thought oh I know we'll do we'll we'll stick with sticker we'll stick a version number and a header we'll say this is HTTP 1.1 or this HT to be 1.2 and put it in the header and that was set with version numbering and of course what's the next step I mean these first numbers put damn silly because because of you but at one point to me well the next step which nobody's done yet but I keep saying you should do is in fact you shouldn't have a version number like 1.2 you should have the the sha-256 of the software of the server and the sha-256 of the software of the client that has been known to work and being tested those numbers are not precise enough to guarantee that your system will work in fact we should we should we should name all protocols by something like the sha-256 or the sha-2 or md5 of the code itself not not with some silly little version number this idea of naming things by their check sums is commonplace in indeed but it's it's not commonplace outside get in fact we should throw away all names and use cryptographic check sums to name things and then life will be a lot easier would I mean come on and you start naming things really want to name a file you go what should I call this file what directory should I put then you gonna name the direct you what directories you know what machines should I put it in just stick it all in the same directory just name it by its char and then there's no problem pipe yeah that was a silly idea where else oh yeah this is fun time to to programs that you really should try very that's similar in a way if Sam here yeah the Scout isn't it it's good tell him it's good yes brilliant yeah Sam Sam Road sonic PI and to be honest he would have more fun spending an hour with Sonic PI or with the tiddlywiki than listen to me for an hour but you wouldn't know to run them so it's a play please spend an hour of your life playing with these programs and then figure out how you can connect the tiddlywiki to the sonic PI in a way they're very similar both of them are based on this idea very small things that can be combined into bigger things so sonic PI is based on this idea are very small fragments of code which when you execute them play music and they can be combined together in creative ways to create music tiddlywiki is based on the idea of small things that can be it's a wiki but it's probably the nearest thing you'll ever see to it the old hyper card and it talked about transclusion a little bit later it's Ted Nelson would love this stuff I mean but typically wiki is about the nearest you'll get to something that's half decent it's very good right part 3 how we know for time I don't have to finish 8 minutes ok right important on computer science or a guided tour of what you need to know if you're going to do computer science be a programmer and it's not just it's not just the technology it's some other stuff so learn to write a program with excellent documentation not going to go anywhere you know the first thing I do when I go to a program I read the documentation if there's no documentation like okay no use this program I want to read the code goodness who wants to read code I'll never understand it and if I do understand I want to rewrite it three rules at work rule number one if you get a bad boss move immediately do not try and change them I think this rule if not well understood everybody I know that a certain stage in their career will have a bad boss it's like that you will have lots of bosses in your life sooner or later you'll have a bad boss and everybody makes the same mistake they think they can change their bad boss and after two years they'll give up so if you get a bad boss leave the next day or maybe even the same day I mean don't let them fire you you fire them you just just get out of there as quickly as possible I think it's always I work with giant valued and formed this company Jane Jane used to say the relationship comes first she was a she majored in psychology she was a people person than I was an engineer and my idea of them engineering with you you you you sort of have technical arguments of people and Jane's idea was you know you become friends with him first gotta crush them with the technique you know the superior technology that's why I thought until I was about 55 or something like that slowly my world was the edges was crumbling Jane managed to get stuff done that I could never get I won this argument and they didn't do it and Jane hadn't even had an argument and they did it and I said how did you do that she wouldn't became friends isn't first oh that's a really weird idea it's good engage with management you know just cut management you don't understand them they're not like Zambia this is what Tim what's his name Hamming said he said you know here the biggest mistake in his career was the late stage he was head of research at AT&T Bell Labs and he said the biggest mistake of his career was not to engage with management until very late I think he did it like five years before the end of his career or ten years and then he started talking to them and doors opened and I I never never really managed that I think it was I didn't really I I couldn't figure out what was going on in management's head so I didn't talk to him not a good idea actually right seven to tell you yeah distractions open play open plan offices if you're programmers you don't want open plan offices can't get any work done in an open plan office you get distracted order and the latest stuff now just learn the old stuff and get good at it Twitter and owning these notifications and things that's why books are good there's no links in them you can't oh look Oh who's getting divorced oh I didn't know found dead in a hotel room mmm wonder why he died off whoa oh hang on oh well never mind and all this scrum and all that kind of stuff just just just just just just accept it we can do one thing at a time well some of us can do like point eight of a thing at a time but but and our brains are very bad at context switching just just do one thing and tell your boss I don't do multitasking I do one thing maybe if you're lucky six ways to get your program to program in xxx tell I think fear of failure is probably the big the big point though you know people don't do things because they're frightened of failing you have to reduce fear of failure in fact the telling success stories is one of the things you do to reduce fear of failure you can make a prototype at home you can network with other other people that bother just go off and do it fine find a venture capitalist and give me get let me give you lots of money and then just go in and and do something yes one thing that people would surprise when I say this people young people would come to me innocent so so so this job looks really interesting sure that should I am should I apply for this job what I don't know yeah but the technique is Fronter that didn't was really really great stuff myself said well have you looked at the balance sheet of the company no why should I do that well can I tell him if you look at the balance sheet of a company and he's going down then what they will do is cut costs and they will cut all speculative stuff those cut all their exciting projects and they will concentrate on only the projects and money and and if you look at the balance sheet of a company profits are going up they will be wondering what they do with their excess profits as they can we can we put some of our excess profits into exciting new projects and things so so look at the balance sheet and in fact when I when I left Eriksson I was retired something they asked they asked me to give a a closing talk when I retired they turned out I'd worked there some for two periods Ellen got banned and I quit I formed a company we sold the company 450 million dollars and that was kind of fun and I got a PhD and then airline was sort of unban I went back to Ericsson and then I worked there for a few more years and then when I retired they asked me to give a talk so I plotted the period when I'd work for Ericsson against the share price all the time when I'd work ferrets and the share price had gone up and all the time I was away the share price had dropped and gone down yeah I knew I knew there was I knew that's why I was a good guy but the the stock market didn't pick up on this which is very strange obviously the key factor in their balance sheet right now but look at it but I'm serious you know don't don't go work for companies is whose knowledge sheet isn't positive because they won't let you do anything fun and they want to cut your costs all the time and that's no fun three General Laws software complexity grows at a time because we build upon old stuff bad cold bad code crowds out good this Gresham's law you know this bad money drives out good and in the old David of gold coins you could clip a little bit off the coin saved the shaving that you had clipped off and you could still spend the coin and nobody noticed you you would make a profit you collect all these little shavings so slowly the gold coins got smaller and smaller and smaller and the bad coins vote ended two out circulate the good coins because a good coins were taken out of circulation they clip little bits off the court and capital T that's exactly the same with software bad software crowds out good software because he can't earn any money maintaining software if it hasn't got any errors in it I mean there's no money to be made by distributing good software make a load of ton of money by distributing bad software these lot of maintenance and bad code contaminates good code then you have to how long ago bear in mind the laws of physics and maths a computation can only take place when the data and program are at the same point in space-time should remember that okay well I mean that can be anywhere it could be some gathers client there less data there and the program there you can move it somewhere in between it's why this is my pH please very good but does everything on the server when JavaScript goes wrong in clients every time when you've got all the data you want in the browser and you're doing something and then some of other data it's our off-site in the database you've got to stop what you're doing go talk to a database get the answer back and carry on what you're doing but in that gap all sorts of things can go wrong so you maybe don't get an answer from the database and maybe it doesn't reply second or physics causality effect follow of course and you never know how stuff is you know how it was the last time it told you if you ask a database and say how much money's jogo it's got hundred dollars that doesn't mean to say that Joe's got a hundred dollars it means that the last time you ask the database the database said he had out new dollars he might have spent half of it since sentence you get the double spending problem databases which you can solve rapidly and easily using a central database or you can solve in a very inefficient way using a blockchain I mean it'll only take by a day or something like that could use half the world's energy up yeah and second law of thermodynamics entropy always increases entropy five minutes goodness should get better with some things the slides I guess will be uh-oh you could read these later the early unix is pretty good it's looking for paper there to find this I couldn't find it but from memory it had like a 10 megabyte discs something like that somebody will correct me if I'm wrong and once the program to put on that disk there wasn't enough room for lots of programs suppose we didn't get used removed from the disk of thrown away and because of gear I mean they weren't saved forever for posterity now they're just thrown away and so entropy there's something controlling entropy this small volume of stuff just got better didn't get bigger and bigger and bigger and rubbish sort of distracted you from the good stuff trust him I trust is important in software III I trust the software written by Robert Robin bearding my collaborator when we develop the early Rob is a really good programmer Robert wrote X therefore I trust X its transitive I need a program to do X I find X on github I don't know who wrote X can I trust X I'm quite often be very badly bitten by using software that I found on github has saved me a lot of time some he really use it with software I chose some software to use I won't name it but given the choice between two projects and github I chose the one that had lots of test cases and a lot of documentation it was wrong of course because they not only was he I mean the test cases were wrong and the program was wrong I mean somebody said programs to learn to pass their test cases if you write a set of test cases and you will see errors in your program you you you you adjust the program so that all the test cases the past so they learn to pass the test cases once they've learnt to pass the test cases you're screwed basically if you don't write any more test cases actually shouldn't write test cases at all you there are more advanced techniques you can use in silly old test cases right let's have a look responsibili users problems six common problems that users have my friends I mean really good friends who are not computer people they don't know how to delete files when their computer fills up they buy a new one because they think it's broken and you put quite a lot of memory on these things so it's you know two three years disk full and then they get a new one they don't know what megabytes and megabits I had a friend and I said you know he used up all this quota streaming a movie and I said dude so how much data you know it's got a data plan I asked him how many megabits a second you know is it to stream audio and how many megabits a second have no clue or these things me yeah totally intelligent guy otherwise I mean but he's not a computer guy they do not know what things are most users I would say including me one on the other might try for five minutes on if the app doesn't work immediately they give up and actually they don't Google for fixes and and then even if they did they wouldn't understand the answers and they don't want to try the latest thing and they don't want the UI to be updated they just wanted to work for goodness sake like it used to work oh dear yeah wait a minute oh yeah password UI check I didn't either take too long to tell that story but tell it quickly I did I wanted to reply to my wife said you know when I reply to an email it goes into Iran and wants to start the Apple Mail program I haven't installed I want it to go into Gmail that's all that must be easy I googled a bit couldn't find out how to do it Google a bit awkward and she couldn't find out it I tweeted I got twenty thousand Twitter followers they said try this girl who's Troy first two or three methods didn't work the third one did work and I found out how to do it it was completely unintuitive and and then I showed my wife and she ha Joe your genie you know how often do you click on a link you know mail to link in your browser and how much time do you think you saved by doing this rather than cutting and pasting inches well I did about two weeks and how much time have you saved by this little hack I've done 20 seconds and how long did it take us to figure out how to do that what about four hours so I did the cost-benefit analysis and it turned out that after 24 years she would have saved some time that's why that's why users don't like change in the user interface the cost-benefit analysis of making a change to the system is so long that it's just not worth doing it and anyway if you do save 24 years Google are going to change it in a year's time anyway so that so the solution is not going to work in the future so don't change the UI's oh and could we make stuff that works please this is the next challenge making stuff that actually works and so and if it doesn't work that we know who to blame when I'm streaming music and it doesn't work I don't know if I should be nasty to Sonos I don't know if I should be nasty to my the ISP or I don't know I don't know who's to blame I wanted somebody to blame and it should be legal I taken to court sue the bastards right yeah and your tech no your non-technical neighbor just just tell them it's not your fault tell them tell them I don't underst you know I'm a professor of computer science and I go to my neighbors though I don't understand this stuff either the exits don't you know then they feel good about themselves because they don't understand it because they think that you know the main thing about your neighbors because you're a computer geek they think you understand this stuff and and you just got to tell them no I don't understand no no just tell them the truth nobody understands it not even the people who wrote it understand it and tell them computers can't do everything don't get happy yeah just the headlights things can be small we don't need gigabytes of code the fourth kernel was like 24 kilobytes there a sporting chance we can understand them the old truths keep it simple make it small make it correct fight complexity skip over that van do anybody had a fan do yes good it's excellent what we want to do van do is Ted Nelson's idea of hypertext with no there are no broken links it's like the web Moni better there's no difference between readers and writers the web is programmable and symmetric all copyright and attributions are correct you never lose any data you've got complete knowledge of we really want to solve this this for the 404 problem before it's all problem you know where you write a web page it's got a remote link to something it works fine and then because they move that resource it's broken that is a design fault it's a fundamental design fault we'd have to solve that problem otherwise otherwise what somebody else does affect what we do it breaks our stuff we didn't ask him to do that it should be completely symmetric solve the 404 problem yes make sure we don't lose all our history these are the problems I would hopefully some of you guys will solve in the future make sure we don't lose a lot history so I start measuring things in joules I'm a physicist it's joules it's not dollars or important minimize the number of joules in your program and remember we are responsible for the negative side effects a lot of Technology just happen to make everybody unemployed unemployed we're gonna have to find ways of giving them income I mean is fine and robots are fine it should be used for dangerous and nasty jobs but there will be consequences and we have to be responsible for those consequences what we can do goodness unbreak the web make it symmetric instead of asymmetric bring-bring computation to the edge network this is far more power in these little things we're carrying in our mobile phones than there are in the sense of service we should bring that computational power back to users and make sure it's easy to program build applications that work together and are reliable and make sure the we own our data and not big corporations basically we should keep all our data on our own personal devices and only give it out on the meat no we shall seem to send a program to process our data rather than sending our data to them because we lose control of our data if we send it to them what else have we got to do reduce entropy yeah throw away your old code write less code not more and don't reuse code that's right code that's correct no edge cases and just make sure it's okay and a program that's not secure and cannot remotely control should not be written so don't write stuff that you cannot remotely control so we give me millions of people supercomputers they're all carrying around in their pockets so just let them use it and if your turn to do all that kind of stuff I've been doing this for 50 years and now I'm just telling people that it's your turn to go and do this stuff so have fun inventing the next generation of computers thank you you [Applause]
Info
Channel: GOTO Conferences
Views: 44,050
Rating: 4.8599811 out of 5
Keywords: GOTO, GOTOcon, GOTO Conference, GOTO (Software Conference), Videos for Developers, Computer Science, GOTOchgo, GOTO Chicago, Joe Armstrong, Erlang, Keynote
Id: rmueBVrLKcY
Channel Id: undefined
Length: 62min 28sec (3748 seconds)
Published: Wed Aug 29 2018
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.