DEV Community

Discussion on: Flexible code considered harmful

anataliocs profile image
Chris Anatalio

I think the most important thing to keep in mind is that there are no absolutes in software development.

Computer science is the art of trade-offs.

How many people are working in the codebase? One, a dozen or thousands of Engineers?

Are you working on a long-lived, super complex SaaS product with thousands of features and hundreds or thousands of developers or a one-off project for a small shop?

Abstractions can be great if they are well thought out and make code easier to change.

I think the problem being talked about here is trying to over-solve for relatively simple problems. Big, long-lived, complex systems needs abstractions and make it easier to manage change.

Keep things simple if you can and solve for the current problem at hand without impacting the ability to manage change in the future.

But at a certain level of scale and complexity, you will need abstractions to manage the system.

Abstractions should make it easier to reason about code by encapsulating commonly used boilerplate so you can focus on writing clean, easy to understand business logic.

laughingraven profile image
Laughing Raven

Computer science is simply the science of computation. It is a mathematical discipline that has little to do with actual programming. Computer programming is an engineering discipline and should be treated as such.

anataliocs profile image
Chris Anatalio • Edited on

The science of computation is literally balancing tradeoffs of space and time complexity. Memory usage or speed. I don't understand this comment at all.

Computer science has little to do with programming for low-scale, simple projects. You don't need computer science to update the CSS on a website.

Computer science takes a backseat with simple systems because hardware has advanced to a point that efficiency doesn't matter much if you just have a couple users.

However, Big O notation, correct use of data structures and an understanding of core CS fundamentals is important if you work on systems that have millions or billions of users and require high-throughput.

For the first 7 or so years of my development career, I shared the same sentiment that my CS degree was a waste of time. Then you work on a really complex system that has a lot of throughput and extremely demanding SLAs and you realize that CS does have a part to play in modern software engineering.

Thread Thread
laughingraven profile image
Laughing Raven

I'm saying that CS is the why but engineering is the how. I've been at this for 20 year and have an MS in EE.