The Last Programming Language

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hi everybody listen I'm really sorry I couldn't make it there I really wanted to be there I especially wanted to go out to the pubs and have some beer and and just hang out with everybody so couldn't do it sorry and sometimes life intrudes but I thought you might be interested in having this keynote anyway so I've recorded it I'm gonna I'm scythe sent it off maybe you'll find time in in the bar or something get lake o's to buy everybody a big round of drinks and then you can sit around and watch this thing huh so this is the keynote right the last programming language and i'm gonna dedicate this to my good friend kevin Hannie who well you all know what in the very late 1960s I got myself a copy of this book introduction to programming notice that it doesn't say programming what this was the book that taught you how to program a pdp-8 this thing I happen to have a front panel of a PDP and I've kept it for many many years but frame around it because it was quite a keepsake the PDP 8 was a wonderful machine learned how to program it in the 1960s and early 70s a good pdp-8 let's see that would be a 12-bit word at 4k 4k of Cour anybody remember core and you could turn the computer off and it would remember oh yeah our computers today do that too it had AM 750 kilohertz a cycle time an instruction would execute in about one-and-a-half microseconds that was it was really fast we could get lots of stuff done in that seven hundred and fifty kilohertz 4k instructions we'd have river of whole time sharing systems you could compile Fortran they are Fortran compiler that would run in 4k words amazing amazing machine it had um oh gosh 32 k words of disc if you bought the disc you usually didn't discs were expensive and but if you needed a disc well you could get one and that would be handed 32k who's gonna fit them out those are incredible amount of of disk space we didn't know what to do with it all man we had thing was the size of a refrigerator that many many dozens of cubic feet it probably took a kilowatt or more of power and and if you wanted to buy one it would have cost you in today's dollars about 120,000 amazing I have a laptop that I use a little itty-bitty thing and carry it around in a backpack it it has a processor in it with 2.8 gigahertz cycle time actually two cores so what is that define point six something gigahertz effectively that's 8,000 times faster my little laptop can execute 8,000 times more instructions than that pdp-8 kid and that pdp-8 couldn't execute one instruction in my machine now we'll do 8,000 of them I have eight gigabytes of RAM in my machine that's two million times more memory in my little laptop I have no disk my laptop I've got a little over 500 gigabytes of solid-state memory by the way do not get a disk again ever right no laptop you get should have a disk be the difference is astounding the age of rotating memories is over my little laptop takes 85 watts at most is far less than a cubic foot and it costs me well it was an expensive machine but it was less than five thousand dollars now if you add up all those differences you know if 8000 times facts faster 2 million times more RAM 16 million times more offline storage it takes one percent of the power one percent of the volume 4 percent of the price and you multiply all those together and you get this number 6 point 4 times 10 to the 22nd that laptop that I carry around in my backpack is 22 orders of magnitude more powerful than my pdp-8 was and what if we done with that power I mean to put this in some kind of perspective 22 orders of magnitude that's the number of angstrom units - Alpha Centauri what are we doing with that 20 orders of magnitude in the increase in our hardware and what have we done with it we programmers how is programming different than it used to be back then we still right sequence statements selection statements and iteration statements an assignment if and while we were writing them back then they had a slightly different form but that was still sequence selection in iteration and we're doing that today and we might think oh heavens no we've got objects we've got modules we've got all this stuff yeah it's still the same stuff we are still writing assignment statements if statements while loops our technology has not grown by twenty two orders of magnitude we've been writing one heck of a ride on that hardware but not us our technology has stayed almost the same oh we've got great tools but the material we manipulate with our hands the code is virtually the same so have we seen it all mmm have we seen all the languages there are all right let's go through a list of the languages shall we yeah I just wrote down a list of languages but in my career I have had some contact with Fortran COBOL snoball wonderful string oriented language algal Simula small talk C C++ Java C sharp assemblers lots of different assemblers too many to count probably dozens risk-based assemblers Sisk based assemblers little assemblers lots of them Pascal Delphi at forth wonderful language forth once by the way PostScript is forth just so that you know go be BCPL pl1 PLM APL Lisp scheme Scala F sharp air lang Haskell ml self Cecil JavaScript Ruby groovy Python basic Oh Kamal akhom Prolog need I go on the list of languages could be endless I'm sure that I did not mention your favorite so given all of these languages we have to ask ourselves a question have we seen them all let it out I mean not all of money that clearly you know there are going to be new languages out there and we can't see them all but have we seen all the types are there going to be new languages that are in any way surprising the way forth was surprising or the way Prolog was surprising or the way small talk was surprising are there going to be anything new languages like that any new big surprises I think that's a valid question to ask I'm not at all convinced that there are any more surprising languages out there we may have seen every type of language there is after all it's been over 50 years we've had time to explore this space so maybe maybe we've seen them all we can think about all these languages in terms of their syntax COBOL for example is well it's kind of in a class but itself isn't a Fortran Algol C C++ all similar in the way their syntax is organized small talk had a very unique syntax a fourth what a syntax that was Perl lists these languages can be broken into syntax classes the let's call it the algal class algal Pascal Delphi they all had this thing called block structure this was a a syntax and semantic component which allowed you to declare one function inside of another inside of another and so forth was actually the progenitor of object-oriented programming most of these languages use a kind of in fixed and prefix notation function calls our prefix most operations are in fixed notation small talk small talk was a prefix in fix notation as well although there were no direct operators you as such and as mix the functions and arguments with key words in an interesting way might call it a keyword language Lisp is a pure prefix language function name first arguments second surrounded by parentheses about as simple as you can get fourth is a pure postfix language all the operands up front function call at the end a reverse polish notation virtually COBOL an attempt an attempt at natural language is probably the worst idea ever to happen in software let's make our programs read like English that's just about as dumb as it can be we'd like our programs to be read a bowl we do not want to force English grammar and sentence structure into our programs our programs are after all a little more symbolic than that Fortran Fortran was an attempt to to make programming language look mathematical formula translator and that well it didn't succeed at doing that but it was a very successful language so it was COBOL for that matter but who cares logic languages Prolog for the most part organized their code in horn clauses logical and the statements that turn out to be computable oddly enough so there are many different ways to organize languages by their syntax did you know that Conway's Game of Life is touring complete that you can actually write programs by putting little dots on a screen and having them execute Conway's Game of Life I have examples of many algorithms written in game of life I've even got one of the most absurd the game of life written in the game of life there's another axis that we should be looking at here and that's the axis of semantic class languages can have a semantic class a paradigm that they follow for example structured or functional or oh oh those are semantic classes of languages we have seen Fortran and COBOL which are unstructured they have almost no semantic class at all you can do anything you want in those languages pretty much structured C is almost a structured it has a go too but we tend not to use it Pascal a structured language it's constrained direct transfer of control is constrained oh oh is another one of these semantic classes languages that restrict the use of pointers to functions that give you dependency management through polymorphism that would be in oh oh language functional languages languages that constrain the use of assignment these are um semantic classes of languages and we should talk about them probably the first paradigm ever was modular programming this was the idea that files programs themselves should not be large they should be broken up into many small modules instead of being one great big monolithic thing we could call this discipline imposed upon file size or maybe program length or module length there were some spectacular abuses of this in the 1960s where managers who heard about modular programming told their programmers they were not allowed to put more than 500 bytes in a module now this is back in the day when we counted the size of programs and bytes what did the programmers do in order to meet this ridiculous constraint while they wrote you know 480 or so bytes in a module and then the last couple of bytes they reserved for a go-to statement that jumped to the next module next came the structured paradigm Dijkstra wrote that wonderful paper go to considered harmful and in this paper he said look keep your programs limited to sequence selection if statements and iteration while loops now he did this because he wanted to be able to prove algorithms correct and he discovered that if you open if you'd let go to be used in an strained way you couldn't prove anything but if you limited your program to those three things sequence selection and iteration you could prove correctness of course nobody paid any attention to that that's not what other people were interested in what they got into is this big religious war about I you should never use go to bla bla bla now since those days it turns out that we like our programs constructed out of sequence selection and iteration because it is in fact easier to reason about them not so much the proved ability just the ability to think about them so structured programming was discipline imposed upon go to discipline imposed on direct transfer of control I got this yes another paradigm that we are fascinated by is the object-oriented paradigm anybody remember this book by Grady Booch 1988 sometime you wrote this I think you have to Torian pyridine we've had quite a bit of confusion about this what the heck is it yeah it's data and methods together oh it's a way of modeling the real world okay well we finally kind of worked out what this Ohio stuff off isn't what this oo stuff really is is polymorphism for the most part everything else besides polymorphism you could do in C you could actually do polymorphism and see if you wanted to but you had to play with pointers to functions to do it and that's just not a good idea in fact the big benefit that a language like C++ gave us was the ability to play with pointers to functions without playing with pointers to functions the language had a syntax that he had all of those pointers to functions in the V table and it didn't even let us see the V table and we just had to write virtual functions and use inheritance what oh oh in the end actually gave us 100 in the end actually is is discipline in upon the use of pointers to functions discipline imposed upon it indirect transfer of control and in exchange for that discipline we got a benefit and that benefit was the easy ability to structure our modules so that the source code dependencies opposed the flow of control in most structured applications the flow of control points in the same direction as source code dependencies in a good object-oriented program and this is how you know it's a good object-oriented program Kiba tendencies are inverted to point against the flow of control and that inversion is accomplished through polymorphism so the OO paradigm is polymorphism which is discipline imposed upon indirect transfer of control the functional paradigm what the heck is that well the functional paradigm although very old has become more important because of the multi-core problem the the failure of Moore's Law when it comes to processor speed now we're going to have to make our processors faster by putting more cores in the chips we can't seem to increase the clock speed and because of that we're worried about lots concurrency issues where we're hunting for a computing paradigm that is robust in the presence of many threads and many processors and the functional paradigm is such a paradigm it's a way of making software much much less subject to concurrent update problems so what is this functional paradigm well the functional paradigm in all would be when you boil it down to its lowest common denominator the functional paradigm is simply this discipline imposed upon assignment we're not allowed to assign values to variables we can initialize variables but we cannot change a variable once it has been initialized there are ways to do it but there's an immense amount of discipline required you have to open up a transaction and all those kinds of fancy stuff you have to treat your variables as though they're in a database in a pure functional paradigm there's simply no assignment at all so functional paradigm is discipline imposed upon assignment now I have ranted about this book before the structure and interpretation of computer programs and I will rant about it again because this book makes the point about functional paradigm better than I possibly could it goes on for page after page after page hundreds of pages showing program after program after program table driven programs object oriented programs all kinds of programs and then on page 200 and something it shows you the first assignment statement this whole book is written in at least the first half is written without an assignment statement and it apologizes for the assignment statement the authors go to great lengths to tell you how awful this assignment statement is how it ruins the model of computing if you want to understand the functional paradigm this is the book to read and understand what they're saying in here and you'll get the idea behind functional so functional is discipline imposed upon assignment all these paradigms and in all of them nothing new is added the paradigms each one takes something away from programming it doesn't add anything new they are constraints not additions the paradigms add nothing they do take stuff away if paradigms are constraining rather than adding additive how much is there left to take away maybe we've even seen the last of the paradigms maybe there aren't anymore and if there are more what's gonna be left we've taken away direct transfer of control in Derek transfer of control assignment what's left is there some paradigm that we've missed I did not talk about aspects and with intention aspects were not a paradigm that they did not remove anything they constrained nothing they added the whole notion of aspect-oriented program did not decrease our ability did not decrease our expressiveness it increased our expressiveness it added new capabilities and features and it failed but nobody's doing aspect oriented programming except in a couple of little niches it's not like that was the revolution that took over and it's not likely to be so paradigms subtract they do not add and there just isn't a lot more to subtract so maybe we've seen the last paradigm - somebody out there is saying yeah but what about graphical languages we just really haven't done the graphical thing oh yeah we have we've done the graphical thing over and over and over again we have explored graphical languages inside/outside sideways in and over and in every case they've kind of been disappointing does anybody remember probe raph in the 1980s program the goona Cara Suns systems they this thing on the macintosh lets you dude i was an object-oriented graphical language it would let you write object-oriented programs in a data flow style yeah whatever and didn't go anywhere anybody remember helix the great database language on the Macintosh beautiful data flow kind of way of setting up queries he what happened to that nothing um model-driven architecture it's nowhere yeah I mean we have had some success with finite state machine modeling although that's even better in a table than it is in a diagram there are a few that are kind of interesting you know educational things like chipwits that's that kind of fun to play with but no graphical languages just have nothing happened they then there's been plenty of opportunity and they just don't happen there's probably something about programming and text that is so well aligned that the whole graphical thing doesn't work maybe it's because when you're programming time is linear time is linear in a program and so we think of our code as being linear in an algorithm time goes in one direction so that's one dimensional text shouldn't our languages be textual uh I know there's always talk about other kinds of languages graphical languages and that kind of thing but shouldn't our languages be textual and after all mathematics is testing textual most sciences are textual the notations involved in in math and science generally textual notations so shouldn't programming be textual to I'll give you a rationale and algorithms occur as a sequence of events the execution of an algorithm is one-dimensional time runs in a single dimension so it is probably natural to model it as a sequence of statements a text electronics well yes that's graphical there's lots of stuff going on at the same time flows of current here and there and but that's not true of programming programming occurs one step at a time and even when we talk about multiple concurrent threads the stuff happening inside those threads are happening one little step at a time it's all it's one-dimensional textual so shouldn't our programming languages be textual now I'm sure that some of you out there have already begun to think about domain-specific languages what about them I mean we're always gonna have lots of domains aren't we and of course that's true we are domain-specific languages are going to be an important part of our of our profession for years to come and in fact it's probably a growing important part of our profession as the number of domains proliferate we will have more and more domain-specific languages and in fact we should strive to choose to use domain-specific languages rather than general-purpose languages for many different applications however no domain-specific languages will ever replace general-purpose languages and that's what we're really talking about in this discussion we're talking about general-purpose languages fine we'll have lots of domain-specific languages they were proliferate will have gobs and gobs of them and we should the question is how many general-purpose languages will we have now you might ask the question well general-purpose languages just aren't that important if we have lots of domain-specific languages I disagree I think that the vast majority of code written in the coming decades will be in general-purpose languages oh there will be plenty of dsls and they'll be important but it's general-purpose languages that get the real work done in major enterprise applications and in any kind of application for that matter all right we're always going to have general-purpose languages so the question is how many do we need have we seen them all so what if we've seen the last language syntax I mean there will always be different syntaxes but what if we've seen the last class of syntax the last meaningful class of syntax is there any point in searching for more at this point hey when was the last major syntax revolution certainly it wasn't Java certainly it wasn't c-sharp wasn't Ruby or Python wasn't closure the last big syntax revolution may be Prolog probably fourth it was a long time ago are we going to see another I have my doubts so what are the hot new languages right now there's a Scala that's a language that's got its roots back in the 70s it taking from a funny language called funnel who's ever heard a funnel yeah and before that of course it was derived from ml so this is a language that has its roots in the 70s that's the old idea okay it's on top of the JVM that gives it a little bit of spice but f-sharp yeah well it's kind of a variation on oh camel which is again a variation on ml and a variation on something called I swim whatever in 1966 again you know old stuff and another hot language right now closure it's Lisp yeah it's Lisp 1957 our hot new languages not new narrow they're based on old stuff again are we done have we seen it all when our hot new languages are just old stuff doesn't that tell us that we've kind of closed the loop we've come full circle that there really isn't anything else out there maybe so what is the hot new paradigm it's functional now right that's the that's the new one functional programming and why well because of the multi-core problem because Moore's law and all of that stuff right now we're all interested in functional programming it'll save us from concurrent update issues this paradigm is old it's it's ancient it's got its roots in Lisp 1957 that's got roots in ml from 1970s and it's the hot new thing there's something odd about this right the hot new thing is 50 years old so I'm beginning to think that we've seen them all that there aren't any more languages meaningful languages to explore we've seen the logic languages and the structured languages and the functional languages and I think we've seen them all and one of the reasons I think that is because we keep coming back to the old ones we keep coming back to listen [Music] [Applause] [Music] Lisp is the language that won't die how many times have we tried to kill this language how many times have we took swords out and cut all those parentheses and they keep coming back Lisp is the language that will not die think about Emacs holy cow Emacs this this editor that is immensely powerful immensely powerful why because it's got Lisp inside it it's got a nice implementation of Lisp that lets you do just about anything for a while I thought maybe the big IDE s we're gonna have the upper hand of course they do at the moment I'm starting to think though that these Emacs guys are just gonna keep chewing away and chewing away and chewing away and just blow past all these IDs cuz this language lisp and this editor based on Lisp it's not gonna die there's an old saying when it comes to lisp it's called the green sponge 10th law of programming you all heard it before but it's it's worth repeating any sufficiently complicated C or Fortran program contains an ad hoc informally specified bug written written slow implementation of half of Common Lisp who among us has not seen that so what if we decided to just choose one language and this menagerie of languages that we've been using and pick one or two we would certainly not be the first industry to have done this and many industries have decided to unify their notations maybe it's time for us to admit that these are notations and not religions and pick the notation that satisfies us the best and use it certainly mathematicians have done this there used to be dozens of different mathematical notations now for all intents and purposes there's just one biologists did this there were lots of different biological nomenclatures chemists have done this many industries eventually get to a point where they decide enough of the Babel enough of the Tower of Babel the millions of different languages it's time to just pick one and use that one and think of the benefits of doing this I mean suddenly we would have all papers written in one language all programs written in one language can you imagine no no nor worries about whether a module was written in your language or not you could just use the language imagine the benefits that have happened to physics and to mathematics and to biology and chemistry simply because we unified notation maybe we would experience a similar kind of Renaissance of research in and progress by unifying our notation so I think there is quite a quite a bit of benefit to be gained but there's something else there's yet another reason why we should unify and that is no corporate control of languages the end of corporate enslavement I'm a conservative I believe in the market and I am a Republican in the United States but having these big corporations own our languages is awful it's terrible and they use the languages as levers to twist things and contort things we the programmers have lost control of our very mode of expression that's not acceptable and has to be stopped it has to be done away with no it's not hard to do away with this we're programmers and we have the power to completely eliminate it we could write our own language if we want too many of us have many of us are we could write a language and just do away with the corporate ownership of languages and we must at some point this corporate ownership of language has to end because we don't want to be the pawns of Oracle or Microsoft or IBM we want to be able to express ourselves in a language of our choosing not some corporations choosing so what's the likelihood that we could actually pick a language you know a bunch of programmers getting them all together to choose a language is sort of like herding cats well what encourages me about this is that we've done it before we have chosen languages before not quite as globally as I'm talking about here but consider the language see see dominates every language we use nowadays think of Java and c-sharp and C++ and even Ruby dominated by the C syntax we chose a notation with C the C notation one way or another has become the de facto standard even in something like Ruby we see C notation permeating all through it so we are not incapable of making these kinds of unifying decisions it may be time for us to do a little bit more than choosing bang equals for not equal it might be time for us to instead of double equals or something like that it might be time for us to do something more some grander choice where we actually pick a language but I think we are capable of doing it so let's say that we did pick a language what would that language look like what would its characteristics be maybe we can get some insight on this by looking at some languages we know for example would this language be C well there some problems with C it's not garbage collected do we really want to go down that path again you can't do reasonable polymorphism and see I mean you can hack the pointers to functions but God help you if you do it's compiled down to a real machine there is no virtual language for C it just seems out of focus with where we are now we don't want to be tied to Hardware any longer the language does not allow you to modify it while it's running and you cannot you know mix fiddle around inside the running C program while it's running it's not homo iconic it's C++ what about that that's all the same problems that C has and boy is its syntax heavy Wow learning all that syntax is just horrible and now I mean the Standards Committee has just gone completely ape all right they're just adding syntax lots of little fiddly stuff in there I think I'd rather not learn all that stuff um Java that's it's not a functional language it doesn't have the the solution to Moore's Law that we're all hoping for so Java it's pretty good language other than that but it's a little syntax heavy and maybe we should do something better than that c-sharp same thing same thing C was c-sharp and Java I mean no difference they're the same language so what should the language look like what should its attributes be so what semantics class should this language belong to what paradigm should it support should it support just one or all of them should it be a functional language should it be a structured language should be an oo language or many of us would probably prefer that it was a hybrid language but let me make this statement about hybrid languages when a language belongs to all semantic classes it doesn't belong to any of them because remember that paradigms semantics classes are about restrictions if your if your programming language allows you to do assignments then it's not functional even though it might allow functional programming Scala for example is not a functional language you can do functional programming in it but the language itself does not force the paradigm see is not a structured language you can do structured programming in it but it's got to go to so you can do non structured programming in it C++ is not an object-oriented program because it has pointers to functions and if you can deal with pointers to functions in the raw you're not an object-oriented language so the hybrid languages keep all the power that the paradigms have been trying to constrain hybrid languages don't belong to any functional class they aren't paradigm based languages they are anything languages they're unconstrained languages what do we want our language to be do we want it constrained or do we want it to all the power the power Spock here another thing we want out of our languages is simplicity and by that I mean simplicity of syntax think of a language like forth there's almost no syntax think of a language like small talk almost no syntax or Lisp again almost no syntax just lots and lots of parenthesis now think of a language like C++ not I love C++ I do you know a wonderful language but there's syntax there think of Java syntax think of Scala syntax I think we've had enough of the syntax having the syntax heavy languages I think we've had enough of language lawyers it would be awfully nice if our language had a very simple syntax so that we could focus on semantic issues instead of syntax issues still another attribute of a programming language that I think we want is polymorphism oh we want dependency inversion we want to be able to control the the way our modules depend upon each other we want to be able to set up our modules so that the source code dependencies oppose the transfer of control the flow of control and that's what polymorphism gives us so any language we choose should have polymorphic ability but that's not what an oo languages an oo language gives us a constraint it says we can't use pointer to functions we must instead do our dependency management solely through polymorphism I think this is important I think we want our languages to be polymorphic and constrained I think we want the discipline imposed upon indirect transfer of control and we want our language to run in a virtual machine this is another lesson we've learned over the years we don't want to be bound to the hardware we don't want to know about the hardware we don't want to have to always run our machine on an Intel platform when there's all these other platforms out there yeah well anyway we want to be able to run on any platform pardon me that we want to and so we want virtual machines whatever language we choose should be a virtual machine language whatever this language is that we choose it should also have access to all of our frameworks it should for example work with the JVM it should be able to work with Java Java should be able to call it and it should be able to call Java c-sharp should be able to call it and it should be able to call c-sharp the your virtual frameworks that are out there should be able to work with this language without any problems we obviously don't want to divorce ourselves from the vast libraries of functions that have been created we don't want to throw away these these massive enterprise frameworks so whatever this language is it will have to be able to work with those with those frameworks well and there are a few contenders I mean there are versions of Ruby that work on both of these platforms there's versions of Python that work on both of these platforms there's groovy that works on the Java side and I don't think it'll ever go on the net side and there's closure that works on both sides as well so we want a language that fits in both all of the virtual frameworks that are out there so that we can maintain access to our libraries I think we want this language we choose to be structured and by that I mean it should not have a go to it should it should impose discipline on direct transfer of control I think we want it to follow the structured paradigm which means it can't be C or C++ they have those in them okay we want this discipline imposed upon direct transfer of control so Java no there's no go-to in Java although they do have those dumb numbered breaks c-sharp I think there's a go-to in c-sharp but nobody uses it closure no go-to Ruby don't go to as far as I know we can do languages without a go-to and I think this language that we choose whatever it is should not have a go-to and another thing we've learned is that we want our languages to be garbage collected yeah we've learned our lesson on this what we don't want to be doing manual memory control anymore my god how many times have we been rebooting it midnight because of horrible memory leaks and stuff like that we've learned our lesson on this and Apple are you listening an objective-c really Objective C how old is this language 19 what 80 1979 Brad Cox and Vince's sing and it almost died we almost got rid of it it was in the garbage can when Steve Jobs pulled it out of the garbage can and resurrected it to help us forever anyway garbage collection we want our language to be garbage collected M this is excellent whatever language we choose we want it to be fast C is fast right we want a language that really moves yes yes yes I know I know I know hey we wanted to move along quickly we want it to be a snappy language C is a fast language assembly language fast language C++ is a fast language Ruby not so fast in Python little fast to closure pretty fast quick language f-sharp test Scala fast basic slow we we don't want these slow languages it's gonna have to be snappy the next thing we want is a language that is symbolic we don't want the language tied to the hardware we don't want it to be like a machine language or even have any of the trappings of the hardware we'd like our language to be symbolic abstract C is a language that is too close to the hardware we know that an int for example is 32 bits C++ has the same problem even Java has bits of that problem it's close to the metal that's tough to say Chavez close to the metal but it has trappings that are close to the middle small talk is a language it's not at all close to the metal closure as a language that's not at all close to the metal Ruby Ruby not even close right so we'd like our languages to be abstract so that we're not coupled to the notion of hardware and then finally we want our languages to be textual we've tried the symbolic language before we've tried the graphic language excuse me we've tried the graphic languages before and although they're interesting they just don't really do it for us and something about the programming domain like the mathematical domain is textual in nature there's something serial about it there's something one-dimensional about it the reasoning inside of a software module is one-dimensional it proceeds in a direction in time so it's not at all clear that a graphic language is what we want we probably want a textual language yeah did you okay yeah another language attribute that I think we want is homo iconicity I know that's tough to say we want our languages to be homo a conic in other words we want the languages to be able to manipulate themselves the running program ought to be able to construct more running program or alter more running program just like a machine language program can do and just like most lifts lisps can do we want this ability to be able to manipulate the code while it's running ruby has some of this capability we call it monkey patching or or meta programming even Java has a small bit you can manipulate byte codes but God who wants to so whatever language it is that we choose probably should be homo iconic by the way Ruby is not homo iconic neither is Java oh yeah you can reach in and fiddle with the byte codes or goof around with the with the Ruby inheritance and class structures but that's not quite the same as saying that the the code is the data the data is the code that's a very powerful statement and I think we want our languages to have that capability so what language is it that meets all these criteria what language would I choose if I had to choose today probably closure it's the only one that meets all the criteria I've outlined I think it's a good language I think it's an interesting language will it be the language Oh probably not probably not we will probably continue to to twist and turn in the wind for a while but I imagined that we will choose a language soon and by soon I mean some number of decades where that number is probably larger than one I presume we will choose a language I presume that that language will have all of the features are just outlined it might even be something that looks like a lisp maybe like a closure so take a look at closure see if you think it could be the last programming language well so thanks everybody I appreciate you watching and sorry I couldn't be there I really really wanted to be there and have a few pints and and listen to some great talks but I hope you enjoyed this one I wish I could have delivered it live guys have a lot of fun and maybe I'll be able to get there next year I sure hope so talk to you all later
Info
Channel: Clean Coders
Views: 277,544
Rating: undefined out of 5
Keywords: Clean Coders, Clean Code, Uncle Bob, iOs Development, Coding, Javascript, Computer Programming, Robert Martin, Computers, C++, SOLID Principle, TDD
Id: P2yr-3F6PQo
Channel Id: undefined
Length: 53min 17sec (3197 seconds)
Published: Wed Apr 01 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.