Программирование в стиле русских романов

Original author: John D. Cook
  • Translation


Одна из вещей, которая делает классические русские романы столь тяжелыми для чтения (для иностранцев) это то, что главные герои имеют кучу имён. К примеру, в романе "Братья Карамазовы" один из персонажей — Алексей Фёдорович Карамазов (Alexei Fyodorovich Karamazov), которого по ходу текста называют также Алёша, Алёшка, Алёшенька, Алёшечка, Алексейчик, Лёша и Лёшенька (Alyosha, Alyoshka, Alyoshenka, Alyoshechka, Alexeichik, Lyosha и Lyoshenka)

«Программирование в стиле русских романов» — это антипаттерн, возникающий в ситуации, когда одна вещь имеет много имён. Для какой-нибудь программы у вас может быть путь в системе контроля версий, путь на диске, имя проекта, имя исполняемого файла и т.д. Все они могут иметь одинаковые (однокоренные) имена или наоборот — называться каждая по-своему. Например, синонимами. Или вообще разными словами. Так уж вышло по историческим причинам, что бинарник foo.exe получается при компиляции проекта bar, лежащего в папке baz и т.д.


Я думал обо всём этом сегодня, когда писал одну программку. Одна и та же сущность имеет много названий. Вот возьмём какое-нибудь число из программы: для него есть переменная (даже две — одна во frontend и одна в backend), есть текстовое поле на форме (и еще лейбочка к нему с пояснением), есть поле в базе данных, есть поле в XML-файле. По-хорошему, всё это должно именоваться в одном стиле — но если программист был неаккуратен, или код писался в разное время, разными людьми, на разных языках программирования — переменные вполне могут называться по-разному.

