На чем написан яндекс браузер
На каких языках программирования пишут в Яндексе
«Когда-то давно, семь с лишним лет назад, я пришёл на собеседование в Яндекс. Собеседовали по С++, взяли.
Первый день. Самокатная, шумная столовая кислотных расцветок, обед. Суп из пластмассовых прямоугольных параллелепипедов.
— Хочешь писать на С++? — спрашивают меня.
— Нет, — говорю, — не хочу.
— Ну ок, учи Perl.
С тех пор я пишу на Perl и нежно его люблю».
Такую историю рассказал нам разработчик Яндекса, когда мы готовили эту публикацию и проводили опрос. Мы спрашивали у наших разработчиков, на чём они пишут, чтобы выяснить — какие языки программирования в Яндексе самые популярные. В опросе приняли участие больше половины разработчиков компании, расклад получился такой:
Многие разработчики используют в работе несколько языков, поэтому мы просили их выбрать один — тот, на котором они пишут больше всего. В лидерах оказались пять языков: C++, JavaScript, Java, Python и Perl. Все эти языки разные, и каждый лучше решает свою задачу. Поэтому они по-разному используются в Яндексе.
C++ — классический язык для больших и сложных систем, где критически важна производительность. На нём обычно пишутся самые важные, базовые компоненты приложений. Например, на C++ написано ядро поиска Яндекса, Браузер и Карты.
На JavaScript в основном пишут интерактивные элементы сайтов, такие как анимация или браузерные игры. Этот язык очень широко используется в браузерах для написания интерфейсов — того, с чем напрямую взаимодействуют пользователи. На JavaScript написаны веб-интерфейсы всех сервисов Яндекса.
Java — это универсальный язык, на котором можно написать любое приложение, будь то игра Flappy Bird или веб-сервер, обрабатывающий миллионы запросов в минуту. Несмотря на название имеет мало общего с JavaScript. Разработка на нём пойдёт быстрее, чем на C++, однако программа может получиться чуть медленнее. Особенности Java позволяют создавать программы, которые работают практически на любом устройстве — от телефона до микроволновки. На Java у нас написаны, например, Маркет и Музыка.
Python — это дружелюбный к программисту язык с простым синтаксисом. С него хорошо начинать изучение программирования. У нас Python широко используется в системном администрировании, но подходит для решения почти любых задач, кроме обработки больших объёмов данных. На Python многое делать проще и быстрее, чем на C++, но программа будет не такой производительной. Это разумный выбор, когда производительность не очень важна или задачу нужно сделать быстро. На Python написана серверная часть Диска, а ещё он используется в Директе, внутренних сервисах и многих других проектах.
Perl был создан для обработки текстов — например, для извлечения фактов из текста. Талисман языка — верблюд, лишённый изящества, но выносливый и эффективный, — точно отражает его особенности. Это лаконичный, но непростой язык, который, однако, хорошо решает свою задачу. В Яндексе его используют, например, для анализа данных в баннерной системе и в разработке серверной части некоторых сервисов — например, Директа.
С точки зрения задачи выбор языка — это поиск равновесия между эффективностью программы, квалификацией программиста и временем, потраченным на работу. Конечно, в реальности всё немного сложнее, поэтому иногда и случаются истории вроде той, с которой мы начали. «Шёл на вакансию C++, взяли на Perl, пишу на Python, а люблю Scala», — такое тоже бывает.
С точки зрения разработчика, выбор языка — это вопрос предпочтений. Кому-то действительно нравится сам язык, кому-то — задачи, которые он решает. Например, одни предпочитают фундаментальные задачи и пишут базу поиска на C++, а другие любят делать то, что видно пользователям, и пишут интерфейсы на JavaScript. Третьи пишут на каком-то языке просто потому, что знают его досконально. А некоторые, наоборот, готовы пробовать новое и участвуют в разных проектах.
Яндекс делают более шести тысяч человек, из них четверть — это разработчики. По большому счёту неважно, на каком языке пишет человек. Если он профессионал, для него всегда найдётся подходящая задача. Прямо сейчас у нас открыто 90 вакансий для разработчиков в десяти городах. Хотите попробовать свои силы — добро пожаловать (вакансии в берлинском офисе можно посмотреть здесь).
На чем написан яндекс браузер
Случилось то, что предрекали аналитики — компания Яндекс выпустила собственный браузер. Крупнейшие соперники Firefox и Chrome по умолчанию используют поиск Google и один из логичных способов конкуренции — выпуск собственного браузера со своим же поиском. Браузер получил предсказуемое название Яндекс.Браузер. Логотип программы создан в самом Яндексе и должен символизировать земной шар с буквой «Y», но пользователи уже успели окрестить его «Яндекс.Стрингами».
реклама
Яндекс.Браузер достаточно предсказуемо основан на открытом движке WebKit с оболочкой Chromium, на которой основан Google Chrome и его клоны (WebKit, в свою очередь, лежит в основе Apple Safari, а также используется в ряде других браузеров). Разработчики сообщают, что также рассматривался применяемый в Firefox движок Mozilla Gecko, но он уступал комбинации WebKit+Chromium в аккуратности кода и эффективности управления памятью.
Были опасения, что Яндекс.Браузер станет одним из многочисленных клонов Google Chrome (как его предшественник Яндекс.Интернет), однако разработчики не стали на этот скользкий путь. Интерфейс стал предельно минималистским, хотя по сравнению с современными браузерами, казалось бы, упрощать уже некуда. На экране нет ничего лишнего и минимум элементов управления. Естественно, в браузер был интегрирован поиск Яндекса, который становится всё более совершенным, уже в поисковых подсказках предлагая готовые ответы на запросы.
В браузер интегрирован машинный перевод Яндекса, доработаны службы геолокации для лучшего взаимодействия с Яндекс.Картами и поисковыми подсказками. В будущем можно ожидать интеграции с прочими облачными сервисами Яндекса. Изначально присутствует поддержка Adobe Flash. Встроена возможность просмотра PDF-файлов, причем выбраны технологии компании Foxit, известной своим качественным продуктом Foxit Reader. Все посещаемые ссылки проверяются на наличие угроз собственной репутационной службой Яндекса Safe Browsing, а безопасность загружаемых файлов контролируется при помощи технологий Лаборатории Касперского. Весьма любопытна возможность интеграции технологии Opera Turbo, сжимающей данные для ускорения загрузки на медленных соединениях. Режим Turbo пока отсутствует, но обещан в следующей версии Яндекс.Браузера.
Вместо привычного по современным браузерам стартового экрана со списком избранных или часто посещаемых сайтов реализовано собственное «Табло». Для его вызова не нужно открывать новое окно, список сайтов показывается после простого клика по адресной строке. Вместо мелких скриншотов с плохо различимыми элементами используются виджеты с красивыми логотипами. Для полутора сотен наиболее популярных сайтов картинки были нарисованы вручную, для других эскизы будут формироваться автоматически на основе иконки сайта и его основного цвета. На Табло можно будет видеть уведомления социальных сетей и сообщения почтовых ящиков.
Расширения Chrome должны подходить к браузеру Яндекса. Как будет осуществляться синхронизация пока не совсем ясно. Как утверждают разработчики, в отличие от Chrome cбор анонимной статистики ведется только с явного разрешения пользователя. Еще одно неочевидное преимущество нового браузера — отсутствие Яндекс.Бара и модуля Яндекс.Защитник.
Браузер Yandex
Сегодня был представлен новый браузер Yandex — первый, который мы не просто собрали из готовых составных частей, а спроектировали его внешний вид фактически с нуля, проработав каждую возможную деталь. Теперь можно рассказать о том, почему и как мы это делали.
Над браузером работала команда из нескольких десятков человек, которая тщательно взвешивала все плюсы и минусы каждого решения. Мы должны были понимать, какие из существующих технологий и почему должны быть в браузере от Яндекса. А самой главной задачей было найти и реализовать такие решения, которые бы делали Yandex действительно новым продуктом на высококонкурентном рынке подобных программ.
Устройство браузера
Одним из первых перед нами встал выбор между движками. Фактически, на рынке есть четыре, о которых стоит говорить: Trident, Presto, Gecko и WebKit. На первом работает Internet Explorer. Его могут использовать и сторонние разработчики, но, во-первых, вносить в него изменения может только Microsoft, а во-вторых, в этом случае браузер был бы совместим только с Windows. Второй — проприетарная закрытая разработка Opera Software. Это и стало главной причиной, по которой мы отказались от этого варианта.
По сути серьёзный выбор шёл между двумя движками с открытым исходным кодом — Gecko и WebKit, причём мы сразу выбирали между связками движка и кода, на котором будет работать интерфейс браузера и расширения к нему. Мы думали о написании собственной оболочки, но в результате могли получить систему расширений, не совместимую ни с чем, что есть на рынке. В итоге решили, что не стоит тратить на это дополнительные ресурсы, что в итоге может себя не оправдать. Выбор сузился до вариантов Gecko плюс Firefox и WebKit плюс Chromium.
С точки зрения скорости, они не уступают друг другу, поэтому аргументами при принятии решения стали другие факторы. Главный плюсом связки Gecko плюс Firefox стала возможность легко кастомизировать дизайн. Это с самого начала было одной из наших приоритетных потребностей — мы хотели делать программу с новым интерфейсом, который будет создан командой Яндекса. Но при выборе этого варианта возникли бы проблемы с производительностью. В оболочке Firefox, в отличие от Chromium, браузер сам занимается управлением памятью, и, несмотря на почти полное отсутствие утечек, её фрагментация всё же происходит. К тому же, код Firefox не самый аккуратный и вносить в него многие важные для нас изменения было бы непросто.
У связки WebKit плюс Chromium этих недостатков не было. В Chromium каждый таб является отдельным процессом и за освобождением памяти следит операционная система. А обычно ОС справляется с этой задачей эффективней, чем сам браузер. Чистый и аккуратный код Chromium позволяет гораздо проще создавать на его основе что-то новое. Было решено выбрать этот вариант, даже несмотря на важный для нас минус — интерфейс этой оболочки очень сложно изменить. А мы хотели рисовать браузер с нуля и по-новому проектировать в нём взаимодействие с пользователем. Даже чтобы изменить форму табов, пришлось очень глубоко разбираться в коде и многое переписывать.
Работа с интерфейсом
Кажется, что интерфейсы современных браузеров настолько минималистичны, что в них не осталось ничего лишнего. Но мы решили, что глядя в окно Yandex, человек не должен видеть те элементы интерфейса, которые ему в данный момент не нужны. Так появилась — а точнее, исчезла — стрелка «Вперёд». Её можно увидеть только тогда, когда уже есть, куда идти вперёд.
Кстати, даже над такой мелочью, какой может показаться эта стрелка, мы долго думали. Было нарисовано 50 разных вариантов.
В итоге мы решили, что формат этого элемента стал устоявшимся каноном, который нужно соблюсти. А окончательный вариант рисовали, отталкиваясь от стрелки, которую создал Американский институт дизайна. Когда-то он разрабатывал набор пиктограмм для навигации, которые сейчас условно считаются идеальными. Мы перерисовали его вариант, изменили форму и пропорции в соответствии со своим видением, вписали в пиксельную решётку и получили стрелку, которая нам подошла.
Во время работы над Yandex мы изучили и историю интерфейсов веб-обозревателей. Раньше их было легко отличить друг от друга, а сейчас, если закрыть логотипы популярных браузеров, даже не каждый сотрудник Яндекса сможет их распознать. Стандарт их интерфейсов сформировался: наверху — табы, под ними — адресная строка, слева от неё — управляющие кнопки. Мы решили не устраивать революций. Пользуясь Yandex, человек не должен радикально менять свои привычки. Нужно сделать так, чтобы они еще легче формировались.
Но чтобы внести что-то новое, необходимо было понять, как работает старое. Мы опирались на множество исследований, но проводили и свои эксперименты. Например, работавшие над интерфейсом Yandex наблюдали за тем, как некоторые наши коллеги пользуются браузерами. Причём принципиальным было то, чтобы это были не разработчики. Так мы смогли «вживую» увидеть, какие у обычных людей есть привычки при работе с интернетом.
По данным исследований, человек посещает до семи постоянных сайтов. И выходит, что обычно он открывает новый таб, чтобы увидеть закладку того из них, на который хочет сейчас перейти. Одним из наших нововведений стало Табло, которое показывается после клика по адресной строке. Таким образом, в Yandex не нужно открывать новую вкладку, чтобы перейти на новую страницу. Мы поменяли и представления сайтов, отказавшись от скриншотов. На наш взгляд, они плохо помогают человеку узнать нужную ему страницу. В Табло вы увидите лакончиные виджеты-«кирпичики».
Для таких популярных сайтов, как Хабрахабр, ВКонтакте, Лента.ру, Facebook и еще полутора сотен других, мы отрисовали их вручную. Представления других страниц будут формироваться сами. Браузер определит фавиконку сайта, главный цвет в ней и сам «нарисует» блок. И все уведомления из социальных сетей и почтовых ящиков можно будет видеть сразу на Табло.
Кстати, логотип браузера, как и он сам, нарисован внутри Яндекса. В этом случае мы привлекали внешних дизайнеров, в том числе и иностранных, но всё, что они рисовали, нам не подходило. Эскиз логотипа, который в итоге утвердили, просто ручкой в блокноте нарисовал менеджер проектов Дмитрий Тимко. А потом его доработали вместе с нашим дизайнером Михаилом Неждановым.
Логотип Yandex, как и других браузеров, круглый. Мы думали сделать его другим, но решили отдать дань традиции, по которой логотипы подобных программ обыгрывают форму земного шара. К тому же, круглая форма поможет человеку быстро определить иконку браузера на рабочем столе.
Начинка браузера
Работая над интерфейсом, мы отталкивались от мысли, что его элементы не должны мешать человеку видеть сайты. В работе над начинкой браузера одной из важных для нас посылок было то, что он должен корректно отображать любой документ, который пользователь встретил в интернете. Мы попытались максимально уменьшить количество дополнительных действий, которые нужно будет предпринять, чтобы просмотреть или прослушать тот или иной файл. Для решения этой задачи нам приходилось выбирать между разными технологическими вариантами. В итоге на некоторые из них мы получали лицензии, посчитав, что именно они лучше всего решают нашу задачу. Например, мы договорились с Adobe и сразу встроили в браузер Flash. Для просмотра файлов PDF можно было использовать и pdf.js, над которым работает сама же компания Adobe, но мы остановились на просмотрщике от FoxIt. Пока кажется, что он лучше решает наши задачи, но тем не менее, мы продолжаем следить за разработкой Adobe.
А, например, проигрывать файлы MP3 Yandex будет через системные функции операционных систем. Но мы подумали и о том, что не все страницы должны сразу открываться пользователю, потому что не все страницы в интернете одинаково безопасны. Браузер использует нашу собственную технологию Safe Browsing. Она даёт ему возможность проверять URL по базе известных нам как опасные. Каждый день мы проверяем больше 20 млн страниц и наша база наиболее актуальна для пользователей сервисов Яндекса. А с помощью системы от Лаборатории Касперского программа проверяет на наличие вирусов файлы, которые пользователь скачивает непосредственно на свой компьютер. Это не отменяет необходимости иметь антивирус, но позволяет предотвратить загрузку файлов, о которых точно известно, что они могут нанести вред.
В браузере будут применяться также решения компании Opera Software. В частности, мы будем использовать технологию Opera Turbo, которая позволяет быстро загружать страницы даже при низкой скорости соединения. Режим Turbo появится уже в следующей версии продукта.
Облачные технологии
На заре Веба браузер был обычной программой, у которой была одна задача — хорошо показать страницу, адрес которой пользователь набрал в адресной строке или открыл, нажав на кнопку открытия файла. Теперь даже сложно поверить, что такая была у первых веб-обозревателей.
Сейчас всё изменилось настолько, что обычные люди редко набирают настоящий адрес в омнибоксе современного браузера. А его задачей стала и необходимость помогать людям ориентироваться в огромном интернете, давать возможность быстро и эффективно найти нужное, обеспечивать безопасность, оставаясь при этом максимально незаметным.
При отображении страниц, вводе поисковых запросов, проверке орфографии и переводе, определении местоположения и проверке на вирусы могут и должны использоваться многочисленные знания, которые есть у мировых компаний. Не все производители браузеров имеют свои облачные технологии и им приходится сотрудничать с теми, кто может их обеспечить.
К счастью, мы обладаем полным спектром облачных сервисов. При этом важно понимать, что Яндекс всегда оставался для Рунета максимально близким, локальным, знающим о том, чем отличается пользователь Рунета и как лучше ответить именно ему.
У нас есть поиск, а следовательно, знания о сотнях миллионов сайтов и миллиардах страниц. Это позволяет нам давать мгновенные ответы прямо из поисковой строки. Например, даже погоду, пробочный балл, телефонный код Калининграда или дату рождения Стива Джобса можно увидеть уже во время ввода запросов в омнибоксе. Как вы могли видеть, всё это есть и в поисковых подсказках Поиска Яндекса. Их же технология позволяет нам показать человеку адреса сайтов на букву m, если он забыл смненить раскладку и вбил в омнибокс мягкий знак.
Переводчик, который в Yandex может переводить как страницы целиком, так и отдельные слова и предложения просто по выделению, полностью работает на статистических данных интернета. То есть огромного количества параллельных документов, которые есть в индексе Яндекса. А маски, по которым происходит проверка Safe Browsing, построены на основании примерно десятков миллионов опасных страниц, известных Яндексу и актуальных для его пользователей.
Кроме того, у Yandex очень качественная для браузера геолокация. Благодаря Картам, множество геоданных будут доступны пользователям прямо из поисковой строки. Например, пробочный балл в их регионе.
Поиск и разработка браузеров становятся сейчас одними из самых интересных областей интернет-индустрии. Это важно как для нас, так и для людей, потому что в высоконкурентной среде выигрывают всегда пользователи.Мы хотим поддерживать разнообразие современных технологий и продолжать давать людям выбор. Именно поэтому, например, выбирать поисковик в браузере от Яндекса можно уже из омнибокса во время ввода запроса. А переезд на Yandex, который умеет импортировать и cookies, сделан максимально удобным — в нём даже откроются вкладки, которые были в окне вашей предыдущей программы.
Скачать и попробовать новый браузер вы сможете уже сегодня, начиная с 17:00, по адресу browser.yandex.ru.
UPD: С этой секунды новый браузер от Яндекса можно скачать. Попробуйте и составьте своё мнение.
Какой язык программирования больше всего любят в Яндексе? И всегда ли любовь взаимна
Сегодня мы хотим продолжить серию постов, в которых задаём разработчикам из Яндекса и пользователям Хабра самые острые для любого программиста вопросы. Сегодня это вопрос о том, какой язык программирования для вас любимый.
В любой компании, где есть разработчики, периодически возникают споры о том, ужасен Perl или прекрасен, обязательно ли знать функциональные языки или нет, насколько мотивирован выбор C++, с какого языка программирования нужно начинать учиться и т.п.
А если сотрудников в этой компании несколько тысяч, масштаб бедствия становится поистине грандиозным. Когда я пришла к тем своим коллегам, которых вы увидите в этом посте, то думала, что и причины для любви и ненависти у них будут отличаться. Но оказалось, что все ещё интереснее.
Многие из тех, с кем я говорила, знакомы вам по постам в блоге Яндекса на Хабре: anatolix, kappa, bobuk, yafinder, styskin. Несмотря на то, что многие участники нашего опроса стали руководителями, они продолжают писать код. Под катом можно прочитать подробные ответы, не полностью попавшие в видео, и рассказать, что вы думаете по теме.
Григорий bobuk Бакунов
Программирует 25 лет. В Яндексе — 10 лет.
Когда-то пришёл работать системным администратором, а сейчас — директор по распространению технологий.
Вопрос, как всегда, очевидный. У меня любимых языков программирования, наверное, много. Больше всего я в последнее время пишу на Питоне — просто в силу того, что это язык, который позволяет мне максимально быстро выразить то, о чем я думаю. Но, конечно, он не единственный, и иногда приходится довольно много писать на JavaScript. Это не самое приятное развлечение в моей жизни. Наверное, больше всего кода и с наибольшим удовольствием я написал на Лиспе.
Мне никогда не удавалось написать что-то хорошо на Erlang, потому что меня от него немножко подташнивает. Я бы даже не сказал, что это язык. Erlang — это такая среда, которая создана одной конкретной компанией, развивается в рамках одной конкретной компании, в которой был такой своеобразный культ личности. Иногда это хорошо, но иногда это приводит к тому, что все делается так, как удобно одному конкретному человеку. Есть небольшая группа людей, которые сильно похожи на создателя Erlang. Для них все удобно, эффективно, красиво — и я даже двух таких человек знаю. Но в реальной жизни для меня это что-то неудобное. Это как сесть в треугольное кресло и пытаться как-то разместиться. Ты садишься и понимаешь, что вообще не мое. И здесь болит, и здесь болит, как ни откинься. И уснуть невозможно. Вот у меня от Erlang такое ощущение. Примерно похожие ощущения были, когда я пытался заниматься Smalltalk, но тут тонкость в том, что он был для меня вынуженной необходимостью и поэтому я себя немного пересиливал. Видимо, Smalltalk принял мою форму. Ну, я не верю, что это я принял его форму. А с Erlang не срослось.
Данил stolen Загоскин
Программирует 16 лет. В Яндексе — год.
Разработчик в группе разработки интерфейсов облачной платформы. Данил занимается нашим WebDAV-сервером, о котором мы рассказывали и который был написан на Erlang.
Мой любимый язык — Erlang, поэтому я здесь на нём и пишу. Когда я думал о том, как я хочу программировать, я подумал-подумал и что-то придумал. И когда я начал рассказывать об этом своим друзьям, они сказали, что я придумал Erlang. Поэтому я просто взял его и стал на нем писать.
С Erlang можно легко создавать очень конкурентные приложения, когда работает много независимых потоков, пусть даже общающихся, но в целом очень слабо друг на другам влияющих. Erlang позволяет не думать при разработке о том, что кто-то кого-то заблокирует, что из-за жирной задачи какая-то небольшая не выполнится быстро. При этом Erlang позволяет не думать о таких вещах, как совместный доступ к данным, потому что они у каждого процесса свои. И при обмене данными между процессами они копируются (ну, или делают вид, что копируются). При этом нет изменяющихся переменных. Это не всегда удобно, но позволяет избежать очень многих ошибок, которые возникают из-за того, что ты в одном месте что-то изменил, а в другом — не учел этого.
Нелюбимых языков у меня нет. Есть языки удобные и неудобные. Я думаю, что есть те, которые для меня неудобны, но я не могу назвать их нелюбимыми.
Сергей svv Вавинов
Программирует 27 лет. В Яндексе — 6 лет.
Пришёл в Яндекс разработчиком в Яндекс.Видео. Был главным в разработке Музыки, потом — в службе медиасервисов. Сделал несколько проектов для Яндекс.Диска. Сейчас — руководитель группы технологий работы с большими данными. Одна из задач, над которой работает Сергей, — проекты Яндекса для ЦЕРНа.
Я боюсь, что моего любимого языка программирования еще не создали, но могу перечислить нелюбимые. Мне не нравится C++. Он из тех языков, которые, наверное, нужно знать и на которых нужно уметь писать. То есть, как зарабатывать деньги, драться — можно любить, можно не любить, но нужно уметь. Для многих проектов полезно знать Java. С точки зрения самого языка, он достаточно плохой и убогий. Люди, которые всерьез занимаются программированием, сразу будут чувствовать его ограничения. Но Java — это не только язык, но и платформа: виртуальная машина JVM, стандартная библиотека, большое количество open source библиотек. Если понимать достоинства и ограничения платформы, это вполне подходящий язык для многих больших проектов. Очень важно знать какие-то скриптовые языки — Perl, Python. Первый, скорее, из нелюбимых, в второй — из любимых.
Есть некоторые количество языков, у которых есть какие-то перспективы и из которых могут вырасти реально достойные. Сейчас сложно судить, какие из них выстрелят, но за ними стоит следить, чтобы понимать, какие в них заложены идеи. Из таких языков, например, Rust — язык, который сейчас используется для всяких мозилловских разработок. Он достаточно современный и потенциально может заполнить нишу, которую сейчас занимает C++ и отчасти Java. В нём много идей и из функционального мира, много идей о безопасном программировании. Но пока это именно исследовательская разработка, но Rust из тех языков, за которыми стоит следить.
Артём breqwas Куликов
Программирует 12 лет. В Яндексе — 8 лет.
В Яндекс позвали за то, что я парсил данные из Поиска по блогам с помощью Перла. Позвали не только поругать, но и на работу. Много лет делал Поиск по блогам, в частности был основным разработчиком подсервиса Яндекс.Пульс. Сейчас разрабатывает Рекламную сеть, один из самых критичных в смысле отказоустойчивости сервисов.
Я пишу программы на языке программирования Perl, и мне это нравится. Когда-то давно меня прособеседовали на язык C++ и взяли на работу. Я тогда хоть и был студентом, но уже успел где-то поработать. И вот в Яндексе мой тогдашний начальник, которого все именуют Дрюха, несмотря на то, что у него есть имя и фамилия, спросил меня: «Хочешь на C++ программировать?» Я ответил: «Не-е-ет». В ответ он сказал: «Тогда учи Perl». И я его выучил. С тех пор пишу на нём, и это просто прекрасно Он не пытается объяснять мне, что надо делать, и я пишу так, как хочу сам.
Нелюбимый язык программирования — это тот, который вызывает боль и несчастье. Обычно на таких языках люди не пишут. Зачем? Есть языки, которые у меня вызывают боль, а у остальных — нет. Например, есть у нас люди (и некоторые из них даже сидят со мной в одной комнате), которые любят писать большие программы на языке Shell. Это ужасно. Зачем они это делают, я не знаю, но они их пишут. И мне их приходится читать. Это неприятно.
Андрей Мищенко
Программирует 24 года. В Яндексе — 9 лет.
Пришёл в Яндекс разработчиком на C++, долго был руководителем разработки Поиска по блогам. Сейчас работает над улучшением алгоритмов машинного обучения в поиске.
Мой любимый язык программирования не для работы, а для души, это, конечно, Haskell. По крайней мере, когда я о нём узнал, он произвел на меня самое большое впечатление. Все, что было до этого, померкло. Я представить себе не мог, что могут быть языки программирования настолько стройные математически. Какие там замечательные системы типов, какие там замечательные ленивые вычисления, как там можно удобно и компактно формулировать мысли. Но я прекрасно понимаю, что для работы он более-менее не применим. На нём удобно писать статьи, когда ты хочешь рассказать о каком-то алгоритме так, чтобы его очень хорошо все поняли, а твой рассказ при этом был очень коротким. Вот в таких случаях код лучше всего написать на Haskell. Кому надо, те поймут.
Вообще программировать я начинал с Паскаля, потом были C, C++, немного скриптовых языков. Язык, который я лучше всего знаю для работы, это Perl, но не скажу, что он сильно мною любимый. В нем хватает своих недостатков, так скажем.
Если говорить о нелюбимых языках, то, наверное, могу вспомнить XSL. Он очень громоздкий. То есть в нем были совершенно замечательные задумки, но то, как они воплотились, меня пугает.
Алексей kappa Капранов
Программирует 21 год. В Яндексе — 3 года.
Когда-то был руководителем Рамблер-Почты. Сейчас руководит группой инфраструктуры персональных сервисов в Яндексе. Лёша рассказывал на Хабре, как мы научили Почту обмениваться письмами по IPv6 и поддерживать SSL-шифрование.
Мой любимый язык программирования традиционно старый Perl. Начал я им заниматься еще на первых курсах института. Вопреки требованиям наших преподавателей делал на нём все лабораторные и диплом. Сейчас я не так часто занимаюсь непосредственно программированием, но по-прежнему Perl — это инструмент, который я использую чаще, чем любой другой.
Когда-то это был первый динамический, первый скриптовой язык, который позволял очень-очень быстро воплощать свои идеи и мысли в жизнь. После него появилось много последователей, но, мне кажется, он остался самым нескучным из всех скриптовых языков. Один из его важных принципов — это то, что любое действие можно выполнить несколькими способами. Часто этих способов действительно много, и это позволяет выбрать из них иногда самый быстрый, иногда — самый элегантный, иногда — самый короткий, иногда, может быть, самый понятный другому человеку, не знакомому с языком. Perl позволяет одну и ту же программу написать миллионами разных способов. Это очень прикольно.
А языка, который бы вызывал у меня прям негативные эмоции, я не припомню. Разве что какие-то очень-очень многословные языки типа неаккуратной студенческой Java.
Анатолий anatolix Орлов
Программирует 25 лет. В Яндексе — 9 лет.
Первые два года писал Маркет. Долгое время занимался поиском — в основном его производительностью, а потом и всем остальным. Сейчас занимается разными проектами в области скорости, архитектуры и т.д. Заместитель руководителя направления поисковых сервисов. Входит в 2% людей, которые заканчивают курсы на Coursera.
Любимый язык программирования у меня C++. И нелюбимый язык программирования у меня тоже C++. Что достаточно странно. Я его люблю за то, что он мощный и в нём ты не платишь за возможности, которые не используешь. Но современные языки программирования позволяют писать те же самые вещи сильно проще.
К сожалению, никакого более любимого языка программирования уже не появится. Сейчас все новые языки условно не для тех программистов, которым нужно написать какой-нибудь high performance, а для индусов, за которыми нужно почистить память, потому что они сами этого не умеют. А я хочу язык, чтобы, грубо говоря, если и была сборка мусора, то опциональной. В некоторых современных языках ее можно выключить, но если вся твоя стандартная библиотека написана в концепции, когда у тебя есть сборщик мусора, то в тот момент, когда ты его выключишь, у тебя все сломается. На самом деле, нужен язык без сборщика мусора, куда его можно включить.
Андрей yafinder Плахов
Программирует 24 года. В Яндексе — 6 лет.
Пришел в Яндекс старшим разработчиком. Первой его задачей было создание нового типа факторов ранжирования — доменных. Сейчас руководит службой функциональности поиска — в частности, разрабатывает поисковые подсказки.
Мой нелюбимый язык программирования Haskell. Он замечательный, на нём можно заниматься увлекательнейшими вещами, имеющими отношения к теории языков программирования. И это как-то удивительным образом перпендикулярно производству какой-то осмысленной работы.
Алексей Захаров
Программирует 24 года. В Яндексе — 6 лет.
Руководитель Java-разработки в отделе разработки облачных сервисов.
По сказке я должен сказать, что мой любимый язык программиррования — Java, но я с одинаковой силой люблю, но по разным причинам, люблю Java и Python. Java — хороший язык. Я с ним познакомился практически во время его зарождения где-то в 1996 году, начал на нём писать еще в институте, потом на всяких разных работах, потом продолжил в Яндексе.
Java такой, на самом деле, серьезный язык, на котором можно написать достаточно серьезный код. Он будет хорошо работать, будет статически проверен, в нем будет мало ошибок. Для него написано очень много всяких фреймворков, хороших IDE, тулзов, которые многое за тебя сделают: и подсветят синтаксис, и проверят его. Много всего хорошего сделано за время существования платформы. А Python такой более легковесный, более легкомысленный язык. Но на нём можно делать такие элегантные штучки, красивые и короткие программы, которые ласкают глаз, когда ты на них смотришь.
В Python нет статической типизации, поэтому ту программу, которая на Java занимает два экрана, можно уместить в 10 строчек и получить удовольствие от этого. Но в то же время он не обладает таким страшным синтаксисом, как Perl и еще какие-то языки. Но это, конечно, дело вкуса. Кому-то нравится Python, кому-то — только Perl, кому-то — только Java. Есть много Java-разработчиков, которые любят такие легкомысленные штуки вроде Python’а и JavaScript’а. А я люблю и то, и другое.
В той части Яндекса, где я работаю, традиционно не очень любят Perl, потому что он страшен. Немножко побаиваются C++, потому что на нем можно сделать очень серьезные большие и страшные программы, которые потом никто не поймет, в которых очень долго можно искать ошибку, потому что в C++ можно делать очень много такого, что запрещенно, скажем, в Java. Вот это пресловутое множественное наследование, перегрузка операторов в плюсики и минусики. Можно сделать такую программу, которая вообще непонятно о чем будет. Но, конечно, если это будут читать люди, которые любят C++, то они, наверное, начнут генерировать какой-то гнев в мою сторону. Так что я не буду больше ничего говорить.
Михаил mlevin Левин
Программирует 18 лет. В Яндексе — 5 лет.
Вы могли видеть лекцию Миши о том, как математика помогает Яндексу зарабатывать. Очень большая часть его деятельности — работа в наших академических программах. Он преподает в Школе анализа данных, участвует в создании программы обучения на факультете Computer Science Вышки и Яндекса. Дважды завоевывал медали на ACM ICPC в составе команды МГУ им. М.В. Ломоносова.
Есть язык программирования, на котором я пишу всякие олимпиады, — это C++. Просто исторически так сложилось, что на нём много опыта и удобнее получается быстро что-то написать так, чтобы оно работало. На работе я постепенно все меньше и меньше программирую. На самом деле, никаких предпочтений у меня нет. Я скорее отношусь к языку как к инструменту, на котором нужно выразить свои мысли и решить задачи, поэтому во всяких холиварах предпочитаю не участвовать. Все любят жаловаться и на C++, и на другие языки. Я воспринимаю это как необходимое зло.
Антон pg83 Самохвалов
Программирует 18 лет. В Яндексе — 9 лет.
Пришёл в Маркет программистом на C++. Работал над самыми разными задачами сервиса. Через несколько лет перешёл в поиск, где занялся надежностью и производительностью runtime поиска. Сейчас занимается системой сборки, которая позволит собирать всю нашу кодовую базу за несколько минут на большом распределенном кластере.
У меня нет любимого языка программирования, потому что язык программирования — это инструмент, то, чем ты сейчас пользуешься. Есть языки, на которых мне нравится писать больше и на которых мне нравится писать меньше, но нет любимых. Я достаточно консервативен в выборе. То есть у каждого программиста есть коробочка с языками, которые он использует. Я хочу, чтобы моя коробочка была маленькой, и на текущий момент времени я выбрал для себя C++ и Python. Собственно эти языки и использую. Но они не любимые, а просто инструмент.
Начиная с какого-то времени, хороший программист может за неделю-две войти в курс дела и начать писать на любом языке — это совершенно не вопрос.
Андрей styskin Стыскин
Программирует 18 лет. В Яндексе — 9 лет.
Пришёл в Яндекс разработчиком на Java в группу поиска Маркета. Занимался классификацией товарных текстов и извлечением фактов из товарных описаний. Так началось его увлечение поиском и машинным обучением. Вне работы Андрей делал различные IR-игрушки: генератор стихов на языковых моделях, робота для прокачки социальных сетей. Сейчас Андрей руководит отделом ранжирования, в котором работает команда почти из 200 человек.
Любимый язык программирования — Java. Но я так давно им не занимался, потому что в поиске принято все делать на C++, когда это что-то серьезное, и на Python, когда у людей очень мало времени и быстро хочется показать результат. Это о таких, как я.
Java достаточно прост для того, чтобы быстро делать прототипы любой сложности, потому что он достаточно унифицирован. Все люди, которые умеют писать на нём, смогут воспринимать чужой код, быстро разбирать и переиспользовать компоненты. C++ этим свойством, например, абсолютно не обладает. И, если заранее не договориться, что вот здесь мы делаем так, а здесь — так, прочитать чужой код на C++ практически нереально.
Нелюбимых языков у меня, наверное, нет. Каждый чем-то хорош. Но из тех, с которым приходится сталкиваться в Яндексе, но не всерьез, а так по-игрушечному, могу вспомнить какой-нибудь Haskell, который очаровывает своими математическими концепциями и абсолютно не применим в реальной работе.
Степан Кольцов
Программирует 10 лет. В Яндексе — 7 лет.
Старший разработчик в службе разработки систем хранения и обработки данных. Стёпа из тех сотрудников Яндекса, которые уходили, но потом возвращались. Сейчас работает над системами мониторинга в поиске.
Я считаю, что есть языки, на которых надо писать программы, а есть те, на которых будут писать программы через 10 лет. Сегодня программы должны писаться преимущественно на Java, поэтому сейчас я пишу на нём, и, кажется, это хорошо.
Условно говоря, есть всего два вида программ. Первые должны очень-очень быстро работать и выжимать последние байты из памяти и последние такты из процессора. А программы второго вида не очень требовательны к железу, и главное требование к ним самим — писать их нужно быстро, а поддерживать — дёшево. Сейчас мир устроен так, что первые, очень требовательные к железу, программы пишут на C++, а вторые — на Java. Как я уже говорил, я пишу на последнем и мне больше нравится писать, когда, условно говоря, можно написать много кода, от которого не требуют быстрой работы.
Но в будущем все будут писать на Rust. Rust — это моя любимая тема. Я всем рассказываю про Rust. Проблема C++ в том, что хотя программы получаются быстрыми, но написать их на нём так, чтобы они не падали, очень тяжело. Язык дает очень мало гарантий безопасности. Java дает очень много гарантий, но не позволяет писать программы так, чтобы они быстро работали. Rust, с одной стороны, позволяет писать безопасные программы, с другой — очень быстрые. Поэтому мой любимый язык программирования — это Rust. Но он еще не дошел до такого состояния, чтобы его можно было использовать, и будет таким лет через пять.
Я не люблю все динамические типизированные языки программирования — Python, Perl, JavaScript. У меня очень плохая память, а программы на них требуют, чтобы человек много всего запоминал. Нужно держать в голове какую-то информацию о типах, которой нет в коде. На самом деле, условно говоря, мне с ними совсем тяжело, потому что у меня плохая память. Людям, у которых хорошая память, просто тяжело.
Пока я готовила этот пост, задумалась, что если бы материал про языки программирования выходил в каком-нибудь массовом издании, там бы наверняка был психологический тест вроде «Какой язык программирования вам подходит». А как вы считаете, от чего зависит выбор того, на каком языке вы будете писать? И какие у вас любимые и нелюбимые языки программирования?