Говнокод
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 15.01.18 07:26
Оценка: 12 (1) :)))
В этой теме, уважаемые коллеги. я хотел бы обсудить такое понятие, как говнокод.

Что является говнокодом? Каковы его критерии?
Как часто встречается говнокод в вашей практике? Много ли говнокодеров вы встречали?
Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?

И как исправлять говнокод на нормально смотрящийся код?
1613 г. = 2024 г.
Re: Говнокод
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 15.01.18 07:27
Оценка:
P.S. И могли бы вы, уважаемые коллеги, привести пример говнокода или дать ссылки на него?
1613 г. = 2024 г.
Re[2]: Говнокод
От: reversecode google
Дата: 15.01.18 07:29
Оценка: 6 (1)
http://govnokod.ru/cpp
Re[2]: Говнокод
От: hi_octane Беларусь  
Дата: 15.01.18 09:04
Оценка:
RF>P.S. И могли бы вы, уважаемые коллеги, привести пример говнокода или дать ссылки на него?
Для меня эталоном действующего C++ говонокода является сорец игры "ЩИ!!!Симулятор жестокости". О самой игре с комментариями автора и заинтересованных лиц можно почитать на gamedev.ru, а тут мемуары автора: "Щи: симулятор жестокости" или "Как не надо делать игры" — в которых автор по шагам описывает как доводил игру до рабочего состояния а её код до уровня "Щи!!!".
Re: Говнокод
От: De-Bill  
Дата: 15.01.18 09:19
Оценка: 13 (2) +11 :))) :))) :))) :))) :))
RF>Что является говнокодом? Каковы его критерии?

Единственный критерий: всё, что писал не я — говнокод. Мой код всегда восхитителен.

RF>Как часто встречается говнокод в вашей практике? Много ли говнокодеров вы встречали?


Встречается всегда и везде, кроме проектов, над которыми работал я один.

RF>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?


Ни разу не видел, чтобы увольняли за говнокод. Оно и понятно, оставить пришлось бы одного меня, а всех остальных уволить. А я один, на все проекты меня не хватит.

RF>И как исправлять говнокод на нормально смотрящийся код?


Исправить могу только я. Остальные сколько не будут исправлять говнокод — он говнокодом и останется.
Re[3]: Говнокод
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.01.18 10:38
Оценка: 5 (1) +2
Здравствуйте, hi_octane, Вы писали:

_>Для меня эталоном действующего C++ говонокода является [url=https://gist.github.com/ForNeVeR/9001938]сорец игры "ЩИ!!!


Была в свое время популярна такая система контроля версий, как CVS. Собственно, git в те времена был еще не только не написан, но даже и не придуман, а авторы SVN еще не родились.

Я как-то полез в ее исходники с мыслью, а не сделать ли бы мне так, чтобы она текстовые файлы на венде автоматически раскладывал по-вендовому (в смысле концов строк), а на юниксе и на сервере — по-юниксовски.

Наивный, я думал, что сейчас без труда найду те места, где они собственно с файлами и работают, и слегка их подправлю. Большего говнокода я в жизни своей не видел (вернее, потом видел, но под подпиской о неразглашении, и не могу о нем говорить). Там работа с файлами встречается в миллионе мест, все размазано тонким слоем по всем исходникам, и с какой целью написан вот именно этот fopen(), понять совершенно невозможно. Протрахавшись несколько дней, я сдался.
Re[2]: Говнокод
От: AleksandrN Россия  
Дата: 15.01.18 10:57
Оценка: +1
Здравствуйте, De-Bill, Вы писали:

RF>>Что является говнокодом? Каковы его критерии?


DB>Единственный критерий: всё, что писал не я — говнокод. Мой код всегда восхитителен.


А то, что писал ты, но года 2-3 назад?
Re[2]: Говнокод
От: yenik  
Дата: 15.01.18 11:00
Оценка: +5 :)
DB>Единственный критерий: всё, что писал не я — говнокод. Мой код всегда восхитителен.

Кроме случаев, когда я уже забыл, что это мой код.
Re: Говнокод
От: Tourist Россия  
Дата: 15.01.18 11:10
Оценка: +3
Здравствуйте, RussianFellow, Вы писали:

RF>Что является говнокодом? Каковы его критерии?


для меня такие критерии

* куча мертвого кода (ну скажем от 10% от всего кода)
* безумный copy-past (10 и больше копий одного и того же кода)
* классы по 5000 и больше строк кода
* безумные if-else конструкции(пять и больше уровней вложенности)
* нету единого стиля (один класс могут использоваться как отсупы 4 проблема, 4 таба, 2 таба, без отступов вообще).
* не явные контракты у API о том как этот API можно использовать. Множество side-эффектов при вызове разных методов.
Re[3]: Говнокод
От: Stanislaw K СССР  
Дата: 15.01.18 11:17
Оценка: :)
Здравствуйте, AleksandrN, Вы писали:

DB>>Единственный критерий: всё, что писал не я — говнокод. Мой код всегда восхитителен.


AN>А то, что писал ты, но года 2-3 назад?


Это враги исправили испортили но оставили мой копирайт.
Все проблемы от жадности и глупости
Re[2]: Говнокод
От: elmal  
Дата: 15.01.18 11:19
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>P.S. И могли бы вы, уважаемые коллеги, привести пример говнокода или дать ссылки на него?

http://rsdn.org/forum/mfc/6889209.1
Автор: RussianFellow
Дата: 30.08.17

1) Вся логика в обработчике кнопки, нарушение Single Responsibility Principle. Разбивать на мелкие функции с определенной ответственностью по любому, чтение файла — отдельная функция должна быть. В самой логике не должно быть никаких ссылок на UI диалоги и тому подобное, соответственно это еще кандидат на функцию. Всякие сложные инициализации и т.д — снова функции должны быть. А тут вообще полная каша, хоть и типичная для студентов первого курса;
3) Имена переменных объявлены не ближе к использованию, а в начале файла. Это крайне хреновая практика, вообще то;
4) magic numbers — хардкод имени файла в коде, какие то непонятные константы 60 и 48.

Пока хватит. После привидения в читаемый вид можно дальше смотреть.
Re[3]: Говнокод
От: koenig  
Дата: 15.01.18 12:34
Оценка:
Здравствуйте, elmal, Вы писали:

E>Пока хватит. После привидения в читаемый вид можно дальше смотреть.


сходил по ссылке, понастальгировал, спасибо
Re: Говнокод
От: Amon_RA Россия  
Дата: 15.01.18 13:18
Оценка: +2
Здравствуйте, RussianFellow, Вы писали:

RF>Что является говнокодом? Каковы его критерии?


Это когда открыв один единственный файл из проекта не в IDE, а в блокноте, ты не можешь понять, что это вообще такое и зачем это надо

RF>И как исправлять говнокод на нормально смотрящийся код?


Исправлять? Думается, что никак. Переименовать классы и переменные и привести к единому стилю — этого мало. В говнокоде зависимости и сама архитектура тоже говенные. А это уже просто так не исправить.
Аккуратность надо в себе воспитывать с самого начала.
Re: Говнокод
От: mgu  
Дата: 15.01.18 23:36
Оценка: +1
Здравствуйте, RussianFellow, Вы писали:

RF>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?


Вот здесь всё прекрасно изложено:

О говнокодерах
Re[2]: Говнокод
От: Gradiens  
Дата: 16.01.18 09:16
Оценка:
Здравствуйте, 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 строк уже смердят, но, может, я слишком нежный ))
Re: Говнокод
От: reversecode google
Дата: 16.01.18 09:54
Оценка:
говнокод — когда в коде сложно разобраться
признак сложности это отсутствие SOLID
Re[2]: Говнокод
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 16.01.18 09:55
Оценка:
Здравствуйте, reversecode, Вы писали:


R>говнокод — когда в коде сложно разобраться

R>признак сложности это отсутствие SOLID

А что такое SOLID ?
1613 г. = 2024 г.
Re[2]: Говнокод
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 16.01.18 09:59
Оценка:
Здравствуйте, De-Bill, Вы писали:

RF>>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?


DB>Ни разу не видел, чтобы увольняли за говнокод. Оно и понятно, оставить пришлось бы одного меня, а всех остальных уволить. А я один, на все проекты меня не хватит.


А вот Ночной Смотрящий говорит, что в его организации увольняли за говнокод. Что это за организация такая, интересно?
1613 г. = 2024 г.
Re[3]: Говнокод
От: reversecode google
Дата: 16.01.18 10:08
Оценка:
правила рекомендующие разделять мух от котлет
Re[3]: Говнокод
От: Tourist Россия  
Дата: 16.01.18 10:16
Оценка: +1
Здравствуйте, Gradiens, Вы писали:

G>Какие-то мягкие критерии.

G>Я бы сказал, что более 2-х копипаст и классы больше 500 строк уже смердят, но, может, я слишком нежный ))

Можно сказать, что это экстремумы. Каждый сам может пытаться подобрать параметры под себе т.к. нижние границы очень дискусионные. К примеру 500 строк кода в классе, вполне обычное и нормальное явление на мой взгляд в большинстве проектов которые я видел.
Re[2]: Говнокод
От: De-Bill  
Дата: 16.01.18 11:09
Оценка:
R>признак сложности это отсутствие SOLID

Засилье SOLID в конторе зачастую говорит о том, что там работают свидетели определённой секты, которые пишут тот ещё говнокод, хоть и по определённым принципам. Думаю, не далеко то время, когда от SOLID останется одна только первая буква S, а остальные буквы будут выкинуты на помойку.
Re[3]: Говнокод
От: mgu  
Дата: 16.01.18 23:46
Оценка:
Здравствуйте, De-Bill, Вы писали:

R>>признак сложности это отсутствие SOLID


DB>Засилье SOLID в конторе зачастую говорит о том, что там работают свидетели определённой секты, которые пишут тот ещё говнокод, хоть и по определённым принципам. Думаю, не далеко то время, когда от SOLID останется одна только первая буква S, а остальные буквы будут выкинуты на помойку.


А жаль, хорошая аббревиатура, говорящая, позволяет отличить твёрдый от жидкого.
Re: Говнокод
От: Iron Monkey  
Дата: 17.01.18 09:32
Оценка:
Роман, тебя же вроде за говнокод и уволили?
Re[2]: Говнокод
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 17.01.18 10:20
Оценка:
Здравствуйте, Iron Monkey, Вы писали:

IM>Роман, тебя же вроде за говнокод и уволили?


Нет, за говнокод меня никогда не увольняли.
Но меня просто интересует эта тема.
1613 г. = 2024 г.
Re[3]: Говнокод
От: Amon_RA Россия  
Дата: 17.01.18 10:28
Оценка: +1
Здравствуйте, RussianFellow, Вы писали:

RF>Но меня просто интересует эта тема.


Интересоваться надо не говнокодом, а хорошим кодом. Писать говнокод усилий не нужно, оно по дефолту есть в любом программисте. А вот писать хороший код — это надо учиться и заставлять себя. «Отстранитесь от зла, научитесь добру» — злу учиться не надо, оно и так в нас. А вот доброму коду надо учиться.
Re: Говнокод
От: Lepsik Индия figvam.ca
Дата: 17.01.18 13:56
Оценка:
RF>Что является говнокодом? Каковы его критерии?

int k =1;
if( k.ToString() == "1" )
{
......
}

RF>И как исправлять говнокод на нормально смотрящийся код?


Полное покрытие unit тестами дисциплинирует в написании качественного — хорошо смотрящего кода.
Re: Говнокод
От: Vladek Россия Github
Дата: 18.01.18 08:27
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Что является говнокодом? Каковы его критерии?

Любой код, только что написанный.
RF>Как часто встречается говнокод в вашей практике? Много ли говнокодеров вы встречали?
Много.
RF>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?
Им платят зарплату.
RF>И как исправлять говнокод на нормально смотрящийся код?
Перечитывать, думать о нём, переписывать. Если код писать только один раз и потом к нему не возвращаться, он будет говно-кодом по определению.
Re: Запахи кода
От: SaZ  
Дата: 18.01.18 10:25
Оценка: 7 (2)
Здравствуйте, RussianFellow, Вы писали:

RF>В этой теме, уважаемые коллеги. я хотел бы обсудить такое понятие, как говнокод.


RF>Что является говнокодом? Каковы его критерии?

RF>Как часто встречается говнокод в вашей практике? Много ли говнокодеров вы встречали?
RF>Что делают на работе с говнокодом и говнокодерами? Увольняют ли говнокодеров? Если да, то как часто такое встречается?

RF>И как исправлять говнокод на нормально смотрящийся код?


Ответы есть тут — Запахи кода
Re[2]: Говнокод
От: GarryIV  
Дата: 18.01.18 10:48
Оценка: +1
Здравствуйте, Lepsik, Вы писали:

L>Полное покрытие unit тестами дисциплинирует в написании качественного — хорошо смотрящего кода.


