Как стать автором
Обновить

Видишь суслика? А он есть! Как главная страница Яндекса переезжала на Go

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров23K
Всего голосов 70: ↑63 и ↓7+67
Комментарии76

Комментарии 76

Молодцы! Сломать идеальную страницу поиска, коей ya.ru был большую часть времени своего существования, было не просто, но вы справились.

К слову, выкатили новую, более лаконичную версию. Отключил в настройках те блоки, которые лично мне не нужны. Теперь главная страница у меня выглядит так:

Обратите внимание, реклама яркая и контрастная, и мигает, а иконки и текст основной части страницы - блеклые и низкоконтрастные, чтобы вам было ещё удобнее!

Если заходишь из "Инкогнито", под рекламой ещё "Подборка от маркета" предлагается.

А курс валют?(кстати если уж определили локацию зачем мне рубль?) а кнопка алисы? если есть микрофон в строке, а сэндвич если есть кнопка войти

И самый важный когда там истекает контракт на аренду yandex.ru ? и планируете все лишнее туда отправить?

Всё верно. Настройки сервиса доступны после авторизации. Как мне кажется, это в целом ожидаемо.

"В целом ожидаемо" не по техническим причинам, а как способ подтолкнуть пользователя к регистрации и аутентификации в Яндексе, путем создания различных неудобств тем, кто этого не сделал.

Наблюдаю как ya.ru идёт по пути mail.ru. Yandex.ru уже там. Были в принципе вполне юзабельные поисковики, а потом главная страница превратилась в какой-то трэш с кучей бесполезной рекламы. Ещё и окно с настойчивым предложением установить яндекс браузер стало вылазить. Мне это вообще не нравится. А что там внутри, Perl или Golang мне вообще без разницы.

 ya.ru идёт по пути mail.ru. Yandex.ru уже там

ну так если продать yandex.ru то ya.ru - должно стать им - где возьмешь точку входа на свои сервисы... кстати когда там истекает контракт на аренду yandex.ru ? 2 или 3 года напомните? так хочется чтоб это обратно переехало обратно

Так сменится же только то, что будет открываться по этому домену. Сам тот сервис вместе с той страницей уже у VK.

да - и это было стартовая страница/каталог для всего сервиса, а аскетичный ya.ru кроме как поиска/почты/переход на главную не давал.... как убрали страницу-каталог для сервисов Яндекса (а их штук 30) то теперь это что было на главной начали пихать в аскетичный дизайн и он начал разбухать

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

с главной,

Вы про какие? yandex.ru? Во время аренды домена yandex.ru - новые владельцы делают с ней что хотят

А что там внутри, Perl или Golang мне вообще без разницы.

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

Лет 20 назад ходила шутка про "где мне в настройках интернета указать размер моего члена, чтобы мне перестал сыпаться спам и показываться реклама про его увеличение?" Сейчас, вспоминая это, мне хочется пошутить "где мне в настройках указать, что я не буду ставить Яндекс Браузер даже под пытками, чтобы мне не показывались уведомления?". PS Амиго браузер смотрит на попытки Яндекс Браузера и говорит: "Мы такими не были"

Привет вашему фронтенду, докатившемуся до маскировки банера с браузером под системные уведомления в стиле ОС (win10), даже и так уже "коммерческим" пользователям за 500р\мес. Сколько ещё вам платить?

EDIT: О, теперь, похоже новое днище - нарисовали новые стили этого главного окошка про браузер - единственная кнопка "ДА", без крестика в окне вовсе.

https://habrastorage.org/webt/dv/yp/mb/dvypmbfgwamvn8bubrw437d5w-g.png
Старое аля ОС в win10: 
https://habrastorage.org/webt/eu/5u/9x/eu5u9xjqyf5o0fmb2zgfqbge4vy.png

Это всё интересно и занимательно, но всё равно остается один главный вопрос - зачем вообще продолжать разработку уже давно нормально работающего продукта?

Оптимизация всяких внутренностей под всё растущий интернет вопросов не вызывает, но зачем вообще что-то делать с фронтом поисковика?

KPI (ой, простите, мы же не в водопаде из 90х) OKR требует запускать фичи-фичулечки, иначе можно и на аттестации банан получить

Предлагаю обратиться к определению "программное обеспечение". Подсказка - изменчивость

Когда коту делать нечего, он лижет яйца. Когда сотрудникам крупной компании делать нечего - они занимаются сломом хорошо работающего продукта. Скажите, какие гении решили убрать идеально выверенную по функциональности страничку, где были цветом обозначены погода и пробки именно там, куда удобно смотреть, и сначала а) убрать их в дальний угол, сделав блеклыми, потом откатить, потом снова сделать погоду с низкоконтрастным шрифтом и без цветов, и убрать пробки? Мне теперь +4 клика чтобы узнать как дела на дорогах в городе. А вам - отдать мне целиком страницу карт. Зато огроменный баннер рекламы, цветной, мигающий - тут как тут! Знаете что я сделаю? Поставлю жесткую рекламорезку, и прямую ссылку на карту, чтобы на вашу главную вообще не ходить. Такая была задача, устранить пользователя?

Причём у меня платный аккаунт, что не мешает мне каждый божий день подсовывать баннер с предложением скачать ваш браузер. А на мобилке - поставить вас дефолтным поиском. Никто там из менеджеров головой не думает, что это БЕСИТ? Я платник, не бесплатный причём юзер

Была одна из лучших соцсетей в мире, вк. Ныне все в телеге, инсте, тиктоке. Яндекс решил повторить?

В качестве вишенки, я написал в обратной связи. Первый раз, когда попал под пробную выкатку. Там как обычно боты, ну мне не очень сильно надо, я через них пробиваться не стал (мы обработали +1 обращение нашим ботом бесплатно! - отрапортует маркетинг). Второй раз решил таки пробиться, пока делать нечего. Хотя бы отвечали, что учтут пожелания, как раньше было с картами - фиг там. Цитирую:

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

Как вы видите, что страница стала удобней? На ней стали проводить меньше времени? Или чаще кликать по рекламе, которая больше всей полезной площади? Если вы постоянно работаете над улучшениями, то получается что раньше плохо поработали, раз пришлось всё переделать? Так значит, что и сейчас могло получиться очень плохо, и надо снова переделывать?

Вообще, инетересно наблюдать, как люди жалуются, что трудно дорого нанять программистов, в то время, как другие занимаются вот такой ерундой просто потому, что у них уже есть фронтенд отдел.

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

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

Если посмотреть историю развития верстки главной, то окажется что туда сначала напихивали всё что могли, а потом наоборот, убирали всё что могли. А юзеры как шли за строчкой поиска, так и идут. Что достаточно хорошо понимают в гугле, и на глагне гугла как был много лет только поиск, так и остается. А все сервисы живут по клику на кнопку. Хотя мне нравилось что можно бегло увидеть картину дня в повестке (пока её не фильтровали), да и погода с пробками и курсом валют - очень даже удобно и полезно. И тут вот возникает вопрос, сколько человек работали над всеми этими итерациями главной? Тестировали, рисовали, писали, согласовывали? Ради чего вся эта работа велась - чтобы сначала накидать, а потом скинуть? Что оставила после себя эта работа - пустую страницу? А зачем она нужна была? Движение есть - прогресса нет(с), говаривал герой одного фильма... Так что не могу не согласиться, то что один раз удачно сделано, может работать годами, а вот если каждый раз делать не очень... Это ж все при деле, все с работой! Культура написания софта и фич "в процессе" с одной стороны, дала большую гибкость и простоту исправления, внедрения нового, с другой - ещё ниже опустила уровень проработки до запуска. Зачем думать, что мы делаем, как, для чего, как сделать хорошо - можно запуститься, а там видно будет! А потом прибежала толпа маркетолухов, и закидала супер пупер хотелками... И снова все при деле!

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

 А помимо веб‑страниц бэкенд обслуживает разнообразные приложения под iOS и Android, NTP (New Tab Page) в разных браузерах, и еще несколько десятков вспомогательных ручек: для установки cookies, сохранения настроек, получения конфигов, и так далее.

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

стиль кода «кошка прошлась по клавиатуре»

Это называется отсутствие ревью кода, когда код проверяют перед выкладыванием на тест.

количество комментариев с WTF в коде на Perl

Это тоже к код ревью и компетентности программистов, т.к. по последней строке "WTF CODE?! /\s?[,;]+\s?/ => /[,;\s]+/" видно что переписали на что-то более нормальное и WTF не убрали.

При этом, это тривиальное регулярное выражение. Что там может не читаться? Там всего-то полтора десятка символов. Так можно доскрестить до чего угодно. До обилия угловых скобочек, слэшей и кавычек в XML, например. Или до фигурных скобочек в C и Java. Можно это регулярное выажение переписать на что-то "более нормальное" в виде кода размером с пол-экрана, но читаться оно будет лучше только для тех, кто не знает регулярных выражений.

У меня те же мысли.
И ещё вопрос к автору статьи @yaches - а как выглядит этот код после того, как его переписали?

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

Это называется отсутствие ревью кода, когда код проверяют перед выкладыванием на тест.

Причем тут ревью? В смысл фрагмента въехать пробовали? Там же ищутся HTML-элементы вида &#1234; или <открытие тега или [% куски шаблонизатора %] внутри текста страницы. Эти символы там не от Перла совсем.

Это же клон первопарельского интервью Страуструпа про создание плюсов! Не считается.

Я пытался придумать, какой метрикой можно описать качество кода, и решил посчитать количество комментариев с WTF в коде на Perl и на Go. Оказалось, что в Perl их было 110, а в Go — ни одного.

Но это же только потому, что код пока свежий и остались люди, которые помнят TF так сделано.

Я пытался придумать, какой метрикой можно описать качество кода, и решил посчитать количество комментариев с WTF в коде на Perl и на Go. Оказалось, что в Perl их было 110, а в Go — ни одного.

Может, новое поколение разработчиков просто не знает аббревиатуры WTF, и выражает эту мысль каким-то другим способом? ;)

ya.ru был когда-то максимально минималистичным, на нём много лет не было совершенно ничего, кроме строки поиска, а вся ненужная муть была на yandex.ru - да, хорошие были времена...

Хотелось бы больше информации, что изначально не задалось в переписывании на C++. Какие конкретно проблемы возникли? Или всё гораздо проще, и переписыванием на C++ занялись люди, не достаточно знакомые с этим языком?

На 1 секунду появляются результаты поиска а потом окно на весь экран - "Установите яндекс браузер с нейросетями" Спасибо, не надо :)

Куда дели возможность выбирать сервисы, вылезающие по клику на вашем дизайнерском квадратике? Почему, когда я туда кликаю, мне показывается 16 значков, из которых 14 - не нужное мне дерьмо, а заменить их на нужные мне сервисы (за которые я плачу деньги, между прочим) я не могу, хотя раньше - мог?

У меня была похожая проблема. Частично её удалось решить: я просто сделал так, что нужные мне сервисы отображаются первыми (вверху) и просто не проматываю список вниз.

Эти настройки хранятся то ли в куках, то ли где-то ещё на клиенте. То есть, в каждом месте их надо одинаково настраивать. Это не то.

Странно, что Yandex не рассматривает возможность написать свою библиотеку. Это же так очевидно, Clickhouse они могут написать, а библиотеку на perl - нет.

Читаю комментарии, становится грустно за автора. Статья про решение на северной части, а все пишут про UX и политику яндекса в целом.

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

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

Довольно очевидно, что её нет - не ради этого делалось. Не будет на компилируемых языках разработка быстрее, чем на компилируемых (что особенно заметно в случае плюсов оказалось).

становится грустно за автора

Так а нечего плохое делать.

В 2019 меня, как знающего Перл сишника, пытались нанять именно на проект переписывания главной на C++. Это забавно было, да.

А че вы накинулись на разраба? Он чтоли политику придумывает относительно рекламных блоков на главной странице, бесконечных предложений установить я.браузер, прочего спама? Он делает свою работу и делает ее хорошо (судя по статье). Сегодня яндекс - завтра другая контора. Мы разработчики и не отвечаем за политику компании. А то во что превратился яндекс и какие процессы тому способствовали - точно не ему отвечать. Да и вопросы эти точно не тут надо задавать. А работа действительно титаническая, даже сложно подойти к ней, не то что сделать.

Впрочем, а есть какие явные баги которые появились в процессе миграции и как Вы их решали?

Спасибо!

Товарищ публикуется от лица яндекса, вот ему и насовали. Текст наверняка много согласовывали, а автор был не против его писать, зная результаты. Так что вполне по делу. Особенно за метрику качества работы в числе новых стажеров на проекте...

Трудности найма: язык старый и людей, которые его знают или учат, мало.

Так делайте как Mail.ru - обучайте стажеров. Они вполне нормально осваивают Perl, видел в 2018 в довольно маленькой конторе, не говоря уже о самом Mail.Ru Group.

Язык почти не развивается: на Perl не пишут новых библиотек или инструментов.

Неправда. Пишут, и дофига. Я себе домой утащил вполне себе свежий (2022) фреймворк Beekeeper, за поддержу MQTT 5.

Много legacy, сложно поддерживать: за всё время существования сервиса накопилось много legacy кода, который тяжело поддерживать.

Про "легаси" рассказывают на абсолютно любом проекте. Много видывал их, от языка тут не зависит ничего (разве что при сильной привязке к вендору, как с каким-нибудь SAP или COBOL).

Сложный синтаксис, отсутствие типизации: это тоже доставляет неудобства. Например, люди, пишущие на Go, с трудом смогут понять, что на иллюстрации ниже написано в сигнатуре функции:

sub respond ($;$$@) {
my ($req, $headers, %args) = @_[0, 2 .. $#_];
return undef unless ref $_[1]
}

А что, должны сразу без чтения манов понимать? Любой язык надо изучать. Давайте такую же претензию к французскому предъявим - чего это он непонятен знающим английский.

Объяснить использованные здесь конструкции можно минут за 10-15, и дать еще пару часов практики, чтоб запомнилось - ничего сложного.

Или ещё один пример, на котором кроме слова stack тоже мало что можно разобрать:

@$$out = map { _push_to_stack($stack, \$_, \(my $o = {}), \$s); $o } @$$in;

Потому что кто-то пишет в дурном стиле. Брать ссылки на итератор вместо [ понятного, конструктора, массива, вполне, как, в, JSON ] чревато багами. Лучше переписать циклом. Указатели на указатели тоже в нормальном перловом коде применяют редко - ибо зачем эти лишние $$ если можно сразу на целевой массив?

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

($template =~ m,&#32;$,o) ||
($parts[$i] =~ m,^&#32;,o) ||
(($template =~ m,<[^<>]+$,o) &&
($parts[$i] =~ m,^>,o)) ||
(($template =~ m,%\]$,o) &&
($parts[$i] =~ m,^\[%,o))

А вот этот пример явно вообще специально выдернут исключительно чтоб очернить Перл - поскольку поиск/замена спецсимволов HTML (и любого шаблонизатора) регулярками будет точно так же выглядеть на любом другом языке. А то и хуже, если потребуется эскейпить спецсимволы. Причем || и && сишного стиля, и Перл позволяет их заменить на or и and для повышения читаемости, в отличие от предлагавшегося C++.

великолепный фреймворк для юнит‑тестов, которого в Perl не было;

Perl вообще-то был первым, кто популяризировал тестирование, его TAP (Test Anything Protocol) применяют и в других языках, модулей для тестирования сделали уйму. Называется, "мы просто не искали".

Эти причины и привели к тому, что мы решили: Perl нам больше не подходит, и начали выбирать новый язык.

Неа, на самом деле не поэтому. Ответ здесь:

Зато мы можем померить нетехнические метрики. Например, число стажёров за год в нашей команде выросло с 1 до 10+. У нас была проблема с их наймом. Найти стажёра, который пишет на Perl, было весьма проблематично. Сейчас на команду из 15 бэкендеров приходится больше 10 стажеров каждый год. Это очень много. Молодые ребята приходят, очень быстро учатся, развиваются, многие остаются в команде.

Ответ - потому что менеджеры в крупных корпорациях получают бонусы от количества людей, а что из-за низкого профессионализма джунов качество продукта падает (и судя по "каждый год", есть текучка), их не волнует, ведь "Too big to fail". Как уже говорилось, крупная компания прекрасно могла бы воспитывать стажеров сама, Mail.Ru так делал. Да и то, а зачем нанимать людей

Я пытался придумать, какой метрикой можно описать качество кода, и решил посчитать количество комментариев с WTF в коде на Perl и на Go. Оказалось, что в Perl их было 110, а в Go — ни одного.

Всего лишь?! Возьмите любой крупный опенсорс-проект на любом языке, их будут тысячи! Так что это показатель хорошего качества, на самом деле - ей же четверть века было. А на Go попросту совсем свежий, еще не произошшло полной ротации ни одного "поколения разработчиков" на проекте. Возникает-то это тогда, когда люди меняются - ибо нормальной документации, как обычно, никто не пишет...

Бэкенд красавчики. А вот фронт ((( Сегодня 20.02.2025 зашел на страницу выдачи поисковой информации и был мягко говоря расстроен. Как говорится лучше бы не трогали. Уродские сливающиеся блоки, информация в правой части пропала. Хотели как лучше а получилось как всегда.

Почему в коде стало меньше wtf. Просто сменилось поколение программистов. Там теперь наверняка комменты вида

// какой то скуф писал

// дед таблетки наверное выпить забыл

// что за кринж

// опять с гитхаба забайтили

// ливнусь после обеда из этой компании

Разница в том, что в mockery название метода передаётся строковым литералом, а в gomock — просто как вызов метода.

Mockery вроде давно уже поддерживает генерацию методов. Раньше нужно было проставить специальную опцию в конфиге, теперь вроде он делает это по умолчанию. В версии 3.0 эта опцию вообще уйдет и будет только генерация с EXPECT методом.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий