Очень простой маркер трансформации в говнокод: закомментированные куски без пояснения причин почему эти куски были закомментированы и до какого времени они должны в таком виде оставаться.
Т.е. если вы видите в кодовой базе что-то вроде:
data_manager::data_manager( data_set_id id, raw_data_storage_shptr raw_data_storage, access_manager_shptr access_manager, modification_mode mode, logger log) : base_type{ id, std::move(raw_data_storage), // std::move(access_manager) // mode } { // _id = id; // _storage = std::move(raw_data_storage); // _access_manager = std::move(access_manager); setup_access_manager(std::move(access_manager)); setup_mode(mode); setup_logger(std::move(log)); } |
то можете не сомневаться, что рано или поздно эта самая кодовая база окончательно превратится в известную субстанцию. Причем скорее рано, чем поздно. Чем больше разных людей работает над одними и теми же кусками кода, тем быстрее.
Полагаю, тут работает "закон разбитых окон": когда заглядываешь в код и видишь, что такое является нормой, то и сам невольно поддаешься соблазну поступать аналогичным образом.
А избежать этого не так уж и сложно. Достаточно взять за правило либо сразу же удалять ненужный код, либо же снабжать его комментарием о том, почему закомментирован и когда (при каких условиях) его нужно раскомментировать или удалить.
Еще неплохо бы пометить в тех же комментариях кому нужно будет принять решение (скорее всего это вы сами, так что впишите туда свой никнейм).
Например:
data_manager::data_manager( data_set_id id, raw_data_storage_shptr raw_data_storage, access_manager_shptr access_manager, modification_mode mode, logger log) : base_type{ id, std::move(raw_data_storage), //FIXME(eao197): access_manager и mode должны были бы передаваться //в base_type, но там временно пришлось убрать такой конструктор. //Нужно вернуться к передаче access_manager и mode в конструктор //базового класса после того, как base_type будет отрефакторен. // std::move(access_manager) // mode } { //FIXME(eao197): установка access_manager и mode должна //быть со временем перенесена в конструктор base_type. setup_access_manager(std::move(access_manager)); setup_mode(mode); setup_logger(std::move(log)); } |
PS. Был в моей карьере один случай двухдневного сеанса отладки кода, который до сих пор вспоминается с содроганием. Выглядел этот код как откровенное Г и состоял на 50% вот таких вот закомментированных кусков без всяких пояснений. Причем ладно бы в начале файлов были раскомментированные, актуальные строки, а в конце -- закомментированные, уже не нужные. Так нет, все это было вперемешку. Бррр. Как вспомню, так вздрогну.