Какой язык программирования больше всего любят в Яндексе? И всегда ли любовь взаимна

Сегодня мы хотим продолжить серию постов, в которых задаём разработчикам из Яндекса и пользователям Хабра самые острые для любого программиста вопросы. Сегодня это вопрос о том, какой язык программирования для вас любимый.В любой компании, где есть разработчики, периодически возникают споры о том, ужасен Perl или прекрасен, обязательно ли знать функциональные языки или нет, насколько мотивирован выбор C++, с какого языка программирования нужно начинать учиться и т.п.

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

[embedded content]

Многие из тех, с кем я говорила, знакомы вам по постам в блоге Яндекса на Хабре: anatolix, kappa, bobuk, yafinder, styskin. Несмотря на то, что многие участники нашего опроса стали руководителями, они продолжают писать код. Под катом можно прочитать подробные ответы, не полностью попавшие в видео, и рассказать, что вы думаете по теме.Сергей svv ВавиновПрограммирует 27 лет. В Яндексе — 6 лет.

Пришёл в Яндекс разработчиком в Яндекс.Видео. Был главным в разработке Музыки, потом — в службе медиасервисов. Сделал несколько проектов для Яндекс.Диска. Сейчас — руководитель группы технологий работы с большими данными. Одна из задач, над которой работает Сергей, — проекты Яндекса для ЦЕРНа.

16657cf4305369566086455371dfaeff.png

Я боюсь, что моего любимого языка программирования еще не создали, но могу перечислить нелюбимые. Мне не нравится C++. Он из тех языков, которые, наверное, нужно знать и на которых нужно уметь писать. То есть, как зарабатывать деньги, драться — можно любить, можно не любить, но нужно уметь. Для многих проектов полезно знать Java. С точки зрения самого языка, он достаточно плохой и убогий. Люди, которые всерьез занимаются программированием, сразу будут чувствовать его ограничения. Но Java — это не только язык, но и платформа: виртуальная машина JVM, стандартная библиотека, большое количество open source библиотек. Если понимать достоинства и ограничения платформы, это вполне подходящий язык для многих больших проектов. Очень важно знать какие-то скриптовые языки — Perl, Python. Первый, скорее, из нелюбимых, в второй — из любимых. 

Есть некоторые количество языков, у которых есть какие-то перспективы и из которых могут вырасти реально достойные. Сейчас сложно судить, какие из них выстрелят, но за ними стоит следить, чтобы понимать, какие в них заложены идеи. Из таких языков, например, Rust — язык, который сейчас используется для всяких мозилловских разработок. Он достаточно современный и потенциально может заполнить нишу, которую сейчас занимает C++ и отчасти Java. В нём много идей и из функционального мира, много идей о безопасном программировании. Но пока это именно исследовательская разработка, но Rust из тех языков, за которыми стоит следить. 

Артём breqwas КуликовПрограммирует 12 лет. В Яндексе — 8 лет.

В Яндекс позвали за то, что я парсил данные из Поиска по блогам с помощью Перла. Позвали не только поругать, но и на работу. Много лет делал Поиск по блогам, в частности был основным разработчиком подсервиса Яндекс.Пульс. Сейчас разрабатывает Рекламную сеть, один из самых критичных в смысле отказоустойчивости сервисов.

72cd9d0b83b86341141374409d59bb56.png

Я пишу программы на языке программирования Perl, и мне это нравится. Когда-то давно меня прособеседовали на язык C++ и взяли на работу. Я тогда хоть и был студентом, но уже успел где-то поработать. И вот в Яндексе мой тогдашний начальник, которого все именуют Дрюха, несмотря на то, что у него есть имя и фамилия, спросил меня: «Хочешь на C++ программировать?»  Я ответил: «Не-е-ет». В ответ он сказал: «Тогда учи Perl». И я его выучил. С тех пор пишу на нём, и это просто прекрасно Он не пытается объяснять мне, что надо делать, и я пишу так, как хочу сам. 

