Зачем программисты изучают несколько языков

Антон Жуков, автор курса «Профессия Go-разработчик» в Skillbox — о том, почему программисты не останавливаются на одном языке разработки, как их изучение влияет на принимаемые решения и при чём тут когнитивные искажения бразильских аборигенов.

Зачем программисты изучают несколько языков

Язык программирования — такой же инструмент для разработчика, как нож для повара или молоток для плотника. Потенциально работать можно чем-то одним, но с точки зрения эффективности — это бред. Большинство программистов знают больше одного языка, а наиболее успешные практикуют разработку на нескольких одновременно, даже если специализируются только на одном.

Программист думает языком, а язык — программистом

Языки программирования мало чем отличаются от обычных разговорных языков: тот же набор ключевых слов, символов, а также правила порядка их употребления. Основная работа программиста — не написание кода, а разработка алгоритмов. Язык лишь средство выражения алгоритма в понятной для машины форме. Знание нескольких языков расширяет угол зрения для оценки задач.

Каждый язык программирования по своему уникален, это позволяет со свойственной ему уникальностью решить задачу. Язык из сферы базового образования, C++, и один из старейших языков, Lisp, можно назвать антагонистами. Их сравнение кардинально меняет восприятие разработки. Также как и сравнение языка бразильских аборигенов Пирахан меняет восприятие разговорных языков.

Им неизвестны понятия времени, цветов, числительных и названий для степени родства. Это накладывает серьезный отпечаток на когнитивные способности носителя. Пирахан способны обсуждать лишь то, что происходить здесь и сейчас, они не могут воссоздать что-либо, опираясь на память, творить и даже запасаться едой впрок. Их пример показывает, что язык определяет предел способностей к оценке окружающего мира и степени влияния на него. Таким образом сложность задач, которые мы способны решать, зависит от того языка, которым мы думаем.

Когда программист решает задачу, то он мыслит инструментами, которые этот язык программирования способен дать. Американский предприниматель Пол Грэм отметил, что специалист с низкой квалификацией не в состоянии осознать этого из-за своей низкой квалификации. Уже в отношении разработки он наблюдает зависимость программиста от языка, которым тот пользуется. Разработчики любят «свои» языки поскольку привыкли думать на них, а языки, в свою очередь, лексикой диктуют программистам, как они должны думать о программах. Это образует парадокс, который невозможно разорвать без изучения нового языка.

Зачем нужно так много разных языков программирования

Практически все языки программирования появились для решения специфических задач или в ответ на невозможность решить их существующими инструментами.

  • Python был создан на досуге — нужен был расширяемый скриптовый язык. Сегодня он стабильно возглавляет чарты популярности и является универсальным языком: от разработки обычных сайтов до ML.
  • PHP создавался не как язык программирования, а как препроцессор текста. В 1995 его использовали для быстрого создания своей странички в сети. Сегодня на нём работает Facebook, Yahoo и, например, Wikipedia.
  • JavaScript разработали для дизайнеров и программистов с низкой квалификацией, что «оживить» веб-сайты, сделав их динамическими. Сейчас это один из самых востребованных языков, без него невозможно представить современный интернет.
  • Golang, созданный в Google, должен был стать простой и высокоэффективной альтерантивой тяжеловесным языкам. Спустя 11 лет между словами «Go», «эффективность» и «простота» можно ставить знаки равенства.

Примеры можно перечислять и дальше. По различным оценкам существует от одной до нескольких тысяч языков программирования. Вот почему: для создания базового интернет-магазина с нуля придётся начать с абсолютного минимума — двух-трёх языков программирования и такого же количества языков семантической разметки. По мере роста нагрузки на сайт, нужно повысить его производительность. Эту задачу решают другие языки. Вместе с ростом аудитории появляется необходимость её анализировать — ещё один язык в копилку. Большие данные нужно где-то хранить и, чтобы не перегружать сервера, так называемую «горячую» часть размещают в кэше — оперативной памяти компьютера. На этом этапе в игру вступает новый протокол коммуникации. Таким образом задачи типового магазина решаются десятком различных технологий.

Темп диктует

В результате коронакризиса IT-гиганты и организации поменьше вынужденно оптимизировали штат. Потребность в специалистах широкого профиля резко увеличилась, с найма уникальных бойцов фокус сместился на обучение универсалов. Вопрос о знании программистом нескольких языков стал особенно актуален, хотя такая тенденция обусловлена и историческими обстоятельствами.

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

Первым это заметил британский математик и философ Дэвид Гест, который стал отцом-основателем «Т-образной» модели развития профессиональных качеств. Он утверждал, что решения таких работников неординарны. Они способны использовать даже минимальные знания о функционировании смежных профилей для оценки проблемы более чем с одной стороны. Популяризатором этой модели выступил дизайнер Тим Браун. Он декларировал потенциал таких специалистов как идеальных лидеров для проектов, работающих в условиях постоянных изменений. Позже Т-принципы органично вписались в метод управления проектами Scrum.

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

Таким образом, способность постоянно учиться, совершенствоваться и расширять свою сферу знаний — основной фактор, определяющий успех специалиста. Чем автономнее программист, тем он ценнее. И тем он автономнее, чем больше языков знает.

2020
18 комментариев

Программисты: постоянно совершенствуются, развитаются и учат десят языков
Те же программисты:

18
Ответить

Многовато слов в поиске у сеньора, ж даже у мидла там будет максимум "java get date") хорошо обученный Гугл уже можно писать дополнительной строчкой в резюме)

Ответить

Комментарий недоступен

5
Ответить

членометры - на изготовку! :)

3
Ответить

ща питона потянут )

1
Ответить

Разработчик должен знать 3 язка минимум, иначе он не разработчик

2
Ответить

я может удивлю, но разработчик может вообще не знать языков программирования и при этом быть востребован. разработчик ≠ программист

3
Ответить