(С) Иван Хафизов, nalichniki.com

Программирование на русском языке

Широко распространено мнение, что английский является международным языком программистов и программировать можно только на нём. На самом деле, опыт 1С показывает, что вполне можно программировать (и хорошо зарабатывать) с использованием русского языка. Таким образом, „можно“ или „нельзя“ - это вопрос не того, как лучше, а только лишь вопрос о том, как договориться. Если российске медики и моряки разговаривают и пишут документы и учебники на русском языке, хотя изначально языком медицины была латынь, а морское дело пришло к нам из Голландии, то почему росссийские программисты не могут вести свою работу на русском языке? На самом деле в очень многих случаях могут. Многие могут, но просто не хотят. Мы работаем для тех, кто хочет, т.к. считаем, что работа на родном языке более эффективна, чем на иностранном. Проект „программирование-по-русски.рф“ - направлен на улучшение практики разработки на русском языке и пытается охватить разные аспекты этой проблемы.

  • Терминология - поскольку область ИТ в России фактически является двухъязычной, у нас есть переводы большинства нужных слов. Однако, именно для программирования есть дефицит терминов. Мы собираем эти слова и фиксируем их в словаре
  • Особенности чтения и ввода двухъязычного текста - у нас есть решение проблемы с неудобным переключением раскладки и несколько решений проблемы неотличимости русских и латинских букв а,е,с,о и прочих.
  • Создание примеров программ на русском языке. Такие примеры на сегодня уже есть: 1С, КуМир, советское наследие. Однако нет примеров современных компиляторов и ОС, написанных на русском языке. Мы разрабатываем такой пример - систему ЯОС, переводя швейцарскую систему A2, созданной в школе Вирта (Вирт - автор языка Паскаль).

Ответы на основные вопросы и возражения

В: Программирование - не на английском языке, а на языке программирования, который не является текстом на английском языке, от английского там всего лишь пара десятков ключевых слов. О: Давайте заглянем в типичный текст программы:

/* Allocate memory for the response, size is 1 byte
 * message type, plus 2 bytes payload length, plus
 * payload, plus padding
*/
 
buffer = OPENSSL_malloc(1 + 2 + payload + padding);
 
//allocate all that memory without any checks
 
bp = buffer;
 
/* Enter response type, length and copy payload */
*bp++ = TLS1_HB_RESPONSE;
s2n(payload, bp);
memcpy(bp, pl, payload);
bp += payload;
/* Random padding */
RAND_pseudo_bytes(bp, padding);
 
r = dtls1_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 3 + payload + padding);
В этом фрагменте программы, написанной на языке Си, немного специальных значков у условных обозначений (pb и pl) но множество английских слов и аббревиатур. В том числе, тут есть и комментарии - фразы на английском языке, предназначенные для чтения человеком. Без достаточно хорошего знания английского понять, что тут написано, нельзя. Вот как выглядил бы этот же пример на русском языке:
/* Выделить память для ответа, размер состоит из 1 байта
* (тип сообщения) плюс 2 байта - длина полезной нагрузки, 
* плюс полезная нагрузка, плюс выравнивание
*/
 
буфер = OPENSSL_дайпамять(1 + 2 + полезная_нагрузка + выравнивание);
 
//выделить всю память без всяких проверок
 
bp = буфер;
 
/* Ввод типа ответа, длины и копирование ползеной нагрузки */
*bp++ = TLS1_HB_ОТВЕТ;
s2n(полезная_нагрузка, bp);
копируй_память(bp, pl, полезная_нагрузка);
bp += полезная_нагрузка;
/* Выравнивание случайными данными */
СЛУЧ_псевдо_байты(bp, выравнивание);
 
r = dtls1_пиши_байты(s, TLS1_RT_СЕРДЦЕБИЕНИЕ, буфер, 3 + полезная_нагрузка + выравнивание);
Если вы плохо знаете программирование или хорошо знаете английский, вам может показаться, что эти тексты одинаково понятны или одинаково непонятны. Поэтому для контраста я покажу перевод этого же текста на китайский:
/*为响应分配内存,大小为1字节
*消息类型,加上2个字节的有效载荷长度,加上
*有效载荷,加上填充
*/

缓冲区=OPENSSL_malloc(1+2+有效载荷+填充);


//分配所有的内存,没有任何检查

bp=缓冲区;

/*输入响应类型、长度和复制有效负载 */
*bp++=TLS1_HB响应;
s2n(有效载荷,bp);
内存副本(bp,pl,缓冲区);
bp+=有效载荷;
/*随机填充 */
RAND伪字节(bp,填充);

r=dtls1写入字节(s,TLS1_RT_心跳,缓冲区,3+缓冲区+填充);
Исходя из этих примеров, должно быть достаточно очевидно, что программы по большей части написаны "на человеческом языке" и не являются просто некими абстрактными закорючками, т.е. их нельзя сравнивать, к примеру, с математическими формулами. Языки, в которых программы изображаются только абстрактными закорючками, существуют, но ими почти никто не пользуется.

В: Переводя программирование на местный язык, вы разрушаете международное сообщество разработчиков, без которого вы бессильны в решении задач. О: незаменимость международного сообщества разработчиков не нужно преувеличивать. Международные проекты есть, но подавляющее большинство программ разрабатываются небольшими коллективами в рамках одной страны, говорящими на одном языке, причём этот язык необязательно английский. Например, в Microsoft - примерно 40 тысяч инженеров, т.е. около 0,4% всех мировых программистов. Этого количества хватило, чтобы создать с десяток версий Windows, Microsoft Office, Visual Studio и множество других программ. Если эти люди общаются между собой на английском, то не потому, что это международный язык, а потому что это их родной язык. Поскольку исходные тексты Windows, Office и многих других продуктов Microsoft не распространяются, они должны быть написаны на том языке, который наиболее удобен разработчикам. Если разработчики находятся в США, английский является естественным выбором. Если разработчики какой-то программы находятся в России, и исходный текст, который они пишут, не предназначен для чтения иностранцами, то естественным выбором, в том числе и для исходного текста, является русский. При этом, ничто не мешает этим же людям использовать английский там, где это уместно или необходимо.

В: для программирования нужно совсем немного английских слов, они учатся без труда О: это возражение ещё дальше от правды, чем предыдущие и годится только для случая, когда больше сказать нечего. Однако это частое возражение, поэтому мы на него ответим: Если это действительно так, то и русских слов для программирования нужно совсем немного, они учатся без труда, и можно спокойно писать программы на русском языке: любой иностранный читатель легко освоит немного руссих слов и поймёт нашу программу, если ему это понадобится

В: Как вы собираетесь переводить Sin(α)? О: мы не собираемся это переводить

В: Стандартные библиотеки языков программирования - на английском. Как быть с этим? О: на это есть решения. Если библиотека маленькая (до 20 слов), её можно оставить как набор условных обозначений. Однако, к примеру, в стандартных классах Java SE больше 1000 английских слов в одних только названиях классов. В этом случае можно использовать автоматизированный перевод, когда каждое имя может быть введено на разных языках. Подобные примеры есть в формулах Microsoft Excel и языке программирования 1С. В ЯОС также используется подобная техника - команды ОС можно вводить на двух языках.

Подробнее...