News for hackers. Stuff that matters.
Re:Goodbye, Clean Code by valand on Sunday January 12, 2020 @01:15AM (#22024793)
Premature abstraction. Rule of 3 helps. But I found better principle for it:

Any abstraction MUST be designed to be as close as possible to be language-primitive-like. Language primitives are reliable, predictable, and non-breaking. If they do, they don't affect business logic written on top of it. If parameters are added, defaults are provided. They don't just abstract, they enable developers to express business logic more elegantly.

The challenge is to pick the part of the code abstractable to be primitive-like first and make it a top priority.

This is why language features like Rust async, Go channel-based comm, ES6, C++ smart pointer was such hype in their time and is used up until now. It also applies to enabling tools such as React, tokio, wasm-bindgen, express, TypeScript, jquery (even this which is not a thing anymore).

Re:Goodbye, Clean Code by pvorb on Sunday January 12, 2020 @03:14AM (#22025142)
I find abstractable parts in code by thinking about potential names for it. If there is no good name for a potential common function, it's probably not a good idea to extract the section into a function. Maybe it can be extracted into two separate functions with good names?
Re:Goodbye, Clean Code by konschubert on Sunday January 12, 2020 @05:10AM (#22025497)
This is a proxy for having a well-defined purpose for a function.
Re:Goodbye, Clean Code by pvorb on Sunday January 12, 2020 @08:23AM (#22026169)
Yes, absolutely, but it's one that's easier to teach juniors.
Re:Goodbye, Clean Code by aj7 on Sunday January 12, 2020 @12:55PM (#22027768)
Like.