Clean Code : Horrible Performance | Full Interview
HTML-код
- Опубликовано: 2 апр 2023
- Recorded live on twitch, GET IN
/ theprimeagen
Casey
Twitter: / cmuratori
Clean Code, Horrible Performance: • "Clean" Code, Horrible...
Author: / @mollyrocket
MY MAIN YT CHANNEL: Has well edited engineering videos
/ theprimeagen
Discord
/ discord - Наука
Prime you should 100% release some longer form interviews with engineers as a podcast. This was amazing!
Completely agree
Would 100% subscribe to a prime podcast
primecast ftw
PrimeRogen! Lets go!!!
I would watch the shit out of that!
For some reason I expected this to be a prime reacts video, so when Casey actually replied about the camera crispness I was genuinely freaked out for a second lol.
lol me too
Please make "The Prime and Casey Show" podcast a reality. It would be 100% pure awesome.
We need more interviews of Prime with Casey!
This would be pure gold! Please make it happen!
Always Listen to what Jesus says 🙏🫡
💯
This would blow all other "coding" podcasts out of the water. They're generally terrible
This is gold. The worse personal project I ever wrote, one that almost made me give up on learning to code, started as a UML diagram.
No waaay hahaha. I literally just finished some diagrams for my next project thinking that I'm being organized and smart. I don't even know yet all the functionalities it will have I just come up with things that came to my head.
@@jan0195 I think, that point here is not to reject the planning before implementation. Actually, it’s good to plan something, to draw something, to visualize. I myself is a visual kind of person, so when I want to plan (or I’m stuck) I like to draw. The point here is to reject fcking “clean code” (TM) (c) dogma. and do things in really optimal way from the performance and developer points of view.
@@eazypeazy8559 The point here is to reject overplanning before implementation... Actually, the point is not even that. It's too vague. The point is to iterate in small steps, clean code or not.
@@antdok9573 yeah and and reject fcking "clean code"
LMAO :D
Such a likeable and engaging guy, his content goes down very easily! glad you invited him and I got to know his channel. And of course your questions and opinions were spot-on as usual :)
tyty
Your enum vid was my fav. The bit about enum variants actually being structs was super helpful. Thank you
seen a bunch of the clips, stoked to see the whole interview!
The performance also correlate with power consumption. If you complete the task faster you get more cpu sleep time between tasks and thus longer functioning of devices on battery like smartphones
the best interview I've seen in a very long time. long fan of Casey and Prime. peace.
Hio!
@@ThePrimeTimeagen This is your best interview. Just incase you thought otherwise.
Casey is a wise dude. His handmade hero series is amazing. I cannot believe it was over 8 years ago!
the amount of stuff you can learn from handmade hero is insane
Only thing you can't learn from it is how to finish a game.
@@sliver170 Hahaha, yeah. So you're forced to make these infinite games like WOW.
Series is cool, game is kind of trash though. It's still in it's infancy and I don't see an end to the project in sight.
@@jupiterapollo4985 That completely misses the point of the series. Who cares?
Wait, dude was on Dungeon Siege? Dungeon Siege was _awesome!_ I wonder if he worked on the level streaming tech, cause that was a literal game changer back in the day.
Yes, it helped usher in 3D streaming worlds! (Technically Ultima series did 2D open world streaming in the early 80s) but Dungeon Siege definitely influenced a LOT of people - gamers, designers, and programmers alike.
Great interview. Casey's perspectives are refreshing like an ice-cold glass of orange juice on a blistering summer's day. I love his takes on OOP and "semantic compression".
Fantastic interview to watch, tons of fun! I'm curious which video Casey was talking about where you reacted to his video. I looked for it but couldn't find it.
Awesome to watch/listen. You guys give me some extra energy pump for the day and beyond.
so glad you posted this!
This is the best interview I’ve seen on the internet in at least a year. Incredible.
How did I miss this? I love this guy and followed his Handmade Hero for a long time. Great chemistry between you guys :)
Thanks for sharing this, you guys are both great!
i really appreciate it
love you both. Thanks for this amazing interview
An additional thought about planning (comment on the discussion around the 45 min mark); usually planning is done in the beginning of a project, when you know the least about it so over planning might hurt you in the long run.
What a good interview. Yall are great. Love you guys.
One of the best talks I've seen on the channel
Thank you for releasing, sir.
I love this! I'm realy into optimizing code, even miniscule micro optimizations. However, at work it's: "You've got one hour to make this work, Go!"
Dude you are amazing, rarely i saw an ex FAANG actually really enthusiastic about programming
@@Sledgeattack I thought he had retired
@@tictactoc9311 nope
@@tictactoc9311 He made a video about "why he quit" but despite that, he still works there lol
Personally I think there's very few passionate and vocal Software Engineers. I don't agree with everything Primo says, but props to him and others for really putting out their content and their opinions out there.
Hell yeah I've been waiting for this
Casey knows what he’s talking about.
I want more of this! You guys should consider doing a weekly podcast together or something…
I don't care what other people think, but I enjoy the long deep dives into specific topics. Loved your video on comparing rust and typescript enums, btw!
absolutely, just got into this channel/streamer and the stuff where he actually goes into the detail is surprisingly insightful for a junior
I likes the rust vs typescript enums video! I appreciate you having made that anyway
What always astounds me is the massive amount of justifications I see in the comment sections for videos like this, yet the radio silence when people like that twitch guy made a better app than the twitch Mobile app than the official in a hackathon.
There are a lot of ramblings about premature optimization but I really believe most people don't actually know what optimization is when that quote was invented.
The win prime got with that Netflix code wasn't "optimization", it was actually doing the task correctly, and he still had to fight for the right to do even that. Sure, when he hops into the bosses room and says they need vectorized uis for each major Android processor as well as Apples you can tell him he's going overboard, but do you really think a modern interface should have over 1000ms delay for any action?
Again, I hear a lot of hiding behind the veil of the internet for the latency not mattering, or something, but rtt to anywhere in the world is generally going to be less than human reaction time, so even that argument to me makes no sense. Ived piped plenty of data over the net that was still in time critical software, I just had to care about both ends being fast
The problem is most people think premature optimization is ANY optimization when it should be line level bit twiddling tier madness that can take a day to get 1% when you need that level of improvement. Those are the last resort optimizations not picking the right data structure or algorithm to properly use cache and quickly solve your problem.
@@WizardofWestmarch also to add the MVP principle that agile promotes tends to lead to a lacking mentality. agile culture screams for a feature/product to be finished, no matter how bad as long as it works, but when you prioritize completion over practicality you sometimes build something that works but is difficult to fix/optimize. I feel like that's a large part of why people love rust so much; you can build an MVP, but with a good standard.
What's the point in trying to optimize for sub milliseconds when you are bottlenecked by network latencies of couple milliseconds
@@swagatochatterjee7104 Because that code still needs to run on a server somewhere, and when that code runs for billions to trillions of user requests per day, suddenly that "wasted effort" on preventing that extra 1-2ms per request add to thousands or millions of dollars in extra energy costs for the business that wrote the software.
@@sethrenshaw8792 It's not just that though. When every part of your decision making becomes "but but but but... IO is slow!", those decisions compound. You write thousands of lines of technical debt that cause request latency to jump from 10ms to literally 1000+ms *per request*, and then you also pop off *hundreds* of requests per click. All of a sudden, you have a 25 second per click load time for someone on a wired fiber business class connection that lives 15 minutes away and has a $10,000 PC.
And what will that developer say the entire time you call them on this absurdity?
"There's nothing we can do. IO is slow bro. That's PREMATURE OPTIMIZATION!"
Thank you for posting this
This was amazing!
loved this interview
41:00 "the first version has to be perfect" or "my first version works, so why should i change it" is one of the biggest traps in anything you can do, but mostly known in Author circles. in reality the first version you make is NEVER good, let alone perfect. you can always edit/refine it and get way better results by doing so.
there is a reason why big successful author take at least 2/3rd of the needed time to rewrite and edit their story. if not more.
it is sadly one of the most unrealistic habits we get teached in school and one that gives young people the most trouble. everything you do/write has to be as perfect as possible in the first try/version because you don't get the chance or time to change what you did.
I noticed this abhorrent inefficiency of other apps very clearly when I bought an Android game called Slice & Dice. The app seems insanely optimized and doesn't use any battery at all, which is not very usual for mobile apps. Most mobile apps usually just turn your phone into a pocket heater.
Funny because on M1 Mac macOS it ran terribly last time I played 😂
Sure! I have a pc too for games. Still this game isn't a 3D game etc so it should run perfectly fine on newer Mac. But the developer probably used a framework that didn't prioritize working well for Mac. Multiple operating systems is complicated, and yes Apple haven't prioritised making it easy to make games for Mac. Still, would love to play this game on iOS and Mac hehe@@ninsix
This really good!!! Primecast when?
This is my 3rd Casey & Prime video of the day. So. Good. Everything they are saying makes so much sense.
This was an awesome interview
This vid explained a lot of Prime’s ideology for me lol, now I have a better understanding of why when I like or don’t like something. Really good one vid!! Also, love the guess too. I feel smarter just listening in lol
Great interview!
Around minute 40:00 just casually paraphrasing Continuous Delivery: deliver workable code fast let you get feedback fast so you can refactor and improve it as needed. Speed gives you quality, and coding with quality in mind makes you fast.
Great Interview! I hope more comments help on getting more content
I watched Casey's video on quaternion double-cover yesterday where he explained how it could be useful in animations. There was a little bit of a hook to it, which is "here is what the industry doesn't do, which would be much better!", but apart from that I thought it was a pretty calm and informative video. My point is that, some people do watch the more technical stuff, and it is up to the content creator to know their target audience, and it just happens that the highly technical audience, who has enough spare time to watch videos, is not that big, but they do watch it.
got a video title? I'm not seeing it..
@@chainingsolid "Quaternion Double-cover and the Rest Pose Neighborhood - 2006" channel: "Casey Muratori"
great video love how hard you guys are vibing
you shouldve asked him why he was using notepad in his video tho just cause i bet hed have an interesting answer
@@friend0 Probably just for the video, he doesn't actually use it. He used Emacs for a long time, but switched to another editor someone from his community made at some point.
@@Rakkoonn yup he uses 4coder
Invite him more often!
47 is just the beginning.
At first I thought you meant the video runtime
@@caltissue141 No his age :-)
@@caltissue141 same
Of the end?
@@ubuntubad The best times of your live
Awesome!
That was awesome. Casey is the man.
More conversations with Casey pleaseeee!
Casey in high school really reminds me of myself to the point when I had literal flashbacks of those times :)
Great interview. And the point of performant applications is so soothing to hear. I hate using online services just cause of the loading times. That's why I use Client mail apps not google, Obsidian not Notion, even VSCode live share not some web collaborative ides.
The problem with slow websites isn’t just JavaScript code, it’s the slowness the network.
Oh hell yeah! I will always be grateful to Casey for teaching me how to program games
I also think when I implement something how to do it the best way possible. The thing is that after implementing it drawing on my entire experience so far as a programmer, I usually cannot see a way to do it any better and leave it at that.
I literally avoid Google drive (the web page) because it is so slow. In fact, it's so terrible, and all of my music is there, that I don't listen to music much anymore. It has actually changed the way I live my life, and I kinda have just given up on these things being better, so I don't even believe in a competitor very much.
Glad I randomly found you on Twitch 😅
I think the distinction between advocating premature optimization and just being aware of performance-killing habits is important. Because, frankly, highly optimized code can also be incredibly inflexible.
That's another difference between the webdev space and video games - web applications tend to grow over time but most video games don't double or triple their code over their lifetime.
I'd think it's more the video games are largely swapping out code rather than just adding new code, in addition to many changes just not really being code (i.e., stat adjustments all the time for buffs/nerfs each patch, skins and voice packs and other assets being added forever all the time, but not really entailing any code in most cases)
@@MH_VOID A lot of those things are largely pure data. Unless there needs to be very specific interactions, a skin/model can be packed with all animations and run in the renderer just fine. The issue comes when the game adds something like an item which has unique effects. I'll take League of Legends as they have a recent example.
There is a biscuit item which is supposed to give mana permanently when used or sold. The issue is that if they were sold and you undid it, the mana either increased or decreased permanently and was infinitely recreatable. That is because the item is the only one which has an effect on removal.
Tripling your source code is almost never warrantied. The issue is that the abstractions actually make it hard to keep the solution DRY (think of all of the boiler plate code). On the other hand, you could simply write a solution to your current, actual, contained problem and when you'll add a new functionality later on, you'll also refactor the first one for some code reuse.... Like code on the project absolutely should grow logarithmically, not linearly.
@@GonziHere DRY can sometimes lead to obscure abstractions and difficult to maintain code. Sometines it's just better to repeat yourself if you aren't doing exactly the same thing.
Holy shit my friends and I spent around 18 straight hours playing Dungeon Siege in a basement in high school. Love that game.
Bruh really I never thought this collab would be possible!!
i love this
I liked the typescript vs rust enums😢... Please don't stop doing videos like that
Such a great discussion.
Dungeon Siege is still one of my favourite games to go back to every once in a while, and hearing RAD game tools brings up memories 😂
Best channel ever no cap!!
This is crazy, I thought this was a react video then Casey started responding
Holy smokes you got to interview Molly Rocket? I just discovered your content yesterday. What other gems are in this channel?
there are tons. got rich harris on here as well
going to get more
@@ThePrimeTimeagen Nice! Keep up the good work. It seems like you have the entertaining stage presence of Dr Disrespect which combines nicely with advanced programming topics. It's great to see open minded discussions with the passionate (sometimes grumpy) devs like in this vid. You have very infotaining content IMO!
I was a bit spicy about Casey's videos, but like 2 minutes in, and I'm all ears, seeing how chill he really is. I just remember the Windows terminal rant :) I completely understand what he talks about, sometimes you need to be extreme about your claims to be heard. What a great opportunity to hear you guys.
(I have nothing against his arguments tho, just didn't like the ones he chose to debunk, and the overall approach: obviously "clean code" doesn't make a lot of sense when you're the only person who builds geometrical shapes library whatever, but some practices are useful in teams and larger codebases. It's a good example but just not like "we've picked their claims as the best example of clean code")
people like casey and jon blow are often seen as abrasive because they aren't afraid to point out problems, and they step on a lot of toes in the process.
31:32 Once I compiled CPython and embedded it in my program, extended it and had to debug a function that involved stepping through the Python VM. I had to walk in and out of so many C functions for the most trivial of things and I realized there's no way everything isn't drastically bloated.
Also, 27:41 I'm new here, when he says "whole meth scene"... ?
Addiction to meth
What I find interesting about the content argument, and using something like Netflix as an example. I decided (number of years ago now), I would only pay for so many services. And the ones I would pay for, would be the ones with the best UX. As I knew I was gonna be going to the seas anyway, for stuff not provided by the services I was paying for.
2:10 Can you make a playlist with these deep dives so people don't have to try finding them?😁
Especially around Rust itself, not comparisons with other stuff...
E. g. I really liked your Vim series... Things like that are dope and high quality shit🔥🔥🔥
Thanks a lot!
I seldom watch anything over 30 minutes. If it's longer than that, I only listen to it with my headphones while doing something else (cooking, laundry, cleaning, gardening). Tutorials are the kind of material that needs to be watched and thankfully they are usually chopped in shorter videos and combined to a playlist. For me, this channel is mostly for listening. It's a mix of entertainment, technical advice and career/life coaching.
love the title
gonna buy 10 of the same pants and T-shirts now, thanks for enabling me
I'll say that one of the worst things about polymorphism for me (especially in OOP code with DI) is that it can become quite ridiculous to even keep track of what the hell anything is/does. Like sure you SAY x thing does this... but really it calls y thing over here which calls z and their all interfaces so I need to find out which interface actually has the bug/problem. And yeah... it gets really out of hand.
exactly, I don't see how "clean code" with abstractions, polymorphism and everything hidden behind access modifiers, somehow contributes to "readability". If anything, it's a detriment to readability AND performance.
Maybe maintainability? But keeping all the abstractions and having all these arbitrary rules just sounds less maintainable too, idk
I recently did this to myself. I thought "oh wow, this C++14 DI framework in a single header is really cool, and I don't have to worry about my constructors anymore". I've probably spent as much time trying to figure out WTF the DI lib is doing (including inferring behavior, yikes) and why things aren't working. I regret reading Clean Code.
Banger
Can someone explain to me the part of the video where Prime relates performance to JS map calls?
If I’m working of something new for me, I don’t try to follow any particular rules and just ticker around see what can I achieve with some lines of code. When I’m working persistently on something like the app that renders some tables and charts or scrapes the stores data, I follow at least some basic set of established rules, but only established by seeing an app behaviour in real world.
Can't believe you didn't ask Casey M about ZINC OXIDE!
solve & test first, abstract last. measure & optimize then, repeat until enough. ship it, done.
Haha auto-play transitioned me to this interview from a Cypress Hill live show, and the tab was playing on the background. I thought this was a post-concert interview! "And I'm just like guys, I talk calmly all the time, and no one cares." And I'm like "yeah yeah makes sense, and I like the band's aggressive style anyway".
I loved this😂
I'm sure there's people who have a similar viewpoint, but is it so uncommon to think that the "clean code" principles taught nowadays do nothing more than bloat your project, making it less readable as a result?
Like I'm sorry, but seeing 17 Objects, each in their seperate files, does not make me think "oh yeah this is well structured and readable". Adding abstractions just makes this even worse, because each seperate file is interconnected with 3 others, and all of a sudden you see yourself switching between 5 files to understand a single algorithm that should've just taken one analytical look.
Additionally, I've yet to see a situation where multiple objects are "more maintainable" than a performance-aware alternative.
basically, I do not understand even the arguments *for* "clean code", since it doesn't look cleaner nor easier to read, nor easier to maintain, than a functional approach.
I think there's a happy middle ground. If all abstractions were bad, you would never write functions, never use if statements or loops and just use gotos for all of your control flow. Hell, if you really wanted to get rid of abstractions, you would just write all your code as machine code. For some performance critical applications, this may make sense, but is obviously terrible from a readability perspective.
In my career, I have seen cases of novice programmers copy-pasting nearly the exact same block of code hundreds of times, generating tens of thousands of lines of junk code. This could have all been compressed into like 100 lines of well written functions. The copy-pasted code is probably more performant than the abstracted code, since function calling introduces performance penalties, but the maintainability is obviously horrible.
I also agree that people who write 17 classes to accomplish what could be done in a few lines is also very bad. I have also encountered this many times, and I probably hate it even more than the under-abstracted code because people who do this tend to be full of themselves.
It's all about finding the right balance. I've found my code is usually the cleanest when I use a mix between functional and procedural style. I encapsulate the more complex logic in pure functions with a descriptive name and then call them in a simple, linear procedure without too much nesting. I only write classes when it really makes sense to couple logic and state, which isn't too often.
You're exactly right about the YT clickbait. It works, and if you don't do it, you don't get views.
What is Casey's video you are referring to?
17:30 A threshold of acceptance. This sounds like a case of very high framerates. From purely engineering standpoint, most games could be improved to run in 120Hz and more. But that's not a thershold to reject the product (game). So it won't be pushed for unless it's already relatively easy to optimize the game at the final stretch.
I didn't click the enum vid bc i'm not a typescript or javascript dev. Will check it out later tho
dungeon siege wasnt huge.. dont know about that, over the years.. ive seen talk about how good the game is and they still play it :D
What video are they talking about ?
The word "pessimize" is used elsewhere! Clang has a warning -Wpessimizing-move for when someone uses std::move in a way that prevents copy elision.
You are so smart, pls continue with your smart stories when you save millions and millions.
I always think about a design before implementing, to make sure it can be extended. Otherwise you're just writing bad code. But I agree that if you spend time writing a bunch of big frameworks before writing actual code, that is going too far.
I feel like an extra nerd for knowing the cited video before finding this interview, i'm wasting my life
Interview Johnny Be Right , you reacted to some of his videos before
lol.. as a web developer/ designer at the age of 44.. yeah I’m critical of code I wrote and mostly rewrite complete module or extensions over multiple times just to make it seem more readable and understood.
I’ve gone back to code I wrote years ago and can’t for the life of me understand why I structured it in such a confusing way..
The other problem is that we do see people trying to optimize and accomplishing nothing. If it's so straight forward why does the IDE not warn about performance intensive decisions?
Actual interview starts around 6:30 for the impatient, like me.
DUNGEON SIEGE?!?! LETS GOOOO!! DUN DUN DUDUDU DUN DUN
OMG Casey!! Love the guy.
I keep pushing my best towards some performance optimization in my code. Noone cares. But I mean, if you are faster when you run the software for debugging and testing, isn't it better for the business down the line?
I had a project that was canned... it's was doomed at the start... The architect "well hind sight is a great thing, no one was jumping up and down at the start". I was like "no I wasn't shouting, butI said several times calmly, also I didn't need to shout about it because was doing that that; and they fired him"... If people don't wannt listen, you say it calm, you can say loud, it don't matter... but be sure at the end you'll always get a wight board jocky that wasn't listening... "well you know hind sight and all"..
That first minute and a half hit home what I dislike about online. People don't consider a calm thing worth listening to, without a hot take.