Пикабу!
Чужой код
1way2pray, 9 марта 2018
Меня недавно спросили, почему программисты ненавидят работать с чужим кодом. Долго думал, как донести до обычного пользователя всю суть пиздеца. Решил привести небольшую аналогию:
Вот представь, что тебе доверили достроить за другим прорабом лабораторию на острове. Ты приходишь на объект, а там кроме недостроенного здания: огромный вентилятор (размером со здание), большой воздушный шар и комната набитая швабрами. Почесав голову, ты разбираешь этот хлам и доделываешь лабораторию. Сдаешь объект ученным, но через 5 минут они выбегают с криком: "УТЕЧКА ЯДОВИТОГО ГАЗА!!!".
- Как так-то, блять! Должно же работать! - в отчаянии кричишь ты и звонишь прошлому прорабу:
- Вася, у нас ядовитый газ потёк! В чем проблема?
- Не знаю, должно было все работать. Что-то в проекте менял?
- Немного, швабры вынес...
- Швабры потолок держали!
- Что??? Что, блять, извините???
- Говорю, швабры потолок держали. Над ними цистерны с газом были. Очень тяжелые, пришлось в комнату снизу швабры напихать.
- Ты хотя бы записку на двери повесил бы, что швабры для держания потолка! У нас тут ядовитый газ течет! Что нам делать?
- Включай вентилятор. Он сдует газ с острова.
- Я его, блять, демонтировал сразу же!
- Зачем?
- Зачем ты построил 120 тонный вентилятор? Ты не мог положить ящик блядских ПРОТИВОГАЗОВ?
- Ящик противогазов искать нужно, а вентилятор у меня с прошлого заказа оставался.
- Вася, я убрал твой вентилятор! Мы тут задыхаемся!
- Херли вы тогда там делаете? Садитесь на воздушный шар и уебывайте!
Пишите код так, словно поддерживать его будет психопат со склонностью к насилию, который знает где вы живёте. (с) не моё
Ну ещё проблема говнокода в времени исполнения.
Когда пишете небольшую программу или плагин, то ничего страшного.
А вот если вы пишете ОС...
Ну ещё проблема говнокода в времени исполнения.
Отнюдь. Не знаю, байка или нет, в кодах не ковырялся. Но поговаривают, что код того самого первого Quake - говнокод адовый, использующий массу недокументированных возможностей, с кучей асм-вставок и от того такой производительный (для того времени).
Да я знаю, что это такое. У меня товарищ микроконтроллеры программирует, причём давно, с тех времён, когда за каждый битик борьба шла. Вот у него говнокод - всем говнокодам говнокод был. При этом оправданный.
А вот если даже программа "летает" и всё делает правильно, но для малейшего изменения требуется потратить кучу времени на разбор "спагетти" или если маленькое некритичное изменение вдруг рушит главный алгоритм, то это говнокод.
Ну и бывают ситуации когда говнопрограмма написана говнокодом.
Я вам не противоречу. Неоптимальное время и алгоритмы работы это тоже говнокод.
То что не работает, это просто недописаный/неправильный код. Говнокод - это по определёнию уже что-то рабочее.
Ну, на самом деле названия на транслите - это далеко не самое худшее, что можно сделать. В данном случае, имя функция типа OchistitKorziny будет куда лучше названия Ap, так как отражает суть и можно понять что там происходит.
Помню писал РПГ игру, и там из трупа персонажей выпадали мешки (класс Meshok) с лутом. Поле, хранящее коллекцию с мешками, я назвал Meshoks, так как коллекцию принято называть на английском языке во множественном числе.
На код ревью коллеги над этим ржали больше, чем от того, что я использовал транслит.
Сейчас работаю, у нас в конторе даже комментарии и коммиты на английском языке.
а я столкнулся с обратной проблемой:)) пришел в контору разбирать кучу легаси и понял что от адового трехэтажного кэмелкейса у меня мозг взрывается. было условно два листинга под 30к строк каждый первый я разбирал с неделю, второй наученный горьким опытом прогнал через свой тутже накорябаный обфускатор (имена функций, переменных обезличил) и разобрал за два дня
правда стоит упомянуть, что автор был фанатом многовложенных шортхэндов типа если?истина:если?если?истина:ложь:ложь и эти условия местами были просто километровыми
Очень просто. Тот код, который написал ты - это работающий код. Чужой код, с которым тебе приходится разбираться - это говнокод.
Поддержкой и внесением изменений )
Если брать абстрактную задачу в вакууме - то говнокод мало чем будет отличаться от идеально вылизанного кода, потому что они оба будут выполнять свою задачу.
Но проблемы начинаются, когда нужно что то изменить или добавить функционал.
На идеальный код уйдёт минимально возможное время
На говнокод... Нуу. Есть шанс, что его придётся переписывать вообще заново.
Ну много абстрактных критериев, навскидку:
- условия работы, нормальный код просто работает, говнокод может требовать особых манипуляций;
- особенности логики, просто работающий код относительно легко можно корректировать, конечно степень корректировки сильно зависит от задачи которую решает код;
- комментарии, зачастую нет ни времени ни желания копаться в коде, коменты в нужном месте очень помогают читать код по диагонали.
- форматирование кода, следование стандартам написания кода сильно повышает читаемость.
Но это все мое субъективное имхо
Говнокод обычно возникает когда бизнесу нужен срочно результат. А т.к. работа программистом это выполнение задач бизнеса в текущий момент, то и возникает явление говнокода. Можно сделать правильно за 3 дня, а можно "чтоб работало" за час, для бизнеса в большинстве случаев второй вариант наиболее приемлем. Мне кажется, что использование слова "говнокод" уже потеряло актуальность, т.к. почти везде есть хорошие спецы и херовые решения правильнее называть "технический долг который не будет исправлен". Мой опус про старый добрый энтерпрайз.
Ха. Вот 1С-ники вообще всегда только так и работают. Раньше - только "конечные", которые внедряют "на земле". А в последнее время, и центровая 1С тоже перешла на такую модель, судя по качеству обновлений конф.
был другой разраб, очень любил все делать ну очень усложняя код, простые вещи решал через нагромождение классов, методов и сотен проверок по поводу и без. Красиво, но поддерживат невозможно. Пока поймешь его задумку... поправишь, а стрельнет в другом месте...
ну ты не прав :)) просто есть программисты, которые умеют в хороший код, а есть которые пишуть только говнокод, самоучки, лентяи и иже с ними. Любой программист может родить говнокод, а вот хороший читабельный и легко поддерживаемый далеко не каждый
Кстати нормальная практика , как говорят, если через год ты заглянул в свой код и он показался тебе идеальным то надо что-то менять потому что ты не растешь. Тоже из опыта есть херово написанные и есть идеальные (на самом деле нет) все более менее работающее и приносящее деньги посередине
Нередко ноги говнокода растут из полного непонимания заказчиком сути происходящего и постоянных смен ориентиров. Каждый день прилетают противоречащие друг другу установки, и как всегда быстро срочно. Ты ВЫНУЖДЕН лепить кучки говна одну над другой, и сбоку, и ессно швабрами это удерживать на весу.
Ну и, конечно, устаешь от такого скотского отношения к коду, и от невозможности что то изменить. Раз в квартал начинать с чистого листа бесплатно - тяжело.
А потом бах - и вдруг ты 1Сник, и все в порядке.
Такое явление присутствует в следствии того, что на рынке недостаток хороших программистов. Если бы был избыток, то качество кода было б одним из основных требований.
Причин много. Основная - заказчикам плевать на качество кода. Они не готовы за него платить. Работает - в прод. Ну и рукожопов никто не отменял. Да и на любом рынке всегда есть недостаток хороших спецов.
Ещё ухудшает ситуацию когда заказчику нужен был результат ещё вчера и приходится на костылях строить машину времени чтобы всё успеть, а в будущем может кто-то приберёт этот код (нет)
Кстати да, вот есть понимание ущербности выбранного пути, но нормально сделать попросту нет времени, и делаешь что успеешь.
- Зачем ты построил 120 тонный вентилятор? Ты не мог положить ящик блядских ПРОТИВОГАЗОВ?
- Ящик противогазов искать нужно, а вентилятор у меня с прошлого заказа оставался.
О, господи, это пять! xD
Чувак. Представь, что тебе после того как поссал, требовалось бы 45 минут стряхивать.
И вот ты вроде знаешь что тебе делать, но либо спешишь, либо лень стоять член теребить и капельки выдавливать. И ты суешь его в трусы и от тебя потом мочой несёт. И какой-нибудь KingHawkins тебе на улице подходит и говорит, что как программист в твоём комменте и не умеешь стряхивать совсем.
Скриншоты комментов
55.7K постов39.8K подписчика
Правила сообщества
В сообществе можно размещать ЛЮБЫЕ скрины (комментов) с любого сайта!!
ПРИКРЕПИТЬ ССЫЛКУ НА КОМЕНТ ЕСЛИ ОН С Пикабу желательно, но не обязательно!!!
Если скрин не с пикабу, а со стороннего сайта( Твиттер,. Вк, Одноклассники и т.д.) то ссылка не обязательна.
Для сообщества подходит любой скрин, набранный на клавиатуре, даже если это не диалог (под вид Твита) Так же подходит скрин с картинкой и хотя бы одним комментарием под ним, с любого источника.