В этой теме, уважаемые коллеги. я хотел бы обсудить такое понятие, как говнокод.
Что является говнокодом? Каковы его критерии?
Как часто встречается говнокод в вашей практике? Много ли говнокодеров вы встречали?
Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?
И как исправлять говнокод на нормально смотрящийся код?
Единственный критерий: всё, что писал не я — говнокод. Мой код всегда восхитителен.
RF>Как часто встречается говнокод в вашей практике? Много ли говнокодеров вы встречали?
Встречается всегда и везде, кроме проектов, над которыми работал я один.
RF>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?
Ни разу не видел, чтобы увольняли за говнокод. Оно и понятно, оставить пришлось бы одного меня, а всех остальных уволить. А я один, на все проекты меня не хватит.
RF>И как исправлять говнокод на нормально смотрящийся код?
Исправить могу только я. Остальные сколько не будут исправлять говнокод — он говнокодом и останется.
Была в свое время популярна такая система контроля версий, как CVS. Собственно, git в те времена был еще не только не написан, но даже и не придуман, а авторы SVN еще не родились.
Я как-то полез в ее исходники с мыслью, а не сделать ли бы мне так, чтобы она текстовые файлы на венде автоматически раскладывал по-вендовому (в смысле концов строк), а на юниксе и на сервере — по-юниксовски.
Наивный, я думал, что сейчас без труда найду те места, где они собственно с файлами и работают, и слегка их подправлю. Большего говнокода я в жизни своей не видел (вернее, потом видел, но под подпиской о неразглашении, и не могу о нем говорить). Там работа с файлами встречается в миллионе мест, все размазано тонким слоем по всем исходникам, и с какой целью написан вот именно этот fopen(), понять совершенно невозможно. Протрахавшись несколько дней, я сдался.
Здравствуйте, De-Bill, Вы писали:
RF>>Что является говнокодом? Каковы его критерии?
DB>Единственный критерий: всё, что писал не я — говнокод. Мой код всегда восхитителен.
Здравствуйте, RussianFellow, Вы писали:
RF>Что является говнокодом? Каковы его критерии?
для меня такие критерии
* куча мертвого кода (ну скажем от 10% от всего кода)
* безумный copy-past (10 и больше копий одного и того же кода)
* классы по 5000 и больше строк кода
* безумные if-else конструкции(пять и больше уровней вложенности)
* нету единого стиля (один класс могут использоваться как отсупы 4 проблема, 4 таба, 2 таба, без отступов вообще).
* не явные контракты у API о том как этот API можно использовать. Множество side-эффектов при вызове разных методов.
Здравствуйте, AleksandrN, Вы писали:
DB>>Единственный критерий: всё, что писал не я — говнокод. Мой код всегда восхитителен.
AN>А то, что писал ты, но года 2-3 назад?
Это враги исправили испортили но оставили мой копирайт.
Здравствуйте, RussianFellow, Вы писали:
RF>P.S. И могли бы вы, уважаемые коллеги, привести пример говнокода или дать ссылки на него? http://rsdn.org/forum/mfc/6889209.1
1) Вся логика в обработчике кнопки, нарушение Single Responsibility Principle. Разбивать на мелкие функции с определенной ответственностью по любому, чтение файла — отдельная функция должна быть. В самой логике не должно быть никаких ссылок на UI диалоги и тому подобное, соответственно это еще кандидат на функцию. Всякие сложные инициализации и т.д — снова функции должны быть. А тут вообще полная каша, хоть и типичная для студентов первого курса;
3) Имена переменных объявлены не ближе к использованию, а в начале файла. Это крайне хреновая практика, вообще то;
4) magic numbers — хардкод имени файла в коде, какие то непонятные константы 60 и 48.
Пока хватит. После привидения в читаемый вид можно дальше смотреть.
Здравствуйте, RussianFellow, Вы писали:
RF>Что является говнокодом? Каковы его критерии?
Это когда открыв один единственный файл из проекта не в IDE, а в блокноте, ты не можешь понять, что это вообще такое и зачем это надо
RF>И как исправлять говнокод на нормально смотрящийся код?
Исправлять? Думается, что никак. Переименовать классы и переменные и привести к единому стилю — этого мало. В говнокоде зависимости и сама архитектура тоже говенные. А это уже просто так не исправить.
Аккуратность надо в себе воспитывать с самого начала.
Здравствуйте, RussianFellow, Вы писали:
RF>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?
Здравствуйте, Tourist, Вы писали:
T>Здравствуйте, RussianFellow, Вы писали:
RF>>Что является говнокодом? Каковы его критерии?
T>для меня такие критерии
T>* куча мертвого кода (ну скажем от 10% от всего кода) T>* безумный copy-past (10 и больше копий одного и того же кода) T>* классы по 5000 и больше строк кода T>* безумные if-else конструкции(пять и больше уровней вложенности) T>* нету единого стиля (один класс могут использоваться как отсупы 4 проблема, 4 таба, 2 таба, без отступов вообще). T>* не явные контракты у API о том как этот API можно использовать. Множество side-эффектов при вызове разных методов.
Какие-то мягкие критерии.
Я бы сказал, что более 2-х копипаст и классы больше 500 строк уже смердят, но, может, я слишком нежный ))
Здравствуйте, De-Bill, Вы писали:
RF>>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?
DB>Ни разу не видел, чтобы увольняли за говнокод. Оно и понятно, оставить пришлось бы одного меня, а всех остальных уволить. А я один, на все проекты меня не хватит.
А вот Ночной Смотрящий говорит, что в его организации увольняли за говнокод. Что это за организация такая, интересно?
Здравствуйте, Gradiens, Вы писали:
G>Какие-то мягкие критерии. G>Я бы сказал, что более 2-х копипаст и классы больше 500 строк уже смердят, но, может, я слишком нежный ))
Можно сказать, что это экстремумы. Каждый сам может пытаться подобрать параметры под себе т.к. нижние границы очень дискусионные. К примеру 500 строк кода в классе, вполне обычное и нормальное явление на мой взгляд в большинстве проектов которые я видел.