|
|
|
|
|
by mattgreenrocks
4425 days ago
|
|
A lot of people seem to chafe at these principles because they convey truths about a intangible reality they may not even be able to perceive. They only see more work for little payoff. They don't have the body of knowledge and experience (nor the intuition) to know when when to abstract more. We're also in a post-enterprise era, where any sort of deliberate design is often mocked by way of strawman AbstractComposerFactorySingleton references. Rhetoric masquerades as honest intellectual debate for self-promotional purposes. I consider myself fortunate to have written enough C++ to learn coupling and cohesion. When you screw these up in C++, you pay for it, over and over, through increased compile times and link times. |
|
I think there are other factor at work here:
- The size of the project. I think most code written today is in the context of tiny systems, e.g. a bit of Javascript that goes with a single web page or some trivial backend code within an existing framework.
- The life cycle of the project. Most software projects have a short life time. This is for various reasons, some of them technical, some of them business related.
- You pay for bad design much farther down the road so it's harder for people to see the causation.
- The investment of individual engineers. If you move from one startup to the other every year you may not care that much about principles that will affect maintainability. You should but a lot of people don't. By the time coupling matters you'll already be hacking somewhere else. Being disconnected from the results of your work creates a difficulty in understanding design principles.
- Not Invented Here. People generally aren't open to receiving lessons from other people's experience. Learning often has to happen through individual experience.
I don't think there are many successful, large, long term, software projects where everything is a jumbled mess with no design intent and everything coupled with everything.