Разработка
Григорий Петров: О роли английского языка в разработке
Сегодня хочу рассказать о еще одном спорном моменте: необходимости разработчику знать английский язык. Или об отсутствии такой необходимости, потому как мнения в данном вопросе разделились так же надежно, как и в вопросе написания кода Тим лидом.
[button color=4d61d7 icon=arrow-left-2 url=https://apptractor.ru/develop/grigoriy-petrov-strashnyiy-zver-team-lead.html] Предыдущая статья [/button]
Предыдущая статья о роли Тим лида вызвала бурное обсуждение, центральной частью которого стало замечание о том, что код, написанный опытным программистом, трудно поддерживать и развивать его менее опытным коллегам. Хотя это чисто программерская история, полагаю, ее нелишне будет осветить в одной из следующих статей — с примерами, теорикрафтом и практическими советами. Все как я люблю. А сегодня хочу рассказать о еще одном спорном моменте: необходимости разработчику знать английский язык. Или об отсутствии такой необходимости, потому как мнения в данном вопросе разделились так же надежно, как и в вопросе написания кода Тим лидом.
Доводы о второстепенной роли английского языка
За свою долгую карьеру я встречал много хороших программистов, которые не знают английский язык. Причем не только в «пожилых» областях, но и в совсем новых, таких как мобильная разработка под iOS и Android. Синтаксис большинства языков программирования, несмотря на английские корни, использует очень мало «слов». Ну а для библиотек есть переводы документации, позволяющие разработчику спокойно работать, не зная ни одного слова по-английски.
Пообщавшись со множеством команд разработки и их руководством, я могу сформулировать их позицию следующим образом: знание английского это хорошо, но главное в работе программиста – это алгоритмы и структуры данных, которые не зависят от языка. Все необходимое для работы имеет перевод интерфейса и сообщений: интерпретаторы и компиляторы, среды разработки, документация к языку программирования и популярным библиотекам. Поэтому, если у человека нет желания изучать английский как иностранный язык для общения, то ему нет никакой необходимости делать это только для того, чтобы быть хорошим разработчиком.
Думаю, многие из вас слышали такие или подобные утверждения. Я с ними не согласен.
Доводы о необходимости свободного владения письменным английским
Фразу о том, что «программирование — это такая математика, которая кроме формул еще немного использует алгоритмы и структуры данных» я слышал много раз. И, как уже говорил в предыдущих статьях, немного с ней не согласен. Программирование — это не математика. Это борьба со сложностью. Сложностью, которую порождает текст программы целиком. В эту сложность включается все: языки программирования, стиль написания, приемы декомпозиции и именования идентификаторов, использованные фреймворки и библиотеки. Даже стиль комментирования исходного кода и то, как используются системы управления версиями и задачами, оказывает большое влияние на суммарную сложность программного продукта.
Я считаю что те, кто говорит про небольшую роль синтаксиса языка программирования, правы. Вообще, изучив десяток языков программирования, начинаешь видеть, что они очень похожи. Только вот основную роль играют не «алгоритмы и структуры данных», а набор приемов, которыми разработчик борется со сложностью. И многие эти приемы требуют знания именно английского языка.
Во-первых, Stackoverflow. Звучит смешно, но за несколько лет этот сайт стал незаменимым помощником для разработчиков. Умение грамотно составить поисковый запрос на английском языке, а затем быстро читать ленту выдачи Google и ответы на Stackoverflow, позволяет разработчикам сразу получать хорошие, выверенные решения типовых проблем и постоянно повышать свою квалификацию. Второе даже более важно: пользуясь Stackoverflow и внимательно читая ответы лучших мировых разработчиков, программист постоянно улучшает свои собственные навыки и расширяет свой кругозор.
Популярность Stackoverflow настолько высока, что была создана официальная русская версия сайта, которая позволяет разработчикам не только общаться по-русски, но и обсуждать специфичные для русскоязычного сообщества технологии, например 1С. Русская версия сайта хороша для ряда применений и может стать неплохим подспорьем в работе — но ни разу не освобождает от необходимости пользоваться английским Stackoverflow, объем информации на котором несоизмеримо больше.
Вторым пунктом неожиданно идет язык интерфейса программ, используемых при разработке, как графических, так и утилит командной строки. Несмотря на то, что для многих программ интерфейс переведен (лично видел русскую версию Visual Studio — выглядит устрашающе), все упирается, как это ни странно, в поиск Google. Информацию о настройках, ошибках и непонятных сообщениях принято искать в литеральной форме, заключая текст в кавычки. И результатов для англоязычной версии будет намного больше, чем для русской. Если для большинства английских сообщений об ошибках ввести их текст в поисковую строку Google, то на выходе мы получим либо популярную статью как с этим бороться, либо подробный ответ на Stackoverflow. Для русской версии того же сообщения мы чаще всего не получим ничего — просто потому, что слишком мало разработчиков использует русские версии программ разработки, и поиск не «насыщен» фрагментами сообщений об ошибках. Учитывая, сколько времени разработчик проводит за отладкой, использование именно английских версий программ для разработки становится необходимостью.
Более того, большинство программ, библиотек и фреймворков создаются с текстами на английском языке. Перевод на другие языки добавляется уже намного позже, часто — силами сообщества. Именно поэтому разработчик, хорошо знающий английский язык, может эффективно пользоваться всеми доступными инструментами, в то время как его коллега без знания языка вынужден ограничиваться переведенными инструкциями и обучающими статьями, при этом интерфейс и сообщения самих инструментов ему малопонятны.
В целом этих двух доводов достаточно, чтобы стимулировать разработчиков изучать английский язык для работы. Дополнительно можно рассказать о том, что, несмотря на множество хороших переводов на Хабре, огромное количество важных статей и записей в блогах остаются непереведенными. Знание английского языка и подписка на Reddit позволяет регулярно читать полезнейшие статьи от лучших мировых разработчиков и ориентироваться в текущем состоянии индустрии — что, в свою очередь, позволяет более осмысленно выбирать и применять фреймворки и библиотеки, постоянно конкурирующие друг с другом за умы разработчиков. Еще можно рассказать о том, что знание английского языка позволяет без усилий давать имена идентификаторам, не прибегая к транслиту. Чем плох транслит? Называя функции «proverkaKodaKlienta», разработчик лишает себя и свою компанию возможности отдать этот код на аутсорс, так как работать с ним смогут только люди, знающие русский язык. Хорошая такая мина замедленного действия, если продукт станет успешным и к его разработке привлекут сторонних разработчиков не из России.
На каком языке писать комментарии?
Этот вопрос мне часто задают на консультациях. Здравый смысл подсказывает, что если разработчик хоть как-то знает английский язык, то и комментарии нужно писать на английском, чтобы при необходимости этот код можно было показывать англоговорящим коллегами без потери контекста.
Увы, здравый смысл и житейская мудрость хорошо работают в быту. Это может показаться контр-интуитивным, но комментарии на английском языке можно писать, только если большинство разработчиков в команде знают английский действительно хорошо. Причина проста: если разработчик испытывает трудности в формулировании своих идей на английском языке, это ведет сразу к двум печальным последствиям:
- Такой разработчик будет стараться писать как можно меньше комментариев. Мозг старается не тратить лишний раз сахар на сложную когнитивную деятельность, и человек будет инстинктивно избегать трудной для него интеллектуальной работы, даже если сознательно это не признает.
- Неграмотно написанные комментарии трудно понять. Разработчик считает, что он разъяснил тонкий момент в коде — но на самом деле написанный им комментарий понятен только ему. И то, пока он помнит код. Другой разработчик, прочтя такой комментарий, не сможет его понять. Более того, сам автор такого комментария не сможет понять свой комментарий, когда через некоторое время забудет связанный с ним код.
Выводы
Выводы тоже… неожиданные. Думаете, я сейчас порекомендую срочно всех разработчиков сподвигать на героическое изучение английского? Неа. Если человек сам не хочет, то сподвигнуть его на что-нибудь не так просто. Поэтому практическое применение этой статьи найдет свое отражение с другой стороны — со стороны найма. Именно при найме разработчиков очень важно выяснять их отношение к изучению английского языка и роли знаний языка в работе. Если вы выбираете из двух специалистов, то при прочих равных разумно будет отдавать предпочтение тому, кто лучше знает английский язык: в свете описанных выше причин эти знания помогут ему не только заказать кофе во время отпуска в Европе, но и делают его чуть лучшим программистом.