Нелюбимый язык программирования — это тот, который вызывает боль и несчастье. Обычно на таких языках люди не пишут. Зачем? Есть языки, которые у меня вызывают боль, а у остальных — нет. Например, есть у нас люди (и некоторые из них даже сидят со мной в одной комнате), которые любят писать большие программы на языке Shell. Это ужасно. Зачем они это делают, я не знаю, но они их пишут. И мне их приходится читать. Это неприятно. 

Андрей МищенкоПрограммирует 24 года. В Яндексе — 9 лет.

Пришёл в Яндекс разработчиком на C++, долго был руководителем разработки Поиска по блогам. Сейчас работает над улучшением алгоритмов машинного обучения в поиске.

9379634b74fee0def0ed9d91f81baaa7.png

Мой любимый язык программирования не для работы, а для души, это, конечно, Haskell. По крайней мере, когда я о нём узнал, он произвел на меня самое большое впечатление. Все, что было до этого, померкло. Я представить себе не мог, что могут быть языки программирования настолько стройные математически. Какие там замечательные системы типов, какие там замечательные ленивые вычисления, как там можно удобно и компактно формулировать мысли. Но я прекрасно понимаю, что для работы он более-менее не применим. На нём удобно писать статьи, когда ты хочешь рассказать о каком-то алгоритме так, чтобы его очень хорошо все поняли, а твой рассказ при этом был очень коротким. Вот в таких случаях код лучше всего написать на Haskell. Кому надо, те поймут.

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

Если говорить о нелюбимых языках, то, наверное, могу вспомнить XSL. Он очень громоздкий. То есть в нем были совершенно замечательные задумки, но то, как они воплотились, меня пугает. 

Алексей kappa КапрановПрограммирует 21 год. В Яндексе — 3 года.

Когда-то был руководителем Рамблер-Почты. Сейчас руководит группой инфраструктуры персональных сервисов в Яндексе. Лёша рассказывал на Хабре, как мы научили Почту обмениваться письмами по IPv6 и поддерживать SSL-шифрование.

Мой любимый язык программирования традиционно старый Perl. Начал я им заниматься еще на первых курсах института. Вопреки требованиям наших преподавателей делал на нём все лабораторные и диплом. Сейчас я не так часто занимаюсь непосредственно программированием, но по-прежнему Perl — это инструмент, который я использую чаще, чем любой другой. 

Когда-то это был первый динамический, первый скриптовой язык, который позволял очень-очень быстро воплощать свои идеи и мысли в жизнь. После него появилось много последователей, но, мне кажется, он остался самым нескучным из всех скриптовых языков. Один из его важных принципов — это то, что любое действие можно выполнить несколькими способами. Часто этих способов действительно много, и это позволяет выбрать из них иногда самый быстрый, иногда — самый элегантный, иногда — самый короткий, иногда, может быть, самый понятный другому человеку, не знакомому с языком. Perl позволяет одну и ту же программу написать миллионами разных способов. Это очень прикольно. 

А языка, который бы вызывал у меня прям негативные эмоции, я не припомню. Разве что какие-то очень-очень многословные языки типа неаккуратной студенческой Java. 

Анатолий anatolix ОрловПрограммирует 25 лет. В Яндексе — 9 лет.Первые два года писал Маркет. Долгое время занимался поиском — в основном его производительностью, а потом и всем остальным. Сейчас занимается разными проектами в области скорости, архитектуры и т.д. Заместитель руководителя направления поисковых сервисов. Входит в 2% людей, которые заканчивают курсы на Coursera.

914ca67b21bbf583274a008cf812178b.png

Любимый язык программирования у меня C++. И нелюбимый язык программирования у меня тоже C++. Что достаточно странно. Я его люблю за то, что он мощный и в нём ты не платишь за возможности, которые не используешь. Но современные языки программирования позволяют писать те же самые вещи сильно проще.

К сожалению, никакого более любимого языка программирования уже не появится. Сейчас все новые языки условно не для тех программистов, которым нужно написать какой-нибудь high performance, а для индусов, за которыми нужно почистить память, потому что они сами этого не умеют. А я хочу язык, чтобы, грубо говоря, если и была сборка мусора, то опциональной. В некоторых современных языках ее можно выключить, но если вся твоя стандартная библиотека написана в концепции, когда у тебя есть сборщик мусора, то в тот момент, когда ты его выключишь, у тебя все сломается. На самом деле, нужен язык без сборщика мусора, куда его можно включить. 

Андрей yafinder ПлаховПрограммирует 24 года. В Яндексе — 6 лет.Пришел в Яндекс страшим разработчиком. Первой его задачей было создание нового типа факторов ранжирования — доменных. Сейчас руководит службой функциональности поиска — в частности, разрабатывает поисковые подсказки.

b8b7018b0c64435254f18041eacac51e.png

C++. Это такой швейцарский нож. Это плохой молоток, плохой нож, плохая ложка, плохая вилка, плохой штопор и так далее. Но когда вы где-нибудь в поле, а у вас нет штопора, но есть швейцарский нож, это замечательно. 

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

Алексей ЗахаровПрограммирует 24 года. В Яндексе — 6 лет.Руководитель Java-разработки в отделе разработки облачных сервисов.

По сказке я должен сказать, что мой любимый язык программиррования — Java, но я с одинаковой силой люблю, но по разным причинам, люблю Java и Python. Java — хороший язык. Я с ним познакомился практически во время его зарождения где-то в 1996 году, начал на нём писать еще в институте, потом на всяких разных работах, потом продолжил в Яндексе. 

71868d669bff6300efd01a68717b2a6c.png

Java такой, на самом деле, серьезный язык, на котором можно написать достаточно серьезный код. Он будет хорошо работать, будет статически проверен, в нем будет мало ошибок. Для него написано очень много всяких фреймворков, хороших ADE, тулзов, которые многое за тебя сделают: и подсветят синтаксис, и проверят его. Много всего хорошего сделано за время существования платформы. А Python такой более легковесный, более легкомысленный язык. Но на нём можно делать такие элегантные штучки, красивые и короткие программы, которые ласкают глаз, когда ты на них смотришь. 

В Python нет статической типизации, поэтому ту программу, которая на Java занимает два экрана, можно уместить в 10 строчек и получить удовольствие от этого. Но в то же время он не обладает таким страшным синтаксисом, как Perl и еще какие-то языки. Но это, конечно, дело вкуса. Кому-то нравится Python, кому-то — только Perl, кому-то — только Java. Есть много Java-разработчиков, которые любят такие легкомысленные штуки вроде Python«а и JavaScript«а. А я люблю и то, и другое. 

В той части Яндекса, где я работаю, традиционно не очень любят Perl, потому что он страшен. Немножко побаиваются C++, потому что на нем можно сделать очень серьезные большие и страшные программы, которые потом никто не поймет, в которых очень долго можно искать ошибку, потому что в C++ можно делать очень много такого, что запрещенно, скажем, в Java. Вот это пресловутое множественное наследование, перегрузка операторов в плюсики и минусики. Можно сделать такую программу, которая вообще непонятно о чем будет. Но, конечно, если это будут читать люди, которые любят C++, то они, наверное, начнут генерировать какой-то гнев в мою сторону. Так что я не буду больше ничего говорить. 

Степан КольцовПрограммирует 10 лет. В Яндексе — 7 лет.Старший разработчик в службе разработки систем хранения и обработки данных. Стёпа из тех сотрудников Яндекса, которые уходили, но потом возвращались. Сейчас работает над системами мониторинга в поиске.

c9fe0a3155b3d62e9ddc99666d75f589.png

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

