Русские идентификаторы в коде

Речь пойдет об использовании в программном коде названий (классов, переменных, методов) на родном языке (в моем случае — на русском).

Опыт показал, что русские идентификаторы идеально подходят для создания объектной модели и для обсуждения ее с Заказчиком (для отечественных проектов).



Одна из общих тенденций развития ИТ — это постепенное “очеловечивание” технологий. Каждая новая технология поначалу ориентирована на узкий круг конкретных специалистов, но постепенно адаптируется под всё более широкий круг пользователей, в том числе разных культур. Взять хотя бы введение кириллических доменов (*.рф) – пусть еще не все браузеры нормально поддерживают отображение кириллических адресов, но процесс идет!

Начав заниматься программированием в начале 90-х, я никогда не испытывал проблем из-за того что файлы нужно было называть только латинскими буквами и не длиннее 8 символов, но когда в очередной версии Windows я понял, что этих ограничений больше нет — подумал: это же удобно! Каждый раз, давая название новому файлу, я по привычке думал: а что если этот файл попытаются открыть в системе, не поддерживающей кириллицу? Но вероятность этого становилась всё меньше, и со временем привычка исчезла.

Года три назад я вдруг обнаружил, что в dotNET можно называть идентификаторы любыми символами — английскими или русскими, неважно. Это следовало из того что dotNET ориентирован на работу с юникодом. Первое что пришло в голову — какими проблемами чревато использование русских названий? Поэкспериментировав в “русифицированным” кодом на разных версиях Windows и dotNET Framework, я не выявил ни одной проблемы.

Таким образом, я пришел к выводу, что в dotNET нет технических проблем с использованием русских идентификаторов.

Конечно, бывают случаи, когда вопрос использования русских названий отпадает сам собой:
  • если Заказчик продукта зачем-то требует — чтобы весь код был на английском;
  • если есть подозрение, что проект будет выложен в OpenSource или передан зарубежным разработчикам;
  • если в команде разработчиков не все владеют русским языком;
  • если проект является зоопарком различных языков и технологий (в том числе времен MS-DOS);
  • если русские идентификаторы внесут путаницу в унаследованный код.


Понятно, что наличие возможности не означает необходимость ее использования.

Я начал использовать русские идентификаторы практически во всех своих проектах. И со временем сделал для себя такой вывод: русские идентификаторы идеально подходят для создания объектной модели, а в остальной части кода они ни к чему.

Теперь пример:
Допустим, заказчик — учебное заведение и хочет систему учета учеников, классов, предметов, оценок и т. д. В разговоре с заказчиком вы используете слова “ученик”, “предмет”, “успеваемость” — так зачем же их в коде переводить на английский? Создаем объектную модель:

image

В VisualStudio создаем диаграмму классов:

image

Такую диаграмму классов даже можно показывать заказчику и при этом разговаривать с ним буквально “на одном языке” — то есть, используя одинаковые термины. У заказчика даже может возникнуть ощущение, что он неплохо разбирается в вашем коде :)

При этом, конечно, не следует увлекаться и называть в коде по-русски изначально англоязычные технические термины типа “File”, “Stream”, “Collection”, “WebClient” и т. п.

Общаясь с коллегами на эту тему, я замечаю, что отношение к русским идентификаторам со временем постепенно меняется. От резко отрицательного — к умеренно-снисходительному. Вот мой список причин, по которым программисты хотят писать код исключительно по-английски:
  • Лень часто переключать раскладку. Это странная проблема — типа частое переключение раскладки снижает производительность. Разве работа разработчика заключается в скоростном десятипальцевом набивании кода? По-моему, удобочитаемость кода важнее нескольких секунд (или даже минут) в день, потраченных на переключение раскладки. Почему же тогда программисты не жалуются когда пишут код вида Console.Write(«Привет, Мир!»); — ведь тут тоже нужно переключаться. Кроме того, эти же разработчики называют личные файлы на диске по-русски. Так что эта проблема “высосана из пальца” и означает что реальных проблем не нашлось.
    UPD: Переключение раскладки при редактировании кода — это исключительно вопрос привычки. Мозг приспособится к этой задаче за два-три дня и это перестанет напрягать — проверено на опыте.
  • Чтобы код выглядел для непосвященных максимально сложным. Если код будет понятен заказчику, другим программистам, начальнику — то ведь у них может возникнуть мнение, что программирование — это не так уж сложно, что приведет к некоторому потускнению образа программиста, который как волшебник пишет какие-то никому непонятные символы… Другими словами, так проявляется желание выглядеть очень умным и незаменимым.
  • Боязнь глюков Чтобы утверждать что из-за русских названий могут возникнуть труднообъяснимые проблемы — нужно хотя бы попробовать их использовать. А голословные утверждения, не подкрепленные практикой — это лишь прикрытие инертности мышления. В моей личное практике был один такой небольшой глюк (в Silverlight-проекте), но на фоне десятков других глюков он несущественен. Эта боязнь почему-то не мешает программистам работать на 64-битных русифицированных Windows и использовать локализованный Google J
  • А вдруг код купят иностранцы? Если код пишется изначально с целью передачи иностранным заказчикам — тогда вопросов нет. В остальных случаях вероятность того что ваш код перейдет к буржуям или индусам — крайне мала. Если так – тогда и пользовательский интерфейс нужно делать исключительно по-английски, даже если конечный пользователь – бухгалтер в соседнем кабинете
  • Объектная модель повторяет структуру БД. Часто объектной моделью приложения считаются таблицы в БД и связи между ними. В этом случае удобно называть классы и свойства так же как называются таблицы и поля в БД. Идеологически такой подход давно устарел – сейчас рулит Domain-driven design (DDD), при котором за основу берется предметная область заказчика.


Кстати, недавно узнал, что 1С-программисты пишут код буквально “по-русски” :)

В заключение выводы:
  • Русские идентификаторы отлично подходят для описания объектной модели отечественных проектов
  • Думаю — со временем разработчики перестанут бояться использовать русские идентификаторы
  • Не нужно крайностей: писать по-русски весь код — абсурд.