Оно зачастую приводит к удвоению говнокода.
WBR, Igor Evgrafov
Re[2]: Говнокод
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 18.01.18 14:08
Оценка:
Здравствуйте, Amon_RA, Вы писали:

A_R>Это когда открыв один единственный файл из проекта не в IDE, а в блокноте, ты не можешь понять, что это вообще такое и зачем это надо


Например ffplay.
Что делает? Проигрывает видео, аудио и показывает субтитры из файлов или по сети. Практически образец использования практически самой популярной в мире библиотеки (ffmpeg). Кроссплатформенная.
Что там есть? Там есть многопоточность, потокобезовасные очереди, C-style ООП. Вроде как всё круто. По описанию на говнокод не похоже.

Можно ли понять, что делает программа по листингу? Мне кажется что да, всё неплохо структурировано.
Оно работает? Да, безусловно. Причём на куче различных платформ.

По данному критерию, это не говнокод.

Но!
Но 62 goto в одном файле, некоторые из них служат для обработки ошибок. Но есть несколько и для реализации логики.
Но 3743 строк в одном файле.
Но около 50 глобальных переменных (по факту больше, ещё в cmdutils несколько).
Разобраться в деталях логики бывает ну очень сложно.

Получается всё таки говнокод.

Или нет? Думаю, что твой критерий неверен.

A_R>Исправлять? Думается, что никак. Переименовать классы и переменные и привести к единому стилю — этого мало. В говнокоде зависимости и сама архитектура тоже говенные. А это уже просто так не исправить.

A_R>Аккуратность надо в себе воспитывать с самого начала.

Тут тоже не согласен. Возьмём этот же пример с ffplay. Очевидно, что можно разнести классы с методами (по факту структуры с функциями, принимающими первыми параметрами указатель на себя) по разным файлам, убрать глобальные переменные, убрать goto-логику и получится отличный код. Повторюсь, что он отлично структурирован логически, простейшее ООП в самописном виде тут помогает.
Так что исправлять можно и нужно.
Re[2]: Говнокод
От: Слава  
Дата: 18.01.18 14:25
Оценка:
Здравствуйте, Iron Monkey, Вы писали:

IM>Роман, тебя же вроде за говнокод и уволили?


Обобщая — за говнокод еще никого и никогда не увольняли.
Re[3]: Говнокод
От: koenig  
Дата: 18.01.18 15:05
Оценка:
Здравствуйте, Слава, Вы писали:

С>Здравствуйте, Iron Monkey, Вы писали:


IM>>Роман, тебя же вроде за говнокод и уволили?


С>Обобщая — за говнокод еще никого и никогда не увольняли.


знаю исключения
Re[4]: Говнокод
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 24.01.18 13:15
Оценка:
Здравствуйте, koenig, Вы писали:

С>>Обобщая — за говнокод еще никого и никогда не увольняли.


K>знаю исключения


Не могли бы Вы рассказать про эти случаи?
1613 г. = 2024 г.
Re[5]: Говнокод
От: koenig  
Дата: 24.01.18 13:20
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Здравствуйте, koenig, Вы писали:


С>>>Обобщая — за говнокод еще никого и никогда не увольняли.


K>>знаю исключения


RF>Не могли бы Вы рассказать про эти случаи?


считаю, это было бы неэтично с моей стороны
Re[6]: Говнокод
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 25.01.18 07:57
Оценка:
Здравствуйте, koenig, Вы писали:

RF>>Не могли бы Вы рассказать про эти случаи?


K>считаю, это было бы неэтично с моей стороны


А в личку не могли бы сбросить мне рассказ об этом?
1613 г. = 2024 г.
Re[7]: Говнокод
От: koenig  
Дата: 25.01.18 08:21
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Здравствуйте, koenig, Вы писали:


RF>>>Не могли бы Вы рассказать про эти случаи?


K>>считаю, это было бы неэтично с моей стороны


RF>А в личку не могли бы сбросить мне рассказ об этом?


я бы и при личной встрече деталей не выдал бы
нехорошо так с коллегами поступать
Re[8]: Говнокод
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 25.01.18 08:48
Оценка:
Здравствуйте, koenig, Вы писали:

RF>>А в личку не могли бы сбросить мне рассказ об этом?


K>я бы и при личной встрече деталей не выдал бы

K>нехорошо так с коллегами поступать

Ладно, тогда не надо.
1613 г. = 2024 г.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.