Условно говоря, есть всего два вида программ. Первые должны очень-очень быстро работать и выжимать последние байты из памяти и последние такты из процессора. А программы второго вида не очень требовательны к железу, и главное требование к ним самим — писать их нужно быстро, а поддерживать — дёшево. Сейчас мир устроен так, что первые, очень требовательные к железу, программы пишут на C++, а вторые — на Java. Как я уже говорил, я пишу на последнем и мне больше нравится писать, когда, условно говоря, можно написать много кода, от которого не требуют быстрой работы.

Но в будущем все будут писать на Rust. Rust — это моя любимая тема. Я всем рассказываю про Rust. Проблема C++  в том, что хотя программы получаются быстрыми, но написать их на нём так, чтобы они не падали, очень тяжело. Язык дает очень мало гарантий безопасности. Java дает очень много гарантий, но не позволяет писать программы так, чтобы они быстро работали. Rust, с одной стороны, позволяет писать безопасные программы, с другой — очень быстрые. Поэтому мой любимый язык программирования — это Rust. Но он еще не дошел до такого состояния, чтобы его можно было использовать, и будет таким лет через пять.

Я не люблю все динамические типизированные языки программирования — Python, Perl, JavaScript. У меня очень плохая память, а программы на них требуют, чтобы человек много всего запоминал. Нужно держать в голове какую-то информацию о типах, которой нет в коде. На самом деле, условно  говоря, мне с ними совсем тяжело, потому что у меня плохая память. Людям, у которых хорошая память, просто тяжело. 

Михаил mlevin ЛевинПрограммирует 18 лет. В Яндексе — 5 лет.

Вы могли видеть лекцию Миши о том, как математика помогает Яндексу зарабатывать. Очень большая часть его деятельности — работа в наших академических программах. Он преподает в Школе анализа данных, участвует в создании программы обучения на факультете Computer Science Вышки и Яндекса. Дважды завоевывал медали на ACM ICPC в составе команды МГУ им. М.В. Ломоносова.

68f0017160de31f2ab86bea96626739e.png

Есть язык программирования, на котором я пишу всякие олимпиады, — это C++. Просто исторически так сложилось, что на нём много опыта и удобнее получается быстро что-то написать так, чтобы оно работало. На работе я постепенно все меньше и меньше программирую. На самом деле, никаких предпочтений у меня нет. Я скорее отношусь к языку как к инструменту, на котором нужно выразить свои мысли и решить задачи, поэтому во всяких холиварах предпочитаю не участвовать. Все любят жаловаться и на C++, и на другие языки. Я воспринимаю это как необходимое зло.

Антон pg83 СамохваловПрограммирует 18 лет. В Яндексе — 9 лет.

Пришёл в Маркет программистом на C++. Работал над самыми разными задачами сервиса. Через несколько лет перешёл в поиск, где занялся надежностью и производительностью runtime поиска. Сейчас занимается системой сборки, которая позволит собирать всю нашу кодовую базу за несколько минут на большом распределенном кластере.

42cfc340dda241d02097cc37220bc176.png

У меня нет любимого языка программирования, потому что язык программирования — это инструмент, то, чем ты сейчас пользуешься. Есть языки, на которых мне нравится писать больше и на которых мне нравится писать меньше, но нет любимых. Я достаточно консервативен в выборе. То есть у каждого программиста есть коробочка с языками, которые он использует. Я хочу, чтобы моя коробочка была маленькой, и на текущий момент времени я выбрал для себя C++ и Python. Собственно эти языки и использую. Но они не любимые, а просто инструмент. 

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

Андрей styskin СтыскинПрограммирует 18 лет. В Яндексе — 9 лет.

Пришёл в Яндекс разработчиком на Java в группу поиска Маркета. Занимался классификацией товарных текстов и извлечением фактов из товарных описаний. Так началось его увлечение поиском и машинным обучением. Вне работы Андрей делал различные IR-игрушки: генератор стихов на языковых моделях, робота для прокачки социальных сетей. Сейчас Андрей руководит отделом ранжирования, в котором работает команда почти из 200 человек.

db272f510e42dbca3e6b99b5d94c412b.png

Любимый язык программирования — Java. Но я так давно им не занимался, потому что в поиске принято все делать на C++, когда это что-то серьезное, и на Python, когда у людей очень мало времени и быстро хочется показать результат. Это о таких, как я.

Java достаточно прост для того, чтобы быстро делать прототипы любой сложности, потому что он достаточно унифицирован. Все люди, которые умеют писать на нём, смогут воспринимать чужой код, быстро разбирать и переиспользовать компоненты. C++ этим свойством, например, абсолютно не обладает. И, если заранее не договориться, что вот здесь мы делаем так, а здесь — так, прочитать чужой код на C++ практически нереально.

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

Григорий bobuk БакуновПрограммирует 25 лет. В Яндексе — 10 лет.

Когда-то пришёл работать системным администратором, а сейчас — директор по распространению технологий.

ea2cc0cdee04d8841614ba7a45fb9494.png

Вопрос, как всегда, очевидный. У меня любимых языков программирования, наверное, много. Больше всего я в последнее время пишу на Питоне — просто в силу того, что это язык, который позволяет мне максимально быстро выразить то, о чем я думаю. Но, конечно, он не единственный, и иногда приходится довольно много писать на JavaScript. Это не самое приятное развлечение в моей жизни. Наверное, больше всего кода и с наибольшим удовольствием я написал на Лиспе. 

Мне никогда не удавалось написать что-то хорошо на Erlang, потому что меня от него немножко подташнивает. Я бы даже не сказал, что это язык. Erlang — это такая среда, которая создана одной конкретной компанией, развивается в рамках одной конкретной компании, в которой был такой своеобразный культ личности. Иногда это хорошо, но иногда это приводит к тому, что все делается так, как удобно одному конкретному человеку. Есть небольшая группа людей, которые сильно похожи на создателя Erlang. Для них все удобно, эффективно, красиво — и я даже двух таких человек знаю. Но в реальной жизни для меня это что-то неудобное. Это как сесть в треугольное кресло и пытаться как-то разместиться. Ты садишься и понимаешь, что вообще не мое. И здесь болит, и здесь болит, как ни откинься. И уснуть невозможно. Вот у меня от Erlang такое ощущение. Примерно похожие ощущения были, когда я пытался заниматься Smalltalk, но тут тонкость в том, что он был для меня вынуженной необходимостью и поэтому я себя немного пересиливал. Видимо, Smalltalk принял мою форму. Ну, я не верю, что это я принял его форму. А с Erlang не срослось. 

Данил stolen ЗагоскинПрограммирует 16 лет. В Яндексе — год.

Разработчик в группе разработки интерфейсов облачной платформы. Данил занимается нашим WebDAV-сервером, о котором мы рассказывали и который был написан на Erlang.

377bd25f9c4d6b67b653eff8db73c2d5.png

Мой любимый язык — Erlang, поэтому я здесь на нём и пишу. Когда я думал о том, как я хочу программировать, я подумал-подумал и что-то придумал. И когда я начал рассказывать об этом своим друзьям, они сказали, что я придумал Erlang. Поэтому я просто взял его и стал на нем писать. 

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

Нелюбимых языков у меня нет. Есть языки удобные и неудобные. Я думаю, что есть те, которые для меня неудобны, но я не могу назвать их нелюбимыми.

Пока я готовила этот пост, задумалась, что если бы материал про языки программирования выходил в каком-нибудь массовом издании, там бы наверняка был психологический тест вроде «Какой язык программирования вам подходит». А как вы считаете, от чего зависит выбор того, на каком языке вы будете писать? И какие у вас любимые и нелюбимые языки программирования?

© Habrahabr.ru