5 ms·
No, I've been doing this for ~30 years now and I have really strong unpopular opinions on things. Like: - NPM/Yarn/Gems etc is a disaster waiting to happen. Ha
by marcus_holmes 5y ago
No, I've been doing this for ~30 years now and I have really strong unpopular opinions on things. Like:
- NPM/Yarn/Gems etc is a disaster waiting to happen. Having lots of dependencies is a security nightmare and a maintenance issue. As these projects get dropped by their original maintainers we'll start seeing more supply-side attacks and more vulnerabilities going unpatched.
- Docker is a great solution for a specific problem. But I don't think it needs to be used for everything. Same for K8s. Same for microservices architecture.
- Simplicity is an important design goal for all systems. Complexity breeds bugs. Boilerplate is simple. DRY can be taken too far. Every abstraction layer leaks at least a little. "clever" code is usually not what is needed for reliable software.
I expect to get downvoted because these are unpopular opinions. But I'm used to arguing about them. It's always interesting to discuss.
- ryandrake 5y agoThose seem like pretty unobjectionable opinions. Have an upvote! You want a controversial opinion (on HN), how about mine: "It's not always a good tradeoff to throw something under the bus to save developer time." So many important things are routinely sacrificed at the altar of developer speed and comfort, app runtime performance being the big one. It's used to justify all sorts of crazy things we do in modern software to ship faster, but so hard to push back on because developers are expensive and software needs to be done yesterday. Some things are worth giving up so that developers can move faster, but I argue not everything. Need to evaluate case by case.
- marcus_holmes 5y agoHave an upvote yourself! yes, totally agree. Like Wordpress optimises for edit functionality, at the expense of render speed. Most of the internet is now slow, optimised for Susan From Marketing because they don't know how to edit HTML. Same for Ruby/Rails, same for Python/Django, same for Node/whatever. Web pages render slower so that whoever edits them can do that faster. This isn't good.
- paxys 5y agoQuite brave to share these unpopular opinions like “npm is bad” on HN.
- Fiahil 5y ago> I expect to get downvoted because these are unpopular opinions. Well, not really. These opinions are very common among my peers. We sold multi-million dollar transformation projects with the stated goal of making things simpler and easier to use and understand.
- travisgriggs 5y agoFellow 30+'er here... You had me at > - Simplicity is an important design goal for all systems. Complexity breeds bugs. Boilerplate is simple. DRY can be taken too far. Every abstraction layer leaks at least a little. "clever" code is usually not what is needed for reliable software. Nuff said.
- ItsMonkk 5y agoLast month I ran into The Principle of Least Power, and it's grabbed me and the more I think about it, the more it expands. I think all of your statements lines up with this principle, except one. Containers are a simpler solution than Operating Systems. Operating Systems is a tightly bound non-simplistic system that breeds complexity, just as you state npm does. Because those interfaces are tightly bound, we were not about to build on top of them. Almost immediately after we got Docker, we got K8s. Once we got Docker we got the ability to manage these things at a higher level. That's the mark of a more simple solution. Are there things that Docker can't do? Are there things that require so much performance that Docker can't handle it? Only then should you step back to the more powerful solution. Not to say that there aren't problems with Docker. Dockerfiles have a lot to improve. Running containers has a lot to improve. I think. I'm still at a state where I might change my mind. It's partially why I'm posting this. [0]: https://blog.codinghorror.com/the-principle-of-least-power/ https://blog.codinghorror.com/the-principle-of-least-power/
- marcus_holmes 5y agoyeah, no. Containers run on top of Operating Systems. They inherit everything that the underlying OS has. They're not simpler, they're actually more complex, but pretend to be simpler. What you're thinking of is Unikernels. These are simpler than OS's. And yes, Unikernels are a good alternative to containers for a lot of applications we currently use containers for.
- ItsMonkk 5y agoAppreciate this response. Thanks. Totally agree now that I see your perspective.
- sangnoir 5y ago> Simplicity is an important design goal for all systems. Complexity breeds bugs Counterpoint: some problem-spaces are inherently complex; most problem-spaces have hidden complexity. Complexity cannot be removed, it can only be moved up or down your tech stack, and obviously, you can needless add more complexity. Docker, K8s and the like are perfectly fine when they fall below your project's complexity floor - they are good place to shift your complexity to as they are battle-tested and well-documented. If your projects complexity floor is lower than docker/k8s, then integrating them will just increase your solutions complexity needlessly.
- marcus_holmes 5y agoTotally agree. Some problems are complex. However, that does not mean that the code needs to be complex. Simplicity should still be a design goal even if the problem space is complex. I don't really agree that there is a "complexity floor". Things can always be made simpler, up to the limit of the problem space. As you say, complexity can always be added. Most projects do this. Very few stick to the minimum complexity. The complexity floor for most projects is therefore way below where that line is normally drawn.
- physicles 5y ago> up to the limit of the problem space. This is the key. One of the harder things to do in software design is to find a representation of the problem that gets closest to that complexity floor. It's often not obvious.
- klohto 5y agoThere are unpopular opinions? It’s pretty shared in the industry.