1. 1C / Говнокод #19503

    −97

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    Если  Стрк.Контрагент.ИНН = "7702691545" Тогда
    				ТекДок.Грузополучатель = Справочники.Контрагенты.НайтиПоКоду("000401789");
    			ИначеЕсли  ПоХенкелю Тогда
    				ТекДок.Грузополучатель = Заявка.Контрагент;
    			КонецЕсли;

    Навряд ли конечно кто-то из тех кто пишет такой код, читает этот сайт, но всё же обращаюсь к ним. Вот скажите, есть какой-то негласный принцип так писать? У вас какой-то орден масонский, где вас так учат делать? Расскажите же про свой негласный кодекс хорошего программиста! Просто я много где поработал, и постоянно в коде такое говно, написанное разными людьми. Генезис такого говна понятен: приходит тупорылый менеджер и приносит не менее тупорылую хотелку, но ведь вы программист, а значит вы должны видеть за деревьями лес.
    В каждой задаче нужно видеть за деревьями лес - вот принцип хорошего кода. Если менеджер пришёл 1 раз, он 100% придёт ещё раз, и принесёт подобную задачу. Не лучше ли сейчас немножко посидеть, написать ХОРОШО а в следующий раз решить подобную задачу за 1 минуту и дальше сидеть и пинать говно? Не лучше?!
    Что значит хорошо? Хорошо, это когда ваше решение шире задачи, а задача которую вам дали всего лишь частный случай того функционала, который вы реализовали. 1 - Мыслить нужно шире.
    Так же надо чётко разделять ту информацию которая хранится в базе, и имена переменных. Если наименование контрагента "Хенкель" то какого члена в тексте делает переменная "КонтрагентХенкель"?! Предопределенные элементы - это максимум хардкода, который приемлем. Вы вообще слышали про компиляцию? Компиляция процесс необратимый, и часто её делать нежелательно, поэтому максимум параметров надо выносить во всевозможные настройки и параметры, чтобы можно было их поменять на ходу. Ладно. Вы всё равно нифига не поймёте.

    Запостил: levxxx, 20 Февраля 2016

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

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

      Написал один раз обобщённый код, написал второй раз, третий. Следующее изменение вообще никак не затронуло предыдущие. Оказалось, что ты сделал обобщённый код в той плоскости, в которой будет существовать только этот конкретный случай, но изменения пришли в другие измерения, а там у тебя дублирование и свичи. Переписываешь, добавляешь новую плоскость в пространство универсального кода, но оказывается, что это не плоскость, а просто какая-то парабола, которая лежит в этой плоскости. Потом понимаешь, что каждый раз пишешь новый конкретный случай обобщённого кода и либо переползаешь в более предсказуемую предметную область, либо пишешь каждый раз новый конкретный случай конкретного кода. А новый программист обнаруживает, что один твой обобщённый код не протестирован и годится только для пары случаев, другой настолько обобщённый, что уже никто не помнит, как его запустить. Новый программист удаляет твой красивый обобщённый код и пишет свой тупой и конкретный. Ты сидишь и рожаешь свои сто строк по-твоему универсального кода, а он пишет десять строк своего говнокода. Ты обобщаешь, а он вставляет комментарии и пишет новый говнокод. Остаёшься в итоге со взволнованным чувством прекрасного, а он - с деньгами. Он покупает себе скрипку, о которой всегда мечтал.
      Проекты, которым вы отдавали силы, загибаются одновременно. И твои 100К строк обобщённого кода, и его 10К говнокода после пары лет правок уже никуда не годятся. Ты спрашиваешь его, как он жил. Он отвечает, что решал задачу. А ты? А ты только ждёшь её и готовишься. Ждёшь свой идеальный день, когда новое требование войдёт в рамки твоего идеального обобщённого кода.
      Ответить
      • Истину говоришь.

        Это грёбаная тенденция пытаться писать всегда обобщенный код просто говно. Видел не один man/year на это просраный.

        Народ пытается продавать это как чудо-свойство ОО, но даже аксакалы OO (Буч) писали что надо всегда от конкретного к обобщенному идти, а не наоборот.
        Ответить
        • Вначале ты тратишь человекодни/недели/годы на "пытаться писать обобщенный код" и у тебя это не получается (либо делается зазря). Но когда-то приходит озарение и ты научиваешься делать это правильно.
          Ответить
          • и ты начинаешь говнокодить с безумной скоростью, потому что сроки горят, и потому что в твоей веб-студии "козьмодемьянский пхпист", расположенной в помещении бывшего спортивного клуба "заря", все так делают
            Ответить
      • А ещё, порой, приходится упихивать код в прокрустово ложе какого-нибудь неудачного интерфейса, который в своё время казался классным обобщением...
        Ответить
        • а потому что понять качество протокола/интерфейса/контракта можно только сделав три, совершенно разные имплементации
          Ответить
    • 1С средство для зарабатывания денег, создание системы учета ради создания системы учета. Чем чаще обратится с проблемой клиент - тем больше бабла. Вот и берут подобных кадров. К счастью, ситуация меняется, скоро бизнес научится считать деньги и подобные кадры будут оставаться без дохода. Тогда и посмотрим.
      Ответить
    • Иногда ЭТО - как раз правильно. Теоретически да, бяка.
      Ответить
      • да нихрена это не правильно, потому что правильность зависит от пользователя. Сменился ИНН и что дальше? Код снова менять? Сменился код в справочнике - код сдох. Всё. Не правильно! Ну да... если у вас не сидит специально обученный человек, который будет за этим следить.
        Ответить
        • Ну даже если нагородить по-правильному, реквизит в справочнике завести (через 3...4 года этих реквизитов, каждый из которых на конкретный случай нужен будет эээ... много) или там через свойства - всё равно поддерживать это всё надо. Да, это может сделать пользователь без программиста но поверьте - к тому времени пользователей, которые помнят зачем вот то или это надо уже не останется. И придётся всё равно сначала разгребать. Так что вопрос неоднозначный.
          Ответить
          • Вот для этого и надо всё документировать. И справочник с такими "константами" хорошо бы систематизировать и разбить на страницы и оформить в виде настроек по разделам учёта/документам, а ещё для любого алгоритма расчета должна быть возможность посмотреть как это всё было посчитано. Но... это уже совсем другая история.
            Ответить
            • А кто будет документировать? Кодер, у которого уже вся жопа в мыле от хотелок эффективных менеджеров, или студент из франча без особого опыта? Или есть отдельный тех писатель в отделе? Я, честно, пытался вести вику по собственной конфе (перепиленная ЗУП для целей учета рабочего времени при помощи системы контроля и учета доступа), но быстро плюнул, ибо пока код от теста до рабочего релиза проходит, он, во первых, поменялся нифига не один раз (хотелки, мать их), а во-вторых, за этой задачей уже хвост из других задач, срок исполнения у всех - вчера. А, да, работал я в "команде опытных проффессионалов" из трех человек - консультанта (руководитель отдела прогеров), прогера первой категории (увидел его отчеты, чуть не упал, чел пришел с 7.7, запросы писать не научился, юзал запросы в цикле и прочую радость) и меня, типо админа БД, который, исходя из должностной инструкции, не прогер не разу.
              P.S. Никто не спорит, что приведенный код, ну как минимум, странный. Также я не спорю, что документация нужна, но, она не всегда возможна.
              Ответить
    • ООО "Хенкель Рус"
      Производство мыла; моющих, чистящих и полирующих средств; парфюмерных и косметических средств.
      В течение последних 12 месяцев компания начинала арбитражные производства, выигрывала госконтракты.


      С такими ребятами лучше не спорить.
      Ответить
    • Особенно актуально это для разграничения прав пользователей. Потому как писать подсистемы с должностями, инструкциями, составлять своды и таблицы прав - это все муторно и трудоемко.
      Гораздо проще же прямо в коде указать разрешение для Справочники.Пользователи.НайтиПоНаименов анию("Баба Валя Вахтерша");
      Ответить
    • НайтиПоХоду
      Ответить
    • Пришел пользователь с мелкой хотелкой, а программист занят сейчас какими-то другими более важными задачами, отвлекаться не охото, но сделать надо, чтобы пользователь отстал. Вот и делает максимально быстро, главное чтобы работало, с мыслью "потом как-нибудь вернусь и сделаю правильно".
      Но, возможно, тем у кого полно времени мыслить шире и писать длинные посты на "говнокоде" этого не понять.
      Ответить
      • А потом это быстро-грязное говно выливается в какой-нибудь регресс на продакшене...
        Ответить
    • vanished
      Ответить

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