Discussion about this post

User's avatar
Ilia Demianenko's avatar

This looks like reframing software performance as a commons problem - individual companies want to save their time and externalize inefficient software, and collectively everyone ends up using everyone else's inefficient software. At the same time, if a company's programmers end up wasting a lot of time waiting on a specific type of software, there's now a market for a higher end implementation of that type of software, which makes me wonder why no one takes the other end of that bet.

Or, if two companies make each other inefficient enough, they could strike an agreement to improve the relevant pieces of their software, which should be mutually beneficial if the post's point holds (and their software is actually possible to change)

Alejandro's avatar

I actually think there is a tradeoff programmer efficiency / program efficiency.

The thing is "Clean Code" is bad for both.

Take for example modern explicit graphics APIs such as Vulkan and DX12. These APIs are designed in a way that you need to provide more information so the driver work smarter.

In general, an API may abstract more or less.

- A higher-level abstraction, usually solves a more general problem, so the programmer doesn't need to think too deeply about the problem that's being solved, thus the API has to do more stuff because it's solving a more general problem.

- A lower-level API abstraction would need the user to get more involved and do more thinking, but this allows the API to narrow down the problem, thus provide a more efficient solution.

This is like an optimization problem where there are two outputs A (programmer efficiency) and B (program efficiency), and many many possible input variables (using Clean Code could be one of them). This doesn't mean improving A hinders B necessarily; it means that the optimal solution that maximizes A, is not the same solution that maximizes B. And that you might gave to give up some A to get some B, or viceversa. In this optimization problem, you can still find gradients(steps) that improve both A and B at the same time! And you can also find steps that hinder both A and B at the same time (Clean Code).

4 more comments...

No posts

Ready for more?