Jonathan Blow - What went wrong in software development

  Рет қаралды 163,518

Torless Bardamu

Torless Bardamu

3 жыл бұрын

Excerpt from indie video game developer Johnathan Blow's Twitch channel where he discusses his opinion on how and when software development went wrong, how CS theories progressively branched off from practical, real-world problems, adding layers of abstractions where it wasn't needed.
Jonathan Blow is currently building the Jai language, meant to replace C++ for developing video games. He is concurrently developing a game using that language.

Пікірлер: 555
@bike4aday
@bike4aday 2 жыл бұрын
Solving a few obvious future problems up-front or planning to do so is okay. Solving every possible future problem up-front is just not reasonable. It took me a long time to learn how to not over or under abstract my code. Analysis paralysis = too much abstraction. Maintenance nightmare = not enough abstraction.
@breakprismatshell6270
@breakprismatshell6270 2 жыл бұрын
100% agree. One of the most fun things in software engineering is weighing the complexity of your solution to the inherent complexity of the problem at hand.
@ifstatementifstatement2704
@ifstatementifstatement2704 2 жыл бұрын
I wish you could explain that to the devs I work with. I’m self-taught and have been programming for far longer than they have, and tend to approach programming in a logical and creative way. While they will analyse and follow every theory under the sun before writing a single line of code. It’s overkill.
@ssssssstssssssss
@ssssssstssssssss Жыл бұрын
Abstraction is a tool not a law. It increases the number of components in the system so can easily increase complexity. So to offset that you better make sure it decreases the complexity of preexisting components.
@T0m1s
@T0m1s Жыл бұрын
Too much abstraction is also a maintenance nightmare. Much easier to introduce abstractions than removing them.
@ObsceneSuperMatt
@ObsceneSuperMatt Жыл бұрын
I think that depends on if you are making a video game, or running a nuclear reactor. In some cases, every single problem must be accounted for, or the consequences of failure will be too dire.
@jftsang
@jftsang Жыл бұрын
You mean my RequestFactoryBeanFactoryStrategyBuilder class isn't doing anything concrete? But it uses design patterns!
@neildutoit5177
@neildutoit5177 2 жыл бұрын
I honestly think frontend devs are the biggest propagators of the BS these days. Used to be Java people but now it's React devs. Worked with a React dev on last project, expert with 10 years of experience at top companies. This guy puts together this system with all these hierachies and integrations and plugins and libraries and you can see the guy is smart and his code is neat and what what but ultimately he could not get the interface to display what it needed to display. I eventually took over, knowing only the very basics of vanilla javascript (I'm a backend dev), and got solved the problem with a few lines of HTML and vanilla. What frontend devs either don't realise, or purposefully ignore, is that a website consisting of 5 pages is not a system. It does not need a system architecture. It does not need a philosophical model. It does not need 10 layers of abstraction. It's a few rectangles that need to be put in the right place and you can put them there with a script.
@hyperTorless
@hyperTorless 2 жыл бұрын
A sane system makes things emerge from down to top, not the opposite. It's when you take the abstractions BS taught in web dev class and apply everywhere you can that things get out of hand, exactly what John talks about here.
@youngwt1
@youngwt1 2 жыл бұрын
Yeah react is crazy complicated, I don’t do a lot of front end so jQuery feels like the Swiss Army knife that gets jobs done so I don’t fully understand why front end devs hate so hard on it now
@waytospergtherebro
@waytospergtherebro 2 жыл бұрын
If you went back in time and tried to tell any engineer anywhere that the best way to update a presentation layer was to maintain a complete copy of a tree of arbitrary complexity and diff the entire thing every single time any piece of data changed they would probably punch you.
@ifstatementifstatement2704
@ifstatementifstatement2704 2 жыл бұрын
Exactly!!
@gmodrules123456789
@gmodrules123456789 Жыл бұрын
The problem is that the client "might want 6 pages in a year or two. Or maybe even 7 pages". React/Angular/Vue work well for building large complex web applications. The workflow is consistent, though slow. However, with small projects that will remain small, just writing out html and javascript is way faster. When I was learning Angular, it took me about 3 hours to build a single page app that updated a list of people's names. 3 hours, flipping back and forth between two different guides. It would've taken me about 15 minutes using just javascript.
@asdqwe4427
@asdqwe4427 Жыл бұрын
People are too afraid to throw stuff away. Sometimes you need to write something to know what is wrong. People put so much prestige in their first designs
@hyperTorless
@hyperTorless Жыл бұрын
"More than a half, maybe as much as two-thirds of my life as a writer is rewriting. I wouldn’t say I have a talent that’s special. It strikes me that I have an unusual kind of stamina." -- John Irving
@honkhonk8009
@honkhonk8009 10 ай бұрын
The worst thing you can do when writing software, is to think about optimizations before you even started. Your supposed to make a shitty product first, and then optimize it as you go along. Iteratively.
@callmedeno
@callmedeno 3 жыл бұрын
It has gotten quite absurd. I remember first year of college was good it felt like you were attacking problems using computers. It was going to be object oriented but at that stage we hadn't been taught the deep hierarchy of bullshit. I finished college but after years of seeing in the industry that this was in fact what building software was I completely turned off it. Something felt extremely wrong, it was as if writing code had become pseudo if not de facto Category Theory (before I knew what that was), and my interest for it wained and I ended up getting very little done while hating everything I did do. More recently after seeing some successful people show that there is another way I have dabbled again but I'm realising it will take a while to approach things in a simpler way once you've been taught to model the complexity first.
@hyperTorless
@hyperTorless 3 жыл бұрын
I had more or less a similar experience.
@AutoFirePad
@AutoFirePad 2 жыл бұрын
What other ways?
@TheRiptideRaptor
@TheRiptideRaptor 2 жыл бұрын
What were you writing, Haskell?
@andrueanderson8637
@andrueanderson8637 2 жыл бұрын
@@TheRiptideRaptor Yea this comment makes me very curious too, I cannot imagine an industry where pseudo Category Theory is the default. I would honestly love working in such an industry because my main complaint with modern programming is having to copy+paste and write the same code in 20 different ways, having to update the code itself and recompile any time there's new content, having to put the same data structure with slight variations in 20 different places and write the same algorithms 20 different times accounting for the slight variances. The lack of metaprogramming in most languages, along with the fact that most don't treat code as data, is the primary turn off of modern programming for me. A good Lisp and a mental model using Category Theory is the ultimate setup in my eyes
@crackwitz
@crackwitz 2 жыл бұрын
C++ is a lot of category theory. Not on a level with Haskell but still.
@benhbr
@benhbr 3 жыл бұрын
Premature optimization not only happens for compute time, but also development time. It‘s called refactoring, not factoring.
@igorswies5913
@igorswies5913 2 жыл бұрын
Didn't you mean the opposite? Refactoring is better right?
@itellyouforfree7238
@itellyouforfree7238 Жыл бұрын
he meat that you are supposed to RE-factor something after you already have a version of it, not "factor" it upfront
@chadkrause6574
@chadkrause6574 Жыл бұрын
The problem is that companies don’t like employees spending a lot of time on refactoring if it works. It’s a modern day engineering business issue as well
@igorswies5913
@igorswies5913 Жыл бұрын
@@chadkrause6574 Don't mention it then if you can. Just do it. It should make you faster in the long run if done correctly
@dmoon9037
@dmoon9037 Жыл бұрын
We are metafactoring.
@liwenchang3260
@liwenchang3260 8 ай бұрын
Have a coworker who is a syntax wizard and throws the most advanced syntaxes like variadic templates and type traits for just to make a c++ wrapper on an existing messaging C library. He worked on this for an year and discovered the his software is taking a lot of CPU usage and leaks memory in production systems. Instead of identifying the keypoints and how to design an efficient messaging system, he choose to stick to the original concept and spend his time working on nonexisting architectural and rather religous problems. He kind of fend off the responsibility by saying the performance is bad because the library he is using is too slow. But I would argue that the whole point of software engineering is to tackle those kind of problems and not create super advanced OOP architectures which no one can understand or maintain. This reminds me of a motto that our company praised :"Doing the right thing is more important than doing something right."
@pwhqngl0evzeg7z37
@pwhqngl0evzeg7z37 7 ай бұрын
A somewhat baffling and concerning motto....
@dickpiano1802
@dickpiano1802 8 ай бұрын
In the history of humanity, the way to solve problems has always been 1. I have a problem 2. I use math to describe it 3. I solve the math (using a computer, for example) With things like OOP and stuff like that, they are trying to convince us that it will become 1. I have a problem 2. I solve the problem Math is amazing and SW devs are making things 1000000 times harder for themselves by not going through the math, like engineers and physicists do.
@dwayneyuen9860
@dwayneyuen9860 2 жыл бұрын
I like the underlying message. write the code then derive the abstraction. Don’t try to predict the abstraction.
@a46475
@a46475 Жыл бұрын
There is no coding without abstractions.
@MrUnstoppableHeart
@MrUnstoppableHeart Жыл бұрын
My professor said either way is good. Define the concrete first then the abstraction or vice versa. But 9 times out of 10 the "right way" is just whatever your team does.
@something3194
@something3194 5 ай бұрын
I feel like the first time without abstraction is good, then second time you keep going, third time, then a little bit later you end up with 12 UI list which are all pretty much the same but different, and refactoring is deemed too complicated and don't go in the way of making juicy features that the management is only willing to alocate time for, then no abstraction is done, and the whole software is clunky and inconsistent, a well as the BA definition of it. to do an "abstract" list ellement before building the first listy list listing stuff in the UI would have saved the bloat
@danielkrajnik3817
@danielkrajnik3817 3 жыл бұрын
I agree with you, you incredibly buffed programmer
@rsmith31416
@rsmith31416 2 жыл бұрын
Richard Hamming said "The purpose of scientific computing is insight, not numbers", so in the same vein, the purpose of programming is solving problems, not writing code. Writing code is only incidental and the complexity of a large proportion of the code being written today is not commensurable with the difficulty of the problems that it is supposed to solve.
@honkhonk8009
@honkhonk8009 10 ай бұрын
Richard Hammond would prolly say the same shit.
@RonWolfHowl
@RonWolfHowl Жыл бұрын
Unpopular opinion: Modeling the problem space is important. What’s uncertain is whether that ought to be solved in-band with the rest of the program-the part that is actually executed at runtime. Doing so in-band can give you superpowers, but if done wrong, it can waste monumental amounts of time.
@sagitswag1785
@sagitswag1785 Жыл бұрын
What do you mean by in-band? Also, I don't think it's a problem to model the problem before trying to solve it. It's when you try to model and preplan every solution to every edgecase you program might run into over the course of it's lifetime, which is what alot of the dogmatic approaches to programming attempt to do.
@shableep
@shableep 2 жыл бұрын
solve the problem. keep solving problems until it becomes hard to maintain, then abstract. it’s sort of the same advice as “don’t optimize your code before it needs to be optimized.”
@hyperTorless
@hyperTorless 3 жыл бұрын
John is a smart man, not in the intellecual/theoricist sense (we call them "IYI"), but in the sense of a pragmatic guy who knows how things actually work. FYI he is building a whole new language (Jai) to replace C++ for developing video games. He is building a game with it too.
@SpeedfreakUK
@SpeedfreakUK 3 жыл бұрын
The word you may be looking for is “wise”.
@vladislavlagunoff4882
@vladislavlagunoff4882 3 жыл бұрын
It's a better way to be smart, intellect should be measured by ability to solve real problems, otherwise it's just people convincing each other they are intellectuals
@hyperTorless
@hyperTorless 2 жыл бұрын
@@SpeedfreakUK wise has an "ancient" connotation to me, like it has to be some old person, but i'm not a native english speaker so i may be wrong.
@hyperTorless
@hyperTorless 2 жыл бұрын
@@vladislavlagunoff4882 exactly !
@nexovec
@nexovec 2 жыл бұрын
@@hyperTorless Well at least some part of this is "ancient" or "timeless," depending on how much you like it :D
@apresthus87
@apresthus87 3 жыл бұрын
I wholeheartedly agree. When I started programming I naturally programmed in a functional or procedural style but since everyone told me that you have to write OOP code I tried to conform to what "everyone" said was best. Most often than not I would get annoyed at spending most of my time conforming the style and structure to fit the accepted mold instead of actually just focusing on the core business logic if you will of the program. Ironically, it was when I had to learn Javascript to write web apps that I slowly started to escape from the cult. I went back to writing functional or procedural code. It felt much better and it sparked me to go and learn C properly. Strip away all the bullshit and just create cool stuff while maintaining control. I'm loving it! :)
@ifeanyioraelosi7305
@ifeanyioraelosi7305 2 жыл бұрын
Typescript joins the chat
@paulomarcio3133
@paulomarcio3133 2 жыл бұрын
Yeah man, totally agree with you, when I started programming, I was crazy about the perfect abstractions, even before start coding, I was trying to figure out how to create abstractions and modules, and how to combine them all and etc. just to make the perfect code, it was so annoying and frustrating, but I pushed it further because I thought that this was the way good programmers did things, today what Jon says make perfect sense, today I have changed my approach to programming dramatically, I learned a lot from him and Casey about this.
@AutoFirePad
@AutoFirePad 2 жыл бұрын
@@paulomarcio3133 It's ok when you make a sand castle to use whatever tool you want. When building a skyscrapper, things are different.
@harleyspeedthrust4013
@harleyspeedthrust4013 2 жыл бұрын
@@ifeanyioraelosi7305 TS helped me break out of the tendency to waste time writing the framework for my program instead of writing the program. You can use classes if you want to, but it's much simpler to have related functions grouped in modules and plain types defined as you need them. As long as you don't overcomplicate things you can easily add features to what you've got. I have a TS project that I've been working on for a couple of years now, and sometimes I go for an extended period of time without working on it - but it's set up in such a straightforward way that I have no problem coming back to it and working on a feature.
@nieczerwony
@nieczerwony Жыл бұрын
@@ifeanyioraelosi7305 BS from Microsoft.
@GregoryTheGr8ster
@GregoryTheGr8ster Жыл бұрын
The nifty part about C++ is that the developer can decide how much he wants to go into OOP and OOD abstractions, including none at all (ie, procedural programming, or at most abstract data types).
@Pulchism
@Pulchism 7 ай бұрын
Is this still true if you want to be able to use libraries developed in the last ten years?
@GregoryTheGr8ster
@GregoryTheGr8ster 7 ай бұрын
@@Pulchism You need to know your OOP sh*t to use the modern C++ libraries.
@toosafelol
@toosafelol 2 жыл бұрын
I do program the way you describe. I always hated having to design my whole program before a single line of code was written(as they teach you at school). I just kinda go at it and refactor my code multiple times along the way to end up with a good readable and stable result/solution. We used to call it cowboy programming.
@breakprismatshell6270
@breakprismatshell6270 2 жыл бұрын
Not sure, you understood the issue. The point is not, that abstractions are always bad and that you should dive into it head first with no planning. Instead the point is, that these abstractions come at a cost and are not a purpose in their own right. This is often taught wrong in CS course, where people are told to mechanically apply concepts like OO and even I am sometimes tempted to use fancy new language like concepts in C++20 for the sake of it. Instead each such complexity comes at a cost. The question then becomes this: Do the benefits outweigh these costs? If it does on the other side, you can save a TON of time by going for a pattern like monoidal parsing or policy based design, early in the process.
@zoneboy7091
@zoneboy7091 2 жыл бұрын
@@breakprismatshell6270 Designing first is the way to compile everything together though. You got someone designing it and then telling others what to program. I understand you doing that on your personal projects well help you with your clarity but things have changed to where people work in teams and make structures.
@breakprismatshell6270
@breakprismatshell6270 2 жыл бұрын
@@zoneboy7091 I'm not sure this is proper english and I thought we were talking about your and mine own programs. But if that's what you meant: It's true that in most companies or FOSS projects you have a working base structure with feature-requests and bug-reports constantly poiring in. I see, why we do not want the bureaucracy of a design phase in such a context and instead prefer to just make the changes and call that agile whatever. But if you ever get the chance to participate in the creation of a completely new project from scratch professionally: I would try to persuade coworkers and uppers not to sprint our way to a" deliverable" demo in two weeks, that looks like it is functional, but actually is hardcoded to a very narrow set of inputs. Nothing good will come out of that. It will be a hot piling stream of garbage. At that early stage of a project any wrong decision you make can cost you 10x 100x 1000x later and there are a lot of opportunities to make wrong decision. So ideally what you would want is a proper design phase, where you for weeks discuss those decisions both both internally in the team and externally to stakeholders. Also you want to document those decisions. Then you implement this minimal working but scalable version of your software. And once it is done you can switch process and extend it with SCRUM for many years to come.
@r.t.5767
@r.t.5767 2 жыл бұрын
Yeeehaaaaw!
@graealex
@graealex 2 жыл бұрын
It works better or worse, depending on the problem domain. The power of a good programming language lies in making refactoring easy. Where programming languages fail to provide that, you can use abstraction to make it easier to shuffle stuff around later on.
@HerbertLandei
@HerbertLandei 2 жыл бұрын
This sounds nice, but it doesn't scale. You need some kind of abstraction and structure, one core sets of ideas to have a readable, maintainable, performant and extendable system. You need to separate more higher level stuff from the nitty gritty details. OO might be the wrong tool for your particular system, there might be dogmatic BS nobody needs, but you need something to prevent your code from becoming a Big Ball of Mud (tm).
@itellyouforfree7238
@itellyouforfree7238 Жыл бұрын
sure, but you just don't need before you have something working in the first place
@dimitar.bogdanov
@dimitar.bogdanov Жыл бұрын
@@itellyouforfree7238 I'd rather spend a couple of hours writing abstraction than tens of hours to restructure my entire program
@itellyouforfree7238
@itellyouforfree7238 Жыл бұрын
@@dimitar.bogdanov sure, we'll play with out toys in the meanwhile
@MrVecheater
@MrVecheater Жыл бұрын
You can make an application scalable without OO, but RAII types like smart pointers, atomics and data structure classes make your life much easier
@batlin
@batlin Жыл бұрын
@@dimitar.bogdanov your couple of hours will be spent writing the wrong abstraction, if you do it too soon.
@kevinrobertandrews
@kevinrobertandrews 2 жыл бұрын
What's wild is that people will start designing a program and then jump into coding "when the structure is right" before ever writing tests to validate the specific functionalities they need their program to accomplish. If you start by writing your tests first, you can then write the program in any way that seems reasonable, and if you have to refactor later, your tests will help you do so in a way that won't destroy your program.
@stevecarter8810
@stevecarter8810 2 жыл бұрын
I've been scrolling through the comments wondering why noone is mentioning tests. So thank you!
@NukeCloudstalker
@NukeCloudstalker Жыл бұрын
Tests first are more often than not a waste of time, and depends on people truly understanding the full scope of the problem they're solving. Or, alternatively - tests are written for things that aren't necessary. Tests written for bugs as they occur makes more sense - prevents people from accidentally recreating them, rather than trying to prevent every possible issue ahead of time (before knowing what they even may be!). Tests-first is another "this issue happens from time to time, so I'll use this overcomplicated mess as a silver-bullet to end it once and for all!"-kind of thing.
@kevinrobertandrews
@kevinrobertandrews Жыл бұрын
@@NukeCloudstalker I have to agree that tests certainly can be a rabbit hole. Especially, as you point out, when the people writing the code are not fully aware of the problem they are trying to solve. But I have to say, it depends on the context whether or not testing first is truly useful. If you are writing complex systems that interact emergently, then unitizing and writing tests for that is near impossible. Certainly, you'll want to write tests as bugs happen so that you can ensure the code does what is expected and does not regress. However- if in, say, a web application, you can define some business rules, for example "all users should get an email when they sign up" or "users with an admin role can access a dashboard"- then unit testing whilst writing the code becomes incredibly useful. It allows the code to be written in the simplest form that satisfies the business rules and prevents bad refactors. I don't think tests are a silver-bullet and they do add extra complexity to a codebase, but if done right I think they are well worth it.
@NukeCloudstalker
@NukeCloudstalker Жыл бұрын
@@kevinrobertandrews "But I have to say, it depends on the context whether or not testing first is truly useful." I'd be inclined to grant you that, if you could give me the metrics and reasoning for that usefulness - if not, I will oppose it on the face of it due to the sneaky truism that it is. You may as well have said "it depends on the context whether or not what I am saying is true" - a good way to give the appearance of a sound argument, without actually saying or arguing for anything, to be sure! But ultimately, it sounds more like the kind of thing someone would say to reduce tensions in some meeting on the corporate job, rather than to convey anything substantial. "It allows the code to be written in the simplest form that satisfies the business rules and prevents bad refactors.". And this wasn't allowed before? At the very least, you've got to say why and how exactly this practice in any way increases baseline "code simplicity", and by which metrics you've found this out - otherwise all those words are nothing but meaningless scribble, or in this case, pixels. I say this not to be disagreeable, but because I've encountered dimwits who think -no, INSIST! - that "no more than so and so many arguments in your functions, no more than so and so many lines in your functions" and so on, is simplicity - when it in fact contributed to a needlessly complex codebase where all sorts of ludicrous workarounds had to be engaged in, in order to meet those insane demands - only to then revel in making rulesets for how to structure that mess they called an "architecture", imposing even more crazed demands in so doing. Suffice to say, I quit that job. Even if you are right, and tests are useful "if done right" (another truism-like saying, define "right" for the love of all that is good!), then you've made no proper attempt at presenting a proper case for your beliefs! Pythagoras once said "Silence is better than unmeaning words". I really hope you'll take that to heart - I'm pushing on that point so strongly because it really is impossible for me to get anything out of your reply, other than "I see what you're saying, but I like tests". Your entire message could have been that, and I would have been just as wise for it. Which is tragic - because I'm sure you've got a wealth of experience and knowledge your drawing upon to be making your conclusion from - it is just nowhere to be found in your reply. That said, I would very much like to hear the why and how you think tests can help - there is a very good chance you'd impart me with knowledge I'd have to earn the hard way myself, or may never find, if you went ahead and explained those why's and how's.
@stevecarter8810
@stevecarter8810 Жыл бұрын
@@NukeCloudstalker you're talking about a large batch of tests here, and the big batch is the problem not the test-before-implementation. Choose a requirement. Write a failing test for it. Fix the code to pass the test. Write down any arising requirements. Prioritise the backlog. Repeat.
@GroverAU
@GroverAU Жыл бұрын
Honestly when I came from electronics/PLC programming in the early 90's into the C/C++/Java space I thought people had lost their minds. For me, I work on the Input -> Function -> Output mechanism. And that you should be _doing_ something with a tangible result. Its why I prefer data driven programming paradigms like FBP where there is a clean "connectivity" for the program and the data simply stimulates the program. But I never see this in the wild... usually _so_ much replication, and conversion its crazy.
@honkhonk8009
@honkhonk8009 10 ай бұрын
Ikr. Its why I wanna go into embedded system as a CS major rn. It was so fucking easy to code C on my arduino back in grade 3. But the moment I tried running shit on my computer??? All hell breaks lose. Thats when I heard the term "soy-dev" bruh. I thought I was learning shit at first but bro holy fuck. All your learning to do, is working with the braindead faggot shit that was created by clowns that THINK their making life easier, when all their doing is just adding complexity.
@honkhonk8009
@honkhonk8009 10 ай бұрын
Litterally I made my own computer out of TTL chips. The sheer amount of easily traceable logic in it was amazing. Then I realized how fucking needlessly complex modern day soyware engineering was bruh. Like really, you have all these yt channels talking about how migrating from one database to another is somehow "engineering". Like legit all your doing is just using one software product over another. If thats engineering, then downloading minecraft from the appstore is engineering.
@jacebeleren1703
@jacebeleren1703 7 ай бұрын
If you look at the average functionality a full-stack app created today has (let's say, a modern website compared to one from 2004) you will realize why the abstcraction is needed in a lot of cases. As a web developer, i can build a simple static website with PHP, HTML and CSS in a matter of minutes, maybe also sprinkle in a bit of JS. But if i need it to have users and user login, the ability to change user passwords, to use 2FA, to have users submit content (like comments), even if it's something like a very rudimentary, simple blog, i am MUCH better served by going to a framework like Laravel or Codeigniter instead of doing the whole thing in pure PHP. It just saves a lot of time on maintainance, improves readability and allows easier scalibility and adding new features (and it might improve performance, depending on if i can make it better in pure-PHP or not, which most people can't). And that's just a blog. Don't even get me started on something like an e-shop, or hell, a more complex science app. I used to work at a company that had a legacy pure-PHP eshop, and making any change than just a simple content change to the HTML was a NIGHTMARE.
@bcfuerst
@bcfuerst 7 ай бұрын
​@@honkhonk8009everything is complex if you need to work on it with lots of people. And you're plugged in to a enormous tech stack out of sheer necessity if you want to make somewhat reliable, scalable affordable software and not spend a decade replicating effort that a dozen giant teams already did previously. Sure a lot of it is simple data plumbing but someone has to do it and not mess it up. That's engineering just like your local highway ramp was engineered. It's not sexy and flashy and the civil engineer that did it would have probably preferred to build a sky scraper but he still does it because it pays the bills and someone needs to do it. And I hope he's being careful when changing concrete mixtures for whatever reason and thinks about it a little deeper.
@telesniper2
@telesniper2 6 ай бұрын
@@honkhonk8009 LOL
@squiddymute
@squiddymute Жыл бұрын
it is the in the interest of big companies which employ many developers and want them to be easily trained and be dispensable at the same time. That is why you need to conform to a common methodology and structure, so other people can easily take over from you once you are gone.
@craigasketch
@craigasketch Жыл бұрын
Eh coming from ERP software land some of the problems get so huge you have to kind of make a plan on how to get to an outcome. OOP is supposed to do that. When it's hard to define the actual problem but you know you got a say a sales header, or shipping agent, or message bus you can at least outline the spec and get something moving forward. I think the web with small web applications have made it as if everything doesn't need OOP but they're missing the bigger picture. Java and OOP isn't necessarily a bad paradigm there's just a time and a place - dinky web apps ain't it.
@MartinMaat
@MartinMaat 2 жыл бұрын
To me this is all moot. No one claims OO is algorithms. It helps to control complexity and helps communicating about software. Anyone subscribing to this message has never had to modify or extend existing code. In the end everything up from machine language is overhead. But it serves a purpose nonetheless.
@Ehal256
@Ehal256 Жыл бұрын
Lol, everyone who disagrees with you has never had to modify code. Get out of here.
@donjindra
@donjindra Жыл бұрын
I more-or-less subscribe to this message and I've been modifying existing code for over 40 years.
@amentco8445
@amentco8445 Жыл бұрын
@@donjindra You are obviously lying, Martin said you cannot have ever modified code.
@donjindra
@donjindra Жыл бұрын
@@amentco8445 What? Are you claiming to know I've never modified code? Please elaborate.
@whossname4399
@whossname4399 Жыл бұрын
@@donjindra it was sarcasm. He was mocking the OP, not you.
@the-flatulator
@the-flatulator Жыл бұрын
I'm a COBOL programmer from the 80's and then moved to C as more desktop computers became available. Prior to that most boxes were dumb terminals and a mainframe was doing all the work. I was a big fan of Pascal too. Back then we didn't have enormous amounts of memory and unlimited CPU speed and we had to work hard to optimise and conserve. I did fall into the OOP trap and became lazy but figured out my mistakes eventually. My advice is, if you must use Objects & Classes etc. learn how those objects work before working with them. Create your own and remove all the functionality & properties etc. you don't need. Shrink your code as much as possible and use few resources - you'll run faster and be better than the competitors.
@Borgilian
@Borgilian Жыл бұрын
The problem with OOP isn't the "object" part... it's the "oriented" part. Whatever you're doing you still need to bundle data together somehow (aka an "object" / struct / class etc.). The whole idea is that you want your data to be entirely separate from functionality. You don't want to architect systems and write functionality trying to mold it around this whole concept of an "object". Do you need to have multiple pieces of data, such as an unsigned integer and (maybe) a flat buffer and they are implicitly related to one another because, maybe, they both describe an entity in your program? Then you bundle them together in an "object" / struct / class etc. (however you want to call it). Next if you need to operate on said data, just write a function that takes in your data bundle as input and mutates said data. Whenever you're packing functionality into your data bundle, you're basically acting as if you'll only ever apply that functionality on one entity at a time... when in reality you want to apply functionality and mutate multiple data bundles at the same time. And at some point you'll find yourself needing that same functionality applied on other types of data bundles, so you go and make crazy things like creating inheritance trees, and maybe start implementing interfaces and virtual functions etc which wouldn't have been needed in the first place. In OOP there's also this silly concept of data having an initialization stage, when in reality data is just data... it doesn't have these kinds of concepts. Data only exist or it doesn't, and if it exists you can mutate it from one state to another. That's it. And, based on how memory gets shuffled around physically and how these physical systems were architected, you usually want a new piece of memory to represent zero. You have to remember that memory at a base level is just a contiguous flat block of addresses pointing to containers. Everything in memory is just a flat buffer, which you want filled with zeroes as an initial state (do not confound this with the RAII initialization stage I was previously alluding to). It doesn't matter what you call it (buffer / class / struct etc.) or how it looks in code.... it's all flat arrays all the way down. In OOP and RAII data and memory (which is essentially just a data container and not the data itself) are conflated and the act of getting access to storage is mixed in with the act of mutating data's initial state, while also not even taking into consideration the fact that data itself is used based on scopes within your program. You have data which has a permanent scope and exists for the entire duration of your program. Then you have a multitude of temporary scopes, such as data that only exists for one frame, or multiple frames, or one game level etc. You want to build storage that accommodates all of these scopes and allows you to clear multiple sets of data at the same time within the same scope. By introducing constructors/destructors and other RAII stuff you're basically saying that you don't care about those scopes... and basically kick the can down the road. And your compiler doesn't really know anything about the scope in which you want to use a piece of data (except for the braces in C/C++ which define a generalized stack-based scope so there's a way for the stack to be unwinded). Then you start introducing smart/weak/shared pointers, because of course you suddenly realize you ACTUALLY NEED data that lives for the entirety of a custom scope, but you're still in a stockholm syndrome relationship with OOP and RAII and still feel like you shouldn't have to deal with it for some reason... At which point now you have to introduce garbage collection and other sorts of weird systems that basically have to guess the scope of a piece of data and delete it accordingly.
@honkhonk8009
@honkhonk8009 10 ай бұрын
Also way easier to maintain. Litterally all the stupid soydev shit comes from when people try to make it so you get more outta each line of code. Thats braindead asf. Id rather everything be verbose but highly consistent, so its easier to understand instantly.
@the-flatulator
@the-flatulator 10 ай бұрын
@@honkhonk8009 The Keep It Simple Stupid (KISS) fits programming perfectly. Don't over compicate :) Particularly if you need to review your code 15 years later, as I have previously. You wander "what the hell was I thinking" :)
@UteChewb
@UteChewb 7 ай бұрын
In fact, that's how the standard libraries work, and why they are hard to write--they have to be as minimal and as useful as possible.
@RolandNSI
@RolandNSI 3 жыл бұрын
Goddamn oop. No, really. I've been debugging a dll for 5 days now. I even have parts of the source code for it. And yet, i cannot find a stupid ass procedure where a damn value is set. While going trough the machine code with the debugger, i swear 90% of cpu clocks are wasted just shuffling memory and do calls. No actual processing , like wtf ! Things like calling a function to assign a pointer....., a thousand times per second. So much indirection bullshit in oop. Callstacks 30 functions deep ... jesus christ !
@rafaelrosa3841
@rafaelrosa3841 2 жыл бұрын
Pretty common scenario, a lot of code doing nothing then implement some "design pattern" that in the end just cutting directly way of solving the problem to some kind of puzzle programming, a lot of jumps in the source that is just solving nothing.
@dragoscosma84
@dragoscosma84 2 жыл бұрын
30 is acceptable, as long as, even you said it, they do nothing :)
@jbird4478
@jbird4478 2 жыл бұрын
I've come across a Java codebase that has a class dedicated to solving the problem of whether an object within that application is anything at all. The class was called IsNotNull and it had one static method which checked, you guessed it, whether the argument given was not null. I'll leave the double negation to what it was, but this was production code used in - I kid you not - my country's election system. It was basically a glorified spreadsheet that sums local election results. In about 600 source files spread over dozens of directories they managed to solve two problems: summing up spreadsheets and printing out a report. Or actually, calling a system library for the latter.
@dragoscosma84
@dragoscosma84 2 жыл бұрын
@@jbird4478 this sounds like my country
@mariobisignani4477
@mariobisignani4477 Жыл бұрын
I 100% agree with your point of view.
@KilgoreTroutAsf
@KilgoreTroutAsf 3 жыл бұрын
Brian Will has a brilliant video on why OOP is downright terrible. Good abstractions take long time and lots of iterations to develop. Starting a program by imposing structure that you don't know for sure helps you solve the problem instead of just writing the minimal procedural code that actually solves the problem and refactoring later is not only a waste of time, but also adds incredible amounts of friction to the developing process.
@elijahbuscho7715
@elijahbuscho7715 3 жыл бұрын
That video paints a very one-sided picture. It brings up some valid points, but I'd take it with a grain of salt.
@hyperTorless
@hyperTorless 3 жыл бұрын
I agree and actually never got into any other low-level language than C. It makes no sense that we suddenly started to rethink everything around this framework when C could achieve everything we needed. I slowly abandoned programming when it became all about C++ and javascript. Sad!
@mohamededrah7908
@mohamededrah7908 2 жыл бұрын
@@hyperTorless C lacks some nice abstractions and tools that make procedural & functional programming easier (think abstract data types with generics) coding without GC is also a pretty huge pain.
@rafaelrosa3841
@rafaelrosa3841 2 жыл бұрын
@@mohamededrah7908 garbage collector and generics has nothing to do with OO
@mohamededrah7908
@mohamededrah7908 2 жыл бұрын
I know that it doesn't, I'm just saying that programming in C is harder because it lacks those quality of life features, you need to be more responsible and vigilant when you write code with manual memory management.
@MrZerosixZeroone
@MrZerosixZeroone 2 жыл бұрын
Everything you said is 100% correct but is very limited thinking and only applies to single developer or very small team 3 (people max) that are tellepatiacaly connected. If you take what you said and applied to large scale team, or organization with multiple teams working together it would be the biggest shitshow in the world.
@dfs-comedy
@dfs-comedy 2 жыл бұрын
Most pieces of software developed by large teams are shit-shows. Most good software has either a small development team, or a set of small development teams working on more-or-less self-contained parts with highly-skilled benevolent dictators enforcing rules and doing the integration (like the Linux kernel.)
@Jacob-mh3rp
@Jacob-mh3rp 2 жыл бұрын
@@dfs-comedy A set of small development teams are just a large team lol
@dfs-comedy
@dfs-comedy 2 жыл бұрын
@@Jacob-mh3rp If they are relatively isolated and independent, then not really.
@ifstatementifstatement2704
@ifstatementifstatement2704 2 жыл бұрын
Can’t programmers in large teams read code?
@AlFredo-sx2yy
@AlFredo-sx2yy 2 жыл бұрын
@@ifstatementifstatement2704 seems like they cant lol
@harleyspeedthrust4013
@harleyspeedthrust4013 2 жыл бұрын
I experienced this firsthand when I was starting out with programming. I started with Java and I used to spend a lot of time trying to solve these structural problems and create the framework for my program before there was any actual program. It was rarely fun and I used to get burned out pretty quickly, so I ended up with a bunch of incomplete Java projects. Nowadays I stay away from Java and use other languages where you aren't forced into an object-oriented jail, and I've learned to write the program first and spend time on things that matter. This is one of the reasons why C is one of my favorite languages - it's hard to fall into the trap of building a framework for your program because you don't have classes and the structure of a C program is so simple and straightforward.
@brentsteyn6671
@brentsteyn6671 2 жыл бұрын
Rust is better, for me the best language I have ever worked with.
@harleyspeedthrust4013
@harleyspeedthrust4013 2 жыл бұрын
@@brentsteyn6671 I have seen a lot of good things about rust and it's high on my list of to dos, but first I must master apl
@razor2010m
@razor2010m 2 жыл бұрын
I mean yeah, java isn't great, but as someone who has a lot of experience in java, because of university, but also as someone who doesn't really subscribe to any specific design pattern, I can wholeheartedly say, that it is categorically not the language that you are working with, but rather how you use it. You can write procedural only code in Java, if you want, I'm not saying that, that's necessarily something anyone wants to, or should do, but what I am saying is that while yes, some languages give you more tools for specific applications or design patterns than others, you can really do whatever the fuck you want. If I need an object, to create a higher level of abstraction so that the code I'm writing is easier to follow along with - then I will. If I do not, I will not. I think that people take a very misguided approach to OO in general, where they try to model the world around them, when that's not what it is for! OO is for abstracting and organising, and not necessarily for modeling. Yes sometimes class hierarchies make sense, but they're not the be all and end all of programming. In fact, at my job currently we use C# for developing our backend for our various web based applications, and while I am not in love with all the boiler plate I have to sift through on a daily basis, there are some things about it that make sense. For example our most recent projects are very well organised and designed in a fairly, but not exclusively OO way. However the legacy systems are an absolute fucking shitshow. They're both OO, but the structure of one is terrible, the structure of the other is good. That's what makes the difference. Now you could argue, and you should, that you don't have any of this bullshit with procedural, which is true, but in large enough projects it may become somewhat difficult to handle, especially if there are multiple people working on the project at the same time, ESPECIALLY if they're not necessarily based in the same place, like the team in the company that I work for aren't. However the same principal applies, procedural design that is good, will be just as good, if not better than OO design. My point, then, is that it is not about what design pattern philosophy you subcribe to, but rather that good design is better than bad design, no matter what you initial approach is. So then, bearing this in mind, why does it even matter what design pattern is used if it is used in the correct way to create well structured and easy to understand software? Instead of going into the absolutely fucking moronic tech evangelism bullshit, as so many programmers do, why don't we just, idk, focus more on writing the actual code in ways that we, as individuals, or as teams feel that will serve the program and the end result in the best way? Whether or not I personally prefer Java, or any OO language for that matter, is a totally different discussion entirely. Personally my favourite language is Rust, because it feels good to use and I love the way the syntax looks, but not for any actual practical reason, other than I suppose performance.
@wilfreddv
@wilfreddv 7 ай бұрын
​@@brentsteyn6671shill
@Blast-Forward
@Blast-Forward Жыл бұрын
Well the thing is you build something quick that solves a problem with a prototypical structure and then management tells you to build on that. No time for refactoring so the technical debt increases rapidly and you know the rest of the story.
@arsnakehert
@arsnakehert Жыл бұрын
Premature abstraction is the root of all evil :^)
@AlexanderBaranski
@AlexanderBaranski 2 жыл бұрын
we're even more far away nowadays, thinking back about all that projectmanagement we were taud and will never need
@ponderatulify
@ponderatulify 2 жыл бұрын
I already love this guy
@chucksucks8640
@chucksucks8640 2 жыл бұрын
I thought sub-classes in java were there so that if I had two similar classes that only differed by one method then you can sub-class and just override the method so that it does what you want it to do. It is an easy way to make a new class from and existing class without having to write an entirely new class from scratch. That is basically why we have sub-classes, functions, sub-programs, etc, etc. It is so we don't have to spend time rewriting code that has already been written yet no one ever says that anymore in the programming world. It is a convenience for the programmer that makes programming easier.
@madsteeez
@madsteeez Жыл бұрын
DRY is good, but often times composition makes your code less coupled than inheritance.
@michaelzomsuv3631
@michaelzomsuv3631 Жыл бұрын
It doesn't make programming easier. It's a cop out to justify writing sleazy code and not having to do the work to fix it. Code that is written in the sub classing bullshit style is hard to refactor and is downright impossible to optimize. Well, naturally, if you never optimize anything then you wouldn't notice that part. But there is styles of code out there that are both refactorable and optimizable at the same time, and it's not the OO bullshit.
@wilfreddv
@wilfreddv 7 ай бұрын
No real usecase has ever been found
@JustinGarza
@JustinGarza Жыл бұрын
i see what he is saying, but often time i run into programs where people solved it but never went back to organize their code ... and so you get spaghetti code. if they had the motivation or will to go back and organize it there would not be an issue.
@HelloQro
@HelloQro Жыл бұрын
This is why you use pen and paper to structure your solution before going at it with the computer, same thing as constructing a building., you have to design and fail quick on your paper design, which is quick and cheap before yous start laying brick and having to demolish shit, that's why there's a biog difference between the skyscraper that some architect designed and some engineer validated and the trailer park dumpster field build over night, sure, functionally they both provide shelter, but you can clearly see why one is better than the other.
@philsnewaddress
@philsnewaddress Жыл бұрын
I've been programming for forty years. Late last year I inherited a C# WPF MVVM application with 600 DLLs and poor documentation. Eight months later I'm still struggling with what should be the simple things, like adding a button somewhere. There are so many 3rd party plugins and different techniques that have been added to it over the years. I feel dumb. While 30 years ago I was writing Operating system modules, or a wireframe 3D game, because it was all just C.
@skycaptain95
@skycaptain95 9 ай бұрын
Hopefully you figured out how to kill some of those DLLs or make them static.
@user-mc5tp5mv3v
@user-mc5tp5mv3v 8 ай бұрын
Had you inherited the OS modules and the games, or did you write them from scratch? Developing inherited code is much harder, because as we are developing code we build a mental model. We do not remember all the code we wrote, but the mental model helps us understand what the code does. When new people come, they do not have the mental model, they struggle, they become afraid to refactor and end up with 600 dlls
@philsnewaddress
@philsnewaddress 8 ай бұрын
@@user-mc5tp5mv3v you're spot on with that. I can still remember more about a large c++ application I wrote 25 years ago because I wrote all of it than I can about most of what I've worked on since 2000. The OS modules were university Minix tasks. The 3d wireframe game was from scratch. No libraries. Some assembly, but mostly C. It was supposed to be network battle zone in 1993. The 3D part was finished and I was working on the networking when I got my first programming job.
@__BLOOD__
@__BLOOD__ 7 ай бұрын
Let me guess... meanwhile your corporate bosses want to have that button done in 5 minutes, no one respects you for your work, you waste your time in useless meetings rather than coding?
@josetobias8084
@josetobias8084 2 жыл бұрын
I admire complexity where it is needed and where it solves the problem in a proper and approachable way. In my opinion, the object-oriented model is not a problem, usually, the approach taken to it is the real problem. If you have something that inherently NEEDS to be highly extensible and all the yada yada business stuff: yes, use everything you have to make it last and use it consciously - at least be organized. But, if you have a simple problem that will be contained to itself, FOR GOD'S SAKE: use a simple solution. Not all complex problems can be solved with a simple solution (or a "elegant solution" yet), but all simple problems can be solved with a very unfitting and extremely complex solution - just add more problems to it, infinitelly. I hate when some human beautifully creates something to solve a problem, and people use this solution to create another problem, and all of a sudden here we are.
@designator7402
@designator7402 2 жыл бұрын
Chose the tools appropriate for the job instead of trying to apply complex tools to simple problems!
@josetobias8084
@josetobias8084 2 жыл бұрын
@@designator7402 Exactly. Chosing the wrong tool (specially a complex one) for a simple job is, in fact, adding one more problem to it. Complexity where it's needed!
@Dexterdevloper
@Dexterdevloper 3 ай бұрын
I Love him , Amazing person.
@realericanderson
@realericanderson 7 ай бұрын
As someone who is thinking of making a UI based program, this practical knowledge is so refreshing. I don’t have to be an expert in react in order to make something work, just get the containers and drop downs on the screen and go from there
@__BLOOD__
@__BLOOD__ 7 ай бұрын
You just need the right abstractions to build your code. Fortunately we don't live in the computer stone age and have internet, so we can benefit out of other people's work. Work that already has been done for you. I just wrote a program that translates chinese to english using AI. Try doing that in the 90s.
@etodemerzel2627
@etodemerzel2627 4 ай бұрын
@@__BLOOD__ So, you made a wrapper that calls ChatGPT? Good for you, I guess.
@voodoo5191
@voodoo5191 6 ай бұрын
Good point honestly but I feel like it doesn't make OOP bad. I feel like OOP has it use cases, factorio was written in OOP style and it has great performance, you need to understand the problem and have your solution and reasonings behind it. I'm not a big fan of OOP I try to avoid it whenever I can, if someone really likes OOP good for them, there is no one good way to solve a problem, pick your own style.
@tolleythinking1058
@tolleythinking1058 Жыл бұрын
Avoid unneeded abstraction: yep Solve the problem simply: yep Abstraction is usually a waste of time: 🤔
@AlFredo-sx2yy
@AlFredo-sx2yy 2 жыл бұрын
I see a lot of people defending OOP here saying that this video is going against OOP but, personally, maybe i have misunderstood what he meant, like, im not a native speaker so maybe im wrong, but i dont think he's saying that OOP is bad. Btw, i'll say this before i get any hate, personally i like OOP, Im not a functional programming defender or anti OOP or anything like that, because i actually prefer OOP. All im saying is that I think that he's saying that the way modern OOP is done is bad. Because we have gone from simply making stuff object oriented to "we need 69 thousand layers of abstraction!!!". Layers of abstraction are good. But the problem is that if you obsess over making more and more specific architectures and design patterns without thinking about how to solve your problem, you end up making a bunch of empty boxes. That's all you really do. That's the problem. We have gone from making things into small containers or classes to simply our work, to being forced to think about the whole design of the program before we even know what our program is really going to be like, because we havent faced any of the problems that will eventually come up while we're coding. Ofc its good to make some planning ahead of time. But when you spend more time planning what you're going to do than doing the real thing, then you have a problem.
@alejmc
@alejmc 5 ай бұрын
Where do I find or see these streams? Is it on twitch? KZfaq? Lately KZfaq has decided to pop these up from several years ago and I love them, mad respects to Jonathan Blow for speaking up his mind (even if there are times I might not agree with some things) but I have only found standoff interviews here and there.
@ramireini
@ramireini 5 ай бұрын
He has a twitch and a youtube channel, these clips are taken from his twitch, the username is "j_blow".
@gamecodeur
@gamecodeur 2 жыл бұрын
C'est tellement bien dit.
@jorgeherrera1074
@jorgeherrera1074 Жыл бұрын
This feels like the whole you’re too smart for your own good that you end up in the wrong conclusion.
@phi-quest
@phi-quest 2 жыл бұрын
I like the ending here lol
@wisnoskij
@wisnoskij 2 жыл бұрын
I think this is true to an extent. IMHO trying to solve the problem is a very very good way to gain a deep understanding of said problem and learn how to solve it. But it is not necessarily a good way to actually solve said problem. If some non prodigy, someone without 10k+ hours of experience under their belt, just starts writing code 20 hours later you will just end up with something harder to refactor then to just completely replace. But then they probably could of work out the abstract problem on paper either. That is how I often did it. I would just try to solve the problem, then when that turned into something untenable to continue, start from scratch using the proper abstraction layers which I now understood. I think what JB is talking about is not reallly a better way to program, but how a better programmer will program. Like of course code needs to be separated to some extent into discrete objects. And or course we need some forethought. Then of course their is also corporate programming, where you have to code in such a way that someone with half the knowledge and an IQ of 95 can edit. Well of course it will be tedious, annoying, and horrible.
@kooners6961
@kooners6961 Жыл бұрын
So what advice would you give to someone who is new to programming?
@mootytootyfrooty
@mootytootyfrooty 7 ай бұрын
I only adopt abstractions as I get more guarantees for high performance, as major systems architectures are so overly convoluted when i should just be able to read it in a straight line.
@IMWATCHING501
@IMWATCHING501 2 жыл бұрын
I disagree and there is plenty of evidence in the tech world that proves whatever your trying to prove here, wrong. Writing code, writing solutions is possible the easiest part of the massive of the megalodon apps we have nowadays and couldn't be possible without structure.
@murtajiz545
@murtajiz545 2 жыл бұрын
I agree with you but I also believe programmers, ESPECIALLY beginners, should be encouraged in messing up and getting their hands dirty. There is no better teacher than failure.
@ifstatementifstatement2704
@ifstatementifstatement2704 2 жыл бұрын
His point is that this structure should be introduced as the code gets more complex. But people do it the other way around. They over-engineer the code right from the start. But granted, if you know how massive your code will be and you know what structure to follow, might as well implement it from the start.
@zhulikkulik
@zhulikkulik Жыл бұрын
The structure of modern apps is impossible to create before the needs arise. Imagine making modern Photoshop -with ai, 3d and other features - back in the 90s when Alone in the Dark was peak technology and ai was a fantasy. Or a very complex algorithm in a videogame at best. They would just be done with UML diagrams by now 😂
@nieczerwony
@nieczerwony Жыл бұрын
I don't fully agree. It's like saying start building house, and you can tweak it as it goes. People starting to build something need to know, what this meant to solve. Not over analyse but gather as much info as you can and certainly main problems to be sorted. You also need to know technology, as you can select which tools you gonna pick and what budget will be required. From the other hand you are limited by what your team skillset is and is best to know up front of this is enough to build the tool. If you have OOP. Personally I could do a project and build a web app with C++, but in enterprise environment I wouldn't advise anyone to do it.
@edwardvermillion8807
@edwardvermillion8807 2 жыл бұрын
the four car pile up at the intersection of dunning-kruger avenue and cargo cult lane.
@johnnygraz4712
@johnnygraz4712 Жыл бұрын
I don't know how many large projects Jonathan has worked on, but his perspective closely matches those who've spent most of their time programming toy systems. Since the 90s, the key to any large, continuous software base is managing complexity, and OO-programming (the modern definition) is still the best way to do that. The idea that clear architecture and intuitive structure is "not solving a problem" is just bananas.
@donjindra
@donjindra Жыл бұрын
OTOH, large projects should be broken down into small projects. The complexity may be designed in, so to speak.
@gmodrules123456789
@gmodrules123456789 Жыл бұрын
@@donjindra Isn't that what microservices tried to do?
@donjindra
@donjindra Жыл бұрын
@@gmodrules123456789 There is no silver bullet. But all large projects must be broken down into smaller, more easily managed components.
@jacebeleren1703
@jacebeleren1703 7 ай бұрын
Agreed 100%.
@jacebeleren1703
@jacebeleren1703 7 ай бұрын
@@donjindra Even in that case, having clear architecture and intuitive structure is still doing a lot of heavy lifting for putting it all together.
@filipsworks
@filipsworks Жыл бұрын
Structures, frameworks, practices, 1000 levels of abstraction... and somehow software quality is getting worse and worse, coz most of developers don't even know what impact their decisions are making - what's heap/stack, how memory works, and why a program which should complete it's job i 1 second takes 3 minutes to do it.
@stewiegriffin6503
@stewiegriffin6503 Жыл бұрын
I agree
@codaaaaaaaaa
@codaaaaaaaaa 3 жыл бұрын
He doesn’t miss
@shortcat
@shortcat 3 жыл бұрын
huh
@davidmurphy563
@davidmurphy563 2 жыл бұрын
What's the difference between Jonathan Blow and god? God doesn't think he's Jonathan Blow.
@telesniper2
@telesniper2 6 ай бұрын
Yup, check out suckless software development. I'm always a fan of KISS for the paradigm and "design" and whatever hipster buzzwords they wanna call it now. HUGE fan of the Wirthian languages like Pascal, Modula, etc. There's actually some deep design in those that help curb complexity (not the ravioli code complexity that results from OOP though). That's why the Pascal compiler was so simple and very performant --- because the language restricted how you could use pointers a bit compared to C(and some other things I won't get into here). But anyway because he was such a master at clean design, Niklaus Wirth was able to design an entire workstation microcomputer, all the compilers, the OS, and useful software for it in a short amount of time, by himself. Check out the Lilith computer sometime! I don't know what "Objects" can do that modules cant do better ,and much more simply! This paranoid schizophrenic tendency to try to cover every contingency with different aspects and rules for manipulation and use of an collection of data structures and functions is just ABSURD. Just freaking write the code!
@jontancool9181
@jontancool9181 7 ай бұрын
Everyone keeps talking about solving these problems, issues, "ACTUAL problems" but what are these problems? that we curently, using frameworks, are not solving?
@nat.serrano
@nat.serrano Жыл бұрын
Web developers got triggered!
@Gamez4eveR
@Gamez4eveR Жыл бұрын
I'm confused. Doesn't seem like this video is talking about OOP
@Mayday-cr7pr
@Mayday-cr7pr 7 ай бұрын
This guy has more rants on programming then actual products out. Im not super into CS but thats to me that speaks volumes.
@hyperTorless
@hyperTorless 7 ай бұрын
What? This guy worked on Thief, Oddworld, Deus Ex, has 2 soon 4 games out, made a complete programming language he uses for his games, made the game engines for his games from the ground up (2D and 3D, both insanely optimized and pretty-looking)... What are you on about man?
@SilkCrown
@SilkCrown 9 ай бұрын
It's interesting he says this because almost all of the problems he complains about in the way operating systems, programming languages, and other software work is due to people making on the fly decisions about how to hack something together that gets base functionality working and only in retrospect were their decisions clearly wrong. The point of all these "theories" is to avoid retreading known mistakes of the past.
@Trezker
@Trezker 6 ай бұрын
It's like doing lots and lots of stretching and prepping but rarely playing the actual sport. Don't kick the ball, you might hurt yourself.
@icinemagr4621
@icinemagr4621 Жыл бұрын
Few years ago someone told me. "make your self a favour.LEarn Jquery" bcz i was using vanilla javascript only. I did it i learn to use jquery Few years after I ve been told to stop using Jquery Because it sucks. Conclution: Never Listen what the "parots" they say . use native ways for develope and do it you own way. Software is not like food you dont have to recreate all time. You can create your own Libraries and use them 1 life. by the way i started programming in 1987 basic on an MSX Yamaha Computer. Basic was in build.
@BarrySlisk
@BarrySlisk 9 ай бұрын
You can't just do what you want when you are employed, unfortunately.
@icinemagr4621
@icinemagr4621 9 ай бұрын
@@BarrySlisk so true
@orlovskyconsultinggbr2849
@orlovskyconsultinggbr2849 Жыл бұрын
oh yes, things like overriding , overloading, the polymorphic stuff can be very hard , especially at execution time, man some people especially from India do th strange data structures.
@scottydog9997
@scottydog9997 2 жыл бұрын
When I was a newbie, and was raised with writing an API. I wrote a foundationless application in php that was completely procedural, the structure started to form afterward. Which ends up just being a main program with business logic stored in other folders. Its all you really need. The nuance of unit testing, I think is shuffling the papers, because the tests can be done in so many ways to identify a problem if you even have one.
@graealex
@graealex 2 жыл бұрын
Imagine programming procedural PHP with file system based logic and thinking it is the be-all and end-all. Just a quick hint: PHP itself, meaning the interpreter/JIT-compiler is written in C and C++, as is the OS you are running it all on. There are simply problem domains far outside of what you ever had to deal with, that cannot be satisfactory dealt with your approach. PHP is in itself an abomination, although that is not the point here.
@scottydog9997
@scottydog9997 2 жыл бұрын
@@graealex I by no means think it's the be all and end all. Nor do I disagree with the fact it's a pretty average interpreter language. It was my first API.... My point was, it solved a real problem over 8 years ago, it got the job done, and it's still being used today. Would I use php today? No. I could very easily refactor it in another language. (Juice may not be worth the squeeze) Something else I always find interesting in the developer community, is some other developer's have an emotional need to be right about everything....Its not healthy. This is the mindset that leads to over engineering and architectural bloat. Double or even triple testing the same endpoint, without any real value added to the business or derived productivity gains.
@graealex
@graealex 2 жыл бұрын
@@scottydog9997 So, what's the relevance then? Real world problems have also been solved with BASIC and COBOL. Or by hand-punching paper tape.
@scottydog9997
@scottydog9997 2 жыл бұрын
@@graealex The relevance is it met the criteria of solving a problem without the complexities of using other people's frameworks, or OOP, only the language forced me to think in a certain way. Its a reasonable example of what the video is talking about.
@graealex
@graealex 2 жыл бұрын
@@scottydog9997 I'm pretty sure you could solve the same problems in languages that are even worse than PHP. And no, that wasn't the point of the video. The point was that certain patterns, mostly OOP, shouldn't be an end in itself, but only a carefully used tool in circumstances that ask for it. Don't get me wrong, I started out with PHP as well, but me not knowing about frameworks and patterns that would have made my job easier is different from actively deciding against them because they aren't the right tool for the job.
@barterjke
@barterjke Жыл бұрын
That's said, Jonathan is not a typical programmer. He basically does most of his work solo. So, writing and then refactoring code is a good practice for him. But it's actually a terrible practice for companies. Like, you wrote a program, it works, great, new task is already there. Who cares about refactoring afterwards? And even if someone cares, refactoring can be a part of someone's else job, and it's a pain in the ass. And i still don't like oop. Overcomplicated stuff. Python and Js showed that maaaaany task can be solved in very simple way, in very simple language.
@kdietz65
@kdietz65 2 жыл бұрын
Here's a good mental exercise ... Think of a real, commercially viable business application - let's say for instance a REAL defect tracking system. Not some simple demo to-do app, but a real, full-featured defect tracking system. It has a database schema, an ORM-mapping layer, mapper classes, interfaces, custom-definable fields, custom-definable forms, custom-definable workflows, a rules-based notification engine that allows users to subscribe to events and receive events through various mechanisms, a rich text editor, attachments, saveable queries, graphical reports of various types, application specific access control lists, LDAP integration, import/export, integrations with other systems, etc., etc. A whole bunch of stuff. With that in mind, think about what kind of OOP class hierarchy you would need to pull that off. Got it in your head? Okay, good. Now as you're thinking about how much that sucks, tell me a better way. Explain to me how you'd do that with functional programming or any other paradigm that doesn't quickly turn into the same kind of Hell you think you are avoiding.
@SimonBuchanNz
@SimonBuchanNz 2 жыл бұрын
Well the real system I would build for that would probably be some variety of serverless, wherever possible, so everything is most naturally stateless functions distributed over my infrastructure. When I don't need to cook up an entire object heirachy from data every request, perhaps just to fetch a property and discard it, things are a bit simpler and perhaps faster. It's also a bit simpler to deal with hetrogenous forms of the same underlying data, since you should have less code to write for each layout (you are typing and validating your inputs, right?) But honestly, your point is that the real problems not this surface crap are overwhelmingly the majority of what's going to take your time, which is true in any non-perverse codebase.
@rabbitcreative
@rabbitcreative 2 жыл бұрын
> It has a database schema, an ORM-mapping layer... Stop right there. You're done. Get out.
@kdietz65
@kdietz65 2 жыл бұрын
@@rabbitcreative Well see, that's exactly what I'm saying. People love to criticize an approach, but they don't offer a viable alternative. Explain your approach to me.
@kdietz65
@kdietz65 2 жыл бұрын
@@SimonBuchanNz OOP allows you to organize complex functionality while deferring decisions and creating loosely coupled systems where better implementations can be substituted in the future. It is valuable to think of things as higher-level boxes of functionality with grouped methods rather than individual functions. Say for example, I need something that renders & manages a form. So I create an IForm interface, and it has RenderHeader(), RenderFields(), and RenderFooter(). I create a default base Form class which has an empty virtual RenderHeader() and RenderFooter(), and a default method RenderFields() that takes in an IList and calls Render() on each field. I can create a simple implementation and then substitute more complex implementations later. Somebody can come along later and create a new type of input field, and the rest of the codebase can accept it. This ability to manage complexity and change across a long lifecyle of a project, a project that may exist for decades for example, is what I see as the value of OOP. People say OOP sucks but they never articulate a better way to do and with examples and proof that their way is better.
@SimonBuchanNz
@SimonBuchanNz 2 жыл бұрын
@@kdietz65 Yes, but so does every other approach. The technical ability to abstract functionality is necessary for a programming language to be usable. In JavaScript I generally use a bag of methods returned from a factory function, which is basically identical to a class and constructor but doesn't suffer from JavaScript's weird class implementation, and let's you compose a lot easier. In Rust you have traits, which are basically interfaces that you can implement on other people's classes, but only in a way that won't break things; and encapsulation is at the module level and very flexible. It's way nicer than how more class-obsessed languages make you work. Ultimately it doesn't matter much. If you're familiar with your language and good design, anything works, really.
@tomtomtomtom691
@tomtomtomtom691 2 жыл бұрын
Terry Davis had something to say about eight miles of ocean beneath you.
@MrFujinko
@MrFujinko 8 ай бұрын
What exactly?
@ivanmucyongabo9540
@ivanmucyongabo9540 7 ай бұрын
Yes. Just YES. Almost gave up on programming(fun/profit) b/c of this
@Pulchism
@Pulchism 7 ай бұрын
I think this is a bit of an extreme view. We need belief systems in order to collaborate. And if it were all useless guff it would die out by itself. Some of my colleagues write to solve problems, and eschew the latest fashion, but their code is almost always impossible to reuse or maintain by anyone else in a practical time frame
@ethicalatheist1078
@ethicalatheist1078 7 ай бұрын
IMHO the fundamental flaw in software development is the belief that all programming can (and should) be phrased as a problem. Rather, software development is that mechanism that allows humans to interact with each other and the world by using computers as an intermediary.
@scotthinton4610
@scotthinton4610 7 ай бұрын
"A genius prefers simplicity, an idiot prefers complexity" or something like that, as the saying goes. I agree with Jonathan here that solving a problem is step 1. The issues with the implementation only appear when the problem statement or a subset of the problem statement changes, or when you need to explain how the code solves the problem to someone else. Frankly, embedded systems can be much easier to work with IMO because they are close to the hardware, and the hardware can't support the "theoretical problem solving" aspects of software.
@turolretar
@turolretar 2 жыл бұрын
Psa for anyone who wants to program - either do it or don’t do it
@archmad
@archmad 2 жыл бұрын
are we still talking about OOP? that's an old school way, kudos
@hophmanbg
@hophmanbg Жыл бұрын
OOP is about reacting to change that is why we need test coverage. Simple if can save you the first time and if requirments change in my experience OOP helps to make this faster. Actually in today companies noone undestand it everyone uses if else wrapped in an object and they rewrite their software on an year basis. Look at interview questions for a language like Java where actually everything is an object there is close to zero OOP topics.
@swaggy3987
@swaggy3987 Жыл бұрын
I always try to remind myself that a program that’s 1 file and 1000 lines of nested for loops and if statements... that actually works and does something interesting and useful, is INFINITELY better than some package that’s 500 files and 1,000 third party libraries and “modular” and formatted and has this pattern and that pattern etc etc... but ultimately doesnt even work, or doesnt do anything interesting. The “style” of the code is not the most important part... developers fall in love with themselves and end up thinking they’re Gandhi or da Vinci or something and that the users at the end of the day are gonna sit there reading the code, as opposed to using the program that its supposed to support... lmao
@r2com641
@r2com641 2 жыл бұрын
So I should throw away c++? I already seen benefit from its templates and class templates… C kinda doesn’t cut it, it’s like, yeah you can drive car from 70s and get to work, but you don’t wanna use that for daily driver… I don’t know, I do understand the frustration though in the video… my take would be… you can just use c++ to just solve the problem and then structuring once you convert your work to library for easier use on higher level. Problem maybe is not in c++ but rather in people who use this powerful tool in a wrong way. I just don’t think that your blaming of OOP is right
@Ignas_
@Ignas_ 2 жыл бұрын
C++ is not synonymous with OOP, you don't need to throw it away. What you should throw away is the "Oriented" part of OOP.
@r2com641
@r2com641 2 жыл бұрын
@@Ignas_ agree
@trampflips101
@trampflips101 Жыл бұрын
Templates are more so a part of Generic Programming than OOP. C++ doesn't really adhere to a single paradigm, it can be procedural, OO, generic, and these days it's also getting a lot more features for Functional Programming support. All these paradigms help in different areas, and should be learned and used accordingly.
@stewiegriffin6503
@stewiegriffin6503 Жыл бұрын
Without cars and animals OOP wouldn't even exists.
@iraf.official
@iraf.official Жыл бұрын
😎👌
@RichardLucas
@RichardLucas 2 жыл бұрын
First: There is no problem, here. Second: There is not just "one right way". If you had a point, it just evaporated.
@ifstatementifstatement2704
@ifstatementifstatement2704 2 жыл бұрын
“There is not just one right way”. So why all the theories on the best structure for an app?
@RichardLucas
@RichardLucas Жыл бұрын
@@ifstatementifstatement2704 We evolved to taxonomize, prune, breed, and perfect things. It's our agrarian legacy. It's an urge that gets hijacked to service another, more pressing impulse - namely, to self-promote. But it's all done reflexively, automatically. It's not examined. Stuff is often not about what it seems to be about. It's a bid for primacy in some niche of abstraction. A mindless will to power, and nothing besides.
@chickenduckhappy
@chickenduckhappy Жыл бұрын
Jonathan Blow believes that OOP is incompatible with if statements. Objects have an outside, named Responsibilities. Sometimes represented as an Interface. They also have an inside, named Behavior. If the Behavior is implemented using an if statement, who cares unless it creates a tangible problem? OOP is about abstraction and delegation, responsibilities and behavior. Objects are a generalization of functions. Functions are but objects with a single calling point. If statements, if processing an object's / a function's configuration, just are one more way to implement runtime polymorphism 🙂
@raduslavila42
@raduslavila42 2 жыл бұрын
Code maintainability. It's a belief system but 90% optimized in 2 hours for problem A, instead of fixating on problem A and losing 200 hours for 100% optimization. I always go by using the right tool for the right job, and your point is invalid at the moment, as i would never strap node on an ESP chip, or low level C on an Arduino as well as i would never ever treat my docker containers with something else than a tried-and-tested package/framework/CLI/SDK whatever the language might be that is maintained by 100k people - instead of reinventing the wheel myself. Know the principles, abuse the benefits and avoid the shortcomings of each and any language you come across. TLDR: I would not recommend getting all 'elite' in the mindset that you can build everything on your own and make it perform better than what 100k ppl did (and you understand the code) and use that. I challenge you to cut a tomato with a fork - your solution would be sharpening one side of the fork to act as a knife but then you would get cut when eating.
@datageekz8446
@datageekz8446 8 ай бұрын
When thousands of people are writing programs in an organization to solve problems, we need a standard.
@bentos117
@bentos117 7 ай бұрын
programming starts with understanding the problem you need to solve... without that part any paradigm - be it OOP, functional, or even no-paradigm - won't help... some sort of problems are neatly solved with OOP... then there is always need for the company to structure the code so other programmer can take it over... and for managers to at least to pretend they understand their own system... anyways, first thing is analysis in depth, prototyping just to understand the problem, real coding is the final (and easiest - paradigms and platforms doesn't matter much) stage... having said all that, functional programming is the most powerful, especially when together with multiple threads
@Macca15
@Macca15 Жыл бұрын
I'm an intermediate programmer, so I can't pretend to fully understand what Jonathan is saying. It sounds like he's advocating for a procedural style. Or have I misunderstood his point?
@spearPYN
@spearPYN 2 жыл бұрын
After 30 years of programming I went back to Atari 8-bit and BASIC/6502 assembly -- the last time programming was real simple and fun...
@alvarociudad1456
@alvarociudad1456 2 жыл бұрын
I mean, just use the better tool for the job. There are cases where OOP is nice to have, and then times where the abstractions are a damm pain in the ass and useless.
@felipesakuma9882
@felipesakuma9882 2 жыл бұрын
Right tool for the right job. I think it makes sense to use OO for an application you plan to modify in the future, to scale it up and specially if you're working with more people. Also, it makes sense to use procedural where the hardware is limited and efficiency matters most.
@mayboroda
@mayboroda Жыл бұрын
Let me try to rephrase these 4 minutes: 1. Make it work (solve a real problem) 2. Then if needed, make it fast 3. And then, again, if needed, make it right. And even here think twice before you go OOP :)
@laughingvampire7555
@laughingvampire7555 Жыл бұрын
OOP is a cult of complexity. My first programming language was C, then I learned C++ & JAVA and I kept thinking, this is so much easier with just structs than objects, why do I have to use these things. Because is the belief system of the group and we are hardwired to follow the belief system of the group.
@thomas-sk3cr
@thomas-sk3cr 8 ай бұрын
We are not hardwired at all, take yourself as an example, you don't follow "the group". We have to use OOP because it's required for the job, they expect it and the code base in most companies is built around it. How this came to be is another story
@pwhqngl0evzeg7z37
@pwhqngl0evzeg7z37 7 ай бұрын
OOP is about making code maintainable and understandable to other programmers. If you have not encountered maintenance issues, or do not work with other programmers, (or simply do not recognize either of these things) then you will not see the value.
@archimedesbird3439
@archimedesbird3439 6 ай бұрын
Life for everyone would be so much better if we dropped all the bloat in code Imagine using your 7 year old phone and a weak mobile data signal to use apps & websites and not having a miserable experience But the powers that be want you to continue consuming, they want you to continue solving software issues with the latest hardware It is truly revolting
@pwhqngl0evzeg7z37
@pwhqngl0evzeg7z37 7 ай бұрын
His main complaints seem to be about premature generalization and Big Design Up Front, but he talks about OOP Interfaces and beliefs systems as if they are part of the problem. To me there seems to be some conflation here. Does anyone find a different meaning here?
@toggle_blackbox9125
@toggle_blackbox9125 2 жыл бұрын
this sounds like the insight a freshman college student offers when he's frustrated trying to learn java abstraction is an important tool for scalability and reuse
@AlFredo-sx2yy
@AlFredo-sx2yy 2 жыл бұрын
you sound like the "mongo db is webscale!" guy lmao.
@toggle_blackbox9125
@toggle_blackbox9125 Жыл бұрын
@@AlFredo-sx2yy funny, because I would have assumed that about the guy in the video
@jacebeleren1703
@jacebeleren1703 7 ай бұрын
I will add that abstraction is an important tool for readability and maintainability as well.
@rayn1ful
@rayn1ful Жыл бұрын
you software producers sometimes take existing software and make it more difficult to use or make new software that is more difficult to use in general or make software more difficult to use then previous software. did you think it was going to be more efficient by making the software more difficult to use?
@RoboArc
@RoboArc 8 ай бұрын
All oop does is make your code look good and its readable
@etodemerzel2627
@etodemerzel2627 4 ай бұрын
But procedural looks just as good and is even more readable.
@1MinuteFlipDoc
@1MinuteFlipDoc Жыл бұрын
love this summary of the problem with OO programming!
@kalekold
@kalekold Жыл бұрын
OOP is not a problem in itself, it's just a tool like everything else. Over-use of OOP is the problem.
@jackkensik7002
@jackkensik7002 2 жыл бұрын
good take no cap no cap on god
Programmers Aren't Productive Anymore - Jonathan Blow
9:29
gamedev cuts
Рет қаралды 183 М.
Handmade Hero | Getting rid of the OOP mindset
7:44
vexe
Рет қаралды 101 М.
KINDNESS ALWAYS COME BACK
00:59
dednahype
Рет қаралды 148 МЛН
50 YouTubers Fight For $1,000,000
41:27
MrBeast
Рет қаралды 110 МЛН
HCL AppScan Standard Product Overview
6:00
espincgroup
Рет қаралды 1
Jonathan Blow was right about the crash of "tech" jobs?
14:11
Blow Fan
Рет қаралды 109 М.
The most important talk on programming by Jonathan Blow
22:55
Not Sure
Рет қаралды 195 М.
Jonathan Blow on work-life balance and working hard
19:18
Blow Fan
Рет қаралды 85 М.
Techniques for dealing with lack of motivation, malaise, depression
1:02:00
3 Levels of Vim Refactoring
7:48
typecraft
Рет қаралды 37 М.
Where did software go wrong?
7:49
Blow Fan
Рет қаралды 39 М.
Object-Oriented Programming is Embarrassing: 4 Short Examples
28:03
Modern Languages Don't Help Solve Hard Problems (Jonathan Blow)
6:45
Jonathan Blow on how an operating system should work
14:22
Anton Swifton
Рет қаралды 102 М.
Мой инст: denkiselef. Как забрать телефон через экран.
0:54
Собери ПК и Получи 10,000₽
1:00
build monsters
Рет қаралды 2,6 МЛН
Klavye İle Trafik Işığını Yönetmek #shorts
0:18
Osman Kabadayı
Рет қаралды 3,1 МЛН
OZON РАЗБИЛИ 3 КОМПЬЮТЕРА
0:57
Кинг Комп Shorts
Рет қаралды 1,8 МЛН
Сколько реально стоит ПК Величайшего?
0:37