- 1
Как избавиться от говнокода?
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+2
Как избавиться от говнокода?
Вот есть большой проект в большой корпорации. Ты приходишь и видишь, что архитектура говно, комментариев нет, стиль кода различается в разных частях одного файла, да и в остальных мелочах полный говнокод.
С другой стороны, нужно добавить много разных фич и пофиксить баги, все программисты и ты тоже активно заняты этим, вы приделываете новые костыли и заплатки.
Как с этим бороться? Убеждать менеджера, что вам нужно несколько недель, а то и месяцев на полный рефакторинг всего? Заниматься этим в свободное время? Забить и говнокодить дальше? Уйти в другое место (не факт ведь, что там будет лучше)?
потом кто-то устроит деградацию, и тимлид будет лазить по дереву версий, чтобы понять, кому дать по рогам
каково же будет его удовольствие, когда это дерево будет заполнено добавлениями пробелов для красоты (ок, в diff это можно отключить) и комментариев // if a equals 2 then continue execution in the then block
> Вести документацию проекта
документация убивает сакральную составляющую проекта
ничто не сравнится с этим трепетным чувством, когда ты подходишь к седовласому архитектору и смиренно спрашиваешь, по кой, собственно, хуй, тут используется ржавый велосипед вместо одного BLAS вызова, а он достаёт из-под стола коробку из-под ботинок и роется в отпечатанных на истлевшей перфорированной бумаге листингах, исписанных химическим карандашом
trust is a weakness
Ну, что б все! (с) Шариков
Это точно не прокатит, будет только хуже, не зависимо от того, одобрят или нет.
> Заниматься этим в свободное время?
Плохо - выгоришь и забьёшь.
> Забить и говнокодить дальше?
Вариант, но чувство безысходности начнёт посещать всё чаще.
Кмк, наилучший вариант: составить список проблем в порядке убывания приоритета, разбить их на максимально независимые небольшие задачи, и при оценке сроков включать немного времени на решение очередной задачки из списка (можно не говорить об этом менеджерам). Желательно найти единомышленников и убедить их поступать также. Это муторно и требует планирования и настойчивости, но может сработать.
Через год можешь сменить работу ты, твой менеджер, вы оба, и вообще всё может быть совсем не так, как ты сказал. Вон Вася три года назад ныл, что всё через год сломается, Вася ушёл, а продукт живёт и здравствует!
Менеджеру обычно главное - успеть всё к следующему дедлайну, долгосрочные перспективы его, как правило, мало волнуют.
Менеджеры разные бывают... Может быть ему надо продержаться этот год и свалить? Зачем ему тогда рискованный рефакторинг :)
> через год
А с "полным рефакторингом всего" - через неделю. А дальше начинается одновременная поддержка двух версий, бекпорты багфиксов и прочие радости...
> умнее
религиозное мышление в действии -- "сложные процессы не могут происходить сами по себе, за ними обязательно стоит разум, ну а разум -- искра божия, тут и рассуждениям конец"
А есть пример, что могут?
Учёные сопоставили данные опыта с происходящим на Сатурне и выдвинули предположение, что в его высоких северных широтах отдельные струйные течения разогнаны как раз до той скорости, при которой формируется нечто вроде устойчивой волны — планетарный гексагон. И хотя «расследование» не раскрывает происхождения подобных течений, оно показывает, почему вся система столь красива и, главное, столь долго живёт
> предположение
> не раскрывает происхождения подобных течений
бактерии, которые содержатся в лабораториях на агаре, довольно быстро "рефакторятся" в сторону упрощения ("красивого кода"), что намекает на то, что весь этот "говнокод" по сути -- необходимый для существования в переменчивой среде запас изменчивости
из-за наличия этого "говнокода", "мёртвого" и "устаревшего" кода полезные качественные мутации и могут возникнуть за считанное число поколений
курим статьи по эксперименту Ленски до просветления
> Всё сделано по принципу "работает - не трожь".
лол, просто лол
ошибки при копировании генома неизбежны, поэтому "не трогать" там что-то невозможно с точки зрения термодинамики
более того, некоторые микроорганизмы сами могут увеличивать частоту мутаций в определённых условиях, и это эволюционно выработанный механизм выживания
ну и не забываем про эволюционную "гонку вооружений", которая тоже не особо позволяет что-то "не трогать"
человек тянет за собой куски неработающих вирусов которые насрали ему в днк, какую-то тупую обратную совместимость вроде жабр и хвоста младенца, в нем куча моков вроде груди у мужика, и вообще архитектура нихрена не логичная
Это накатываются инкрементальные апдейты
> вроде груди у мужика
Это как код, который вроде и не нужен уже, а выкинуть жалко. А ВДРУГ?
Привет из 2020, тут это оказалось модно и молодёжно.
эволюция прекрасно умеет очищать геном от лишнего, это произошло у птиц, к примеру
тот факт, что она не избавляется от неактивных генов у млекопитающих человеку, хотя бы наполовину не являющемуся ошибкой эволюции, должен подсказывать, что это предоставляет какое-то преимущество
ничего, что упомянутые тобой вирусные гены могут принести в клетку готовый репецт синтезирования новых белков?
горизонтальный обмен генами -- это потенциально куда более быстрый двигатель эволюции, чем этот ваш секс
те, кто смог пережить эпидемию ретровируса, получает в запас готовую "подпрограмму" (выражаясь вашим говноязыком)
новая мутация может в определённый момент активировать её, и получится новый потенциально полезный признак
вылезайте из восьмидесятых, ребята
может быть ты еще и в уринотерапию не веришь? и в гороскопы?
процесс развития многоклеточного организма -- это не хуй из пенька выстругать
это самоорганизующийся процесс, в котором задействована куча химических регуляторов и сетей связи
попробуй его "оптимизируй"
Исходя из моей практики, это - единственный подход, который действительно работает. Глобальные переписывания всего и вся, как правило, заканчиваются если не крахом, то уж точно не тотальным успехом.
Вдохновляющая история товарища, который переписал свой немаленький проект целиком на другом языке, используя итерационный подход:
>свеженькое только говно
Я ничего другого и не просил. Хотя ерничаю конечно. Советская поза местами доставляет Ефремов например. Его "Туманость Андромеды" просто прекрасна.
Читай лучше Евгения Попова, Вася.Он пишет про ПХП и на русском
Который гарантированно закончится полным пиздецом и крахом.
> стиль кода различается в разных частях одного файла
Ну здесь легко. Поправил что-то в файле - освежи в нём стиль, если есть свободная минутка.
--Вася, а что ты делал последние 4 недели?
--Рефакторил
--А покажи
--Ну я сейчас в процессе, у меня даже проект не собирается
--А когда будет?
--Ну через неделю-две где-то планирую
Так не рефакторят
Но все равно все говнокодят
Сидит программист глубоко в отладке. Подходит сынишка:
- Папа, почему солнышко каждый день встает на востоке, а садится на западе?
- Ты это проверял?
- Проверял.
- Хорошо проверял?
- Хорошо.
- Работает?
- Работает.
- Каждый день работает?
- Да, каждый день.
- Тогда ради бога, сынок, ничего не трогай
я прощаю тебя
для си-подобных языков можно натравить авто-форматеры. в нашей команде для плюсов юзаем clang-format перед каждым комитом прехуком. очень полезная практика.
для всяких питонов, жс можно использовать линтеры, и например не давать комитить, если код неправославный оформлен не по вашему стандарту
с тобой в библиотеке встречается пидарас?
зачем?
У меня пробелы показываются точечкой, а табы стрелочкой. На глаз различимы.
То ты не сможешь писать на Питоне.
-style=<string>
также можно указать свой конфиг -style=/path/to/.clang-format
http://clang.llvm.org/docs/ClangFormat.html
Форматирование не всегда идеальное (версии в <= 3.5, например, грешили тем, что форматировали 3 почти одинаковые строчки трёмя разными способами), но это всё равно гораздо лучше, чем крестовый код ровнять руками.
Было что-то вроде этого:
Опции-то я добавил, но нужно ждать следующего релиза, пакетировать под наш линупс, etc. Процесс долгий.
Вы бесконечно счастливый человек если думаете Говнокод это когда нарушается правило в 80 символов в строке)
А вот когда в семи местах одно и тоже написано, да еще и по разному -- вот это говнокод
для проверки качества кода также есть сервисы. они бьют по рукам когда у функций/методов много параметров, позволяют находить копи-пасты, длинные функции. я для опен-сорцных поделок пользую http://codeclimate.com и очень доволен
Сидите, и ждете когда у вас появится фича "Foo". Затем оцениваете её: "при нынешней архитектуре это займет 1 день, но если появится foo2 то это еще день. Рефакторинг подсистемы Bar займет неделю, в итоге Foo* можно будет добавлять через GUI".
И вот так по кусочку по кусочку лет за тридцать разгребете все говно