The Death of Object-Oriented Programming [video]
youtube.com
youtube.com
The flaw in OOP is simply that a lot of things do not need to be instances. Fewer instances of different things, fewer problems. If you want to perform a mutation on an object, it's best to pass that object into a mutator and get your mutated object on the other side.
I shouldn't need an instance of a mutator, which gets I suppose attached to the object I want to mutate. That adds all kinds of (in this comment unspecified) unnecessary and really useless complexity.
In particular, he wants to focus on:
1 - bringing models closer to code
2 - trying to exploit the domain models in the development environment
3 - linking code to the ecosystem
don't. Don't prevent it from dying. Just let this academic bullshit go away. "Why won't you just die (https://www.youtube.com/watch?v=nvTb1B253fQ)"
Of course, as soon as your system is socio-technical (includes people), you're rather doomed in that direction already ...
More specifically, some people do a poor job following basic best practices to reduce and manage complexity, such as encapsulation and the tried and true separation of concerns, and then proceed to pin the result of their own failures on abstract concepts, such as programming paradigms.
There's that saying that goes something like "a bad workman blames his tools"... Well, a programmer bitching about basic programming paradigms is just that.
It's easy to talk about the notional "bad programmer", and scapegoat that, but why shouldn't the methodology take a hit? I find one of the differences between a novice and an experienced developer is not adherence to "best practise", but knowing which ones are good, and which ones are bullshit (or nuanced, i.e. might get you in trouble).
Also, "tried and true" is problematic, there are lots of biases and confounding factors. I would say a lot of OOP project may succeed because there is a lot of investment in OOP, diverging from this automatically puts you in new territory.
In our industry people with no broad experience formulate what they think the world should look like and go around trying to convince others.
If you aren't actively researching software engineering, or applying stats beyond the scope of your own experience, you might as well pick some kind of ideology as a guide to what things should look like, otherwise you'll only have your own biases/subjective-experience reflected back at you.
This to me is a ridiculous statement. EVERY paradigm is about providing tools to handle the domain abstractions which we have defined. Object Oriented Programming is exactly and specifically defined by a paradigm expressed by Object instances of Classes, meant to embody Encapsulation, Inheritance, Abstraction, and Polymorphism. OOP clearly means something to this person that it doesn't mean to the rest of the world, but he strikes me as someone who has spent the better part of the last 2 decades in pure academia.
This is interesting -- it's something I think about too, but it's not clear to me what it _really_ means, unless its a personal thing specific to ea. developer being sympathetic, and is just meant to mean "Are you mindful of what's going on? If not, pause until you are". Maybe then one sees earlier pitfalls, or chances to succeed.
- Will it cost a lot to change your mind?
- Will this make it harder to debug or easier?
- How long have I gone without a big, costly/risky rewrite?
This is what it means to have a good or a bad architecture.It may be initially easier to model a problem with 'Nouns', but this won't necessarily reflect the structure of the implementation, which is what I think the code should reflect.
http://homepage.ntlworld.com/christopher.mallagh/INCKy/OrgPr...
Sometime the abstractions aren't quite as perfect in their implementation as modelled in the mind. Then you realise you need to model implementation differently from domain, and the difference between the two can cause issues (leaky abstractions, shared-encapsulated state, etc).
To put it another way, information should be communicated using concepts from the way people thing about the problem, and the code can communicate this, but the actual structure of the code should reflect the implementation.
the same kind of thing that can happen in ORMs wrt the actual difference between object-hierarchy structures, and relational database structures...
C and Assembly are probably the only non-OOP languages ones still left.
They rant OOP is dead and there is some new path being chosen, beating the dead horse on Java and C#, while forgetting almost every other programming language, including FP ones, do have OOP support.
One just needs to look at the SIGPLAN papers to see that there is more to OOP approaches what Java and C# (actually Smalltalk) offer.
Likewise FP isn't Haskell, there are many other FP approaches.
Meanwhile in the real world, most successful programming languages are either mainly OOP based or multi-paradigm (including OOP).
> most successful programming languages are either mainly OOP based
Aren't those two of the most popular languages?
OO would be great if the world were completely different from the way it is.