Hello, everyone. Today, we have a very, very important guest here with us. Uncle Bob or Robert C. Martin. I believe everybody knows him. He has a clean architecture, clean codes, solid principles, a lot of books. So Uncle Bob is a very, very important person that everybody needs to know more deeply. And also today we're going to talk about Solid Principles. And I'm pretty sure that if you think that you know Solid to be, today you're going to be surprised. Hello, Bob. How is it going going it's all very well thank you okay so again thank you very much for being here uh i'm pretty sure that a lot of people is gonna learn uh i'm gonna learn a lot with you. So thank you very much. And today you're going to talk about solid. Okay. Solid. Yes. Yeah. Okay. So I'm going to do. Do you think that's better? I can share your slides now. How do you prefer? Oh, yeah. Let's put them up on the screen. Okay. So this stage is just yours. So thank you very much again, and let's go. Okay. All right. So hello, everyone. Welcome. For the next two hours, I'm going to regale you with tales of the solid principles of software design. The solid principles are probably best defined in this book. It's an 2002 copyright. And the code examples in this book are in C++ and Java. But this is where the principles were most defined. The best definitions are probably in that book. I have refined some of those definitions later. There's extra information in the Clean Architecture book and in the Clean Craftsmanship book. But for the most part, this is the book you'd probably want to get for a full grounding of the solid principles. This book also has a different edition that was entirely done in C Sharp, and it has a similar name. I think it's called Principles, Patterns, and Practices of Agile Software Development in C Sharp or something like that. So if you are more of a C Sharp person, you might want to get that. Although in both cases, the code is 20 years old. So keep that in mind. Where did these principles come from, these solid principles? And they came through a kind of strange activity over the years. Back in the 90s, I was a very frequent contributor on a social network that was called Usenet. This is very, very early internet days, long before there was a web, long before we had web pages or web browsers. We had text browsers, and those text browsers could send messages over the Internet in a kind of threaded way, similar to Facebook or Twitter, except much, much larger than Twitter. And I would be a very prolific contributor to one of the particular threads, which was called Comp.Object. Comp.Object was a social networking chat room, you might say, where people could get together and discuss object-oriented design. And we would debate things constantly. We were always arguing left and right about the best ways to do object-oriented design. At one point, someone posted a note called the Ten Commandments of Object-Oriented Programming. And it was the kind of thing. Very, very basic stuff. And as I read it, I thought, well, that's good. But there are deeper lessons that we have learned. And so I responded with a note that was kind of the next step, you know, beyond the first 10 commandments of object oriented design. These are the principles that we would like to follow. And the that first document, which was sometime in the early 90s, was the beginnings of the solid principles. The solid principles have changed a fair bit since then, and I've reordered them and reshuffled them. But that was the way it all started. The source of these principles is not just me. I'm not the inventor of all these principles. Most of the principles have come from the work of other people. For example, Jim Copeland made a big contribution in the early days. And of course, Barbara Liskoff is the author of the Liskoff substitution principle. And Bertrand Meyer was a contributor back in the early days, and at least two of the principles come from his work. So there was lots and lots of other folks, and all I did was kind of assemble them together into a single form and then give them the name Solid. And I'll tell you how that happened a little bit later. The reason that I brought those principles together was because I was working on a project at the time, which was the National Council of Architect, the kind of architect that designs buildings, then you had to pass an exam. And that exam was automated. And my team was the one who automated it. the screen, blueprints and floor plans and lot plans and roof plans and property lines. There were 18 different scenarios, and each scenario had two applications, one to allow the candidate to draw, and the other application, which was hidden, was the application that scored the work of the candidate. This was a very big project, and I had a team of five people, and we worked for several years on this project. And in order to make it happen quickly, we created a reusable framework. Now, this was hard to do. This is all done in C++, and it's hard to make a reusable framework. And we struggled with it. For several years, we struggled with it. And the result of those struggles were the principles that I posted on that social network in response to the Ten Commandments. So that's how this all started. The principles were the result of a real project doing real, very difficult work. Now, before I get into what these principles are, Now, before I get into what these principles are, I want to take a brief time to talk about why they're important. Here we are, right? We are software developers. And we are in a situation that we did not expect. Our civilization depends on us. It did not used to be true. 30 years ago, our civilization did not depend on us. 50 years ago, there weren't any computers to speak of. Oh, there were a few, but not that many. 70 years ago, there were no computers at all. So over time, the number of computers and the amount of software in the world has grown at a crazy exponential rate. I want you to look around where you are right now and count the number of computers that are near you. And I don't mean your laptop and maybe even your phone. You could probably not count that. How many other computers are near you? Are you wearing a digital watch like an Apple watch? There's quite a bit of computer going on in there. And do you have AirPods? You know, I have these AirPods. I stick them in my ears. Lots of little computers running in that. And on the wall here, I've got a thermostat that controls the heat in my home. There's computers running in that. And of course, there's computers running in the furnace as well. and the dishwasher, and the washing machine, and the dryer, and the telephone, and the television. If you go into my garage where I have a car, there are computers running in that car. How much code is running in a modern car? And I'm not talking about a Tesla here, just a regular old car. There's probably a 100 million lines of code running in a car just today. And most of that code, of course, is in the GPS system and the entertainment system. But an awful lot of that code is running in the engine. There are if statements that are sitting between your foot and the brake. There are if statements that are sitting between your foot and the accelerator pedal. And there are if statements, at least in some cars, that are sitting between the steering wheel and the actual steering. And wouldn't you like to know what those if statements say? Wouldn't you like to know how they were tested? Wouldn't you like to know that they were tested? How many people have been killed, outright killed, because the software in their car malfunctioned, and the car ran out of control and smacked into a tree or a bridge. And the answer to that is pretty close to 100. A lot of people have been killed because the software in their car lost its mind and accelerated out of control and slammed into something. You and I sit in the middle of that. Nothing that happens in our society today in the Western world happens without software. There's nothing you can do without software being right in the middle of it. You can't cook a hot dog in your microwave. You can't wash the dishes. You can't drive to the store. You can't buy anything. You can't cook a hot dog in your microwave. You can't wash the dishes. You can't drive to the store. You can't buy anything. You can't sell anything. No law can be enforced. No law can be passed. No insurance can be collected or filed. Nothing happens in our society without software being right in the middle of it all. And that means that you and I are right in the middle of it all. And that means that you and I are right in the middle of it all. Our civilization depends upon us. And we don't quite realize that yet. And civilization does not quite realize it yet. Just how much responsibility has fallen on our shoulders.