Ответ
Программист должен постоянно улучшать код, над которым работает. Это не только написание новой функциональности, но и забота о существующей кодовой базе. В моей практике на C++ это включает несколько аспектов:
-
Рефакторинг для ясности и поддерживаемости. Например, замена "магических чисел" на именованные константы, выделение сложных фрагментов в отдельные функции с понятными именами, упрощение запутанных условных конструкций.
// Было if (status == 0 || status == 1 || status == 3) { ... } // Стало bool isTerminalState(Status s) { return s == Status::Success || s == Status::Failed || s == Status::Cancelled; } if (isTerminalState(currentStatus)) { ... } -
Оптимизация производительности там, где это необходимо и обосновано. Это не преждевременная оптимизация, а анализ узких мест (профайлинг) и их устранение: выбор более подходящих структур данных (например,
std::unordered_mapвместоstd::mapдля частого поиска), минимизация копирования (использование семантики перемещения,std::string_view), обеспечение кэш-дружественности доступа к памяти. -
Обеспечение надёжности. Написание модульных и интеграционных тестов (с помощью Google Test, Catch2), обработка ошибок, использование умных указателей (
std::unique_ptr,std::shared_ptr) для автоматического управления памятью и предотвращения утечек.// Вместо сырого указателя void riskyFunction() { int* raw_ptr = new int[100]; // ... если здесь выбросится исключение, будет утечка ... delete[] raw_ptr; } // С умным указателем void safeFunction() { auto smart_ptr = std::make_unique<int[]>(100); // Память будет освобождена автоматически при выходе из функции, даже при исключении } -
Документирование сложных решений. Не каждый строки, а нетривиальных алгоритмов, инвариантов классов или причин выбора конкретной реализации. Хороший код в значительной степени самодокументируем, но для сложных моментов я добавляю комментарии в формате Doxygen.
Для меня это цикл: написать, протестировать, измерить, понять, улучшить. Цель — чтобы код через полгода было так же легко читать и изменять, как и сегодня.
Ответ 18+ 🔞
Да ты послушай, что за жизнь у программиста! Сидишь, значит, пишешь код, а потом понимаешь — ёпта, это же пиздопроебибна какая-то! Надо улучшать, а то через полгода сам себя не поймёшь, как будто на дворе 2002-й год и ты пьяный в стельку это писал.
Вот смотри, как это работает на C++. Первый пункт — рефакторинг. Это когда смотришь на условие if (status == 0 || status == 1 || status == 3) и у тебя волнение ебать начинается. Что за цифры? Кто их придумал? Хуй с горы какой-то, а не код. Надо вынести это в отдельную функцию с нормальным названием, чтобы любой чувак, который это увидит, сразу понял, о чём речь. Не 0, а Status::Success. Красота же!
bool isTerminalState(Status s) {
return s == Status::Success || s == Status::Failed || s == Status::Cancelled;
}
if (isTerminalState(currentStatus)) { ... }
Второе — оптимизация. Тут главное — не быть полупидором, который всё подряд пытается ускорить. Сначала профайлинг, находишь узкое место, а потом уже думаешь. Может, std::map на std::unordered_map поменять, может, копирование лишнее убрать. Цель — чтобы не жрало ресурсов овердохуища, а работало шустро.
Третье — надёжность. Это святое. Вот смотри на этот ужас:
void riskyFunction() {
int* raw_ptr = new int[100];
// ... если здесь выбросится исключение, будет утечка ...
delete[] raw_ptr;
}
Ни хуя себе риск! Вылетит исключение — и память твоя навеки в небытии. А теперь с умным указателем:
void safeFunction() {
auto smart_ptr = std::make_unique<int[]>(100);
// Память будет освобождена автоматически при выходе из функции, даже при исключении
}
Вот это уже доверия ебать больше вызывает. И тесты писать надо, конечно. Без них — терпения ноль ебать потом искать, где же ты эту хитрую жопу с багом спрятал.
И наконец, четвёртое — документирование. Не надо комментировать каждую строчку, это манда с ушами. Но если алгоритм сложный, как хуй в пальто завёрнутый, то поясни, чувак, для будущего себя или того парня, кто будет это читать. Хороший код и так многое говорит, но для особо извращённых моментов пара строк в Doxygen — это спасение.
Итог такой: пишешь, тестишь, меряешь, понимаешь, улучшаешь. Круг замкнулся. Цель — чтобы через полгода открыть этот код и не сказать «ёб твою мать, кто это писал?», а спокойно в нём разобраться и продолжить работу. Ядрёна вошь, вот это подход!