LINUX.ORG.RU

Как не говнокодить?

 ,


0

1

Приветствую!

Часто ищя решения какой-нибудь задачи я натыкаюсь на обсуждения, что это так называемый говнокод и поставленную задачу можно решить другим способом. Как правило такой код вполне рабочий, но к нему возникают такого рода предъявы. Почему так происходит и как этого избежать, может какие-нибудь рекомендации?


Ответ на: комментарий от vaddd

Задача могла быть решена на 0.1% а код может быть хорошим, потому, что легко и дёшего дорабатывается.

А можно закрыть все потребности говнокодом, который решает задачу на 100%, но как только через N времени появится новая потребность в расширении, проще будет просто отказаться от такой работы.

system-root ★★★★★ ()
Ответ на: комментарий от vaddd

Чтобы решить не поставленную задачу. Такие авторы считают, что постановка задачи - лишний этап. Даже на лоре таких полно. Как ты оцениваешь такой код?

legolegs ★★★★★ ()
  1. Внимательно читать документацию. Обычно претензии бывают, когда что-то делается стандартной функцией в 1-2 строчки, а ты изобретаешь велосипед на 100

  2. Дыры в безопасности. Например, твой код сломается, когда встретит в каталоге имя файла с пробелом.

  3. Писать на bash что-то длиннее сотни строк (автогенерированный код не считается, как и приклеенный к скрипту блоб). В 99% случаев это значит, что надо взять другой язык.

  4. Вкусовщина. Всегда найдётся кто-нибудь, кто назовёт тебя быдлокодером, какой бы ты код не написал. Не стоит принимать всё слишком близко к сердцу.

KivApple ★★★★★ ()
Ответ на: комментарий от legolegs

Чтобы решить не поставленную задачу.

То есть задача все равно сформулирована? Отсутствие приказа на исполнение не означает отсутствия задачи.

vaddd ★★ ()
Ответ на: комментарий от system-root

А можно закрыть все потребности говнокодом, который решает задачу на 100%, но как только через N времени появится новая потребность в расширении, проще будет просто отказаться от такой работы.

Ну и отлично. Раз не было задачи сделать программу, которая будет поддереживаться внуками через полвека, значит в этом не было и смысла. То, что вы назвали говнокодом - свою задачу успешно выполнило и было отправлено в утиль, как и любой другой устаревший продукт. Если бы кому-то понадобилось расширение через N времени - это входило бы в условия задачи.

vaddd ★★ ()

Уменее писать без говнокода придёт само со временем. Может быть конечно зависит от сферы и специализации, но кажется такое умение приходит лет через 10 постоянной практики.

Ну и еще придёт умение отсеивать критику тех кто сам ничего не умеет кроме критики, это как люди которые не могут читать смысл написанного если видят ошибки в русском языке - у них включается подпрограмма придирок к грамотности, и если человек не грамотен - они не могут увидеть его мысль, и даже допустить что она есть :)

Некоторые программисты тоже через такое проходят - им можно дать гениально подобранный для конкретной задачи алгоритм -но реализованные не оптимально и на древнем стандарте их яп. В итоге опытный прогер увидит прежде всего решение задачи и восхитится кодом, а всякие миддло-джуны начнут стебать про то что так уже никто не пишет и вообще не оптимально, а то как искуссно решена задача даже не поймут, и если им дать с нуля реализовывать - они напишут топорно, но зато используя все няшные плюшки :)

bonta ★★★★ ()
Последнее исправление: bonta (всего исправлений: 1)
Ответ на: комментарий от vaddd

Поддерживаю. В моей практике приходилось десятки раз писать сугубо одноразовые скрипты, потому что такой задачи больше нигде и никогда не встретится. И как бы они ни были написаны — если решили задачу, они хорошие. Но людям я бы их не показывал :)

massimus ★★★ ()

Есть два стула вида разработчиков, которые:

  1. Участвуют в конкурсе красоты исходников и не стремяться выпустить работающий продукт. В худшем варианте это сродни ОКР. Им важнее, чтобы все было канонично, «правильно».

  2. Херачат решение и дорабатывают в процессе эволюции требований к реализации. Они знают недостатки текущего решения и осознают, как это может стрельнуть в ногу в будущем, поэтому оставляют подсказки себе и коллегам.

Также, есть два вида «ревьюверов», которые:

  1. Хейтят чужое ради повышения ЧСВ. Обычно это люди, которые хейтят не только чужой код, но и жалуются на жизнь: считают, что происходящее с ними дерьмо находится в зоне ответственности других людей. Их много. Воспитание-с.

  2. Укажут на недостатки (кто-то резко, кто-то мягко) и посоветуют как исправить. Или же, увидев подсказки, поймут «что хотел сказать автор».

Рекомендация одна: насрать на окружающих, делать, анализировать результаты и стремиться быть лучше.

lx1 ()
Последнее исправление: lx1 (всего исправлений: 1)
Ответ на: комментарий от vaddd

Приходит человек на ЛОР и пишет «я хочу сделать так <код> а у меня неполучается». На вопрос какая решается задача невнятно мычит или уитирует анекдот про американский, еврейский и русский форумы

legolegs ★★★★★ ()
Ответ на: комментарий от legolegs

Это почти всегда связано с тем, что он знает, что ему наверняка напишут, что решать надо не так, не тут, и вообще он безграмотный козел. То есть таки да, русский форум. А «говнокод» - это понятие не из этого примера. Говнокод - это код работающий, но почему-либо не нравящийся комментатору.

vaddd ★★ ()
Ответ на: комментарий от vaddd

он знает, что ему наверняка напишут, что решать надо не так, не тут

ЧСХ именно так дело обычно и обстоит.

Говнокод - это код работающий

Какие интересные определения.

А если код оаботает, но только не в феврале, это уже не говнокод?

legolegs ★★★★★ ()
Ответ на: комментарий от legolegs

Какие интересные определения.

это не жесткое определение, его можно корректировать )

он знает, что ему наверняка напишут, что решать надо не так, не тут

ЧСХ именно так дело обычно и обстоит.

Ну зачастую это правильные советы. Во многих случаях люди выбирают очевидно неверные пути и тут уже качество кода вторично )

vaddd ★★ ()
Последнее исправление: vaddd (всего исправлений: 1)
Ответ на: комментарий от legolegs

Нет. Человек может пытаться форсировать реку и спрашивать/искать для этого подходящие средства, а окружающим будет очевидно, что для достижения конечного пункта совсем не нужно перебираться на тот берег, а достаточно немного пройти по берегу. Это и подразумевается под выбранным путем.

vaddd ★★ ()
Ответ на: комментарий от vaddd

Попытка форсировать реку путём накидывания в неё тысячи тонн старых покрышек с целью прошагать по ним не замочив ног - это и будет примером говнокода в данной аналогии. Только в реальности так тупо никто не делает, а в айти - регуляно.

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от vaddd

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

Однако такое бывает в двух случаях. Если отвечающий намного глупее/неопытнее вопрошающего и не понимает, зачем делать именно «так». Или если отвечающий намного опытнее и уже точно знает, что делать «так» - бесполезно.

В первом случае комментарии можно просто проигнорировать. А во втором очень полезно прислушаться.

Так что рассказывать о своих мотивах и задачах всё же стоит.

wandrien ()
Ответ на: комментарий от legolegs

Если у вас под руками тысяча тонн старых покрышек, самосвал и вам так проще - это вполне себе решение. Хоть эстеты и брезгливо зажмут носик )

Только в реальности так тупо никто не делает, а в айти - регулярно.

Ну и пусть делают. Задачу решили, реку форсировали? Что еще?

vaddd ★★ ()
Ответ на: комментарий от wandrien

Так что рассказывать о своих мотивах и задачах всё же стоит.

