Hacker News new | past | comments | ask | show | jobs | submit login

This reads like nothing more than an advertisement of Clion’s refactoring features. Some of the tips are even quite dangerous and highly context dependent, like creating a base class when two classes share common functionality. That sounds like a refactoring nightmare to happen.

I’m currently working through a difficult refactor and the most important tips I can give are:

- test everything after each change,

- make (very) small adjustments.

- Use version control.

- sometimes make large sweeping adjustments, copy the main logic of it to a scratch file and then create small commits that bring you to that larger change.

- don’t be afraid to reset to your last “checkpoint”, sometimes you just go a wrong direction / overengineer something. Just throw it away and use it as additional guidance to build the right thing.




> This reads like nothing more than an advertisement of Clion’s refactoring features.

Yes, I think that's the whole point.

> Some of the tips are even quite dangerous and highly context dependent, like creating a base class when two classes share common functionality. That sounds like a refactoring nightmare to happen.

I don't see where that hypothetical danger lies. Deduplicating code is a basic refactorizarion step.

> I’m currently working through a difficult refactor and the most important tips I can give are:

I'm afraid you're going the wrong way about this. No wonder you associated "danger" with refactoring.

The basic steps you take to refactor legacy code are:

- identify code paths that are affected if you touch a specific component,

- identify invariants and expected state changes through that code path. If there is none, add your own (see code seams)

- add tests to verify those invariants (see software vise tests)

- proceed with refactoring.

If you want to learn more, I recommend you pick up the book "working effectively with legacy code" by Michael C Feathers.


> I don't see where that hypothetical danger lies. Deduplicating code is a basic refactorizarion step.

Deduplication is one thing and fine, but creating inheritance hierarchies should not be used for simple code reuse, but for representing relationships.


> Some of the tips are even quite dangerous and highly context dependent, like creating a base class when two classes share common functionality.

Yeah, I am a pretty big fan of inheritance, but that makes me cringe. Don't do this unless you understand the semantics of the class, and even then probably don't.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: