Единственный критерий: всё, что писал не я — говнокод. Мой код всегда восхитителен.
RF>Как часто встречается говнокод в вашей практике? Много ли говнокодеров вы встречали?
Встречается всегда и везде, кроме проектов, над которыми работал я один.
RF>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?
Ни разу не видел, чтобы увольняли за говнокод. Оно и понятно, оставить пришлось бы одного меня, а всех остальных уволить. А я один, на все проекты меня не хватит.
RF>И как исправлять говнокод на нормально смотрящийся код?
Исправить могу только я. Остальные сколько не будут исправлять говнокод — он говнокодом и останется.
В этой теме, уважаемые коллеги. я хотел бы обсудить такое понятие, как говнокод.
Что является говнокодом? Каковы его критерии?
Как часто встречается говнокод в вашей практике? Много ли говнокодеров вы встречали?
Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?
И как исправлять говнокод на нормально смотрящийся код?
Была в свое время популярна такая система контроля версий, как CVS. Собственно, git в те времена был еще не только не написан, но даже и не придуман, а авторы SVN еще не родились.
Я как-то полез в ее исходники с мыслью, а не сделать ли бы мне так, чтобы она текстовые файлы на венде автоматически раскладывал по-вендовому (в смысле концов строк), а на юниксе и на сервере — по-юниксовски.
Наивный, я думал, что сейчас без труда найду те места, где они собственно с файлами и работают, и слегка их подправлю. Большего говнокода я в жизни своей не видел (вернее, потом видел, но под подпиской о неразглашении, и не могу о нем говорить). Там работа с файлами встречается в миллионе мест, все размазано тонким слоем по всем исходникам, и с какой целью написан вот именно этот fopen(), понять совершенно невозможно. Протрахавшись несколько дней, я сдался.
Здравствуйте, RussianFellow, Вы писали:
RF>Что является говнокодом? Каковы его критерии?
для меня такие критерии
* куча мертвого кода (ну скажем от 10% от всего кода)
* безумный copy-past (10 и больше копий одного и того же кода)
* классы по 5000 и больше строк кода
* безумные if-else конструкции(пять и больше уровней вложенности)
* нету единого стиля (один класс могут использоваться как отсупы 4 проблема, 4 таба, 2 таба, без отступов вообще).
* не явные контракты у API о том как этот API можно использовать. Множество side-эффектов при вызове разных методов.
Здравствуйте, RussianFellow, Вы писали:
RF>В этой теме, уважаемые коллеги. я хотел бы обсудить такое понятие, как говнокод.
RF>Что является говнокодом? Каковы его критерии? RF>Как часто встречается говнокод в вашей практике? Много ли говнокодеров вы встречали? RF>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?
RF>И как исправлять говнокод на нормально смотрящийся код?
Здравствуйте, RussianFellow, Вы писали:
RF>Что является говнокодом? Каковы его критерии?
Это когда открыв один единственный файл из проекта не в IDE, а в блокноте, ты не можешь понять, что это вообще такое и зачем это надо
RF>И как исправлять говнокод на нормально смотрящийся код?
Исправлять? Думается, что никак. Переименовать классы и переменные и привести к единому стилю — этого мало. В говнокоде зависимости и сама архитектура тоже говенные. А это уже просто так не исправить.
Аккуратность надо в себе воспитывать с самого начала.
Здравствуйте, De-Bill, Вы писали:
RF>>Что является говнокодом? Каковы его критерии?
DB>Единственный критерий: всё, что писал не я — говнокод. Мой код всегда восхитителен.
Здравствуйте, AleksandrN, Вы писали:
DB>>Единственный критерий: всё, что писал не я — говнокод. Мой код всегда восхитителен.
AN>А то, что писал ты, но года 2-3 назад?
Это враги исправили испортили но оставили мой копирайт.
Здравствуйте, RussianFellow, Вы писали:
RF>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?
Здравствуйте, Gradiens, Вы писали:
G>Какие-то мягкие критерии. G>Я бы сказал, что более 2-х копипаст и классы больше 500 строк уже смердят, но, может, я слишком нежный ))
Можно сказать, что это экстремумы. Каждый сам может пытаться подобрать параметры под себе т.к. нижние границы очень дискусионные. К примеру 500 строк кода в классе, вполне обычное и нормальное явление на мой взгляд в большинстве проектов которые я видел.
Здравствуйте, RussianFellow, Вы писали:
RF>Но меня просто интересует эта тема.
Интересоваться надо не говнокодом, а хорошим кодом. Писать говнокод усилий не нужно, оно по дефолту есть в любом программисте. А вот писать хороший код — это надо учиться и заставлять себя. «Отстранитесь от зла, научитесь добру» — злу учиться не надо, оно и так в нас. А вот доброму коду надо учиться.
Здравствуйте, RussianFellow, Вы писали:
RF>P.S. И могли бы вы, уважаемые коллеги, привести пример говнокода или дать ссылки на него? http://rsdn.org/forum/mfc/6889209.1
1) Вся логика в обработчике кнопки, нарушение Single Responsibility Principle. Разбивать на мелкие функции с определенной ответственностью по любому, чтение файла — отдельная функция должна быть. В самой логике не должно быть никаких ссылок на UI диалоги и тому подобное, соответственно это еще кандидат на функцию. Всякие сложные инициализации и т.д — снова функции должны быть. А тут вообще полная каша, хоть и типичная для студентов первого курса;
3) Имена переменных объявлены не ближе к использованию, а в начале файла. Это крайне хреновая практика, вообще то;
4) magic numbers — хардкод имени файла в коде, какие то непонятные константы 60 и 48.
Пока хватит. После привидения в читаемый вид можно дальше смотреть.
Здравствуйте, 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>Ни разу не видел, чтобы увольняли за говнокод. Оно и понятно, оставить пришлось бы одного меня, а всех остальных уволить. А я один, на все проекты меня не хватит.
А вот Ночной Смотрящий говорит, что в его организации увольняли за говнокод. Что это за организация такая, интересно?
Засилье SOLID в конторе зачастую говорит о том, что там работают свидетели определённой секты, которые пишут тот ещё говнокод, хоть и по определённым принципам. Думаю, не далеко то время, когда от SOLID останется одна только первая буква S, а остальные буквы будут выкинуты на помойку.
Здравствуйте, De-Bill, Вы писали:
R>>признак сложности это отсутствие SOLID
DB>Засилье SOLID в конторе зачастую говорит о том, что там работают свидетели определённой секты, которые пишут тот ещё говнокод, хоть и по определённым принципам. Думаю, не далеко то время, когда от SOLID останется одна только первая буква S, а остальные буквы будут выкинуты на помойку.
А жаль, хорошая аббревиатура, говорящая, позволяет отличить твёрдый от жидкого.
Здравствуйте, RussianFellow, Вы писали:
RF>Что является говнокодом? Каковы его критерии?
Любой код, только что написанный. RF>Как часто встречается говнокод в вашей практике? Много ли говнокодеров вы встречали?
Много. RF>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?
Им платят зарплату. RF>И как исправлять говнокод на нормально смотрящийся код?
Перечитывать, думать о нём, переписывать. Если код писать только один раз и потом к нему не возвращаться, он будет говно-кодом по определению.
Здравствуйте, Amon_RA, Вы писали:
A_R>Это когда открыв один единственный файл из проекта не в IDE, а в блокноте, ты не можешь понять, что это вообще такое и зачем это надо
Например ffplay.
Что делает? Проигрывает видео, аудио и показывает субтитры из файлов или по сети. Практически образец использования практически самой популярной в мире библиотеки (ffmpeg). Кроссплатформенная.
Что там есть? Там есть многопоточность, потокобезовасные очереди, C-style ООП. Вроде как всё круто. По описанию на говнокод не похоже.
Можно ли понять, что делает программа по листингу? Мне кажется что да, всё неплохо структурировано.
Оно работает? Да, безусловно. Причём на куче различных платформ.
По данному критерию, это не говнокод.
Но!
Но 62 goto в одном файле, некоторые из них служат для обработки ошибок. Но есть несколько и для реализации логики.
Но 3743 строк в одном файле.
Но около 50 глобальных переменных (по факту больше, ещё в cmdutils несколько).
Разобраться в деталях логики бывает ну очень сложно.
Получается всё таки говнокод.
Или нет? Думаю, что твой критерий неверен.
A_R>Исправлять? Думается, что никак. Переименовать классы и переменные и привести к единому стилю — этого мало. В говнокоде зависимости и сама архитектура тоже говенные. А это уже просто так не исправить. A_R>Аккуратность надо в себе воспитывать с самого начала.
Тут тоже не согласен. Возьмём этот же пример с ffplay. Очевидно, что можно разнести классы с методами (по факту структуры с функциями, принимающими первыми параметрами указатель на себя) по разным файлам, убрать глобальные переменные, убрать goto-логику и получится отличный код. Повторюсь, что он отлично структурирован логически, простейшее ООП в самописном виде тут помогает.
Так что исправлять можно и нужно.
Здравствуйте, Слава, Вы писали:
С>Здравствуйте, Iron Monkey, Вы писали:
IM>>Роман, тебя же вроде за говнокод и уволили?
С>Обобщая — за говнокод еще никого и никогда не увольняли.
Здравствуйте, RussianFellow, Вы писали:
RF>Здравствуйте, koenig, Вы писали:
С>>>Обобщая — за говнокод еще никого и никогда не увольняли.
K>>знаю исключения
RF>Не могли бы Вы рассказать про эти случаи?
Здравствуйте, RussianFellow, Вы писали:
RF>Здравствуйте, koenig, Вы писали:
RF>>>Не могли бы Вы рассказать про эти случаи?
K>>считаю, это было бы неэтично с моей стороны
RF>А в личку не могли бы сбросить мне рассказ об этом?
я бы и при личной встрече деталей не выдал бы
нехорошо так с коллегами поступать
Здравствуйте, koenig, Вы писали:
RF>>А в личку не могли бы сбросить мне рассказ об этом?
K>я бы и при личной встрече деталей не выдал бы K>нехорошо так с коллегами поступать