Live: Discutindo Orientação a Objetos com Robert Martin

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hello okay i think uh we're live already so good morning everyone uh we have with us the great mr robert martin aka uncle bob actually i i forgot to ask do you prefer me to call you robert martin bob bob is fine okay okay oh it's okay so thank you again for your uh your time because i know that you you're very busy and just so people know why we're starting a little bit early uh bob has to catch a flight so he has a hard stop in an hour and a half at most so let's try to make the most out of it and i was explaining to bob and i want to explain to everyone as well people know that in my channel i try to explain programming uh not the house and wise tutorials and step-by-step and why you should choose react or java or whatever but i prefer to explain why things got the way they are today through history and i think there's no one no one better to explain history to us than mr bobby himself because he actually lived and actually helped it to shape many of the things that we use nowadays and object orientation is a topic that people has been asking me to talk about for a long time and it's a very very big and hairy subject so i think the best thing we can do is go back in time where when times were simpler and we can explain possibly how how things evolved to be this big mess that we're in right now and i want to start uh so i think people everyone knows who mr bob is but just so maybe people in the future when they get into the channel and see this video that's going to be recorded mr bob is known for the clean code uh series of books so clinco the clean coder the clean architecture but i think many people uh i think most of the programmers now not only know about but they want to be the clean coder right proper clean code and you provide i think training uh today right oh yes yes i do a lot of training in in clean code and object-oriented design and and functional programming and lots of other things like that in the last year or so it's been mostly zoom stuff but i'm looking forward to getting back in front of live audiences nice nice i think if we have the time we're going to reach to the point where you uh wrote the clean code book but as our time is short i want to go back down memory lane and i started as a programmer in the late 80s my first line of code was around that time with basic uh i did some debates and clipper stuff but you started like 20 years before me i think it was the early 60s that's correct well probably mid my very first computer program was written in 1964. wow that was a little plastic computer that had three flip-flops and six and gates and the programming was done by putting little tubes on pegs of this little mechanical machine it was a true finite state machine but very very limited and of course i was 12 years old so i had just the basic knowledge of boolean algebra in order to do what i wanted this machine to do awesome and this is the first question because nowadays people want to become a programmer because they see influencers youtube channels events how does one go about choosing computer programming in the early 60s before the internet was a thing before computer publications were a thing probably what was the environment that made you choose programming what kinds of uh motivations you had to choose that line of work it was very interesting time there were no computers available to people so my mother bought bought for me um this little plastic computer in 1964 it was a birthday present my 12th birthday present and uh it was just a science experiment right i was a scientifically oriented kid i liked space i liked anything scientific my father was a science teacher so she bought that for me she thought it would be interesting to me i just completely focused on that thing once i had it i i needed to know how to dominate it i needed to know how to make that machine even though it was only three bits i needed to know how to make that machine work and when i when i wrote my and the word write is not really quite correct but when i formulated my first program for that little machine and i saw it work i was a programmer that was it i knew what i wanted to do for the rest of my life i was going to make machines bend to my will and and when and when uh uh did you start actually working in the computer markets and when you made the jump i think after you graduated probably uh what what what were the options you had back then so my first job as a computer programmer i was 17 i was still in high school and my father went to a nearby insurance company and they had some computers there they had some old honeywell computers and my father told them you're going to hire my son for a summer job and you're going to teach in programming my my father had a way of walking into the office of the ceo and making demands like that and sure enough they gave me a very temporary job and i spent uh oh two or three weeks uh programming an h200 honeywell 200 computer which was similar to an ibm 1401 in those days very primitive all in assembly language punch cards they they let me go after about two or three weeks as as per the agreement i went back to high school i finished high school early i did not go to college i never graduated never got a degree at the age of 18. i went back to that same company and they hired me as a programmer to work on the brand new mini computers that were just starting to come out and by the way you people call it mini computers but that's only because the mainframes were like room size and the mini computers were like fridge size oh yeah the place i was working on had two ibm 360s these were massive machines right multi-million dollar machines the biggest one was 64k bytes that was just enormous right and then the the one next to it was 16k bytes that was where they did most of the normal work and then they they got a client and the client needed a time sharing system which my buddies and i put together for them at the tender age of 18 and they wanted us to use these new computers these cheaper computers called mini computers they were the size of oh the processor was the size of a microwave oven the actual machine was the size of a restaurant freezer right exactly and uh back then you only used assembly directly because uh yeah because that there was not enough room and resources for any higher level languages right you could you could write cobalt on the ibm 360s but most of the programmers even then used assembler language on the 360s for the mini computer there were no options it was going to be machine language assembly language and that's what we did we had 64k in that machine and we wrote a a time sharing system to do to do accounting remotely we had 32 terminals coming in from from outside and they would type their commands and do union accounting stuff and print out reports on teletypes it was fascinating and we wrote every single bit of code that ran in that machine there were no operating systems there were no libraries there were no frameworks if an instruction executed in that machine it was because we wrote it got it and uh not only the terminals were and the terminals were super slow as well right you were right and you waited 110 bits per second 10 characters per second uh yeah so that kind of speed yeah i think people can't imagine if they saw in the movies like a telegraph machine or something like that it would be similar i would say in terms of feeling uh so it was slow so you didn't have the the uh opportunity to write anything and just refactor it that wouldn't work right no i mean our our program was on punch cards uh we would compile it by running the these very large decks of cards through a card reader that could read 10 cards per second if you were lucky so a compile would take you know 45 minutes to an hour just to read the cards we eventually got a magnetic tape that would and we put all the card images on magnetic tape that was about a year later and that sped the process up by a factor of five or so and we're talking about the late 60s early 70s right very early 70s early 70s very early 70s and by by that time than going uh straight to our subject of object orientation we're talking about assembly we're going to make a big jump because uh it was in the early 60s late 50s that ole johando and christine nygard started the research that culminated in simula language which was a primarily used fighting for uh simulation and it made it easier to uh to mold to have the objects and the in place lots of abstractions that i think was very costly for the machines at the time simula 67 i think was the most famous one have you ever had the opportunity to work with simula and what did you think about that having having worked with so little resources how did you think about all all this new stuff that was coming out so doll and nygaard got in got into this because they were writing a simulation in algol right and they were they were simulating the ships going in and out of the norwegian fjords because oil had been discovered in the north sea right so they were at the university of oslo i think and they were they were doing that simulation and as they did that simulation they started to realize that they could modify the algol language in order to make it easier to do simulations and the way they modified the language was to take the the function call stack frame which was on the stack of course and they moved it to the heap and so a the initial function which created the stack frame became a constructor and all of the subsidiary functions became member functions this is in the day when the languages allowed functions to declare other functions inside them and we've lost that uh most of our modern languages don't allow that anymore and so now we have object-oriented languages yeah the closest thing i would say would be closures or something like that the clones can do it in closure javascript you can do it in a few others but most modern languages do not have true block structure we've lost that oddly and and somewhat sadly it's unfortunate that we've lost that in our languages i did not become aware of oh until probably 1986-85 i didn't even know what existed i was working in assembly language uh on a whole bunch of different machines i was working on 8088s and 8086s and we had begun to use the mpm operating system 1pm never heard of that one well you so digital research was the company that made it em and then they made mpm which was the multi-processing system for oh cpm people that don't know i think it's uh the closest thing that people know is dos because i think it was inspired by cpm and then you had mpm that's an interesting story because digital research was the company that was supposed to sell their operating system to to ibm yes the ibm pc dots but they showed up late for a meeting and bill gates happened to not show that meeting and the rest is history bill gates actually bought that pc doss i think it was i think he bought it very kill though thousand dollars or something yes like that and then handed it off to ibm and made billions it was good good investment and the poor guys from digital research who showed up late well [Music] yes they were looking at billions of dollars and like that could have been us and it's fun because you mentioned uh algo i forgot to to say that but uh back in the day i think before the 80s one of the most used languages that were not assembly was probably algol right in the early early to mid 60s algol was very very popular later on as the 60s went by the the languages like fortran and algol gave way to other languages like pl one uh and and then in the late 60s c showed up c in pascal and uh there was a little war fought between the c programmers and the pascal programmers and the c programmers won that war hands down yes in the language uh except the guys at apple who thought for some reason that pascal they did the macintosh in pascal which they later had to change to see but yes but because the first of the type wars the strong thing the strong static typing versus well in the case of c no typing yeah it it's uh this is another thing that i like because nowadays people still think the languages are stagnant they it's either java and c-sharp or the new stuff like kind of closure or elixir but back in the day you had algo you had fortran and the languages that came after that were inspired by algoso modula so simula so aida for example uh so they were all algo like in syntax and feel before uh we had uh kernighan and the others doing the bcpl and c stuff uh did you did you see that transition going what did you feel about that uh jump from the ogo style languages to more c-style languages even in the late 70s you could see this happening there were two streams of languages going by there were the the algolish-like languages which was dominated by pascal and and a few others like that and then there were the c languages which really had their roots with fortran so this fortran thread kind of went through into c and then later c plus plus and the algol thread went into pascal and then modula and then ada and then languages like that and and the two have kind of unified at this point nowadays if you look at a modern language like java or c sharp and i use the word modern advisedly um you can see elements of both in there and unfortunately some of the best elements of both are missing [Music] but easy would it be fair to say that maybe pascal is the last language that is more algol-ish i don't know i would think modulo still still qualifies uh delphi delphi was kind of the object version of pascal so you know an attempt to bring the simula-like stuff into the pascal world oddly enough it was simula that inspired yarner strewstrip to convert c into c plus plus so a bit of algolish like stuff managed to get into the c family of languages even back with yarness trousers yeah i think i i remember i was actually i did mention about this book uh from streustrap that wonderful book yes and he was complaining exactly about the rigidity of pascal and then he inserted the simula style things but he thought that simula was good for small projects but not too large projects because uh the design of the language i think was too ambitious for the time probably he complains that garbage collection was taking 80 percent of the time in a machine that did not have many resources i think it's important to say uh that nowadays we have multi-core 32 cores 3 gigahertz 32 gigabytes the back in the day at that time late 70s what was the state of the art in terms of computers and yeah we had to walk to school in the blizzard and it was uphill both to school and away from school in the old days we had very few resources we thought that our machines were very fast and had lots of memory but compared to today it's kind of pathetic and it's very difficult to understand especially for a new person coming in it's very difficult to understand just how incredibly wealthy we are in in cycles and bytes we we you know we have hundreds of thousands of times the capacity of simple execution speed and memory capacity and if you start adding in the size and the cost and the and the disk capability of course there are no disks anymore but the offline storage capacity the number of orders of magnitude start to add up into the 20s i mean these machines are literally 22 to 23 orders of magnitude more powerful than the machines that i was playing with when i was 18. exactly and when you were in college uh you were you you studied computer programming college right no i didn't go to college oh i see no i i was teaching myself how to program nice my father got me books on on assembly language on kobo on pl1 on fortran i was 17 years old i devoured those books i read them and i read them and i had no machine on which i could test any of the programs that i was writing so i had to execute them in my head and uh and your the computers that you had access had punch cards you mentioned right yeah once i got a job i had access to a computer that was yet driven people don't realize that possibly if you had uh to move moving software back then was actually moving a shoe box of cards in them right yes the source code control system was my desk drawer if you wanted to check out a module you went to my desk drawer and you checked it out and there was a little it's a physical drawer did you ever had the uh the problem of dropping a shoebox of cards and all you did everybody did right sure then the people who designed the punch card system came up with the solution to this long ago they reserved the last six columns for uh sequence numbers so you were supposed to punch sequence numbers in the last six columns and then if you dropped the deck you could just walk up to a card sorter which was a machine roughly the size of a a a mechanical lathe in a machine shop and you'd run the deck through that and it would sort the cards of course nobody did that because no one writes a program from the beginning to the end you're always sticking cards in and taking cards out so what we did instead is we would take the deck of cards and we would get a magic marker and we would draw a diagonal line across the top of the deck if you dropped the deck well then you just had to get that diagonal line to line up again that's a good yeah maybe one or two cards without a border yeah it won't compile and then you know yeah because people take for granted that we have ides and copy and paste and stack overflow the i i would imagine what would this the physical stack overflow would be back in the day we didn't have an internet you didn't have email exactly there was nothing there were trade journals you know you get a magazine once a month that was that was considered fast back then nowadays yeah as fast as you could get you could you could write to the digital equipment user group and they would send you a month later they would send you a magnetic tape that you had to pay for and on that magnetic tape would be a whole bunch of interesting software written by other people who had digital equipment computers like pdp eights or pvp elevens and that was how we shared software in those days nice and that was late and then you mentioned uh going back that you you only heard about uh or object orientation in the early 80s probably was it with c plus plus already or no no that the very first thing i heard about oh ooh was articles about small talk and the small talk machines were multi-million dollar machines because this whole bitmap graphics thing nobody had done that right so these machines were horribly expensive the guys at xerox were playing around it was some kind of researchy thing they were doing so we would read articles about that and go oh yeah sure yeah no we're not doing any of that there's directly assembly languages and microcomputers actually that's the reaction people still have when they see apple doing some new animation stuff oh we don't need those animations that's the but that was the i think that was 1972 small talk with the xerox alto then allen k then ingles and others were dabbling with this idea and it was very different from everything that came before but at least uh visually speaking oh yeah it's wildly different very very different um the company i was working for in oh 1980 probably got a um get the early word processors from xerox and and these had bitmap graphics displays and they put real fonts up on the screen black and white color black and white they had touch pads not not a mouse but they had a touch pad which they called a cat because it wasn't a mouse uh and they had a file system which had icons of documents and folders and you could move documents into full this was just mind-blowing and all the you know the the secretaries who were the ones doing the word processing they were kind of ho-hum about it but all the programmers would just gather around and look at this damn thing and go holy cow someone's actually done this for real the machine that that executed on was a z80 wow microprocessor a zylog 88 microprocessor they managed to get all that bitmap stuff in black and white executing oh wow two z80s i should say there was it was a dual processor i think i saw an experiment that i can't find anymore online it was a i think i believe it was a master system video game they had a z80 processor and they tried to retrofit uh the early macintosh os to run on it of course very slow very sluggish just a proof of concept that it could so that was before the days of the mor the motorola uh 68 000 so uh it was slow it didn't i think it has 8k of memory something like that you could put 64k of memory into it as an 8080 yes but higher than that but you know and so so you saw the those uh xerox machines on articles and magazines but what was the first uh ol language you had to work with so i i got a um i got a logo processor to run in one of our 8080s and i wrote a little small talk simulator for that now it wasn't it was really it wasn't really small talk it was just a little self multi simulator it kind of had small talky like facilities a little bit of dynamic polymorphism and i was able to fiddle around a little bit with the ideas which really intrigued me this idea of dynamic polymorphism was really kind of brand new and then and then apple came out with a a disc for small talk running on the macintosh and i fiddled around with that for a little while by the way it was kent beck who was on the team who was writing that for apple so this was in what 1985-ish right and so i fiddled around a little bit more with that and i was sold i was sold on the concept and then along comes jarnis true strips 1986 book the c plus plus programming language which i devoured you know that was the uh it was it looked just like kernaghan and richie so it was an obvious uh evolution from c to this new language the new c c plus i devoured that book and i absolutely determined that i was going to get a c plus compiler and start playing with it you could buy one uh for thirty thousand dollars wow it was tough for me to convince my boss to spend thirty thousand dollars on a c plus plus compiler the price went down rapidly after that and i imagined it was a hard sell because adding all those abstractions in that back in the day you would lose performance so how would you justify for someone that was not into the programming and didn't understand the programming thing how do you tell a businessman that you need to spend 30 000 on inheritance exactly here's what you do you tell them that this is a better way to model the real world that's that's they they actually did that right so i can see that you were excited about small talk the same way people nowadays are excited about i don't know elixir or closure those the new languages and i think the feeling is ev every time is the same you see something like oh this is completely different from the way i do things i want to do this even though i can't have that particular language i want to implement the same features ish in my language i think that's how stroopstrap also did c with classes and tried to bring some of the similar stuff into c and that became c plus so i think that's the feeling right that's definitely the feeling and it wasn't so much based on language it was based on these concepts it was the way that you could use the language so so i was interested in oh oh because hey this oo stuff is pretty cool and it really didn't matter whether it was small talk or c plus or objective c which was another factor in here objective c came around in 1983 and brad cox infinite it fed to that because he was an old small talk programmer yes wanted to do small talk in c and i remember taking a trip that was probably 1986 or so uh taking a trip out to the west coast just to visit a company that was using objective c and stare over the shoulders of the programmers as they wrote this interesting object code and how how i envied them and i really like objective c more than c plus plus but that's my bias because i never actually work it a lot a long time with c plus plus but objective c feels more like small talk yes people don't like the bracket stuff but i actually like it the way message passenger passage is done in objective c more than the the syntax of c plus plus i think it's more fluid i don't know if that's a good way of describing it but uh objective c definitely i think the 80s were uh the because of apple because of xerox uh they tried to crack this graphical stuff because no one knew how that should function and uh they added object extensions to pascal object extensions to see to try to make those languages more suitable to deal with graphical components user interface inputs and stuff like that so did you work with uh gui programming in the 80s um yes in the late 80s well i i i owned a macintosh at this point i bought a macintosh in 1983 but right white when they first came out and so i was able to write in c not in pascal i got a c compiler and i was able to write gui programs in c so i had a fair bit of experience with graphical user interfaces by the time they actually went mainstream uh by 1988 i was working on sun micro systems and they of course were graphical based the spark stations had nice big monitors with you know black and white uh screens no color yet and we did a fair bit of of um graphical user interface stuff with that the coupling between graphical user interfaces and object languages is entirely artificial there is no compelling reason why you have to do object languages with graphical user interfaces and in fact most of the early graphical stuff i did was in c it wasn't in c plus plus it was only much later that that we started doing c plus plus with graphical user interfaces um so that coupling is very tenuous it's not not not obvious at all and nowadays by the way i do a lot of graphical user interface enclosure which is not actually an object-oriented language but it but it has some object-oriented features sure and i want to go back a little bit into the early 70s because there's one thing that i find curious because you wrote about uh now going back going to the 2000s you wrote about solid the solid principles and there is one principle that i like uh particularly the liskov substitution principle because uh it i i was curious about who liskov was barbara liskov and i she's not dead yeah she is exact sorry and it was it is very interesting because she wrote very important papers for example for the byzantine fault tolerance stuff that we use on networks today and she was also involved in design i think implementation of the clu the clue language have you ever used that language but uh that's interesting because it was one of the early languages i think was developed in parallel with small talk because small talk 72 clue is 73 we didn't have internet back in the day so no github no forks but she came to several features that we take for granted in object-oriented language such as abstract data types call by sharing iterators parallel assignment so many of those features that we now use in java or ruby or whatever and she was doing that back in the 70s and i think the early to mid 70s were starting to coalesce what we the features that we think about when we think about object orientation such as garbage collection uh constructors inheritance and uh in my mind at least i would say that small talk is the culmination of what i think of object-oriented languages uh what do you think about small talk and the object-oriented features that we we try to define as oo small talk was um the product of a bet um that somebody made with allen k that he couldn't write a language in n days i can't remember what n was and so he came back in days later with small talk uh he later on said that that was a big mistake he should never have released smoke history repeats itself right with javascript was the same yeah so um is small talk kind of the definitional object-oriented language and the answer to that is no it's not it's a very interesting language it's dynamically typed it does have dynamic polymorphism uh but it does not have a number of the features that say c plus or java or c sharp have so there's quite a bit more to object orientation than small talk if you want to take it down to a very reductionist view small talk might be the simplest possible object-oriented language maybe clearly c plus plus is not i agree very much agree i think those are two extremes well definitely apart from each other yeah and even uh small talk was uh an oddball because uh i don't know if it since the beginning it had this image-oriented environment it closes itself in a virtual machine like environment where you can save the state restore the state and have live objects i think that that concept is very difficult to wrap your mind around if you're in the 80s for example that concept was prevalent in a lot of of uh environments like the 4gl databases so back back in you know we talked about languages going in generations first generation second ship nobody knows what these generations actually mean but there was a period during the 80s where they came up with all these 4gl databases things like foxpro and stuff like that and they all had this common characteristic of image when you created a data structure it actually stayed around it didn't disappear when the program exited so it became part of your environment that you could add more and more programs too and so on ma small talk had that feature and it was one of the reasons that small talk failed as a language most programmers could not get their head around this idea that there weren't any source files how do you check something in and out of source code control if there's no source files now small talk had a solution to that but it was difficult to get that into your head i think it's still difficult because i i tried to use the uh nowadays we have open source like squeak and pharaoh i think it's base note squeak and when you open that environment it's not obvious what you should do uh where do i write the code where should i run it it's very very specific to that environment and you then you go from there then you go to sun and i think at sun did you work in the java project or no i didn't work at sun i worked at a company where we used to oh okay right yeah we were doing telecommunications stuff very fascinating stuff lots of gui diagrams on the screen and network diagrams and stuff lots of very cool stuff i did in the 80s yeah and then in the 80s uh the 80s it's when the we had the breakthrough of microcomputers the personal computers but uh and it was very early days so you didn't have a lot to work with uh dos was the pinnacle of what pcs could do in the 80s and uh then the macintosh came with the graphical user interface but in the serious programming corporations uh i think ibm uh honeywell and the uh what was the others uh then you had deck and sun in the workstation and mini computer stuff so how was that environment because it's fun because i asked for new programmers young programmers today several of them don't even know what ibm is nowadays itty-bitty machine um so even in the late 70s 1978 1979 it was becoming very clear that the mainframe computer companies were behind the types ibm was behind the time uh burrows was disappearing rca was losing markets here it was it was all going away and the operating systems they were using were just wrong just terribly wrong unix had already begun to become popular and it was it was a kind of background thing it was an underground you would get a unix-like system on one of those dec decas tapes those user group tapes that you could mail in and get a tape from and then you could get that running on your pdp 11 or you could get working on your vax or you could get a shell that would run on the vms operating system on a vax but it would make it look like unix and more and more programmers started to use this unix-like feel even in the late 70s and it was very obvious how this was going to go right sun microsystems eventually just went okay it's going to be eunuch sorry you know uh what does sun stand for i don't remember university network that's what we stood for stanford university network and that was of course the unix system unix networking systems and it was sun who came up with the mantra the network is the computer it's not the individual processors it's the whole network of course we live that world now yeah they were very ahead of their times and i think even java is the is the poster child of their ambition that still stands today so i think we did something interesting so sun was absolutely dedicated to c plus plus they were that was it that was their language c plus plus everyone's going to be doing c plus plus they the spark station came with the c plus compiler it was the gnu compiler of course you know the open source one but everybody had to do c plus plus and then along oh you know 19 what 89 19 no no later than that uh 95 96 97 that time frame the internet starts to poke up and there's this html stuff these url things and no one really knows what they are and uh sun decides that this is going to be really important and in order to sell their hardware they needed to they needed to convince the programmers that the programmers wanted spark stations and what better way to win the programmers minds than to give them a language so they they they got this language called java they actually actually got it from a guy uh james gosling who had created it a few years before for a small project that he'd been working on and he had called it oak he didn't like c plus plus he made a lighter friendlier c plus plus he called it oak and then sun says ooh oak we should call it java and then try and win the hearts and minds of all programmers and it worked yeah it worked it worked yes yes and that was the sort of yeah it was the mid 90s and the that the whole story i think it was a turbulent one because we we go from ada togo to smooth to small talk object pascal objective c c plus plus mainframes mean computers microcomputers so the 70s and 80s were were really uh exploding in new stuff how did you keep up with all of that back in the day without the internet without stack overflow so very interesting times right every 18 months the power of the machines would double and and when you are living that that's a slow pace okay every 18 months everything doubles okay we just have to buy new computers and buy better hardware and oh we can write a little more software now we could upgrade from 64k to 128k oh we can go for 128k to 256k it felt slow looking back on it of course was absurdly fast it was exponential growth but you don't feel the exponential growth when you're in the midst of it and it's got a doubling cycle of every 18 months as that progressed we got better networking at first it was all dial up of course you know dial up networking at 9.6 okay and that was considered fast i remember that speed i used that six that was lightning fast that was you could send a 12 kilobyte file in seconds and 12 kilobytes is a lot of text it's like a whole volume of a book a big book so i remember that feeling of empowerment that you could send all that information in a few minutes i remember the first time i sent an email across the country it was probably 1985 or 1986 and it was through dial-up but we managed to get into the backbone network and and then we could email people anywhere who had an email addresses it was so much power of course then it became junk mail but but yeah those days you read every single email because anything that came in by email was by definition important yes i was using bbses and fidonet and stuff like that it was very interesting because the emails from bbs's you send a message you waited a day for it to sync with the other server then the other day someone would receive it and then reply back and so there was a 24 48 hours window between replies and i i think the now that we got to the 90s and that's interesting because sun it was the uh the most uh like technology based company in the 90s everyone it was the equivalent of a google in the 90s i think something like that and they they had java and they had this whole concept of computers the network which was very ahead of their time so they got the timing correctly because they got java the internet was just starting the gui became prevalent and the text-based os's were relegated to a more serious programming academic corporation but the consumer was hooked into the gui so i think everything coalesced for sun to become that icon beacon of technology in the 90s and the dot-com era was just starting and so people was pouring money into any idea that came on and java just took off uh as d language uh the one language to write everything so you remember those days right oh yes i remember them well i was doing lots of c plus plus in those days and along comes java and java's the lighter weight version of c plus the lighter front at first i thought it was absurd you know who's who's going to run code that executes on a virtual machine for god's sake virtual machine is too slow no we have to write in c plus which is fast and then and then of course of course you know the machines got a lot faster and the jitting compiles compilers got better and java just kind of became the interesting language what's very interesting about that is that java was the strategy that sun microsystem used to try to dominate the internet it was also the strategy that killed them yes i agree the right ones run anywhere approach where the os would be written in java the browser would be written in java and they actually had a java browser that would run applets natively back in the day i think they were working on chips that would run the java the op codes of java yeah but that all went away and it all went away because ibm came up with a strategy to kill sonny and that strategy was eclipse right i remember because uh my first ide was simontech cafe then i i had people working with ibm's uh visual visual what was it visual age yes exactly java later yeah yes and then i think the netbeans came out or eclipse came out i don't remember who came up first but eclipse just took they got the the slowest part of java that was the awt and they create the sw they would buy into native libraries and make it faster uh ish but it was not 100 written in java so that was a fun proposition for sun to swallow i think son lost that war even though they had you know gone out ahead of everybody for a while they lost that word and and they're gone yeah and it's it's important to look at the history of these really big dominant companies right sun microsystems gone digital equipment corporation gone exactly and they were big for our time oh my god yeah they were the google like you said they were google so could that happen to google yeah yeah yeah people don't people don't think that way because they they feel like oh google always existed so they will always keep existing but things go away if bad decisions are made yes one bad decision it's just one bad decision yes it's gone exactly and then in the in the 90s with all the explosion the dot-com era it was fun because there was another uh another line of thought that that converges that same point and i go back a little bit to the 80s because then i we need to talk about grady booch and ivor j cobb son james rumble and i remember i was in college and i was hearing about this oo stuff and the different ways of expressing ooh such as the omt the oose the booch method so there were different methods of expressing designing the objects so uh and then they decided to join forces into the rational software corporation and join the methodologies into what would become uml the dreaded uh rational unified process uh what can you tell us about that story where do you want to begin um so rational rational is a company that started as a hardware company they built a machine called the r1000 focused entirely on ada right the ada language had been adopted by the defense department and it was going to be the language of the military and the government and of course it never did it kind of physically but but in the early days they sold lots of machines into the defense department they had a software group that was absolutely brilliant grady booch was in there dave stevenson was in there these guys designed systems that were the first context-sensitive compilers you and i would recognize them right they could complete uh words they could you could interrogate the the software um you could get a vision of what was in it they they held the software in an internal representation and they they would reflect it out as source code yes just like double reflections very similar to intellij it was the first real ide and they sold them for a lot of money and they sold them to the defense department but ada started to shrink and rational needed something better to do so they moved out into c plus and they tried to dominate the c plus space and in the midst of all that you've got grady who is writing books about object oriented design he wrote probably the most famous of the early books 1990-ish time frame uh object-oriented design with applications and this book took the software industry by storm every software developer had to have a copy of i have one of them now first of all the name is great grady boots you're never going to forget that name yeah but the book was spectacular and the the book first of all it outlined object-oriented principles very well but secondly it drew pictures with clouds and arrows things yeah i remember the clouds yes that's just incredible so that i i i got involved with rational in the very late 80s in the early 90s something like that as i i started to work as a consultant or a contractor for them on the first release of rose which was the tool that would draw these diagrams the tool didn't do all that well the whole notion of the diagrams although very very popular uh came under a lot of criticism because there was another guy whose name was jim rumbaugh who had written another book similar to grady's but it used rectangles instead of clouds of the battles that had to be fought over that and then rational these guys were not stupid these rational guys guys who ran rational they found a way to hire jim rumbaugh into rational and then they went and they got ivar jacobson and they hired him into rational and they formed the concept of the three amigos grady and and they were going to come up with the object modeling technique mmm the uml and the object modeling technique and they did they came up with a very nice uh representation for software in general not just object software just software in general i use it today i use a uml uh as a way to sketch ideas on a white yes exactly great it's a great way to take a rather complicated software idea and boil it down to very simple to draw ideas on a whiteboard that everybody can look at and go yeah okay sure i don't use it as any kind of formalism that was the early idea that this would be formalized and then you would you would spend months drawing these diagrams and then you would spend more months translating them into code that idea failed horribly but the idea that you would you would use these diagrams to kind of give yourself ideas a shorthand to play with coding ideas that works out very well for me at least and i i teach that technique and actually i i was working as a consultant in the early 2000s and i was the one that received a chunks of paper books with a field with uml diagrams a hund hundreds and hundreds of use cases and component diagrams all of that and none of that would translate to proper software because paper does not compile so they spent like six months writing that book and another two years rewriting that into software that was insane i guess it was insane it was insane it was insane but we didn't know that it was insane we thought that that was the progress we thought that you would start at a high level and finish the entire high level thought process and then you would elaborate it into something slightly lower level and then you would finally elaborate it into code this was the waterfall model analysis design implementation and we were all convinced that that was the way that everybody had to work that way and we we couldn't understand why it wasn't working exactly more of it and more of it it has to work if we do enough of it it'll work if we do enough analysis and enough design it's got to work and and we didn't actually realize that it wouldn't work until right around 1995. i i have a theory that because of the history that we were talking when back in the day when you were you were working with machines that could only spit out 10 characters at a time you couldn't refactor your code at will so you had that mindset of trying to make it work the first time because otherwise it would be painful to sort physical cards around so you had to plan things before you committed to type it in the teletype so you had a lot more thought going on before the code writing and i think many of those those people that designed those methodologies kind of had that in mind that it would be great if we could plan it all ahead of time and then the coding would be an afterthought and i think the rational rose suit of applications they were the target was to have i think they even had uh something called model driven design or something like that where you would yes where you would make the class diagrams and stuff like that and you would derive the java code directly from the diagrams right absolutely yeah that was a big deal some that we needed some way to shortcut this horrible analysis design implementation process and so the model driven architecture idea started to percolate in the late 90s and the idea was that you would take a a very well specified uml diagram and translate it into c or java or net and it would and the code would just come out it would just come out and the programmers would only manipulate the diagrams never the code that was the idea of course that failed horribly but there was a side effect of this there was a company formed around this idea and it was pete code's company at peter code he wrote a lot of early object-oriented yes right and he wrote this together j together j was an ide in which you would draw uml diagrams and the code would appear in a window next to you and then you could modify the code in that window next to you and the diagram would change so the two were were reflected by each other together it was a really interesting tool i don't think anybody actually used it for anything but it was a very interesting tool and then peter i think experienced a personal tragedy and he kind of pulled away from together jay and the guys he had hired were guys in russia because remember the soviet union had fallen and there were a lot of programmers that were suddenly very cheap and these guys in russia and finland formed a new company which today we call jet brains and they started on intellij right there in ukraine yes yes really it's very good and this whole idea it was an evolution because in the 90s we had this notion of object orientation but the languages were not ready for that but you can have of course modular modules and components without having objects so you had this notion of rapid application development or red where you had visual basic and several other languages slash environments where you would drag and drop components but you would still have to write a little bit of code and then the uml folks decided why not go all in and just write only diagrams and not write a single line of code so i think that was a theme in the 90s where people were trying to make that work and we realized that it would probably not work so that's the way we thought of it back then we said well by 1995 it became kind of clear that this waterfall thing just didn't work but you you said it right the reason we got into waterfall was because writing software and making it work was immensely painful like a compile could take all day yes yeah that you would you know write a little code see it work write a little code see it work that was not there right and so you know it was not at all unusual for us to think well we're going to have to plan all this out and design it carefully and then when we implement it it'll be perfect by the time the 90s were rolling along these machines were starting to get really fast and the guys who were doing small talk had already experienced this kind of rapid cycle and they invented a few things they had invented things like test driven development and refactoring those things started to appear in the small talk world in the early 90s they moved into the java world by 95 96 97 and everybody could take a step back and say wait a minute why are we doing all this analysis if we can just kind of go a little code see it work a little code see we could actually make the code in little iterative cycles the reason that that waterfall really failed is that waterfall is in opposition to the goal of software the goal of software is change right it's software flexible product the whole software is so that we can change the behavior of our machines and waterfall is a mechanism to create something unchangeable so in the end by 1995 96 time frame we started looking at that and going well our machines are going to let us go much faster we can go around the loop really fast we need a different process and that's when agile was born exactly and uh i i i was reading your i didn't read uh all your book the clean architecture yet and it's fun because i'm reading it now now that i've been through the career of programming and it's uncanny how the conclusions that we we come about are usually the same with different names i think every programmer that has been through all the trouble they usually will if if you reflect hard enough you will come get to the same conclusion it's not something that oh it's just it's a mystery secret that only the illuminated will get by i think this is an important realization because beginners feel overwhelmed by all the things but it's about the practice and the care about the code itself and what happened i feel happened during the 80s 90s until the 2000s that we because software like you wrote is soft it's it's not hardware you don't have the laws of physics you don't have weight you don't have gravity you don't have any of that any software any programmer will describe software in a different way from another programmer which is not the case with a physical construction where we can agree on many parameters such as the weight such as the material resistance and everything else so we can define a building very precisely that other engineer will be able to understand by a margin of error but software it's very difficult to describe without writing it uh writing the code i think the challenge that was people were trying to uh crack uh in the 90s was to realize that vocabulary the language that would describe the programming the software itself and i think they went overboard and too far on the definition of what should be soft and they got afraid of the software because of the painful experiences that we had before without considering that technology would evolve and they tried to hide that pain or to bypass it completely so people were more willing to write a visual diagram than to actually write the code i think that's that's what i felt about the late 90s especially the fear what is a huge factor this fear of the code so in the early days when the code was very hard to write you would spend a day in a compile and you there was no way you could refactor you could not sit there and fiddle with the code and make it a little better because you'd be involved with a one day turnaround so there was no way to manipulate the code once you had written it it was pretty well stable and and then what happened of course is that people would ask us for changes and the changes were very difficult to get into the code because the code would not accept this change easily there were tangles there were dependencies there was you know we we had to do things to make it work and those things were ugly and then to add more features in we had to expand that ugliness and there would be crashes and there would be no pointer exceptions and there were it was awful it was awful and and we got gun shy we would get these crashes and think oh my god we didn't we didn't expect this to happen and how do we fix it and we would debug it for weeks with managers looking over our shoulders and why doesn't it work why can't you go faster what's going wrong how come you did this little thing and everything blew up so that made us pull back in fear and we started to do this waterfall stuff that fear has remained even into the agile movement the the one of the great things about agile is that it gives us a way to eliminate the fear we can get rid of the fear if we've got a sweep of tests a suite of tests that we really trust a suite of tests that we can run fast we can get rid of that fear but there is an immense back pressure right the fear is still there in many programmers minds and they push back and say we don't have time to write these tests we don't have time for that we're going to have to continue on with this mess of code and suffer more and more fear the the if you follow the agile process and if you really write yourself a suite of tests which you can do and you and you trust that suite of tests and it can run fast life changes enormously the fear goes away you look at the code as something you can control you can manipulate it you can change it you can add features to it and you're not going to break it in any significant way and if you do break it you will know that you've broken it instantly so the fear goes away and it just changes everything about the way you view what software is now it is the clay that you can manipulate with your fingers instead of the trap that you had been locked into exactly and uh i i feel like it's been you you guys yeah from veterans of the 80s 90s you when when people think about the agile manifesto and the whole agile movement they they learn it at college all that event happened it feels like uh the second coming something like that so software was super bad back in the day and then those guys came in and fixed everything so there is this whole mythology i think and it's fun because i like to study that story and many of you started back in the 80s to think about that process so ken schwaber came read the harvard article on the uh scrum thing kent beck was already trying to figure out this test driven development thing and so how did you guys actually met each other and how that culminated with the the event in 2001 i think that's an interesting story to pick so it's important to remember that we didn't have much of an internet in those days we we had a little bit right we could email with each other there were certain email reflectors there were news groups that you could watch and so i became aware of a number of these people right kent back ward cunningham steve miller ken schwaber i was aware of them i would read articles that they had written we also did a lot of conferences in those days covid has destroyed the conference environment but we used to go to the group we used to attend i used to teach at them i used to go to talks and i would listen to a talk by kent becker by ward cunningham and i would introduce myself and we would get to know each other so so we had this kind of um knowledge of each other in 1995 kent beck and ward cunningham and grady booch and a bunch of other folks started the patterns movement and the patterns movement the design patterns move it was was very energetic there were email reflectors that you could read all this stuff on where there were conferences that we would go to and we got to know each other pretty well and then kent beck puts out this this idea of extreme programming now that was not a new idea it was an older idea ken schwaber had already done the paper on scrum uh this this snowball of agile was beginning to roll but ken beck gave it one heck of it from the in the pants by writing this book on extreme programming and it was right at the heat of the dot-com era right so everybody wanted a new way to do software and it had to be done fast and it had to be done right yeah you got it there's the book yeah so it just took the the software industry by storm and it was as contentious as anything i have ever seen there were the people who loved it and there were the people who hated it and the hate burned bright i remember that time yes i was right in the middle yes and the love the love was absolute it was it was really a very interesting time very polarized very contentious and in the midst of all that a bunch of us decided to get together and see if we could hammer out our differences and it was mostly the folks who were involved with these lighter weight processes like scrum and extreme programming and fdd but we also invited folks who were much more in the uh waterfall camp we invited steve meller we invited eva jacobson uh ivory arkansas's daughter was going to come but she couldn't at the last minute there were a number of of interesting little things that happened in there but we all met at snowbird in february of two thousand 2000 or 2000 one yeah i guess was one of those years i think it was 2001. it was at first was a get together good friends to discuss stuff i wouldn't call us good friends okay we were all consultants we were all extremely arrogant and very opinionated and we did not agree with each other so it was a group of people who had a goal but a lot of disagreement and so usually when that occurs you have a nice little brainstorming session and you draw little pictures and maybe you write up a little article and it's over that's not what happened here something different happened here and i i think it was because of ward cunningham although other people think it was martin fowler and we can't nobody remembers but somebody wrote those four lines on the white board and it didn't start with those four lines it started with three lines and the wording was a little different but the big concept there was there are things about agile that we like there are things about waterfall that we like we just like these agile things a little bit better not that there's anything wrong with waterfall mind you just that we like these other guys a little bit better and the whole room just kind of went oh yeah that's why we came here the meeting was essentially over at that point there was a few little cleanups that we had to do and we had to decide on a name and we picked agile because it was the least offensive of all the ones that we thought of and then we all went home and that was the end of it and ward cunningham said i'm going to make a website and i'm going to let people sign it this was early days in the web the idea of signing a website was kind of brand new he's going to let people sign it my god and people signed it in in the tens of thousands they signed it and and we had a movement on our hands and we had no idea what to do with that movement that's very interesting because uh that's uh many people don't understand that discussions uh that they don't come to agreements uh instantly just because people are very intelligent it's the obvious people are very intelligent they're gonna be very very strongly opinionated that their implementation is the best so to come to an agreement is a a feat in itself i have seen that once in my life i know yes and uh about what cunning and just as a just something that i remember he invented the concept of wikis i think yes so that's another thing that people didn't have back in the day usually communication was one direction now we were starting to see that thing of cooperation in the internet that was uh the beginning of the 21st century i think that's fitting because waterfall was one directional pre-planning and the agile movement kind of marked the turn point where people started to discuss how this iterative thing test thing could work and i was working with java i was even studying to be to certify as a sun java architect whatever i kind of give up on that because it was so bullshitty i i couldn't i just couldn't and you guys were kind of the ones to blame because i was reading those articles those ideas coming out it was like why am i studying this rigid thing because i remember we were more concerned about the artifacts of the methodology than the code itself so the code was always an afterthought it was the the lone hero at the last minute trying to actually implement what was designed in the two three weeks of paper diagrams whatever so that was really really painful back in the day now earlier on you had said something you said that you know agile felt like the second coming and that's ironic because agile was the second coming when the very when software began in the late 1940s and the early 50s the way they wrote their code and it was small code in those days the way they wrote their code was very agile like they wrote a little bit of code and then they tried it and they were a little more and they tried it the the the software for the avionics in the mercury space capsule they wrote their unit tests in the morning and they made them pass in the afternoon there was this agile-ish kind of feel to the way software was done in the first decade and a half and then it changed and it changed almost overnight in 1970 just all of a sudden changed and i think the reason it did was because the early programmers had all been old you know when when computers first came out there were no classes you couldn't go to school to learn how to program so so it was a bunch of old people who you know read the manuals and tried to figure out okay we can make this work old guys who wrote fortran and stuff like that and in the 1970s the early 1970s the first university graduates came in and they came out in the tens of thousands and they were very young they were in their early 20s and they were almost all male for whatever reason prior to that programmers were predominantly women now they were men they were young men young testosterone-driven men and i think the industry went a little insane because of that and we needed a process managers wanted a process and waterfall was there for us so i think that had a lot to do with the way that we lost agile and then it took 30 years to get it back yes i agree and it's fun because uh it it's always in cycles so we we dismissed the agile spirit for the waterfall for 30 years then it came back it was a big fight because it's difficult to change the inertia of a big community that's so invested in one way to say hey there's maybe a better way people don't want to feel like they wasted their time their money uh to the new thing so they try to dismiss the new fame but the new thing shows results so you will eventually get there and then we are in the uh 2000s and i think the early 2000s were the the test bed for all those concepts because we didn't we at that time we didn't have the tools we didn't have the documentation we didn't have so you you were writing books fowler were writing books can't back and all those guys were trying to explain how you should apply those techniques and how they would help out bringing better software i think you wrote clean code in the 2000s yeah how did you came to the clean code concept and how did you concentrate all those ideas into that particular book it was a moral dilemma um i i had wanted to write a book like this for a long time but i did not feel worthy how how do you write a book with the title clean code how do you how do you assert that your way is somehow better than every other programmer's way that was a deep moral dilemma and i i resisted writing this book for a long time i thought there was there was no way that i could as you know bob martin write this book that that was so arrogant as to claim that it was the way of clean code and then one day i i looked around and i said well damn it somebody's got to write this book i just said all right all right i'll do it and i tried to make a big disclaimer up front you know saying well look at this it's just the way i do it you don't have to do it my way just think about these ideas uh and well i guess the rest is history but the book did very well yeah and i remember your book because it was it was very modern for the day and it kind of felt because i was i was reading about programming since the 90s so i had uh i was reading this book called code complete by steve mcconnell so it felt like a good continuation a new version of that spirit because uh many people dismiss microsoft especially in the 90s because the browser wars their business practices the windows 95 thing and everything microsoft was not very well liked let's put it this way but they did try different programming things for example they did have continuous integration in the 90s so they had nightly builds so the code complete was written in micro at microsoft so they didn't know at least in theory how to write good code even though we had lots of security bugs and stuff like that but i think they were a victim of the internet because they were not fast enough they didn't understand the consequences of having this network effect because they were all local computers with ms daws and they derived windows from there so it took some time for them to adopt the unix style of operating systems for example and so the 90s were was a very rough time the late night is actually because they had the antitrust thing but i think the idea of of clean code and cleaner code would colder would i say uh it was not so prevalent until the the mid 2000s i think so people would would not they didn't like to be programmers they wanted to use the programming as a step to get to a higher position such as architects so there was not a concept of oh i like programming i want to be a programmer for the rest of my life that that started to change i think in the mid 2000s did you feel that way back then i don't know if it's changed much um i think programmers many programmers are still looking at uh programming as a kind of interim thing until they can get into management or something else uh but there are more there are more of us who look at programming as a long-term career right and the idea that we would elevate ourselves to some kind of architect level or something like that is not very popular right senior programmer sure lead programmer sure you know that kind of progression is it's not bad there are not very many companies that have dual tracks management and engineering tracks but more and more are and it's a nice it's nice to be on the engineering track if you're a geek and you like code it's nice to be on that on that engineering track yes then it's getting close to time i'm going to have to yes let's let's try to wrap up uh with uh some fast because we were able to get to the 21st century so uh we started in the late the early 60s and we're already to the mid 2000s and what happened is uh fast forward into today is that we got the internet matured after the dot-com crash uh we had the depression people didn't want to be programmed there were there were not a lot of programming positions because of the the effects of that crash people want to avoid that field completely but the infrastructure actually rose and it benefited the agile way because if the computers got fast enough we could run tests without waiting hours compile times went down dramatically so even the java difficulties of having to compile stuff is still slow ish but compared to the 90s i think it got even better so the whole package management thing you didn't have to manually download a junit plug into eclipse and convince your team to do the same now you can just uh grab all things in and it will be there for example and the ideas got better so everything got better in a way and of course github came came around and we now have one code repository that everyone agrees even though politically is another thing but at least we have somewhere that beginners can actually look into and see code and train with that code i think that's important and the practices that those guys adopt is usually agile bay so they have unit tests at least sometimes so it kind of yeah this agile thing is another thing that like ooh is difficult to define and people interpret in many different ways i think dave thomas wrote in 2013 about the post agile why the agile way was kind of dying and how did you how did you see that progression from 2001 all the way to here with how people hijacked the agile theme into there i don't know hijack is the right right word but there there have been a number of organizations and consultants who have tried to put adjectives in front of agile and you know lean agile and skilled agile and less and more and whatever safe and a whole bunch of adjectives in front of agile that's all fine fine let the consultants do what they're going to do let the organizations do what they're going to do it does not change what agile began as and what agile will continue to be agile was a a stake put in the ground right in 2001 and it hasn't changed there's no one no one's going to change the manifesto no one's going to change those early ideas uh and the ideas are still perfectly valid so i wrote the book clean agile in order to you know put that stake back on the ground and we're just remind everybody what agile was and is and will be uh and and it's it's just the same as the techniques that the guys were using in 1955. exactly and a little bit refined but you know we don't want to go through another 30-year uh desert of waterfall yes and i think many of the things that people consider modern nowadays such as microservices for example it's like rpcs in the 90s just like corbin all over again we changed xml to json but the idea is the same some many things that people consider super modern is actually rooted in something that came before and i think that's the whole idea that i want to convey with this conversation that uh usually we're rediscovering things and people think that we did programming wrong in the past it's not that it was wrong i think it was because the results of the environment of those times i think that's the the whole message what would you say i agree with you i mean there is really nothing new coming out in software the languages that we're seeing now are really not new languages they're they're just languages with some of the features that have been shuffled around a little differently there you can't point now at a language and say well that's entirely new wow new concept there was a time when that was true you know when when prologue first came out well that was a big deal yes earth came out that's a different kind of language even even c plus plus was kind of alternate kind of language but nowadays they're all pretty much kind of the same and we're stuck in this bizarre cycle where we think we think that we're still on the exponential curve we think that the hardware is still going faster and faster and everything should be moving upward upward upward but it's not the software is the the hardware is not getting faster the hardware is not getting denser uh we're kind of stuck on a hardware plateau now and we have been for 10 years yes and the languages although they are still churning they're not churning up anything yes they're just iterations of the same thing it's just a better maybe a prettier package i would say so they're more slick but they're not new so it still feels like the last time i saw something new coming out was the early 2000s something like that since then i've been waiting for the next breakthrough didn't see it yet and with that thought i know that you have a hard time uh to stop right now because you have that plane to catch so i hope maybe we can continue this conversation sometime else but i think but we did we did achieve the goal of going through the ages since the 60s all the way to this 21st century so i think mission accomplished thank you very much for your time and i hope you have a great flight and i see you uh next time all right thank you thank you very much and i see you all later bye-bye
Info
Channel: Fabio Akita
Views: 59,099
Rating: undefined out of 5
Keywords:
Id: ycvaECDc31w
Channel Id: undefined
Length: 89min 10sec (5350 seconds)
Published: Mon Nov 01 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.