1. Куча / Говнокод #19011

    +2

    1. 1
    Как избавиться от говнокода?

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

    Как с этим бороться? Убеждать менеджера, что вам нужно несколько недель, а то и месяцев на полный рефакторинг всего? Заниматься этим в свободное время? Забить и говнокодить дальше? Уйти в другое место (не факт ведь, что там будет лучше)?

    Запостил: imihajlov, 12 Ноября 2015

    Комментарии (113) RSS

    • стать начальником и выпустить приказ о переделки говнокода :):):)
      Ответить
    • Выделять время на рефакторинг. Ввести превью кода. Комментировать участки кода с которыми сталкиваешься . Вести документацию проекта хоть как Я например юзаю DokuWiki.
      Ответить
      • > Комментировать участки кода с которыми сталкиваешься .
        потом кто-то устроит деградацию, и тимлид будет лазить по дереву версий, чтобы понять, кому дать по рогам
        каково же будет его удовольствие, когда это дерево будет заполнено добавлениями пробелов для красоты (ок, в diff это можно отключить) и комментариев // if a equals 2 then continue execution in the then block
        > Вести документацию проекта
        документация убивает сакральную составляющую проекта
        ничто не сравнится с этим трепетным чувством, когда ты подходишь к седовласому архитектору и смиренно спрашиваешь, по кой, собственно, хуй, тут используется ржавый велосипед вместо одного BLAS вызова, а он достаёт из-под стола коробку из-под ботинок и роется в отпечатанных на истлевшей перфорированной бумаге листингах, исписанных химическим карандашом
        Ответить
        • когда коммит делаешь пиши коммент для коммита. и все когда кто полезет в дерево коммитов эти коммиты можно смело пропускать
          Ответить
          • ловите нейротипичного
            trust is a weakness
            Ответить
          • > и все когда кто полезет в дерево коммитов эти коммиты можно смело пропускать
            Ну, что б все! (с) Шариков
            Ответить
          • Тебе то откудо это известно? Пхпшники же не используют контроль версий
            Ответить
            • Быстро ты его раскрыл. Не быть васе шпионом.
              Ответить
              • На самом деле Вася пишет самообучающиеся системы и шедулеры дляч ядра линуха, а претворяется пхпшником
                Ответить
                • А ещё он - известный писатель и поэт, поэтому тут старается писать так, чтобы его авторский стиль не узнали.
                  Ответить
                • И для конспирации срется с пидаром
                  Ответить
            • А как же раздел в Гитхабе для пэхапэшников?
              Ответить
            • СЮРПРИИИИЗ!!!
              Ответить
    • > Убеждать менеджера, что вам нужно несколько недель, а то и месяцев на полный рефакторинг всего?
      Это точно не прокатит, будет только хуже, не зависимо от того, одобрят или нет.

      > Заниматься этим в свободное время?
      Плохо - выгоришь и забьёшь.

      > Забить и говнокодить дальше?
      Вариант, но чувство безысходности начнёт посещать всё чаще.

      Кмк, наилучший вариант: составить список проблем в порядке убывания приоритета, разбить их на максимально независимые небольшие задачи, и при оценке сроков включать немного времени на решение очередной задачки из списка (можно не говорить об этом менеджерам). Желательно найти единомышленников и убедить их поступать также. Это муторно и требует планирования и настойчивости, но может сработать.
      Ответить
      • А фразой "через год всё скатится в неработающие ебеня" менеджера не убедить?
        Ответить
        • Нет, это точно не сработает.
          Через год можешь сменить работу ты, твой менеджер, вы оба, и вообще всё может быть совсем не так, как ты сказал. Вон Вася три года назад ныл, что всё через год сломается, Вася ушёл, а продукт живёт и здравствует!
          Менеджеру обычно главное - успеть всё к следующему дедлайну, долгосрочные перспективы его, как правило, мало волнуют.
          Ответить
        • > через год
          Менеджеры разные бывают... Может быть ему надо продержаться этот год и свалить? Зачем ему тогда рискованный рефакторинг :)

          > через год
          А с "полным рефакторингом всего" - через неделю. А дальше начинается одновременная поддержка двух версий, бекпорты багфиксов и прочие радости...
          Ответить
      • эволюционный подход не всегда поможет там, где нужен рефакторинг.
        Ответить
        • эволюционный подход превратил бактерию в человека, а ты про какой-то софт ноешь
          Ответить
          • Я все таки думаю, что матушка природа умнее говнокодеров
            Ответить
            • > природа
              > умнее
              религиозное мышление в действии -- "сложные процессы не могут происходить сами по себе, за ними обязательно стоит разум, ну а разум -- искра божия, тут и рассуждениям конец"
              Ответить
              • >сложные процессы не могут происходить сами по себе
                А есть пример, что могут?
                Ответить
                • Гигантский гексагон на сатурне боженька небось крутит, чтобы учёных потроллить
                  Ответить
                  • Учёные из Оксфордского университета смогли в лабораторных условиях смоделировать возникновение подобного гексагона. Чтобы выяснить, как возникает такое образование, исследователи поставили на вертящийся стол 30-литровый баллон с водой. Она моделировала атмосферу Сатурна и её обычное вращение. Внутри учёные поместили маленькие кольца, вращающиеся быстрее ёмкости. Это генерировало миниатюрные вихри и струи, которые экспериментаторы визуализировали при помощи зелёной краски. Чем быстрее вращалось кольцо, тем больше становились вихри, заставляя близлежащий поток отклоняться от круговой формы. Таким образом авторам опыта удалось получить различные фигуры — овалы, треугольники, квадраты и, конечно, искомый шестиугольник.

                    Учёные сопоставили данные опыта с происходящим на Сатурне и выдвинули предположение, что в его высоких северных широтах отдельные струйные течения разогнаны как раз до той скорости, при которой формируется нечто вроде устойчивой волны — планетарный гексагон. И хотя «расследование» не раскрывает происхождения подобных течений, оно показывает, почему вся система столь красива и, главное, столь долго живёт
                    Ответить
                    • Спасибо, я тоже умею читать википедию.
                      > предположение
                      > не раскрывает происхождения подобных течений
                      Ответить
              • Что хочу то и вижу в действии - мое высказывание было изменено до "ничто не может проводить эволюцию кроме природы и Бога", хоть я такого и близко не говорил
                Ответить
          • Человек и его геном - это тот еще говнокод. Всё сделано по принципу "работает - не трожь".
            Ответить
            • спец по генетическому коду?
              Ответить
              • > тот еще говнокод
                бактерии, которые содержатся в лабораториях на агаре, довольно быстро "рефакторятся" в сторону упрощения ("красивого кода"), что намекает на то, что весь этот "говнокод" по сути -- необходимый для существования в переменчивой среде запас изменчивости
                из-за наличия этого "говнокода", "мёртвого" и "устаревшего" кода полезные качественные мутации и могут возникнуть за считанное число поколений
                курим статьи по эксперименту Ленски до просветления
                > Всё сделано по принципу "работает - не трожь".
                лол, просто лол
                Ответить
                • Принцип "работает - не трожь" - это и есть эволюционный принцип. Выживает только то, что работает.
                  Ответить
                  • полнейший бред и непонимание
                    ошибки при копировании генома неизбежны, поэтому "не трогать" там что-то невозможно с точки зрения термодинамики
                    более того, некоторые микроорганизмы сами могут увеличивать частоту мутаций в определённых условиях, и это эволюционно выработанный механизм выживания
                    ну и не забываем про эволюционную "гонку вооружений", которая тоже не особо позволяет что-то "не трогать"
                    Ответить
                • ну вообще там правда довольно много говна

                  человек тянет за собой куски неработающих вирусов которые насрали ему в днк, какую-то тупую обратную совместимость вроде жабр и хвоста младенца, в нем куча моков вроде груди у мужика, и вообще архитектура нихрена не логичная
                  Ответить
                  • > вроде жабр и хвоста младенца
                    Это накатываются инкрементальные апдейты

                    > вроде груди у мужика
                    Это как код, который вроде и не нужен уже, а выкинуть жалко. А ВДРУГ?
                    Ответить
                    • > Это как код, который вроде и не нужен уже, а выкинуть жалко. А ВДРУГ?

                      Привет из 2020, тут это оказалось модно и молодёжно.
                      Ответить
                  • "мусорные гены" -- это безграмотный булшит из разряда "мозг задействован только на 10%"
                    эволюция прекрасно умеет очищать геном от лишнего, это произошло у птиц, к примеру
                    тот факт, что она не избавляется от неактивных генов у млекопитающих человеку, хотя бы наполовину не являющемуся ошибкой эволюции, должен подсказывать, что это предоставляет какое-то преимущество
                    ничего, что упомянутые тобой вирусные гены могут принести в клетку готовый репецт синтезирования новых белков?
                    горизонтальный обмен генами -- это потенциально куда более быстрый двигатель эволюции, чем этот ваш секс
                    те, кто смог пережить эпидемию ретровируса, получает в запас готовую "подпрограмму" (выражаясь вашим говноязыком)
                    новая мутация может в определённый момент активировать её, и получится новый потенциально полезный признак
                    вылезайте из восьмидесятых, ребята
                    Ответить
                    • ого, как тебя бомбанулло

                      может быть ты еще и в уринотерапию не веришь? и в гороскопы?
                      Ответить
                  • ох лол
                    процесс развития многоклеточного организма -- это не хуй из пенька выстругать
                    это самоорганизующийся процесс, в котором задействована куча химических регуляторов и сетей связи
                    попробуй его "оптимизируй"
                    Ответить
          • для эволюционного развития (не путать с наращиванием костылей поверх велосипеда) необходимо заложить достойные механизмы расширяемости.
            Ответить
          • Но легасиговна в человеке от этого меньше не стало.
            Ответить
        • > эволюционный подход не всегда поможет
          Исходя из моей практики, это - единственный подход, который действительно работает. Глобальные переписывания всего и вся, как правило, заканчиваются если не крахом, то уж точно не тотальным успехом.

          Вдохновляющая история товарища, который переписал свой немаленький проект целиком на другом языке, используя итерационный подход:
          http://roscidus.com/blog/blog/2014/06/06/python-to-ocaml-retrospective/
          Ответить
          • показать все, что скрытоПочему все вдохновляющие истории пишут на буржуйском. Опять иди бери словарь.
            Ответить
            • Почитай советскую прозу о жизне завода или деревни, будет тебе вдохновляющая история на рабоче-крестьянском.
              Ответить
              • А есть, что то свеженькое?
                Ответить
                • на этом сайте свеженькое только говно
                  Ответить
                  • Это хлеб! И в деревнях мой хлеб ели!
                    Ответить
                  • >советскую прозу
                    >свеженькое только говно
                    Я ничего другого и не просил. Хотя ерничаю конечно. Советская поза местами доставляет Ефремов например. Его "Туманость Андромеды" просто прекрасна.
                    Ответить
                    • И "Час Быка" еще. Вот как-то у него так получалось хорошо. Не то что змеебабы у Снегова.
                      Ответить
            • Да еще и про окамль!

              Читай лучше Евгения Попова, Вася.Он пишет про ПХП и на русском
              Ответить
    • > полный рефакторинг всего
      Который гарантированно закончится полным пиздецом и крахом.

      > стиль кода различается в разных частях одного файла
      Ну здесь легко. Поправил что-то в файле - освежи в нём стиль, если есть свободная минутка.
      Ответить
      • ну это смотря как рефакторить ;)
        Ответить
        • Ну вот поэтому и надо рефакторить эволюционно, по частям. Чтобы ветки сильно не расползались.
          Ответить
      • >>Который гарантированно закончится полным пиздецом и крахом.
        --Вася, а что ты делал последние 4 недели?
        --Рефакторил
        --А покажи
        --Ну я сейчас в процессе, у меня даже проект не собирается
        --А когда будет?
        --Ну через неделю-две где-то планирую
        Ответить
        • >даже проект не собирается
          Так не рефакторят
          Ответить
          • Ох пид, да все это понимают. Все знают что надо делать махонькие задачи, что к концу дня нужно оставлять код в рабочем состоянии и делать коммит, что для длинных задач нужны фича бранчи итд.

            Но все равно все говнокодят
            Ответить
            • Речь даже не о " к концу дня нужно оставлять код в рабочем состоянии и делать коммит", как можно рефакторить без промежуточных тестов? Чтобы через месяц выяснить что хуйня вышла?
              Ответить
    • вот тебе народный ответ

      Сидит программист глубоко в отладке. Подходит сынишка:
      - Папа, почему солнышко каждый день встает на востоке, а садится на западе?
      - Ты это проверял?
      - Проверял.
      - Хорошо проверял?
      - Хорошо.
      - Работает?
      - Работает.
      - Каждый день работает?
      - Да, каждый день.
      - Тогда ради бога, сынок, ничего не трогай
      Ответить
      • Ответ не в тему - при работе над программой трогать таки приходится. Это если библиотека где апи как-то работает а вовнутрь лезть не надо то можно.
        Ответить
    • >стиль кода различается в разных частях одного файла
      для си-подобных языков можно натравить авто-форматеры. в нашей команде для плюсов юзаем clang-format перед каждым комитом прехуком. очень полезная практика.
      для всяких питонов, жс можно использовать линтеры, и например не давать комитить, если код неправославный оформлен не по вашему стандарту
      Ответить
      • Ну или ревью проводить. Там заодно и куча потенциальных багов отловится.
        Ответить
        • Ревьюировать считая инденты?
          Ответить
          • Чё их считать? Кривые инденты на глаз же видно, даже если читаешь по диагонали.
            Ответить
            • а если у меня в одном месте таб, а в другом 4 проблела?
              Ответить
              • То ты пидорас, очевидно же. К слову, встречается и в библиотеке жавы.
                Ответить
                • не понял

                  с тобой в библиотеке встречается пидарас?
                  зачем?
                  Ответить
                  • Нет, ты пидарас, но пидарасы есть даже среди тех кто выпускал библиотеку жавы, так что не расстраивайся, жизнь еще не закончилась.
                    Ответить
              • Можно написать плагин к редактору, который будет менять ширину таба с частотой 3Гц.
                У меня пробелы показываются точечкой, а табы стрелочкой. На глаз различимы.
                Ответить
              • > а если у меня в одном месте таб, а в другом 4 проблела?

                То ты не сможешь писать на Питоне.
                Ответить
      • пардон, твой автоформат только отступы сделает одинаковыми, и то может многое распидорасит, например такое.

        obj.method1()
            .method2()
            .method3();
        Ответить
        • не. он хорошо умеет в код-стайлы LLVM, Google, Chromium, Mozilla, WebKit
          -style=<string>
          также можно указать свой конфиг -style=/path/to/.clang-format
          http://clang.llvm.org/docs/ClangFormat.html
          Ответить
          • Иногда пишут в одну строчку, а иногда как выше, например,с жавовским ФП. Расскажи мне, какая прога это сможет отличить?
            Ответить
            • не пробовал clang-format с жабой, но в в этой тулзе достаточно много опций. http://clang.llvm.org/docs/ClangFormatStyleOptions.html возможно ContinuationIndentWidth и ColumnLimit спасут отца русской демократии. может в нем есть готовая опция или можно попробовать ее добавить
              Ответить
              • clang-format не просто отступы ровняет, он работает примерно как TeX - разбивает текст на куски, минимизируя глобальный штраф.
                Форматирование не всегда идеальное (версии в <= 3.5, например, грешили тем, что форматировали 3 почти одинаковые строчки трёмя разными способами), но это всё равно гораздо лучше, чем крестовый код ровнять руками.
                Ответить
                • И много у тебя а коде одинаковых строк?
                  Ответить
                  • > почти одинаковые
                    Было что-то вроде этого:
                    auto cfg = parser.file("config")
                                   .help("path to the configuration file");
                    auto list = parser.flag("list").defaultValue(false).help(
                        "display list instead of the xxx");
                    Ответить
              • Я тебе про то что в одном и том же коде может быть надо в одном месте так, а в другом сяк.
                Ответить
                • ну это противоречит самому понятию код-стайла, который говорит, что весь код должен быть единообразный
                  Ответить
      • Уже года полтора юзаю clang-format и emacs-плагин для него, ненарадуюсь. К сожалению, не все разработчики разделяют моё мнение, но число юзеров растёт. Из неприятного: там не было нужных мне опций, пришлось идти на компромиссы с гайдлайном.
        Опции-то я добавил, но нужно ждать следующего релиза, пакетировать под наш линупс, etc. Процесс долгий.
        Ответить
        • тоже не понимаю, как он может не нравиться.. он же автоматизирует ненужную рутину, хотя если платят за количество написанных строчек, то тут да - он не помощник.
          Ответить
      • >>линтеры

        Вы бесконечно счастливый человек если думаете Говнокод это когда нарушается правило в 80 символов в строке)

        А вот когда в семи местах одно и тоже написано, да еще и по разному -- вот это говнокод
        Ответить
        • это всего лишь одна из полезных утилит
          для проверки качества кода также есть сервисы. они бьют по рукам когда у функций/методов много параметров, позволяют находить копи-пасты, длинные функции. я для опен-сорцных поделок пользую http://codeclimate.com и очень доволен
          Ответить
      • Пеп8 есть для пистона
        Ответить
    • вряд ли скажу что-то новое, но от говна можно успешно отбиваться фасадами, за которыми это говно делить и прятать, и, при успешном стечеии обстоятельств, можно фасад за фасадом вычищать.
      Ответить
      • Если код - лапша, то само разбиение его на фасады - тот же объем работ, что и ушел бы на рефакторинг
        Ответить
        • Если код - лапша, то принести гранату на работу - единственно достойное праведника деяние.
          Ответить
      • Хорошо документированный фасад с внятным интерфейсом и ясной семантикой, да еще и покрытый тестами позволяет превращать любое говно в конфетку. Жаль что таких фасадов не бывает.
        Ответить
    • Рефакторить просто чтобы рефакторить это глупо.

      Сидите, и ждете когда у вас появится фича "Foo". Затем оцениваете её: "при нынешней архитектуре это займет 1 день, но если появится foo2 то это еще день. Рефакторинг подсистемы Bar займет неделю, в итоге Foo* можно будет добавлять через GUI".

      И вот так по кусочку по кусочку лет за тридцать разгребете все говно
      Ответить
    • У меня точно так же. Только все говно написал нынешний лид, и он продолжает в том же духе.
      Ответить

    Добавить комментарий