Update: Буржуи, инструментами которых мы пользуемся при разработке, видят код как-раз на своем родном языке…
Поделиться публикацией

Комментарии 133

    +17
    у меня мозг взбунтовался сразу на IУченик и сказал что он не будет так часто раскладку переключать, руки его поддержали.
      –2
      Лично я пользуюсь автопереключателем раскладки (PuntoSwitcher), так что переключаться вручную приходится нечасто
        +4
        я тоже им пользуюсь, но в случае с IУчитель даже пунтосвитчер не поможет.
          +4
          Только что проверил. При попытке написать IУченик он выводит Шученик.
            –1
            Еще неплохо помогает IntelliSense )
              +1
              Ну и как он поможет в этом случае? После ввода «I» он выдаст несколько десятков идентификаторов, притом русскоязычные будут висеть внизу. Придется переключаться (
        +18
        О боже мой, только не очередная 1С!
          +6
          За русские идентификаторы в коде надо расстреливать на месте.
          А язык 1С — это какой-то фундаментальный ппц. Мнение о том, что на национальном языке удобнее писать код — мнения снобов и полных мудаков в вопросе кодинга.

          Русский язык программирования — последнее до чего можно додуматься при проектировании API. Существует же куча нормальных синтаксисов, нет, бля, надо придумать «свой новый уникальный метод». Понты одни, не более.
            –2
            Полные мудаки те кто так говорит, не попробовав. А новый синтаксис никто не изобретает — это всё тот же C#. Если есть доводы «против» — обосновывай, а иначе — это безосновательные понты, точнее — попытка выдать мнение большинства за свое личное.
          0
          Не знаю почему, но я всегда улыбаюсь, когда вижу:
            +2
            Простите:
            ЕСЛИ Справочник.Товар.ID>100 ТОГДА НичегоНеДелать(); ИНАЧЕ УдалитьТовар(); КонецЕсли;
              +1
              еще веселее выглядит пользование ADO в 1С, там такая аццкая каша русского получается…
                0
                Это вы на каком языке сейчаз сказали? :)

                IТовар Товар = Справочник.Товары[i];
                if (Товар.Код <= границаУдаления){
                Справочник.Товары.УдалитьТовар(Товар);
                }
                  0
                  1С — мог кое-где ошибиться, но смысл приблизительно таков
                    –1
                    В вашем случае больше всего убивает: 1. Индуская функция НичегоНеДелать 2. Непродуманность и нелаконичность языка. А какой язык для именования переменных и управляющих конструкций использовать, это нифига не влияет на красивость программы.
                    +5
                    IТовар — хтонический ппц, если уж мы за русификацию, то хотя бы ИТовар.
                      +8
                      IТовар это специальный класс для продукции компании Apple.
                        0
                        Как у автора статьи…
                      +4
                      СхемаКомпоновкиДанных = ПолучитьМакет("ФактЗатрат");
                      КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
                      КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
                      ЗУП_ТиповыеОтчеты.УстановитьПараметр(КомпоновщикНастроек, "ОбъектЗатрат", Ссылка);
                      ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
                      КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
                      МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
                      ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
                      ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
                      ДокументРезультат = ЭлементыФормы.ТабличныйДокументЗатратыФакт;
                      ДокументРезультат.Очистить();
                      ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
                      ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
                      ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
                        +3
                        Сделайте меня развидеть это обратно
                          +2
                          А представляете, американцы и англичане это каждый день видят.
                          0
                          Подсветка кода сделало бы это немного понятнее.

                          А вообще, средняя длина слова у американцев составляет 5,2 символа, длина слова в русском языке составляет 7,2 символа на слово (в среднем) — в этом главная проблема
                            0
                            А у русского матерного средняя длина слова около 3 символов, но это не значит, что надо ругаться в коде. Скорость написания зависит больше от навыков, чем от языка.
                      +3
                      Где вы находите заказчиков, которые лезут в объектную модель?

                      Мне кажется, что подобный подход актуален только в случае на «показать».
                        –1
                        Заказчики сами не лезут, но в любом случае при обсуждении приходится набрасывать какие-то схемки, блоки со связями. Вот в этот момент и помогает распечатанная диаграмма классов.
                          –1
                          Хотя если представитель Заказчика — бывший программист (что бывает нередко) — он запросто может и на объектную модель посмотреть…
                            +4
                            А нафига ему тогда русские IУченики?
                          +2
                          название классов и переменных на русском — такой же, в общем-то, бред, как и весь код на русском. Или русскоязычные домены. По тем же, в общем-то, причинам. По крайней мере, планируя хоть сколько-нибудь международный проект, я бы даже комментарии оставлял на английском. не то что исходндый код…

                          Хотя если продукт пишется «под заказчика» и заранее известно, что разработка будет вестись только русскоязычными программистами — почему бы и нет? Это может несколько упростить понимание модели не только заказчиком, но и самими разработчиками.
                            –1
                            Если проект международный — вопрос отпадает сам собой, это понятно. Интересно другое — если в проекте участвуют только русские и китайцы — писать придется по-английски? :)
                              0
                              Мы рабы привычки. При программировании стараемся выработать одинаковый подход для работы с любыми видами заказчиков, будь то иностранцы или наши, поэтому достаточно трудно перестроиться с работы на международном языке, на работу на нашем, а потом обратно.
                              А если требуется перевести весь наш кодовый бред на язык заказчика, то для этого нанимаются специальные люди на специальные должности.
                            +28
                            А ещё можно использовать вот такие идентификаторыﯝﯞﯟﯠﯣﯤﯥﯗﯘﯚﯛ

                            Я вообще предлагаю прекратить использовать эти устаревшие С-подобные языки и перейти на что-то современное типа:

                            Дорогой компилятор,

                            Я хотел бы попросить тебя создать функцию ЯвляетсяЛиЧислом(строчка)
                            Присвой, пожалуйста, переменной А значение 0.
                            А потом, пока А меньше длинны той строчки, которую я передал тебе в параметрах функции, проверяй является ли А-тый символ в строке цифрой.
                            Если случится так, что он не является, то выкинь исключения о том, что строчка имеет неверный формат.

                            Если же все символы цифры, то, если тебе не трудно, верни правду.

                            Искренне твой, разработчик.

                              +13
                              Ответ компилятора:
                              Дружище, что-то меня сегодня с утра не прет, давай после обеда поработаем… ничего личного
                                0
                                INTERCAL примерно так и работает. Слишком мало PLEASE — не компилируется (разработчик невежлив), слишком много — тоже не компилируется (разработчик издевается).
                                +2
                                Начало программы:
                                ЗапуститьСайт(критерии: {красивый, интересный, безопасный, всем нравится});
                                +9
                                >Почему же тогда программисты не жалуются когда пишут код вида Console.Write(«Привет, Мир!»);
                                Тру программисты пишут «Hello world» ))

                                >Кроме того, эти же разработчики называют личные файлы на диске по-русски
                                Единственный случай, когда я называя файлы по-русски — это когда я сохраняю набранный документ в ворде, а он сам мне предлагает имя файла по первым фразам документа.

                                >Если код будет понятен заказчику
                                Если заказчик смотрит код, то он ему и на английском будет понятен

                                Но вообще, русские идентификаторы на мой взгляд намного лучше смотрятся, чем zarplata, uchenik и т.д.
                                  –1
                                  Console.Write(«Привет, Мир!») — это, конечно, тривиальный случай. Вот более реальный:

                                  if (saveFile.IsHasError) {
                                  MsgBox.Error(«При сохранении файла произошла ошибка. Сообщение не добавлено.»);
                                  yield break;
                                  }
                                    +1
                                    if (saveFile.IsHasError) {
                                    MsgBox.Error(«При сохранении файла произошла ошибка. Сообщение не добавлено.»);
                                    yield break;
                                    }

                                    как-то так:
                                    if (saveFile.IsHasError) {
                                    MsgBox.Error( stringCollector.getFileNotFound() );
                                    yield break;

                                    ну и при инициализации где-то вычитать содержимое этого коллекционера строк.
                                      +2
                                      doc.trolltech.com/4.4/linguist-programmers.html Никогда не забуду ощущения, которое возникло в момент, когда я понял, что написанная 1 раз правильно, программа может быть переведена на любой язык.
                                        +2
                                        обычно используются ресурсы…
                                        +7
                                        IsHasError — OMG >:[ мои глаза!!!
                                        +4
                                        zarplata, uchenik

                                        А вот такого программиста нужно долго переучивать, желательно линейкой по пальцам за каждое подобное имя переменной
                                          +1
                                          Эт ещё ничего :))
                                          я вот сейчас работа с французской БД где полно идентификаторов типа
                                          dos_ori (dossier original — master file)
                                            0
                                            когда-то мне нужно было вставить в свою программу мплеер. Не так сложно делается, но есть пара нюансов. Захотелось увидеть чужой кусочек кода. Нашёл. На китайском форуме, с соответсвующими комментариями. Знаете как я был рад когда нашёл по фрагментам кода страницу на французском? Как легко читается французский, после китайского форума! Как радостно воспринимаются названия на французском!
                                              0
                                              Для англичан что русский, что китайский — одинаково. Давайте продолжать по-французски на всякий случай…
                                          –2
                                          >Единственный случай, когда я называя файлы по-русски — это когда я сохраняю набранный документ в ворде, а он сам мне предлагает имя файла по первым фразам документа.

                                          seregagl, вы называете файлы по-нерусски по идеологическим соображениям?

                                          Если да — то почему вордовские документы являются исключением из идеологических соображений?
                                          Если нет — тогда зачем было об этом писать?
                                            +1
                                            Можно сказать, что по идеологическим. Мне потом их проще искать, захожу в папку в TotalCmd, жму нужную буквы на клавиатуре и вот я уже нахожусь на файлах начинающихся с этой буквы. Если файл на русском, то нужно перед поиском переключать раскладку.
                                            А вордовские стали исключением банально из-за лени, если бы на автомате ставилось бы «новый файл» как в случае с папкой, то и им бы давал название сам. Да и не так много из у меня, один-два в месяц, так что это не сильно разрушает мою идеологию )
                                              0
                                              Про удобство поиска — понятно. То есть вы НЕ ПРОТИВ русских названий, это лишь дело привычки. Кстати, если бы вы называли все файлы по-русски — искать их по первым буквам было бы также просто :)
                                                +1
                                                Да вы знаете, я точно не против русских названий в проектах, в которых я не участвую и точно не буду участвовать ) Насчет остальных — в этом вопросе я белее консервативен и тут обеими руками и ногами «нет»! Недавно совсем столкнулся с проблемой русских ключей в массиве, обплевался весь, так что тут я категорически против.
                                                Искать будет просто, если раскладка в системе по-умолчанию станет русской, а это не очень скоро произойдет, если вообще когда нибудь )
                                          +6
                                          Поставил минус.
                                          Во-первых, существуют стандарты оформления кода. Во-вторых, мне доводилось видеть (к счастью, просто как примеры реализации или спецификации протоколов) исходники, где имена переменных были на французском или немецком языке — понять о чем там речь очень сложно.
                                          Стандартно код оформляется на английском, и любые национальные символы в нем должны отсутствовать. Сегодня Вы пишите продукт для себя, а если завтра им заинтересуются за пределами русскоговорящих стран? Будет тратить свое время на перевод интерфейсных классов и методов?
                                          И про «пользовательский интерфейс нужно делать исключительно по-английски» то же глупость. Хорошо продуманный интерфейс должен быть абстрактен от языка, любые надписи, будь то пункт меню или текстовая строка должны браться из файла локализации.
                                            +3
                                            Хорошо продуманный интерфейс не только абстрактен, он еще и учитывает особенности языков. Невлезающие строки, дурацкие сокращения, «2 предметов» и прочее получаются исключительно из-за излишней, неудобной или не гибкой абстракции.
                                              0
                                              Согласен )
                                              0
                                              Это правильно. Кстати, большинство моих проектов имеет локализацию на два языка и строки хранятся в файлах ресурсов. И в зависимости от текущей культуры выбирается нужная строка.

                                              По поводу «вдруг заинтересуются» — я говорил, что если есть такое подозрение — нужно сразу писать по всем стандартам. Но ведь бывают проекты, заточенные на конкретного заказчика, и никому больше они не нужны.
                                              +1
                                              А вот ошибки могут быть в случаях, когда Слово (первая буква русская) и Слово(первая — английская). Сразу можно не понять почему компилятор ругается. Думаю, что <C#> public string Name; // имя студента </C#> не умрет еще ух как долго.
                                                +1
                                                class Класс
                                                {
                                                public string перваяСтрока;
                                                public string втораяСтрока;
                                                double Значение {get {return СложитьДваЧисла(double.Parse(перваяСтрока), double.Parse(втораяСтрока);}}
                                                }

                                                Пунто свитчер не помог, руки офигели, пока это набирали.
                                                  0
                                                  Когда им пользовался, то он постоянно переключал раскладку при наборе if()… Так что в ide он был всегда отключен.
                                                  0
                                                  Помнится, было клевое решение задачи про поезда на C++ — на падонкафском русском языке. Смотрелось круто, да еще и компилировалось ;)
                                                    0
                                                    Есть кто найдет, поделитесь ссылкой, плиз.
                                                    0
                                                    Понравилось замечание Ky7m, но возник вопрос: как писать xml-комментарии в C# на нескольких языках?
                                                      –2
                                                      Товарищи коллеги, мыслите глобальнее. «Руки офигели», «пунто свитчер не помог»… Разработчик — это же не набивальщик текста, которому платят за скорость. Прежде всего мы анализируем предметную область, разделяем ее на сущности, определяем связи между ними, придумываем алгоритмы, рефакторим — вот наша основная деятельность. Сила разработчиков в умении мыслить абстрактно, обобщать… И только после этого уже идет конкретный язык со своим синтаксисом и правилами именования идентификаторов — будь то C#, Java или что-то другое…
                                                        +5
                                                        Вы забыли ещё упомянуть: соблюдаем стандарты.
                                                        Соглашение об именовании переменных это куда более важный стандарт, чем кол-во пробелов в отступе и положении {

                                                        Я бы отказался работать в команде, в которой принято использование русского в моделях. И даже не из-за того, что меня это очень уж бесит, а потому что я уже не могу доверять этим людям как профессионалам. Кто знает, на какие ещё правила они положили.
                                                          –2
                                                          Правила составляются не на всю жизнь для всех людей на планете, а для четко определенного диапазона ситуаций. И бывают ситуации (особенно в небольших проектах) когда стандарты явно избыточны. А кстати, вы точно ВСЕГДА на 100% без исключений соблюдаете свои правила?
                                                            +1
                                                            Situation ranges can be changed. And it changes more frequently, than you want.
                                                              +1
                                                              Некоторые – да.
                                                              К примеру, сейчас на работе у нас принято делать 2 пробела на отступ.
                                                              Мне это очень не нравится так, как я уже лет 8 использую 4. Но так, как это стандарт, принятый в нашей компании, я использую 2 пробела.

                                                              Вечерами пишу свои проги с 4 :)
                                                                0
                                                                Для вас придумали tab.
                                                          +3
                                                          Я уже высказался на эту тему, не так уже давно
                                                          adontz.blogspot.com/2010/08/blog-post.html
                                                            –2
                                                            Хорошая статья, однако выводы слишком категоричны. Понятно, что использовать русские идентификаторы везде — это крайность, но некоторых случаях для описания объектной модели это удобно.
                                                              +2
                                                              Отличная статья, в следующий раз сразу буду отправлять самодуров типа Kalantyr на неё и не тратить время на доказательства.
                                                                0
                                                                Доказательств нет. Есть много случаев — когда русскоязычные названия очевидно недопустимы. Но есть и случаи — когда они полезны.
                                                              +2
                                                              PEP 8:
                                                              Python coders from non-English speaking countries: please write your comments in English, unless you are 120% sure that the code will never be read by people who don't speak your language.


                                                              Я предлагаю все писать на грамотном английском: код, комментарии, объектную модель и прочая-прочая-прочая. More bad English, please!
                                                                0
                                                                Предлагаю следующие комменты писать исключительно по-английски. А то вдруг постом заинтересуются нерусскоязычные разработчики? А мы тут такие вольности допускаем, родным языком увлеклись…
                                                                  +4
                                                                  Ok, Why not?
                                                                    0
                                                                    I like to fuck every day every night!
                                                                    Yeah, baby, this is technology-related website Habrahabr %)
                                                                –2
                                                                Отвлекаясь от чисто технических нюансов, я еще думаю, что все мы находимся в волне некоторой англоязычной моды. На каждой футболке, сшитой в каком-нибудь подмосковном подвале без претензий на международный сбыт — обязательно красуется надпись на английском. И даже не так важно что она означает — главное чтобы были английские буквы. Даже машины ВАЗ, которые загранице никогда не потребуются — и те называются Slavia, Quanta, Adera… Если на каком-нибудь девайсе в магазине мы увидим русское название — в мозгу сразу срабатывает рефлекс :«некачественно». И так каждый день. Поэтому ОТЧАСТИ желание писать все по-английски вызвано именно этим рефлексом. Названо по-английски — значит, качественно. И неважно, что архитектура вся из костылей и нет покрытия модульными тестами. Главное — названо всё по стандартам…
                                                                  0
                                                                  Не надо примешивать сюда моду, пожалуйста. С чего вы взяли, что сколько-нибудь значимая доля кодировщиков/программистов/разработчиков пишет код на английском по той причине, которую вы описали?
                                                                  Одно дело писать код и другое дело именовать продукт. Если же говорить о брэндах, то я с вами согласен.
                                                                    0
                                                                    Я не писал что это основная причина, а написал — ОТЧАСТИ.
                                                                      0
                                                                      А я не писал, что вы категоричны в своём утверждении. И тем не менее, вы не ответили на мой вопрос. Кто-то из ваших знакомых говорил, что в частности из-за «приятности» английских слов пишет код на английском?
                                                                      Пока что аргумент выглядит надуманным. Намного более надуманным, чем такое мнение, например: «Некоторые из программистов-новичков пишут код на английском, потому что такова традиция.»
                                                                        +1
                                                                        Никто из моих знакомых не говорил, что купил китайский или отечественный товар потому что он назывался по-английски. Мода на английский ощущается подсознательно, вряд ли кто-то задумывается об этом серьезно. Ну то есть ответ на вопрос — «нет, так никто из моих знакомых не говорил».
                                                                    +1
                                                                    ВАЗ кстати продается в Европу, и будет собирать по контракту в Венесуэле (там же и продавать), так что не зарекайтесь.
                                                                      +2
                                                                      Английский является языком международного общения.
                                                                        0
                                                                        Да, это известно.
                                                                        Однако это не означает, что всегда и везде нам нужно общаться только на международном. Если проект отечественный (как, например, Хабр) — можно общаться и по-русски :)
                                                                          0
                                                                          Конечно, не означает.
                                                                          Я вот целиком и полностью согласен с правилами Python. Если вы на 120% уверены — пишите на русском :)
                                                                      0
                                                                      Программисты в какой-то мере все равно знают английский, а вот если потом этот код пойдет дальше? Станет открытым? И вот тут какой-нить индус, китаец, американец и т.д. увидит этот код. Всякое может быть. Да и программировать с переключением раскладки довольно скучно.
                                                                        0
                                                                        Допустим, вы написали клиентское приложение в помощь бухгалтерии родной фирмы полностью с соблюдением стандартов кодирования. Через какое-то время китаец или индус вдруг решает ее использовать (что как-то маловероятно). Запускает — а там весь пользовательский интерфейс по-русски! :) Теперь внимание — вопрос: скажите честно — ВЕСЬ ли ваш софт локализуется при помощи словарей ресурсов? Или иногда вы вставляете русские слова прямо в код или дизайнер форм? Это я к тому, что вероятнее всего иностранцы захотят пользоваться не кодом приложения, а самим приложением!
                                                                          +1
                                                                          А разве это требует много лишних усилий? Обычно инфраструктура для локализации уже написана разработчиком или куплена у кого-то и используется из проекта в проект. Причем самому разработчику наличие ресурсов здорово поможет если он допустил ошибку в тексте описания исключения например, или хочет этот текст уточнить.
                                                                            0
                                                                            Я знаю КАК НАДО и знаю КАК ЕСТЬ. В теории — да, все строки нужно выносить в ресурсы, числа в константы и т. д. Но на практике код переполнен нарушениями этих правил. Бывает, решение создается как временное, на коленке пишется говнокод без всяких правил вопреки всем шаблонам проектирования, а потом оказывается, что этот временный код живет годами и пухнет с приходом каждого нового поколения. Это та же история, что и велосипеды — каждый знает что не надо их изобретать, но при этом каждый проект — это коллекция велосипедов. Так что в теории всё отлично, а в жизни бывает по-разному, и слово «обычно» я бы заменил на «в некоторых случаях».
                                                                              +2
                                                                              Не стоит равняться на говнокод, писанный на коленке, иначе аналогичным образом никакие паттерны, практики и прочее — тоже не нужны.
                                                                                +1
                                                                                Речь шла о том, что если ВСЕГДА расчитывать на англоязычных разработчиков — то нужно и пользовательский интерфейс ВСЕГДА создавать сразу с возможностью локализации на несколько языков.
                                                                                  +1
                                                                                  А разве это не так? Локализация, схема обработки ошибок, безопасность (список может быть неполным) обязательно должны закладываться сразу и в любом проекте.
                                                                                    +1
                                                                                    Да, лично я так и делаю.
                                                                        0
                                                                        С русскими шрифтами не всё так гладко, как хотелось бы. Зачастую в равномерной смеси русского и английского один из них просто не воспринимается. Хотя — может это дела привычки.
                                                                          0
                                                                          Когда я в первый раз сделал смесь кода — ужаснулся — как это можно читать? Через несколько дней это уже не доставляет никаких проблем. Это однозначно дело привычки.
                                                                            0
                                                                            Уже много лет сам себя удивляю — как глаза фильтруют английские и русские буквы на клавиатуре? Если печатаю по-русски — глаза видят только русские буквы, если по-англицки — только английские. Чудеса… (Слепым методом не владею, так что смотреть приходится частенько)
                                                                            +1
                                                                            Для тех кто не читал статью до конца: в ней есть фраза «если в команде разработчиков не все владеют русским языком;». То есть если вы подозреваете, что код перейдет в OpenSource или понравится буржуям — то понятно, что писать все придется на международном языке. Предлагаю больше этот момент не обсуждать.
                                                                            Мне интересны комменты людей, которые действительно пробовали в каких-то проектах использовать русскоязычные идентификаторы.
                                                                            Например, у меня есть несколько личных работающих проектов, которые я не собираюсь никому передавать — объектная модель в них создана по-русски. Если кто-то сомневается в их работоспособности — приглашаю заглянуть в портфолио на моем хомяке.
                                                                              0
                                                                              Когда писал диплом, было много формул, что называется «из книжки». Применял греческий алфавит. Активнее всего использовались символы δ и φ. И вы знаете, набор был очень неудобен — приходилось «копипастить». А вот ожидаемого прироста читабельности кода я не заметил, так что мой подход оказался ошибочным.
                                                                              Мой пример, конечно, неточно подпадает под ситуацию «все основные идентификаторы пишем кириллицей», но для кого-то может и будет аргументом в пользу традиционного подхода к именованию.
                                                                                0
                                                                                А если бы вместо δ и φ в формулах использовались русские «ё» и «й» — было бы проще или также? Видимо, одна из причин копипаста была в отсутствии греческих букв на клавиатуре.
                                                                                  0
                                                                                  Вот на этот вопрос не отвечу. Просто не пробовал. Может вводить было бы уже не так неудобно. Но вопрос переключения раскладки практически не снять.
                                                                                  В самой дискуссии по теме я бы хотел услышать от людей больше стоящих аргументов. Всё-таки способ ввода важен, но, возможно, не приоритетен.
                                                                              –2
                                                                              В деле кодирования очень большую роль играют привычки. Со временем набор кода доводится до автоматизма, адаптируясь под текущую среду разработки, текущий язык программирования, текущие правила оформления кода, и малейшие изменения настроек редактора могут снизить скорость и раздражать. Мозг напрягается только когда решает задачу в первый раз, в следующие разы ответ уже берется из кэша, и вы можете думать о чем-нибудь своем, пока мозг автоматически делает работу, над которой раньше приходилось думать.

                                                                              ПЕРЕКЛЮЧЕНИЕ РАСКЛАДКИ при редактировании кода — это тоже ИСКЛЮЧИТЕЛЬНО ВОПРОС ПРИВЫЧКИ. Мозг приспособится к этой задаче за два-три дня и это перестанет напрягать — проверено на опыте.
                                                                                +3
                                                                                Всю ошибочность подхода понимаешь, когда наталкиваешься на переменную, например Область, c английской буквой O в начале или, еще того хуже, английской А в середине.
                                                                                  +1
                                                                                  За три года использования русских идентификаторов у меня был лишь один такой случай (с буквой «c»). Решить проблему оказалось несложно, и больше такое не повторялось.

                                                                                  Эту проблему можно и с ног на голову перевернуть: а вдруг кто-то в английском идентификаторе по невнимательности вместо английских «C» и «O» напишет русские? Для примера: угадайте — где три русских буквы в этом названии: ОbjectCоlleсtionProvider ???
                                                                                    0
                                                                                    Подсказка: я нашел русский символ (мимикрирующий под английский) при помощи VisualStudio
                                                                                      +2
                                                                                      Согласитесь, вероятность такого исхода в разы меньше когда вы не дрючите Ctrl + Shift(Alt + Shift для любителей) по десять раз на строку.
                                                                                        0
                                                                                        Большая часть кода в VisualStudio пишется при помощи IntelliSense и сниппетов. Таким образом, достаточно один раз аккуратно вбить названия — и потом выбирать их из выпадающих списков.

                                                                                        Да, конечно, что угодно может привести к глюкам. Но самые жесткие глюки (имеющие далеко идущие последствия) обычно кроются в неправильной архитектуре, или в том что разработчик неточно понял желания заказчика, или в том что кто-то из команды программистов непрально понял объектную модель. И это — важнее чем мелкие проблемы из-за раскладки. Обозначая проблему — давайте обозначать и ее важность на фоне других проблем, давайте учитывать приоритеты.

                                                                                        Разве идея описания предметной области языком, близким к языку заказчика — не важнее мелких проблем из-за невнимательности разработчика или стоимости слегка раздолбанной клавиатуры?
                                                                                          +2
                                                                                          Зачем мне вообще описывать модель предметной области языком заказчика? А если он кореец — предложите иероглифами писать? Описание на языке заказчика — это ТЗ.

                                                                                          Ему в любом случае должно быть глубоко пофиг как это написано, если он не заказывает либо
                                                                                          а) непосредственно исходники
                                                                                          б) долговременную расширяемую систему, у которой должны быть четкая архитектура и заказчик хочет в этом убедится, и то, думаю в этом случае у заказчика найдется компетентный тех-человек, понимающий английский
                                                                                            +1
                                                                                            Ответ — в статье. Перечисленные случаи попадают под критерий «если Заказчик продукта зачем-то требует — чтобы весь код был на английском».

                                                                                            А вот если вам закажут автоматизировать местную поликлинику или детсад — возможность создания русской объектной модели может очень пригодиться.
                                                                                              0
                                                                                              Чем?
                                                                                                0
                                                                                                Если между заказчиком и программистами у вас отдел аналитиков — тогда, может, и незачем. А если с постановщик задачи — сисадмин из поликлиники и отдела аналитиков у вас нет — тогда программистам будет легко обсуждать с сисадмином их «хотелки» и ваши «могульки» при помощи одних терминов.

                                                                                                Кстати, как правило, программисты не жаждут сильно разбираться в предметной области и терминологии заказчика.
                                                                                                  +2
                                                                                                  Если программистов больше чем один должен быть некий тимлид, который все утрясает.
                                                                                                  Если программист один и сам на это подвязался — он сам себе тимлид и сам себе буратино.

                                                                                                  Разбираться то приходится и использовать приходится, понятное дело. Но зачем мне в коде смешивать два языка — в упор не понимаю. Если я способен запомнить где и что такое «Гастроэнтерология» мне настолько сложно будет запомнить перевод слова «Gastroenterology»?

                                                                                                  После создания модели вы будете писать конкретные вещи по ТЗ, даже не задумаюсь над названием поля: надо вывести — вывел, надо присвоить — присвоил. А если уж что-то сложное, то вам в любом случае придется разобраться в предметной области и выучить пару новых слов будет наименьшей из проблем.
                                                                                                    +1
                                                                                                    Я согласен, что НЕОБХОДИМОСТИ нет.

                                                                                                    Хорошо когда есть альтернатива, когда вы можете по своим убеждениям или привычкам выбирать наиболее удобный для себя способ работы. До dotNET возможности создавать объектную модель на русском не было, теперь вот появилась. Некоторые из тех кто ее попробует — станут ее использовать по возможности всегда, остальные — будут работать «традиционно», и это не означает что кто-то из них прав или не прав.
                                                                                                    В конечном счете успех проекта зависит не от языка идентификаторов и даже не от языка программирования, а от более глобальных вещей.

                                                                                                    Ну и плюс — есть еще процессы, идущие независимо от наших привычек. Например — кириллические домены. Хотим мы или нет — бизнес сделает свое время, и скоро ссылки типа www.поликлиника123.рф будут восприниматься нами нормально, как бы презрительно мы сейчас не плевались.
                                                                                            0
                                                                                            И это — важнее чем мелкие проблемы из-за раскладки. Обозначая проблему — давайте обозначать и ее важность на фоне других проблем, давайте учитывать приоритеты.
                                                                                            В корне не согласен.
                                                                                            Неправильная архитектура не зависит от того, на каком языке написаны переменные, поэтому их сравнивать некорректно.
                                                                                            И в этом случае нет смысла жертвовать чем-то пусть и не очень большим, если это не даёт весомых плюсов.
                                                                                        0
                                                                                        встречался в коде 1 раз. в ХМЛ/Екселях раз 6. это жесть.
                                                                                        А еще пробелы бывают разные.

                                                                                        сидишь и выверяешь символы.
                                                                                        +1
                                                                                        И всё таки зря вы так. Я приведу свой пример. PHP тоже позволяет переменные классы и т.д. по русски называть. В принципе это работало у меня и на локалхосте и на сервере (правда не в реальном проекте, это я так развлекался, экспериментировал).
                                                                                        И да, я не люблю английский язык, и прохо его знаю, и зачастую чтобы называть переменную не транслитом а нормальным словом мне требуется гугль Транслейт и чтобы потом понять что эта переменная значит тоже. Я бы с удовольствие программировал «на русском».

                                                                                        Но несмотря на это всё таки кириллическое программирования в языках, которые для этого не приспособлены — зло, несмотря на то, что по русски я могу слепым методом набивать, а по английски нет.

                                                                                        На мой взгляд, постоянное переключение раскладки жутко неудобно $переменная. Для того чтобы это написать, требуется уже переключить раскладку. и так в каждой переменной? Жуть, я так клавиатуру за полгода разобью переключением раскладки. К тому же в большинстве языков программирования, стандартные функции, операторы, циклы, называются по английски. И такая мешанина русского с английским всё-таки не очень удобна. Конечно можно можно поизвращаться и сделать синонимы… но нафига! Лучше уж тогда написать свой собственный компилятор, свой собственный язык и т.д. где всё будет на том языке, на котором хочется.

                                                                                        Пы.Сы. К тому же многие среды разработки просто будут такие названия считать ошибочными, выделять и подчеркивать, в результате не поймёшь, где опечатался, а где просто название по-русски.
                                                                                          0
                                                                                          Видимо, вопрос в приоритетах — что ценнее: клавиатура или легкочитаемый код. Из 17 лет программирования 14 лет я тоже программировал исключительно по-английски. Однако лично я готов пожертвовать клавиатурой ради понятного кода.

                                                                                          Про подчеркивания и разные среды: при написании статьи я имел в виду исключительно VisualStudio, dotNET и C#. Еще я использую Resharper — русские идентификаторы он за ошибки не считает :)
                                                                                          +4
                                                                                          C# поддерживает юникод в исходниках с самого рождения, то есть лет десять уже как. Другое дело — зачем это использовать? ИМХО, знание английского для разработчика необходимо примерно настолько же, насколько и знание базовых алгоритмов, структур данных и синтаксиса языка, на котором он пишет. Код, написанный с использованием кирилических идентификаторов выглядит ужасно:
                                                                                          <code class="csharp">public List<Ученик> СоздатьСписокУчеников(List<Ребенок> списокДетей) {
                                                                                            var cписокУчеников = new List<Ученик>();
                                                                                            for(int индекс = 0; индекс < списокДетей.Count; индекс++) {
                                                                                              if(списокДетей[индекс].Возраст > 7) {
                                                                                                cписокУчеников.Add(new Ученик { 
                                                                                                  Имя = списокДетей[индекс].Имя, 
                                                                                                  Фамилия = списокДетей[индекс].Фамилия, 
                                                                                                  СтроковыйИдентификатор = индекс.ToString() 
                                                                                                });
                                                                                              }
                                                                                            }
                                                                                            return cписокУчеников;
                                                                                          }
                                                                                          </code>

                                                                                          Извините, но это ппц. Мне противно смотреть на такой код. Сравните с этим же кодом на английском:
                                                                                          <code class="csharp">public List<Pupil> CreatePupilList(List<Child> childrenList) {
                                                                                            var pupilList = new List<Pupil>(); 
                                                                                            for(int i= 0; i < childrenList.Count; i++) {
                                                                                              if(childrenList[i].Age > 7) {
                                                                                                pupilList.Add(new Pupil{ 
                                                                                                  Name = childrenList[i].Name, 
                                                                                                  Surname = childrenList[i].Surname, 
                                                                                                  StringId = i.ToString() 
                                                                                                });
                                                                                              }
                                                                                            }
                                                                                            return pupilList;
                                                                                          }
                                                                                          </code>

                                                                                          Какой проще читать?
                                                                                            –1
                                                                                            Оба варианта читаются одинаково легко.

                                                                                            Я уже писал, что это дело привычки. Сперва кажется ужасом — через несколько дней всё отлично. Таким же ужасом покажется любой новый язык программирования, но стоит немного попрограммировать на нем — и он начинает казаться естественным. Проверено на опыте.
                                                                                              0
                                                                                              Вас совершенно не беспокоят и не кажутся ужасными конструкции вроде списокДетей.Count, индекс.ToString() и List<Ученик>? Я уже молчу о том, что пока написал этот ужас, устал переключать раскладки.
                                                                                                –3
                                                                                                Не беспокоят. Попробуйте использовать такой код несколько дней, и обратной дороги не будет :)
                                                                                              0
                                                                                              а так?

                                                                                              /// <summary>
                                                                                              /// Фонды
                                                                                              /// </summary>
                                                                                              public partial class Фонд: ReferenceBase, IHierarchical<Fund>
                                                                                              {
                                                                                                /// <summary>
                                                                                                /// Назначенные площадки
                                                                                                /// </summary>
                                                                                                public EntitySet<Фонд.НазначеннаяПлощадка> НазначенныеПлощадки { get; set; }

                                                                                                /// <summary>
                                                                                                /// Дата начала
                                                                                                /// </summary>
                                                                                                public DateTime ДатаНачала { get; set; }

                                                                                                /// <summary>
                                                                                                /// Брокерские договора
                                                                                                /// </summary>
                                                                                                public EntitySet<БрокерскийДоговор> БрокерскиеДоговора { get; set; }

                                                                                                /// <summary>
                                                                                                /// Категория фонда
                                                                                                /// </summary>
                                                                                                public КатегорияФонда Категория { get; set; }

                                                                                                /// <summary>
                                                                                                /// Родительский элемент
                                                                                                /// </summary>
                                                                                                public Hierarchy Hierarchy { get; set; }

                                                                                                /// <summary>
                                                                                                /// Вести журнал
                                                                                                /// </summary>
                                                                                                public bool ВестиЖурнал { get; set; }

                                                                                                /// <summary>
                                                                                                /// Управляющая компания
                                                                                                /// </summary>
                                                                                                public Персона УправляющаяКомпания { get; set; }

                                                                                                /// <summary>
                                                                                                /// Объединяющий фонд
                                                                                                /// </summary>
                                                                                                public Фонд Parent { get; set; }

                                                                                                /// <summary>
                                                                                                /// Дата регистрации ПДУ
                                                                                                /// </summary>
                                                                                                public DateTime? ДатаРегистрацииПДУ { get; set; }
                                                                                                
                                                                                                /// <summary>
                                                                                                /// Тип фонда
                                                                                                /// </summary>
                                                                                                public ТипФонда Тип { get; set; }
                                                                                              }

                                                                                              * This source code was highlighted with Source Code Highlighter.
                                                                                                0
                                                                                                XML-комментариев на русском за глаза бы хватило. Зачем переводить еще и идентификаторы — не понятно.
                                                                                                  –2
                                                                                                  Можно сказать и наоборот — названий идентификаторов бы хватило за глаза. Зачем нужны XML-комментарии — непонятно :)
                                                                                                    0
                                                                                                    Попробуйте потом построить отчет на основе данной сущности, и разобраться, что означает каждое поле(колонка в бд) если она на английском
                                                                                                    ЗЫ я привел в пример очень упрощенную сущность
                                                                                                    ЗЗЫ эти сущности, как правило, с кучей спец. фин. терминов
                                                                                                      –1
                                                                                                      Многое зависит еще и от архитектуры решения. Если выделены слои объектной модели и слоя доступа к хранилищу — проблем не будет. Если такого разделения нет и предполагается что объектная модель сама собой вытекает из схемы таблиц — проблемы обязательно будут. Но их причиной будут не столько русскоязычные идентификаторы, сколько неграмотная слипшаяся архитектура.

                                                                                                      Кстати, мне в работе все чаще попадаются базы (SQL), в которых таблицы и столбцы названы по-русски. Сам я в SQL не силен, использую EntityFramework — проблем с русскими названиями ни разу не было.
                                                                                                    0
                                                                                                    Красота…
                                                                                                  +1
                                                                                                  Надеюсь ваш код мне не попадется )
                                                                                                    0
                                                                                                    Почему?
                                                                                                      +2
                                                                                                      Пишите код так, будто человек, который будет его поддерживать – маньяк-психопат, который знает, где вы живете
                                                                                                        0
                                                                                                        Где вы живёте?
                                                                                                      +4
                                                                                                      Люто, люто, люто и бешено хочется взять и уе….
                                                                                                      Мне как то пришлось анализировать код отсюда: www.bankuralsib.ru/mediacache/Bank2006/scripts/calc_engine_cc.js
                                                                                                      Уже на пятой минуте мои руки сдавливали воображаемое горло автора.
                                                                                                        0
                                                                                                        шедеврально )
                                                                                                          –1
                                                                                                          Кто-нибудь еще понимает — почему (кроме снобизма) код по ссылке так бесил вольфа? Впрочем, я не знаток JS, и возможно, специфика языка не позволяет писать по-русски?

                                                                                                          По-моему — хороший код — это неглючащий и легко модифицируемый код. Остальное не так уж важно.
                                                                                                            +1
                                                                                                            Никакого снобизма. Этот код хороший по стилю программирования и отвратительный из за рускоязычных идентификаторов. Они как липкие назойливые мухи, не причиняя видимого время, отвлекают на себя, заставляют отмахиваться, продираться сквозь них стараясь не потерять алгоритмику автора. Его удобно поддерживать только автору.
                                                                                                              0
                                                                                                              Ощущения понятны. У меня тоже такое поначалу было.
                                                                                                              Но как я уже писал — через несколько дней использования русских символов это проходит. Кто не верит — попробуйте :)
                                                                                                              0
                                                                                                              function ЗагрузитьПрограммы() // Загрузка перечня программ в селект
                                                                                                              {
                                                                                                              var text = "";
                                                                                                              $("#rate").empty();
                                                                                                              for (var i=0; i<_Программы.length; i++)
                                                                                                              {
                                                                                                              text += "<option value=\"" + i + "\"> " + _Программы[i].Название + "
                                                                                                              ";
                                                                                                              }
                                                                                                              $("#rate").append(text);
                                                                                                              rate_onchange();
                                                                                                              }

                                                                                                              Может быть, т.к. «text», а не «текст», 'i' а не 'счётчик' и «rate_onchange()», а не «смена_программы_кредитования()» и «Загрузка перечня программ в селект», а не «Загрузка перечня программ в выделение», не?
                                                                                                            0
                                                                                                            При переключении раскладки, очень раздражает то, что кавычки и запятые внезапно меняют свое расположение, и надо в голове потом еще удерживать в какой я раскладке нахожусь, чтобы их набрать правильно.

                                                                                                            > Почему же тогда программисты не жалуются когда пишут код вида Console.Write(«Привет, Мир!»); — ведь тут тоже нужно переключаться.
                                                                                                            Всегда считал, что пишут «Hello World», а ваш привет мир с «», я даже не скажу сходу, какой компилятор проглотит без ошибок.

                                                                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                            Самое читаемое