Observing the second law of thermodynamics in software
nick.comer.io
nick.comer.io
The functional programming and especially the data driven schools of thought tackle the same problem more elegantly.
If that's the case then the build system or dependency management tool is too stupid. NPM is, for example, because you can't install most dependencies straight from git repositories. Most npm packages need to be built on the developers machine and only artefacts are uploaded to the npm registry. If you need to patch for example babel (which you depend on through five levels of intermediate dependencies), you're in for a hell.
Haskell, on the other hand, makes it very easy to fork & patch a dependency (even a transient one) and you can use that while upstream figures out how to merge a PR.
Why does this not not scale when doing enterprise java? Is it the 'enterprise', or 'java', or the combination thereof?
I view objects as a natural outcome of mutability, so in that sense they are a code smell. I've found that using const liberally (and keeping methods free of side effects) significantly reduces the number of variables in each object. Which means that I can make more of those const variables public, which tends towards better reusability/composability.
This could be the difference, but I'm not a physicist.
"as an E-type system evolves, its complexity increases unless work is done to maintain or reduce it" [1]
https://en.wikipedia.org/wiki/Lehman%27s_laws_of_software_ev...
Isn't "find all usages" a pretty basic feature in modern IDEs? If you're working in a single self-contained codebase this really isn't very hard to do.
IMO a lot of the teaching around best practices in OO programming doesnt differentiate enough between things that matter in authoring libraries versus self-contained proprietary code. When everyone is committing to the same repo certain types of encapsulation and abstraction aren't always as critical as they're made out to be.
Until you want to refactor or reuse. We develop a lot of in-house tools for our rather esoteric systems and systems analysis. We start by writing specific solutions, then refactor as we find common elements across tools. Now we have several libraries that can be used by anyone to develop custom solutions to problems because we've factored out common elements into those libraries.
Treating encapsulation and abstraction like they're unimportant would've resulted in a lot of extra work over the years.
Not all "find all usages" are created equal. Here, the language is very significant. In languages where there is more than one way to use something, this becomes more complicated, with more corner cases to keep in mind. In languages where there is only one way to do something, this is less complicated.
> IMO a lot of the teaching around best practices in OO programming doesnt differentiate enough between things that matter in authoring libraries versus self-contained proprietary code. When everyone is committing to the same repo certain types of encapsulation and abstraction aren't always as critical as they're made out to be.
This isn't a matter of library/proprietary code. This is a matter of scale.