Вот это и есть «программирование в стиле русских романов».
Инфопульс Украина
Creating Value, Delivering Excellence
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 42

    +2
    Тогда уж «Программирование в стиле Толкиена»
      +8
      Мне кажется, для иностранцев, два десятка наших уменьшительно-ласкательных вариантов одного имени, сокращений, вариантов с префиксами и суффиксами — покруче Толкиена будут.
        +2
        Согласен. Кстати о Лёше:

        «Алексейка, Алёха, Лёха, Алёша, Лёша, Алёня, Лёня, Алёка, Лёка, Лёля, Аля, Алюня, Лексейка, Лекса, Лёкса.»

        И то этот список неполный)
          –4
          Леонид?
            0
            Вы кажется совсем не различаете два абсолютно разных имени. Ну понимаю Александр — с которым Алексей на греческом (если не ошибаюсь) почти синонимы. Но Леонид…

            Кстати, в списке выше есть сокращения от Леонид, за что иногда стукнуть охота, когда тебя называют чужим именем. (=
              +2
              trikadin не различает Алексея от Леонида, а мне минусы.
                0
                Значит я как и многие не понял ваш комментарий (= извините (=
              0
              Как ни странно, да. Мой дед — Алексей, но всю жизнь моя бабушка звала его Лёня. А так как я с самого детства слышал это обращение, оно мне даже странным не казалось.
              +1
              Теперь хоть буду знать, как представляться при знакомстве.
                0
                Как именно?)
                  +8
                  Как-то так:
                  var value = RandomEnumValue<Names> ();
                  


                  static readonly Random _Random = new Random();
                  
                  static T RandomEnumValue<T> ()
                  {
                      return enum
                          .GetValues (typeof (T))
                          .Cast<T> ()
                          .OrderBy (x => _Random.Next())
                          .FirstOrDefault ();
                  }
                  
                  public enum Names 
                  {
                      Алексейка,
                      Алёха,
                      Лёха,
                      Алёша,
                      // ...
                  }
                  
            +5
            Почему Толкина?
              +3
              «У меня много имён в разных странах. Митрандир среди эльфов, Таркун среди гномов; в юности на давно забытом Западе я был Олорином, на юге — Инканус, на севере — Гэндальф, а на востоке я не бываю» Толкиен — Властелин Колец
                +1
                Но такое характерно отнюдь не для всех тамошних персонажей. Я бы даже сказал, для меньшинства.
                  0
                  Зато это меньшинство самое колоритное — Саурон, Саруман, Гэндальф, все валары и вообще все эльфы. У гномов — прозвища, как например Торин Дубощит ( Oakenshield ), ну и некоторые особенно напыщенные люди, вроде Арагорна, которому имена давал каждый второй, там и Элессар и Бродяга ( Strider но в разных переводах было по-разному ) и даже Эомер как-то подарил ему имя Летящий.
                  Мелькора переименовали в Моргота… Имладрис и Ривенделл — два имена одного места.
                    0
                    Нет, ну Вы так пишете, будто это какая-то исключительная особенность мира Толкина. В «Саге о Копье» то же самое. Тем более у Муркока.
            +1
            По-моему мнению, когда все элементы одной сущности (переменная, поле, лейбл, etc) имеют одно и то же название — это тоже не слишком хорошо. Потому что некоторые системы позволяют автоматически «связывать» одноименные, например, переменные и поля — в этом случае они действительно (пардон за тавтологию) должны быть одноименными. Однако, если «связывание» в той же системе происходит вручную, то было бы неплохо, чтобы имена немного отличались, что указывало бы на факт «ручного связывания». Опять таки, некоторые системы *оставим обсуждение их качества в стороне) могут выдавать фразы типа «Error in foo», и попробуй разберись где произошла ошибка: в классе, синтаксическая ошибка в файле или вообще проект неправильно настроен. Так что мне кажется, что хорошим тоном при существовании одноименных объектов при «ручном связывании» было бы указывать тип объекта в его названии, например, varAddressField, entryAddressField, lblAddressField.
              +2
              Давайте абстрагируемся. Одна и таже сущность должна называться одиноково везде, потому, что это одна и та же сущность.
                0
                Label и Field это тоже сущности, которые нельзя объединять в одно, поэтому и указывается общая сущность, а затем частная.
                  0
                  Ничегонепонимаю. Приведите пример, пожалуйста.
                  У меня в коде нет ни одной переменной address_field и address_label
                  Вообще нет переменных с _field и _label.
                  label(:address) есть, field(:address) есть.
                0
                Это называется «Программирование по соглашению».
                +4
                Есть такое. Бороться надо — но тяжело, ибо это ресурсы и внезапные баги из-за «ну какого хрена? кто придумал переименовать? у меня на него скрипт завязан был».
                  +1
                  да уж… как только пароли не называли по ходу проекта (не все в одном): p, pas, pwd, pass, pswd, passw, password… или com, comm, comment, coment, comments…
                    +2
                    //comment, comments…

                    Стараюсь (по возможности) например массив называть во множественном числе, а при переборе foreach'ем/for'ом — конкретный элемент в единственном числе. Пользительно, помогает потом разбираться :) А так да, есть такое, надо искоренять…
                      0
                      Comment и comments — допустимо, т.к. в первом случае это объект, а во втором — коллекция объектов
                        0
                        это понятно, так я тоже называю, но выше я имел ввиду одну и туже переменную (поле в форме/базе).
                          0
                          Ну тут нужно включать мозг. Поле комментариев comment(s), в зависимости от того, что там хранится, по-русски мы же говорим комментарИИ и комментариЙ. Для паролей помоему даже pwd не очень допустимо. Как в строй поговорке: «Программа должна быть написана так, чтобы ее понимали люди и, только иногда, машины.» По-моему этому правилу необходимо следовать всегда, иначе, иной раз даже после выходных будет трудно разобраться, что было написано в пятницу вечером, тем более если это будет читать другой человек или, не дай бог, дебажить.
                        0
                        Вот чем мне нравится разработка на Python/Django — там гораздо меньше времени тратится на придумывание имен (потому что есть соглашения), и гораздо проще читается код. Да, не смотря на то, что имена зачастую получаются достаточно длинными.
                        0
                        Главное чтобы не появился садовник =)
                          –5
                          Никогда им не стать нами.
                            0
                            Для того, чтоб искоренить подобное нужна «всего лишь» воля тимлида. Чтоб на каждое «да ну… Это ж пересобирать потом всё… потом, и так работает» отвечать «сдесь и сейчас»
                              0
                              Не хотелось бы Вас обижать, но я бы не доверил человеку, который пишет: «сдесь», переименовывать переменные.
                                0
                                У вас в компании главное задание на собеседовании — диктант? :)
                                  0
                                  Нет, но переменные с орфографическими ошибками (особенно грубыми) обнаружить будет ещё сложнее, чем просто по-разному именованные.
                                    0
                                    Хуже переменных с ошибками, может быть только их правильное написание в другом месте в нестрогих языках.
                              +5
                              Картинка для привлечения внимания хороша :-)
                                0
                                Надо только ярлык на оперу поменять а папку переименовать в Safari и вообще красота будет:)
                                0
                                Ни о чём.

                                Такие вещи решаются введением «словаря» продукта, ещё на стадии проектирования. Ну и конечно использование его программистами и тестировщиками, создание багов в том числе на применение сторонних терминов вместо утверждённых.
                                  0
                                  Когда я задумываюсь над тем, как назвать сущность, я исхожу из ее смысла в рамках уровня абстракции этой сущности.
                                  И по факту смысл сущностей которые вам кажутся одними и теми же — может быть очень разными.

                                  Например конечный испольняемый файл возможно удобно назвать маркетинговым названием или каким нибудь простым, если это утилита sdk. А вот проект из исхоников, который его компилирует, например назвать trololo.GUI. Ну или как то исходя из его смысла в рамках данного контекста.

                                  Я вам больше скажу — даже Карамазов — которого люди называли по разному был совершенно разным человеком, для окружающих. И Леша и Алексей Карамазовы — это совершенно разные люди в рамках кроугов знакомств, тех кто его так называет.
                                  С какой то точки зрения это один человек да. Ну и ладно — он сам знает как его могут назвать — держит в уме карту этих названий. Тоже самое и с кодом. Как правило реальные возникающии задачи заставляют работать с сущностью только на одном уровне абстракции. И называть ее будет удобно так, что бы был понятен ее смысл именно в этом окружении.
                                    0
                                    image
                                    открыл ссылку =)
                                      0
                                      Что это Вы такое открыли?
                                        0
                                        Он открыл оперой файл из кэша эксплорера.

                                    Only users with full accounts can post comments. Log in, please.