В части случаев - несомненно. А в остальной части спрашиваюший может вообще не знать задачи целиком или быть не в силах повлиять на выбор пути решения. Например когда это исполнитель со своим маленьким кусочком большей задачи. Или когда это учебный процесс с полубессмысленными упражнениями )

vaddd ★★ ()
Ответ на: комментарий от vaddd

Он запнётся об дырку в покрышке, упадет и сломает ногу. Реке тоже поплохеет.

Говнокод характерен тем, что не учитывает возможность что что-то пойдет не так (сломается нога) и последствия для окружения (расточительная трата или даже уничтожение ценных ресурсов).

legolegs ★★★★★ ()
Ответ на: комментарий от vaddd

Например когда это исполнитель со своим маленьким кусочком большей задачи.

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

когда это учебный процесс с полубессмысленными упражнениями )

Если ленивый школяр пытается выдать задачку из универа за бизнес-case и жалко фейлится да еще и на фоне своего говнокода и ему в треде насовывают полную панаму пенисов - так и поделом.

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Он запнётся об дырку в покрышке, упадет и сломает ногу

Для этого сушествуют люди, отвечающие за технику безопасности при выполнении работ. Программер отвечает за кодинг.

Реке тоже поплохеет.

Для этого есть люди, отвечающие за экологию. Прогрммер отвечает за кодинг.

Говнокод характерен тем, что не учитывает возможность что что-то пойдет не так (сломается нога) и последствия для окружения (расточительная трата или даже уничтожение ценных ресурсов).

В задачи программиста не входит ни охрана окружающей среды, ни обеспечение безопасности, ни охрана здания, ни вынос мусора. Если программер вместо быстрого и четкого выполнения поставленной задачи пытается отвечать за все вокруг - его нужно либо гнать в три шеи, либо делать генеральным директором.

vaddd ★★ ()
Ответ на: комментарий от crutch_master

Закопать на полгода, откопать, попробовать разобраться.

ИМХО, самый лучший способ. Правда работает он только в том случае, если автор эти полгода развивался, а не промежножья пинал и откопал старый код от скуки.

Oberstserj ★★ ()
Ответ на: комментарий от legolegs

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

А кто это будет решать? Программер? У среднестатистического программера кругозор с дырку от бублика. При постановке же ему задач другие люди учитывают кучу технических, менеджерских, финансовых и прочих условий. Так что как и положено, программер со своими представлениями о прекрасном и о говнокоде останется ограниченным мечтательным подростком.

Если ленивый школяр пытается выдать задачку из универа за бизнес-case и жалко фейлится да еще и на фоне своего говнокода и ему в треде насовывают полную панаму пенисов - так и поделом.

Да разве я против? ) Дело вообще не в коде, в любой области жизни большинство задач решается через жопу, а еще немалое количество задач лучше не делать вообще.

vaddd ★★ ()
Ответ на: комментарий от peregrine

Сишка и кресты нет, они ради скорости много говнокода разрешают писать.

<философ_моде_он>

Ежели работает быстро и не жрет ресурсы - говнокод ли?

<философ_моде_офф/>

Oberstserj ★★ ()

Если максимально упростить, то чтобы не писать говнокод, надо стараться писать код так, чтоб посторонний человек (с навыками в программировании ниже среднего) смог в нем разобраться. А в неочевидных местах поможет хорошее комментирование кода.

Все остальное - разговор о моде, красоте и личных эротических фантазиях критикана. В 0,1% критики есть хорошие советы. Но умение их видеть приходит с опытом.

Oberstserj ★★ ()

и как этого избежать

Можно предварительно обсудить варианты решения с коллегами, да. Если им больше заняться нечем, конечно, что вряд ли часто бывает.

Nervous ★★★★★ ()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Oberstserj

Говнокод в первую очередь не про то, как код для машины выглядит, а как для людей.

peregrine ★★★★★ ()
Ответ на: комментарий от dsxl

И что теперь делать?

Вот мы с тобой болтаем сейчас, а я знаю 5 человек которые уже неделю возятся с багом внутри pandas, пытаясь локализовать его и пофиксить. Будет у них теперь свой патч, который не покинет пределов организации из-за дурных правил ИБ.

