I very much appreciate how the speaker takes time to warm up the audience's brains before beginning the session's topic. Great idea for a long lecture.
NOTES -- (Standards, Expectations, & Ethics) - So far, it seems the rate of programmers in the world double every 5 years. That means at any given time, half of the programmers in the world have less than 5 years of experience. It's important these programmers have a set of standards to abide by - Don't Ship Shit: Make your code work and as best as possible before shipping it. When we buys products, we don't accept 20% of it to be defective - Always be ready: At the end of every iteration/sprint, the code should be shippable, deployable (Technically, not from a business perspective aka it can be under-featured) -- Testing, documentation, everything for current set of features is done - Stable Productivity: The length of the project shouldn't affect your rate of productivity. We slow down because we make a mess - Inexpensive Adaptibility: The cost of the change should be proportional to the size of the change - Continuous Improvement: The code should improve over time - Fearless Competence: Don't be afraid to touch or improve the code. Conquer the fear with tests - We will not dump on QA: QA is not the group to find bugs, they should find nothing. QA should be at the start of the process -- Automate over manual testing - Nothing Fragile: We need to cover for eachother, we need to behave like a team. Pair enough so you can cover for eachother - Honest Estimates: Start by defining the shape of what we don't know. Give an estimate of 3 numbers: the best case, the average case (How it usually goes), and the worst case
0:00 Start 0:23 About our genetic origins. 9:36 I am your new CTO / About the growth rate of programmers and it effects. 17:25 Expectations / We will Not Ship Shit. 21:36 We will always be ready / Iteration Length. 25:51 Stable Productivity. 28:14 Inexpensive Adaptability / The software must be changeable. 30:38 Continuous Improvement / The code should improve over time. 31:46 Fearless Competence / Conquer the fear with Test. 42:35 We will not dump on QA / QA will find nothing. 46:30 Automation! 51:20 We cover for each other / Teamwork. 55:40 Introduction to "Honest Estimates".
Bit late to realize, it's actually walk through of his book clean code. Nice to have it handy on your side since the editing is missing the point. 😁 All the examples are from the book.
Enjoying clean code principles as an East African; apparently with some polymorphic S. O. L. I. D. source code of my own. - *A serious fan, love from Somalia.*
29:47 I have seen so much code in my life that felt exactly like someone wanted to emulate hardware... they use bytes to represent (8) wires, selectively read and write them with bitwise and/or with hardcoded magic numbers and use bitwise operators to emulate transistors...
IS he seriously going to go on a long diatribe of the origin of man in finite, interesting detail and then literally not mention it again? Like bruh... I was HOOKED.
@@ahmednaboot2155 I'm pretty sure he does it for no specific reason other than to grab his audience's attention, and because he thinks it's interesting. I think I heard him say this in one of his talks
I wish more CTOs would have such expectations. If such expectations existsed, programmers could do whatever they feel right defending themselves from the managerial pressure by these expectations. Unfortunatelly, CTOs usually expect quite the opposite. They expect programmes to ship the product today, regardless of what will happen with it tomorrow ("it's their job to maintain the product"/"we can hire another team" attitude). Most of the things that Bob told are simply not under control of developers. Managers (who are under control of CTO eventually) won't let you delay shipping because code is not clean, or 20% of the code does not work, or because tests are not automated or even executed (and doing that after the release is not an options, because then there will be another release), and won't let you to take responsibility on testing, or practice pair programming, or do anything else mentioned in the video.
This is my thought too. I would love it if we actually had the time to clean up code, to properly test code, to write proper test cases so we can actually maintain the code. And some of that absolutely can fall on us as programmers (I'm not great about writing test cases for personal projects, for instance). But the vast majority is forced on us by management. It's not much different than telling a line worker at burger king that every sandwich should be pristine, should have the same amount of ingredients in the same position, should be wrapped well, etc - all while expecting that sandwich to be made in 5 seconds. You either have a good looking sandwich or a sandwich that was slapped together in 5 seconds - you will never have both. And while management will always insist that they want the former, they will only ever provide enough staff to accomplish the latter. That has been every single experience I ever had working fast food and it's been every single experience I've had working in IT - with the exception of when I was doing independent contract work and was fortunate enough to have a few clients who actually deferred to my judgement most of the time. The difference, of course, is that the sandwich you slap together in 5 seconds doesn't create decades of ever increasing technical debt because no one is ever given the time to clean up any code until management either decides to greenlight a rewrite or is paying one of a handful of non-retired COBOL programmers to keep the code barely limping along.
28:47 - " _Can you make that app run on my Smartwatch? Should be a small change, because I already use it on my desktop!_ " What's a "small change" for users could mean an entire redesign - data sets, style, shown information, rendering and entire UI's need to be reworked, and potentially also stuff like data security (confidentiality, integrity, availability) gets an entirely new dimension when something moves from the secure, stable private network to a potentially insecure, unstable public zone.
I'm working on customer code currently and they enforce code coverage metrics. The CI system blocks you from merging if your change doesn't hit that target. The management there also has said multiple times that we should aim for 100% coverage. They also think that 100% coverage == no bugs and you should write unit tests for everything. It's frustrating to try and make them understand that having that as a target is insanity. Also unit tests don't make sense for everything and especially for our project I think we need bigger focus on integration testing.
Unit tests usually make sense. Also, 100% coverage is good. However, if your code sucks, testing will be a pain. Finally, if your product team keeps changing their minds, testing will be a pain.
@@socrattt I'm still at uni and I was writing unit tests the other day. Due to the 100% code coverage requirement I ended up spending few hours writing dummy unit tests, some of which without assertion, just for the sake of hitting that target. That's why I'm very sceptical about it.
@@donutzlidla7769 Yeah, well if you don't have assertions, you are not doing it properly. 100% requires some thinking on the programmers part - so you don't do that. Also, you should write unit tests as you write the code, not after. You'll write better code that way. Finally, 100% isn't necessary, but it's nice. 80% can be very good too. Good luck with your education!
he is making the ancestral links base on a yearly basis. Its not per year, its probably better ever 20 years. When you frame something with a very logical explanation most people lose the perspective of what or how something should or needs to be observe. 400 years ago I did not have 400 parents / grandparents probably 15 - 20.
The expectations portion forgets one detail. Management. The VP at my last job clearly said we would now ship « good enough » products. So the QA team was fired and we were expected to support and fix live in prod, in firefighting mode. A web project was declared a resounding success because we crashed every 15 minutes for two days. The competitor was down for two weeks, so we were a great team (!).
It really shouldn't be. The book only contains very general guidelines on how you should think about writing code, but does nothing good for actual architectural decisions. It assumes that OOP is the only correct way to write code and the only way you should be writing, which is entirely bogus.
1. We will not ship shit 2. We will always be ready 3. Stable productivity 4. Inexpensive adaptability 5. Continuous improvement 6. Fearless Competence 8. QA will find nothing 9. Automation! 10. We cover for each other 11. Honnest estimates
lolz... that depends if you count VBA programmers. I worked in the 1990s in QA. We would find so much. Back then data validation was not really a thing in the financial markets. Effectively we were unit testers as well. Thankfully we had it all automated which is much more accurate than manual & quicker.
"So, clearly this does not go by powers of two. It somehow starts out as powers of two" 03:40. Perfect example, that you have to understand the domain or it doesn't work out at all. There is no coherence between the number of ancestors and the world population. It works for n=1, but already for n=2 it is wrong. Obviously me and my sister don't have 4 different parents. This equation assumes that every pair of parents has only one child. And that has to be wrong, because otherwise the issue had been solved after Adam and Eve by itself.
"...and I trust that it works." is very important. You can make a test pass with assert(true) but that gives you no confidence. Here's what I say: "If it's broke, fix it. If it ain't broke, make it better."
32:10 "This code is a mess. [...] Maybe I should clean it!? [...] I'm not touching it!! - Because you know if you touch it, you will break it. And if you break it, it becomes yours."
I guess I was lucky enough to get an education that prepared me well for the real life. When I was in my first it company I was like "wtf are they doing, im better then this"
@@gamemusicmeltingpot2192 it depends on the course, another UNI had a very comprensive course where we covered how to draw a cpu circuit diagram, build compilers from scratch, proper programming which is only now starting to be used in a lot of companies 20 yrs later, and harder stuff, this one though meh...
I had an internship in test automation and yeah those manual test engineers seemed miserable. There tests literally involved sitting there clicking buttons on a UI for hours at a time. The tests were thousands on steps long. Jesus Christ
100% test coverage makes as much sense as enforcing comments for everythng. You end up with the test equivalent of a "increase integer by one" comment.
The longer the project is running, the slower do not get, even for those projects that points are hiperinflated and deliver almost nothing each iteration. You cannot go slower than stopped.
One inaccuracy... the CTO doesn't expect to not ship shit. When he responds to "we need 90 days of parallel running of the old and new system" with ordering the operations team to cut over to the new system and to turn the old system off after 4 days to stop receiving a nightly report of all the discrepancies and errors with the new system, he knows shit got shipped, he backed the unrealistic schedule the software engineers said was unattainable, he was behind cutting the testing schedule from 6 months to 30 days, he was behind hearing a release date a year beyond what he promised and forced, and, most importantly, I think, he knows that his career will be boosted by being 'the one who got it shipped', while the developers are the ones who will be fighting fires every day (and night) for the next 3 years to accommodate things. He also knows that if it goes really wrong, like it did with Toyota and their 'unintended acceleration' and he gets called up in front of a court to explain his actions - he will walk free. He knows that the court will declare "it is impossible to judge any executive as negligent, because there exist no legally-enforceable standards which he could be said to have been negligent OF." He knows that his developers not having a bug tracker at all, that they managed to follow only 4 of the 90+ recommended and suggested practices published by the automotive industry, that the developers stressed that the product was not ready for public release and he ignored them, that he hired the most inexperienced and unqualified (and thus cheapest) developers he could find to create code that cost peoples lives - and while every developer will call him an idiot and a demon - he will likely get a promotion.
The mythical test button sounds extremely compelling, but I feel like its description kinda assumes that the tests will be fast. Even when I feel I can trust the test suite, if it takes over an hour to complete and give me that green light, it might as well not be there, at least not for small changes. It just doesn't sound like a "step" and more like an "I'm done".
@@socrattt you pay that for the content, not for the software. The best streaming platform will go down without a high quantity & quality Selection of content
@@Naglfar83 sure, but that's niche markets. I'm talking about the fact that Joe Everyman owns a car that they spend $100 on per month (on average). But Joe Everyman has never spent a single dollar to purchase an app on their app-store.
@@ViktorEngelmann He is paying for the software in the car, though. Average Joe is not interested in software as such; he is interested in something that makes him feel good. If that involves software, he will pay for that software as part of the product. He pays for cars, TVs, phones, laptops, gaming computers, games, streaming services, internet connection, perhaps cable TV, stuff from Amazon, etc. All of that contain or use vast amounts of software. He rarely directly pays for software by itself, but he sure does pay for vast amounts of software through the products he buys. And he sure wants all those products to work. And he is willing to pay more for a stable high quality product.
I getting exausted with stories, can anyone enlight me whats the point of explaining genetic origins in clean code topic? I really appreciate a answer.
"think about how wildly irresponsible it is to fear what you have created" --> Julius Robert Oppenheimer take an example from us and improve your code bro :D
Well, I agree with 100% of what he says. Unfortunately, its all lies. Thats not how things work in real life. If i'd be alone, I would uphold all that he says. But I have a team, with members that are less competent, and management that put priorities wherever what they want. If I spend time fixing bad code of others without the approval of my team and superior, without having that in the sprint objectives, I would get fired. I truely wish it would work like that, but I feel the mentality of the whole industry needs to change for that to happend.
I mean, if you still have to write shit, you might as well slowly push towards writing less smelly shit. Who knows, maybe in a decade we won't have to write shit anymore.
@@BlazingMagpie That's perfect, it's exactly what I think. The only way to change your context is to change yourself first, and slowly show how those changes can be good for everyone.
Maybe there are different companies with different views on quality, just like there are customers with different views on quality. Some companies might perhaps fire you if you do not fix bad code or if you do not mention when you see bad code or if you agree on meetings to prioritize new features over fixing bad code; maybe they make hospital equipment or space rovers that absolutely must not fail. And other companies might have company values of quantity over quality, and then you just don't want to work there if you value quality.
Schools like MIT and Stanford arrogantly view clean coding as a matter of the trades and professional practice, not worthy of any academic interest. If you want to learn as a student, you're on your own.
I dont understand, why did he talk about sun/moon in previous lessons and in this lesson he started with adam and eve? What was the point of that information?
@@andywong3095 converted? as in to Christianity? But he had other "starters" as well in his previous videos like about sun and moon etc. How is that related to Christianity? just curious. or maybe I misunderstood your statement. :)
@@blasttrash , hehehe, if you were a "C" follower, you will be more likely, believe, his Ideas. hahahaha. Like a Politician, said, I am a god fearing "C" person, you may be more likely, to vote for him, BECAUSE, you are a real "C" person. But, big BUT, people like me, think of it, as HOT-WIND. Still missed it, "The" book, his "Book", Not the other BOOK, that you were thinking of. I have to add, ONLY 1 exception, about Politician, President Jimmy Carter, a real Christian, with the capital C.
@@GerbenWijnja "You must be new here" 100% Yes. hehehe. I hope nobody take me seriously. Uncle Bob, is well known and respected, OLD too, I really think???, he will not care any pokes from anyone. ( I know this, because I am old too)
If you tell me, that you've fully covered your business logic with unit tests. And something changes in the business logic and not even one test go red, then you didn't tested it. Tests shouldn't fail if you just refactor (tool assisted). That is what he should have tell instead.
Moon, biologic parents, what do these fucking subjects have to do with clean code? By the way, even with some weird subjects that's the most motivated presentation about software development I've ever watched!
Does anyone know why he starts his talks by interesting and unrelated topics? Is it to engage the audience before actually starting? Or just showing off his knowledge? :P
More the first one, though he does seem to have a sizeable ego 😀 i've seen it taught by professional speaking trainers to lead with a captivating story. Though usually you try to make it relate to your topic...
6:32 This is incorrect. Sperm cells have mitochondria! And a lot of them in order to generate energy (ATP) for their tail to move. So, what's this whole introduction for anyway?
Yes sperm cells have mitochondria, but they are used for locomotion. When fertilization happens, in the very early stages of development (a couple of cells) they are destroyed. Hence we inherit our mitochondrial DNA from our mothers. Definitely poorly phrased from his side, but I think it was an oversimplification, to get to his point.
The introduction is BS for other reasons too, as it's disregarding evolution. You don't suddenly get 2 people to parent everyone, you have N monkeys, one mutates slightly towards humans, mating happens while other monkeys mutate differently towards humans and the collection of the monkeys together turn into the ancestors of humanity, i.e. there's never a point where you can identify 2 individuals and say "these 2 are human, the rest aren't". If you want to go far back enough to reach the real Single Ancestor Of Everybody, that would be the self-replicating molecule that accidentally came to be.
Oh man, i feel called out in the fearless competence section 😅 I'd love to refactor but am terrified of changes because a) it takes ages (10min to run our test suite each time, and days to get the PR approved and merged) b) i don't want to be held accountable for the code 🫣 Edit: ok i am so grateful i have the 1800 automated tests and not 80,000 manual tests 😳😂
17:15 Not me! I was very prepared. I was completing tasks (correctly!) in less than a week, maybe even less than a day. Hard to remember exactly. The only thing I really needed to learn was using source control. Everything else I either knew already or simply didn't matter. Seriously. I have an Associates in Computer Science (Programming) from Pittsburgh Technical Institute (now Pittsburgh Technical College). I graduated in October 2011. In a little more than a week I'll start a new role as a Senior Software Engineer. So was I prepared? Absolutely. If I had a time machine would I change anything about my education? No, not really. I maybe would try to change how I paid for it, lol.
5:51 this isn't necessarily true, since it is populations that evolve rather than individuals. It is possible that as a species we were genetically bottlenecked to two individuals, but an incredible majority of the time when that happens, the species goes extinct. Our true common ancestor could very well be the first eukaryote that developed sexual reproduction. Take feliforms for example: do all tigers share two paired ancestors? What about all lions? Cheetahs (maybe)? Lynxes? House cats? Would they all be the same two ancestors for all varieties of cats? What about carnivores? You have caniforms like dogs, bears, seals, stoats, as well as all the varieties of cats mentioned above. Do they all have individual genetic bottlenecks, or did they all change as populations? Mitochondrial Eve and Y-chromosomal Adam may not have even known eachother, or even lived at the same time for that matter. And regardless, either one of them necessarily would've had parents and grandparents, etc.
What do you do if you get hired onto a company with software that has zero automated tests? It is all written and needs to be cleaned. Meanwhile, the CEO keeps harassing you for new features. Even though the features that are already there don't work most of the time.
Just talk with your boss about the only thing that matter in business: "money", explain the cost of unclean code. If your boss dont listen, talk to to his superior. At this point your job is in risk, but also you will be prepare for a promotion. Dont have fear and do the right thing, an spiritual man dont have fear because everything is for good.
@@BienestarMutuo That would mean I would have to find time to research the business value of the products my team is in charge of developing. Everytime I try and ask for access to this information, I get the classic "This is not a priority right now." I am just a lead developer not a business analyst. I know they would never fire me. But, I might quit if I feel I am not allowed to make the adjustments necessary.
@@BienestarMutuo I think the problem is. That I am the lead developer and my product owner does nothing but what the CEO tells hem to do. I don't have a direct line to the CEO but my CEO is making all these decisions on cranking out features as fast as possible. I was brought in recently. And the developers under me haven been there longer and our still trying to crank out features written irresponsibly. I have half a mind to fire them all. I don't think any of them know any sort of architecture and none of them have ever written a unit test in their life. With the pressure from CEO to crank out features I don't have time to teach them all basic principles of software engineering. Thanks for letting me rant.
It‘s not exactly about coding practice, but merely about coding ethics which makes it important nevertheless for every programmer. As a programmer you should not skip this video.
To warm the audience up. People take a minute or two to settle into a talk so it's smart to not go straight in to the details, but instead start on something relatively unimportant to give everyone's brain time to tune in and start listening. Using an interesting subject is a great way to get people's attention and get the audience "on your side" before you start proper.
I very much appreciate how the speaker takes time to warm up the audience's brains before beginning the session's topic. Great idea for a long lecture.
no!
@@redhotbits yes!
I really like that perspective. I also always get really interested in what he goes on about.
Except that his concept of genetics and biology is quite wrong. Ha ha. He only conveys it as if he knows what he’s talking about.
@@monkeyaround2066 Can you explain what is wrong ty
NOTES -- (Standards, Expectations, & Ethics)
- So far, it seems the rate of programmers in the world double every 5 years. That means at any given time, half of the programmers in the world have less than 5 years of experience. It's important these programmers have a set of standards to abide by
- Don't Ship Shit: Make your code work and as best as possible before shipping it. When we buys products, we don't accept 20% of it to be defective
- Always be ready: At the end of every iteration/sprint, the code should be shippable, deployable (Technically, not from a business perspective aka it can be under-featured)
-- Testing, documentation, everything for current set of features is done
- Stable Productivity: The length of the project shouldn't affect your rate of productivity. We slow down because we make a mess
- Inexpensive Adaptibility: The cost of the change should be proportional to the size of the change
- Continuous Improvement: The code should improve over time
- Fearless Competence: Don't be afraid to touch or improve the code. Conquer the fear with tests
- We will not dump on QA: QA is not the group to find bugs, they should find nothing. QA should be at the start of the process
-- Automate over manual testing
- Nothing Fragile: We need to cover for eachother, we need to behave like a team. Pair enough so you can cover for eachother
- Honest Estimates: Start by defining the shape of what we don't know. Give an estimate of 3 numbers: the best case, the average case (How it usually goes), and the worst case
I’m not a programmer but I’m learning a lot about the day in the life of a programmer. My deepest sympathies! Tough gig.
I wish they made this class a requirement...I am reading the book simultaneously and wish I had this stuff instilled in me from college
Which book? I can't recall the name.
@@matthewenderle8880 Clean Code is the title I believe
I had a class that required it. We only read portions for the class, but I read the rest on my own
Yup. I was handed this book among others the first day of work, never heard it mentioned during my studies ;/
Wishing the same. How was it not? smh
"You see the picture here?"
I wish I did....
The picture was shown before. It's the hands holding a huge pile of papers.
0:00 Start
0:23 About our genetic origins.
9:36 I am your new CTO / About the growth rate of programmers and it effects.
17:25 Expectations / We will Not Ship Shit.
21:36 We will always be ready / Iteration Length.
25:51 Stable Productivity.
28:14 Inexpensive Adaptability / The software must be changeable.
30:38 Continuous Improvement / The code should improve over time.
31:46 Fearless Competence / Conquer the fear with Test.
42:35 We will not dump on QA / QA will find nothing.
46:30 Automation!
51:20 We cover for each other / Teamwork.
55:40 Introduction to "Honest Estimates".
pls add a 0:00 start
so topics will show up in the seekbar
Bit late to realize, it's actually walk through of his book clean code.
Nice to have it handy on your side since the editing is missing the point. 😁
All the examples are from the book.
Gosh thank you for putting this heads up!
Presenter is pointing to the slide, video editor just ignored. :(
Same on every lesson video.
But even that is very good
@@BryonLape 5 has the slides
Thank you SO MUCH! for editing out the intro in subsequent videos, I was only able to withstand the cringe once.
@@ashtonsimmonds7042 I was also kept thinking what's the point Uncle Bob was trying to make, I think he has a reason for that. You can share?
@@behthiansu He is giving intuition to the doubling rate for the growth of number of programmers.
@@ashtonsimmonds7042 I think he meant the horrible animation that was shown in lesson 1, that we only saw the end of in this lesson.
Uncle Bob: "Oh I should plug in the screen"
Editor : "Nah, you good"
This is a sermon and very well received. Nodding in affirmation throughout.
I used to be scared of the "Clean Code" book but watching this explanation by the Author gets me giddy to get a copy.
Same 😂
Enjoying clean code principles as an East African; apparently with some polymorphic S. O. L. I. D. source code of my own.
- *A serious fan, love from Somalia.*
Hey mate, do you have a public git repo? :)
thanks for uploading, really enjoying this lessons
46:41: If a computer can do it a computer should do it.
This is my new favorite quote and I absolutely love it
Just became a PO. And this talk is pure gold :-)
29:47 I have seen so much code in my life that felt exactly like someone wanted to emulate hardware... they use bytes to represent (8) wires, selectively read and write them with bitwise and/or with hardcoded magic numbers and use bitwise operators to emulate transistors...
IS he seriously going to go on a long diatribe of the origin of man in finite, interesting detail and then literally not mention it again? Like bruh... I was HOOKED.
As I understood this story was in relation with exponential growing number of programmers.
I wonder why he's giving all these different sorts of intros in several topics
@@ahmednaboot2155 I'm pretty sure he does it for no specific reason other than to grab his audience's attention, and because he thinks it's interesting.
I think I heard him say this in one of his talks
@@ahmednaboot2155 Unless he has stated otherwise, it is just warm up, he is extremely well at it in my oppinion.
@@Oranbar that’s a good enough reason imho
I love these videos, so I only took offense proportional to a good joke about the jab toward VBA programmers. Keep making our code better!
this dude is just simply amazing !!!
"You see this picture there?" No :(
It was hands holding a huge pile of papers
48:30 "I'm seeing myself on that screen. I did not expect to see myself on that screen."
We know, Bob. We know.
The last video of this series is going to be like watching the last harry potter.
I wish more CTOs would have such expectations. If such expectations existsed, programmers could do whatever they feel right defending themselves from the managerial pressure by these expectations. Unfortunatelly, CTOs usually expect quite the opposite. They expect programmes to ship the product today, regardless of what will happen with it tomorrow ("it's their job to maintain the product"/"we can hire another team" attitude). Most of the things that Bob told are simply not under control of developers. Managers (who are under control of CTO eventually) won't let you delay shipping because code is not clean, or 20% of the code does not work, or because tests are not automated or even executed (and doing that after the release is not an options, because then there will be another release), and won't let you to take responsibility on testing, or practice pair programming, or do anything else mentioned in the video.
This is my thought too. I would love it if we actually had the time to clean up code, to properly test code, to write proper test cases so we can actually maintain the code. And some of that absolutely can fall on us as programmers (I'm not great about writing test cases for personal projects, for instance). But the vast majority is forced on us by management.
It's not much different than telling a line worker at burger king that every sandwich should be pristine, should have the same amount of ingredients in the same position, should be wrapped well, etc - all while expecting that sandwich to be made in 5 seconds. You either have a good looking sandwich or a sandwich that was slapped together in 5 seconds - you will never have both. And while management will always insist that they want the former, they will only ever provide enough staff to accomplish the latter. That has been every single experience I ever had working fast food and it's been every single experience I've had working in IT - with the exception of when I was doing independent contract work and was fortunate enough to have a few clients who actually deferred to my judgement most of the time.
The difference, of course, is that the sandwich you slap together in 5 seconds doesn't create decades of ever increasing technical debt because no one is ever given the time to clean up any code until management either decides to greenlight a rewrite or is paying one of a handful of non-retired COBOL programmers to keep the code barely limping along.
28:47 - " _Can you make that app run on my Smartwatch? Should be a small change, because I already use it on my desktop!_ "
What's a "small change" for users could mean an entire redesign - data sets, style, shown information, rendering and entire UI's need to be reworked, and potentially also stuff like data security (confidentiality, integrity, availability) gets an entirely new dimension when something moves from the secure, stable private network to a potentially insecure, unstable public zone.
"How many biological grandparents do you have?"
It depends on which state you live in.
Excellent wisdom
I love this lectures series :D
I'm working on customer code currently and they enforce code coverage metrics. The CI system blocks you from merging if your change doesn't hit that target. The management there also has said multiple times that we should aim for 100% coverage. They also think that 100% coverage == no bugs and you should write unit tests for everything. It's frustrating to try and make them understand that having that as a target is insanity. Also unit tests don't make sense for everything and especially for our project I think we need bigger focus on integration testing.
Unit tests usually make sense. Also, 100% coverage is good.
However, if your code sucks, testing will be a pain. Finally, if your product team keeps changing their minds, testing will be a pain.
@@socrattt why is 100% code coverage good?
@@donutzlidla7769 Then you can refactor in safety.
@@socrattt I'm still at uni and I was writing unit tests the other day. Due to the 100% code coverage requirement I ended up spending few hours writing dummy unit tests, some of which without assertion, just for the sake of hitting that target. That's why I'm very sceptical about it.
@@donutzlidla7769 Yeah, well if you don't have assertions, you are not doing it properly. 100% requires some thinking on the programmers part - so you don't do that.
Also, you should write unit tests as you write the code, not after. You'll write better code that way.
Finally, 100% isn't necessary, but it's nice. 80% can be very good too.
Good luck with your education!
"Human beings improve situation with time, they don't degrade situation with time. They are not bacteria"
- Hehe, yeaaaaah, suuuure.
It would be great to add a link to his slides in your description. Great video!
We dont have the slides, Do you know were to find it ?
But... what about the pair programming bit from the end of the last one?
he is making the ancestral links base on a yearly basis. Its not per year, its probably better ever 20 years. When you frame something with a very logical explanation most people lose the perspective of what or how something should or needs to be observe. 400 years ago I did not have 400 parents / grandparents probably 15 - 20.
The expectations portion forgets one detail. Management. The VP at my last job clearly said we would now ship « good enough » products. So the QA team was fired and we were expected to support and fix live in prod, in firefighting mode.
A web project was declared a resounding success because we crashed every 15 minutes for two days. The competitor was down for two weeks, so we were a great team (!).
The war of mediocre management :(
Buy and read his book, people. I truly believe it ought to be mandatory material for all programmers.
It really shouldn't be. The book only contains very general guidelines on how you should think about writing code, but does nothing good for actual architectural decisions. It assumes that OOP is the only correct way to write code and the only way you should be writing, which is entirely bogus.
1. We will not ship shit
2. We will always be ready
3. Stable productivity
4. Inexpensive adaptability
5. Continuous improvement
6. Fearless Competence
8. QA will find nothing
9. Automation!
10. We cover for each other
11. Honnest estimates
lolz... that depends if you count VBA programmers. I worked in the 1990s in QA. We would find so much. Back then data validation was not really a thing in the financial markets. Effectively we were unit testers as well. Thankfully we had it all automated which is much more accurate than manual & quicker.
"So, clearly this does not go by powers of two. It somehow starts out as powers of two" 03:40. Perfect example, that you have to understand the domain or it doesn't work out at all. There is no coherence between the number of ancestors and the world population. It works for n=1, but already for n=2 it is wrong. Obviously me and my sister don't have 4 different parents. This equation assumes that every pair of parents has only one child. And that has to be wrong, because otherwise the issue had been solved after Adam and Eve by itself.
Bob was talking about the number of ancestors for a single individual.
"...and I trust that it works." is very important. You can make a test pass with assert(true) but that gives you no confidence. Here's what I say:
"If it's broke, fix it.
If it ain't broke, make it better."
Big respect to Uncle Bob.
He is 100% right.
Software has been SHIT lately.
Things that used to work properly before now they don't.
21:19 aah shit! Preach! 🙌. Those coders at CD Project Red oughter have been given guest tickets for this shit.
Give me a number: No, I can only give you three.
32:10 "This code is a mess. [...] Maybe I should clean it!? [...] I'm not touching it!! - Because you know if you touch it, you will break it. And if you break it, it becomes yours."
I guess I was lucky enough to get an education that prepared me well for the real life. When I was in my first it company I was like "wtf are they doing, im better then this"
Yup, my uni was actually very good at this, except for the Java part of the course which was always 'comment everything!'
@@slipoch6635 haha college and uni programming courses are kind of cringe because some teachers never worked in the industry
@@gamemusicmeltingpot2192 it depends on the course, another UNI had a very comprensive course where we covered how to draw a cpu circuit diagram, build compilers from scratch, proper programming which is only now starting to be used in a lot of companies 20 yrs later, and harder stuff, this one though meh...
I have never seen code that he is describing (as the ideal case) in my 17 years as a software developer.
You know what type of 'hell' manual testing is? Oh yeah I'm aware, it's a nightmare. I'm an automation engineer and I see those tests, it's crazy.
I had an internship in test automation and yeah those manual test engineers seemed miserable. There tests literally involved sitting there clicking buttons on a UI for hours at a time. The tests were thousands on steps long. Jesus Christ
@@shapedsilver3689 that's real life at my job for some people. Hearing with lackluster happiness "I'm testing this whole feature by hand" 😓
100% test coverage makes as much sense as enforcing comments for everythng. You end up with the test equivalent of a "increase integer by one" comment.
The longer the project is running, the slower do not get, even for those projects that points are hiperinflated and deliver almost nothing each iteration. You cannot go slower than stopped.
24:42 "that function is a little too big, i think i'll split it in half"
did not hear "add the tests for that new function"
31:56 made my day
Yes, adam and eve is the first of all creation, whom we descend from
One inaccuracy... the CTO doesn't expect to not ship shit. When he responds to "we need 90 days of parallel running of the old and new system" with ordering the operations team to cut over to the new system and to turn the old system off after 4 days to stop receiving a nightly report of all the discrepancies and errors with the new system, he knows shit got shipped, he backed the unrealistic schedule the software engineers said was unattainable, he was behind cutting the testing schedule from 6 months to 30 days, he was behind hearing a release date a year beyond what he promised and forced, and, most importantly, I think, he knows that his career will be boosted by being 'the one who got it shipped', while the developers are the ones who will be fighting fires every day (and night) for the next 3 years to accommodate things. He also knows that if it goes really wrong, like it did with Toyota and their 'unintended acceleration' and he gets called up in front of a court to explain his actions - he will walk free. He knows that the court will declare "it is impossible to judge any executive as negligent, because there exist no legally-enforceable standards which he could be said to have been negligent OF." He knows that his developers not having a bug tracker at all, that they managed to follow only 4 of the 90+ recommended and suggested practices published by the automotive industry, that the developers stressed that the product was not ready for public release and he ignored them, that he hired the most inexperienced and unqualified (and thus cheapest) developers he could find to create code that cost peoples lives - and while every developer will call him an idiot and a demon - he will likely get a promotion.
In the talk, Bob is pretending to be the ideal CTO that he would like to be.
Thanks
PERT Project Evaluation and Review Technique
“You see the picture there?” 51:01
15:39 "have been POURING INTO this field..." LOOL as if they were some kind of toxic fluid, LMAOO
everybody expects high quality but bosses do not want always to invest into that because users do not wait and do not pay enough.
If you don't unit test everything -- you are putting the software-cart before the software-horse.
Programmers don't want to watch the code rot, but management who keep putting money and budgets on it, will let it rot.
11:04 this.
14:39 so, around year 2100 all the Earth's population will consist of programmers or people who can program
100 years ago, the people who could read was a fraction of the people who were alive. Now, at least in the western world, almost everyone can read.
nope AI will take over this field :D
@@hamuArt ok but then it should take over maintenance as well
we never lauched betas as I work for 10 years.
You are AWSOME
This Guy is Awsome
I just start reading clean code (physical copy), and youtube push this to me. How is it possible?
maybe you were reading out loud and your phone is spying on u :)
Do you regularly look up coding videos on TH-cam?
I do. And, I also have the ebook copy. It's pretty popular.
If you bought it online them it's algorithm
Did you accept cookies?
maybe you bought online or with your details attached to the internet haha
Sometimes I wish he was my real uncle
did he do all that in one day?
I have dealt with manual QA. It was horrible for everyone involved.
The mythical test button sounds extremely compelling, but I feel like its description kinda assumes that the tests will be fast. Even when I feel I can trust the test suite, if it takes over an hour to complete and give me that green light, it might as well not be there, at least not for small changes. It just doesn't sound like a "step" and more like an "I'm done".
It’s a test for a single function. So you know once you refactor or add to the functionality it still passes the original test
Hearing all this in a Peter Griffin voice
21:14 well a car costs tens of thousands of dollars. People aren't even willing to pay 99 cents for extremely sophisticated software.
My Netflix subscription is $20/month. That software is okay.
@@socrattt you pay that for the content, not for the software. The best streaming platform will go down without a high quantity & quality Selection of content
Do you have any idea how much larger companies pay for the development of specialised software?
@@Naglfar83 sure, but that's niche markets. I'm talking about the fact that Joe Everyman owns a car that they spend $100 on per month (on average). But Joe Everyman has never spent a single dollar to purchase an app on their app-store.
@@ViktorEngelmann He is paying for the software in the car, though. Average Joe is not interested in software as such; he is interested in something that makes him feel good. If that involves software, he will pay for that software as part of the product. He pays for cars, TVs, phones, laptops, gaming computers, games, streaming services, internet connection, perhaps cable TV, stuff from Amazon, etc. All of that contain or use vast amounts of software. He rarely directly pays for software by itself, but he sure does pay for vast amounts of software through the products he buys. And he sure wants all those products to work. And he is willing to pay more for a stable high quality product.
I getting exausted with stories, can anyone enlight me whats the point of explaining genetic origins in clean code topic? I really appreciate a answer.
"think about how wildly irresponsible it is to fear what you have created" --> Julius Robert Oppenheimer take an example from us and improve your code bro :D
Well, I agree with 100% of what he says. Unfortunately, its all lies. Thats not how things work in real life. If i'd be alone, I would uphold all that he says. But I have a team, with members that are less competent, and management that put priorities wherever what they want. If I spend time fixing bad code of others without the approval of my team and superior, without having that in the sprint objectives, I would get fired. I truely wish it would work like that, but I feel the mentality of the whole industry needs to change for that to happend.
I mean, if you still have to write shit, you might as well slowly push towards writing less smelly shit. Who knows, maybe in a decade we won't have to write shit anymore.
@@BlazingMagpie That's perfect, it's exactly what I think. The only way to change your context is to change yourself first, and slowly show how those changes can be good for everyone.
Maybe there are different companies with different views on quality, just like there are customers with different views on quality. Some companies might perhaps fire you if you do not fix bad code or if you do not mention when you see bad code or if you agree on meetings to prioritize new features over fixing bad code; maybe they make hospital equipment or space rovers that absolutely must not fail. And other companies might have company values of quantity over quality, and then you just don't want to work there if you value quality.
It should be how it is. Victim mentality.
Schools like MIT and Stanford arrogantly view clean coding as a matter of the trades and professional practice, not worthy of any academic interest. If you want to learn as a student, you're on your own.
I dont understand, why did he talk about sun/moon in previous lessons and in this lesson he started with adam and eve? What was the point of that information?
Subliminal! preach the book, you are converted, without knowing it.
@@andywong3095 converted? as in to Christianity? But he had other "starters" as well in his previous videos like about sun and moon etc. How is that related to Christianity? just curious. or maybe I misunderstood your statement. :)
@@blasttrash , hehehe, if you were a "C" follower, you will be more likely, believe, his Ideas. hahahaha.
Like a Politician, said, I am a god fearing "C" person, you may be more likely, to vote for him,
BECAUSE, you are a real "C" person.
But, big BUT, people like me, think of it, as HOT-WIND.
Still missed it, "The" book, his "Book", Not the other BOOK, that you were thinking of.
I have to add, ONLY 1 exception, about Politician, President Jimmy Carter, a real Christian, with the capital C.
You must be new here. Watch some more random talks from him on youtube. Every single talk he does starts with a random science or physics subject.
@@GerbenWijnja "You must be new here" 100% Yes. hehehe. I hope nobody take me seriously. Uncle Bob, is well known and respected, OLD too, I really think???, he will not care any pokes from anyone. ( I know this, because I am old too)
If you tell me, that you've fully covered your business logic with unit tests. And something changes in the business logic and not even one test go red, then you didn't tested it.
Tests shouldn't fail if you just refactor (tool assisted). That is what he should have tell instead.
Moon, biologic parents, what do these fucking subjects have to do with clean code? By the way, even with some weird subjects that's the most motivated presentation about software development I've ever watched!
The lecture is brilliant, but the Camera-Guy/ Video-Editor destroys it all.
There is code on your screen!
Does anyone know why he starts his talks by interesting and unrelated topics? Is it to engage the audience before actually starting? Or just showing off his knowledge? :P
More the first one, though he does seem to have a sizeable ego 😀 i've seen it taught by professional speaking trainers to lead with a captivating story. Though usually you try to make it relate to your topic...
6:32 This is incorrect. Sperm cells have mitochondria! And a lot of them in order to generate energy (ATP) for their tail to move. So, what's this whole introduction for anyway?
It's his technique in every presentation. He starts with a "story" that gets everyone focused and interacting before he jumps into the nitty gritty.
Yes sperm cells have mitochondria, but they are used for locomotion. When fertilization happens, in the very early stages of development (a couple of cells) they are destroyed. Hence we inherit our mitochondrial DNA from our mothers. Definitely poorly phrased from his side, but I think it was an oversimplification, to get to his point.
The introduction is BS for other reasons too, as it's disregarding evolution. You don't suddenly get 2 people to parent everyone, you have N monkeys, one mutates slightly towards humans, mating happens while other monkeys mutate differently towards humans and the collection of the monkeys together turn into the ancestors of humanity, i.e. there's never a point where you can identify 2 individuals and say "these 2 are human, the rest aren't".
If you want to go far back enough to reach the real Single Ancestor Of Everybody, that would be the self-replicating molecule that accidentally came to be.
Second time the dude does a Star Wars reference out of the blue and I seemingly nobody gets it :(
Oh man, i feel called out in the fearless competence section 😅 I'd love to refactor but am terrified of changes because a) it takes ages (10min to run our test suite each time, and days to get the PR approved and merged)
b) i don't want to be held accountable for the code 🫣
Edit: ok i am so grateful i have the 1800 automated tests and not 80,000 manual tests 😳😂
17:15 Not me! I was very prepared. I was completing tasks (correctly!) in less than a week, maybe even less than a day. Hard to remember exactly. The only thing I really needed to learn was using source control. Everything else I either knew already or simply didn't matter. Seriously.
I have an Associates in Computer Science (Programming) from Pittsburgh Technical Institute (now Pittsburgh Technical College).
I graduated in October 2011. In a little more than a week I'll start a new role as a Senior Software Engineer.
So was I prepared? Absolutely. If I had a time machine would I change anything about my education? No, not really. I maybe would try to change how I paid for it, lol.
Pairing reminds me too much of Xtreme-Programming!
5:51 this isn't necessarily true, since it is populations that evolve rather than individuals. It is possible that as a species we were genetically bottlenecked to two individuals, but an incredible majority of the time when that happens, the species goes extinct. Our true common ancestor could very well be the first eukaryote that developed sexual reproduction.
Take feliforms for example: do all tigers share two paired ancestors? What about all lions? Cheetahs (maybe)? Lynxes? House cats? Would they all be the same two ancestors for all varieties of cats?
What about carnivores? You have caniforms like dogs, bears, seals, stoats, as well as all the varieties of cats mentioned above. Do they all have individual genetic bottlenecks, or did they all change as populations?
Mitochondrial Eve and Y-chromosomal Adam may not have even known eachother, or even lived at the same time for that matter. And regardless, either one of them necessarily would've had parents and grandparents, etc.
Why doesn’t the camera show the slides?? So annoying.
you have take the generics example!
38:29 fragile test problem
17:15, 50:42
This is all great, shame none of this is considered relevant in the professional world and will likely get you targeted for being unproductive.
If you require tests for every bit in your code then I submit that you are not fearless, quite the opposite
What do you do if you get hired onto a company with software that has zero automated tests? It is all written and needs to be cleaned. Meanwhile, the CEO keeps harassing you for new features. Even though the features that are already there don't work most of the time.
Just talk with your boss about the only thing that matter in business: "money", explain the cost of unclean code. If your boss dont listen, talk to to his superior. At this point your job is in risk, but also you will be prepare for a promotion. Dont have fear and do the right thing, an spiritual man dont have fear because everything is for good.
@@BienestarMutuo That would mean I would have to find time to research the business value of the products my team is in charge of developing. Everytime I try and ask for access to this information, I get the classic "This is not a priority right now." I am just a lead developer not a business analyst. I know they would never fire me. But, I might quit if I feel I am not allowed to make the adjustments necessary.
@@BienestarMutuo I think the problem is. That I am the lead developer and my product owner does nothing but what the CEO tells hem to do. I don't have a direct line to the CEO but my CEO is making all these decisions on cranking out features as fast as possible. I was brought in recently. And the developers under me haven been there longer and our still trying to crank out features written irresponsibly. I have half a mind to fire them all. I don't think any of them know any sort of architecture and none of them have ever written a unit test in their life. With the pressure from CEO to crank out features I don't have time to teach them all basic principles of software engineering. Thanks for letting me rant.
@@jordanvarnon4835 OK, do as you need, but remember your inner values are not negotiable. Money can buy Pleasure but not Happiness.
This specific video in the series has nothing to do with coding. if you came for coding like the first 2 skip this one.
If you've worked on software in a few companies, you'll see that this talk is all about code.
@@socrattt please time stamp every bit of code in the video.
It‘s not exactly about coding practice, but merely about coding ethics which makes it important nevertheless for every programmer. As a programmer you should not skip this video.
@@Naglfar83 i disagree but to each their own.
Absolutely love those intros, but I can't help but wonder, what is the point of them?
Maybe to wake the audiences' brains after a break?
Comparing the number of programmer in the world.
To warm the audience up. People take a minute or two to settle into a talk so it's smart to not go straight in to the details, but instead start on something relatively unimportant to give everyone's brain time to tune in and start listening. Using an interesting subject is a great way to get people's attention and get the audience "on your side" before you start proper.
"You know what? We're never going to be uploading anything but betas, it's betas from now on" steam early access in a nutshell 🤣
"Midi-chlorians" HAHAHAHAHAHHAHAHAHAHA
19:09 We also uploading alphas tho
Windows 10 Home Edition springs to mind, not alpha [well, mostly: 1809 deleting users' files!], but certainly beta!
16:49
Uncle Bob and his dad jokes 🙈
*dad's brother jokes