peregrine ★★★★★ ()
Ответ на: комментарий от lx1

Херачат решение и дорабатывают в процессе эволюции требований к реализации

А потом если решение ответственное на счету в банке исчезает пара нулей и этих разработчиков садят на бутылку в 70 литров без вазелина.

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

Здравый смысл никто не отменял. Все сильно зависит от контекста. Аналогично можно сказать не только про банк, но и аэрокосмическую индустрию или медицину. Но, как показывает опыт, даже в боинге немногот наговнокодили.

Кстати, для меня было открытием, что самолеты апдейтят используя дискеты. Пруф не найду сейчас, предлагаю погуглить. Если вдруг ошибся, поправь меня.

lx1 ()
Ответ на: комментарий от peregrine

Это ж надо! 5 человек за неделю не могут один баг локализовать! Они, видимо, тоже те ещё говнокодеры! Точнее, дата-саентисты, хех.

dsxl ()

bash

говнокод

Всё правильно. Скрипты нужно писать либо на POSIX.1-compatible Shell без экстеншенов и завязки на нестандартных компонентах (не описанных в стандарте POSIX.1), либо отойти от компуктера.

mord0d ★★★★★ ()
Ответ на: комментарий от peregrine

А потом если решение ответственное на счету в банке исчезает пара нулей и этих разработчиков садят на бутылку в 70 литров без вазелина.

Очень страшное кино - N. Не садят. Кодеры не несут ни материальной, ни какой-либо иной ответственности за случайные ошибки, кроме как в пределах законодательства о труде. Отвечает, если это предусмотрено в контракте, вся фирма-изготовитель как юридическое лицо. И ни на кого она ответственность за ошибки в организации работ переложить не сможет.

vaddd ★★ ()
Ответ на: комментарий от dsxl

Другими словами, вместо изобретения велосипеда и его болезненной отладки нужно потратить время, чтобы научиться пользоваться существующими библиотеками, которые поддерживаются сообществом и уже оттестированы.

Примеры типичного говнокодинга обычно включают задачи, которые в любом современном языке уже решены «из коробки»: парсинг csv, xml, json, поиск файлов по вайлдкардам (wildcards) и т.д. и т.п.

+1

Harliff ★★★★★ ()
Ответ на: комментарий от mord0d

POSIX.1-compatible Shell

Плавали — знаем.

Всё правильно. Скрипты нужно писать либо на POSIX.1-compatible Shell без экстеншенов и завязки на нестандартных компонентах (не описанных в стандарте POSIX.1), либо отойти от компуктера.

Не вопрос, напишем. Цена вопроса?

wandrien ()
Ответ на: комментарий от peregrine

Во-первых, на бутылку будут сажать начальника, а не кодера, о существовании которого никто не знает. Во-вторых, и начальника тоже не будут сажать - это никому не нужно. Банки не заключают подобные контракты на критичный для безопасности софт с неизвестными фирмами, а только с проверенными, имеющими опыт, репутацию и запас бабла для ответственности. И поэтому любые проблемы будут разрулены в рамках контракта. Приставать же к низшему говнокодеру с претензиями о работе всего продукта, требованиями ответить и сажанием на бутылки - смешнее и глупее не придумаешь.

vaddd ★★ ()
Ответ на: комментарий от peregrine

Переход на личности? От человека с таким перечнем претензий к людям в профиле ожидал более цивилизованного общения, я разочарован.

Ну ок, как ты определяешь, что человек не программист? Если может решить задачу быстрее, чем за 40 человеко-часов, – значит не программист?

Как в том анекдоте.
– За сколько сделаешь?
– За день.
– А за неделю?
– За неделю самому не справиться, тут помощник нужен.

dsxl ()
Последнее исправление: dsxl (всего исправлений: 1)

Как не говнокодить?

А ты себя сдерживай.

slackwarrior ★★★★★ ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей