Как оценивать работу программиста? Мнение сотрудников Яндекса
Давно идут споры о том, что такое работа программиста — ремесло, навык или искусство. При этом постоянно встаёт вопрос оценки результата. О том, как разные разработчики и руководители в Яндексе подходят к вопросу оценки работы программиста, мы поговорим в этом посте.[embedded content]
В Яндексе работают сотни программистов, и результаты их работы влияют на сервисы, которыми пользуются миллионы людей. Когда на тебе такая ответственность, нужно уметь остановиться и оценить, что можно сделать лучше, в чем ты сильнее всего и где эти твои навыки пригодятся еще. Для этого надо уметь оценить и свою работу, и работу людей, с которыми ты вместе что-то создаешь. О том, как это делать, мы и спросили наших коллег.Андрей styskin СтыскинПрограммирует 19 лет. В Яндексе — 8 лет.
Пришёл в Яндекс разработчиком на Java в группу поиска Маркета. Занимался классификацией товарных текстов и извлечением фактов из товарных описаний. Так началось его увлечение поиском и машинным обучением. Вне работы Андрей делал различные IR-игрушки: генератор стихов на языковых моделях, робота для прокачки социальных сетей. Сейчас Андрей руководит отделом ранжирования, в котором работает команда почти из 200 человек.
На самом деле, есть две важные характеристики. Первая, это насколько то, что делает программист, эстетически правильно: насколько его код красив, воспринимаем другими. И второе, что может как раз конфликтовать с первым, но при этом очень важно, это то, насколько он умеет своими действиями, своим кодом достигать результата по каким-то метрикам. Например, качества поиска.
Антон pg83 СамохваловПрограммирует 19 лет. В Яндексе — 9 лет.
Пришёл в Маркет программистом на C++. Работал над самыми разными задачами сервиса. Через несколько лет перешёл в поиск, где занялся надежностью и производительностью runtime поиска. Сейчас занимается системой сборки, которая позволит собирать всю нашу кодовую базу за несколько минут на большом распределенном кластере.
Мне кажется, самый правильный способ — когда тебя оценивают коллеги. Это как оценить, хорошая страничка в интернете или плохая. Если на нее заходят люди, значит она хорошая, если нет — плохая. То, что называется Page Rank. Также люди могут оценивать друг друга. Если большинство людей вокруг тебя считает, что ты хороший программист, значит, ты хороший программист. Если не считает, значит, это не так.
Андрей yafinder ПлаховПрограммирует 25 лет. В Яндексе — 6 лет.
Пришел в Яндекс старшим разработчиком. Первой его задачей было создание нового типа факторов ранжирования — доменных. Сейчас руководит службой функциональности поиска — в частности, разрабатывает поисковые подсказки.
А как оценивать работу художника? В некотором смысле это очень похожие вопросы. Есть две ступени — начинающий художник и профессиональный художник. Как оценить начинающего, понятно. Гораздо сложнее ранжировать между собой художников профессиональных. Начинается уже некоторая вкусовщина, критерии могут становиться плохо вербализуемыми. Но тем не менеее потом неожиданно оказывается, что действительно топовых художников все представляют себе приблизительно одинаково. Даже если в слепых тестах показывать картины великого художника и картины его учеников, то люди гораздо чаще будут выбирать картины мастера. Мне кажется, с программистами также — сложно вербализовать, но тем не менее внутренняя иерархия всегда выстраивается.
Степан stepancheg КольцовПрограммирует 11 лет. В Яндексе — 8 лет.
Руководитель группы разработки мониторинга в поиске. Стёпа из тех сотрудников Яндекса, которые уходили, но потом возвращались. Один из тех, кто пропагандирует Rust в Яндексе и не только.
Работу любого человека надо оценивать по результатам. Если человек решил поставленную перед ним задачу, он молодец, если не решил — не молодец. Но бывают разные задачи. Есть те, в которых можно все сделать кое-как — лишь бы работало. Тогда никому неважно, насколько криво и как это сделано. А бывают проекты, которые очень долго живут — годы. И там очень важно, чтобы после человека оставался качественный код, чтобы он мог передать его другому.
Александр sadovsky СадовскийПрограммирует 27 лет. В Яндексе — 11 лет.
Пришёл в Яндекс работать над проектами, связанными с поиском. Под его руководством были созданы поиск по блогам, Яндекс.XML, запущены новый алгоритм ранжирования и робот для оперативного индексирования свежей информации, создана служба асессоров и начато измерение качества поиска. Саша — автор множества публикаций в научных и популярных СМИ об алгоритмах поисковых систем и продвижении сайтов в интернете.
Это очень интересный вопрос, потому что программист — это, с одной стороны, вроде бы профессия интеллектуального труда, а с другой, она местами превратилась в ремесло. Есть элементы программирования, которые масштабируются, где достаточно легко передаются знания от одного программиста к другому. И оценивать здесь нужно по-разному. Там, где программирование превратилось в ремесло, где это стало более менеее понятным автоматизированным процессом, могут быть введены понятия, как в физическом труде — нормативы, выработка. Классика жанра — создание корпоративных сайтов, которые более-менее одинаковыми создают сотнями. А в интеллектуальной части необходимо оценивать сложность задачи. Скорее всего, это можно сделать путем разговора с самим программистом, с его коллегами, с тем, кто понимает суть работы. И решение об оценке в таком случае — достаточно сложное, основанное на здравом смысле. Его нельзя принять механически. И у нас, к счастью, этого более интеллектуального типа работы очень много, почему и интересна работа в Яндексе.
Михаил ПарахинПрограммирует 25 лет. В Яндексе — 1 год.
После окончания МИФИ начал работать в ЗАО НТЦ «Модуль». В 90-х это было почти единственное место в Москве, где занимались системами автоматического обучения. Потом ушел в компанию Parascript, которая фактически является монополистом в области распознавания рукописного и печатного текста. Долгие годы работал в США. Последние семь лет — в Microsoft, пять из которых возглавлял в Bing подразделение мультимедийных поисковых сервисов. Весной пришёл в Яндекс директором по поисковым технологиям.
Это сложный вопрос, и, думаю, никто не знает ответа на него. Но лучшее, что мы сейчас придумали, это спросить тех, кто много работает с человеком. Обычно люди вокруг, которые читают его код, общаются с ним, смотрят, как он работает, довольно хорошо представляют себе, кто хороший, а кто плохой программист. В системе ревью, которую мы сейчас создаем, упор в значительной степенис делан на опросы таких людей. А объективно оценить, конечно, есть много методов и попыток, но я не знаю, как в реальности сделать это точно.
Михаил mlevin ЛевинПрограммирует 19 лет. В Яндексе — 5 лет.
Очень большая часть деятельности — работа в наших академических программах. Он преподает в Школе анализа данных, участвует в создании программы обучения на факультете Computer Science Вышки и Яндекса. Дважды завоевывал медали на ACM ICPC в составе команды МГУ им. М.В. Ломоносова.
Оценивать работу любого сотрудника нужно по результату. По результату как в бизнесе, так и, если его работа непосредственно на бизнес не влияет, в создании инструментов, инфраструктуры, внутренних каких-то вещах, в том числе отношениях с коллегами. Это целый комплекс. Программисты в этом смысле ничем не отличаются от всех остальных. Единственное, наверное, отличие в том, что в нашей компании, во многих IT-компаниях, они — это те, кто создает продукт. Поэтому об их работе можно судить по тому, насколько продукт хорош, насколько он успешен — настолько и их работа хороша. Конечно, они не единственные, кто эту ответственность разделяет. Есть те, кто решает, что вообще нужно делать в продукте. Они отвечают за то — как. Хороший программист, конечно, задается вопросом, а зачем делать именно это и отказывается от задач, которые поставлены просто с потолка
.Андрей МищенкоПрограммирует 25 лет. В Яндексе — 10 лет.
Пришёл в Яндекс разработчиком на C++, долго был руководителем разработки Поиска по блогам и писал на Perl. Андрей — кандидат физико-математических наук. Сейчас работает над улучшением алгоритмов машинного обучения в поиске.
На каждом уровне свои требования. Если программист — стажер, то его нужно оценивать в основном по тому, как у него глаза горят, насколько ему хочется это все учить, как он умеет заставить себя не скучать, найти те задачи, которые ему будут интересны. Когда человек уже начинает расти, важнее, конечно же, насколько у него отдача большая, насколько он делает задачи быстро, насколько решения получаются качественные и их не приходится переделывать потом. Если еще выше пойти и говорить об архитекторе, то уже, естественно, его работу нужно оценивать не потому, как быстро он что-то сочинил, а по тому, сколько через год пришлось изменений в эту архитектуру вносить, и насколько она смотрела в будущее далеко.
Сергей svv ВавиновПрограммирует 28 лет. В Яндексе — 6 лет.
Пришёл в Яндекс разработчиком в Яндекс.Видео. Был главным в разработке Музыки, потом — в службе медиасервисов. Сделал несколько проектов для Яндекс.Диска. Сейчас — руководитель группы технологий работы с большими данными. Одна из задач, над которой работает Сергей, — проекты Яндекса для ЦЕРНа.
Тут есть несколько факторов. Простой ответ, это, конечно, оценить по результату. Человек потратил столько-то времени, решил или не решил задачу. Но это только одна сторона. Код, который он написал, нужно поддерживать. Нужно, чтобы поддерживались определенные стандарты, он проходил ревью, чтобы были единые правила того, как ведется разработка, чтобы коллеги проверяли друг друга и оценивали код с точки зрения того, насколько он годится для долгосрочной работы над проектом.
Григорий bobuk БакуновПрограммирует 26 лет. В Яндексе — 10 лет.
Когда-то пришёл работать системным администратором, а сейчас — директор по распространению технологий.
Сложный вопрос. Мне кажется, по результату. На самом деле, у каждого программиста есть некоторая задача. И бывают такие программисты, у которых задача — провести интересный эксперимент. И тогда никакой оценки, кроме как изучения его результата, не сделаешь. А бывают программисты, задача которых — создать какой-то продукт. И тогда можно посмотреть на то, как правильно он функционирует.
Но мне кажется, правильно говорить о том, как плохо оценивать работу программиста. Мне кажется, оценивая работу программиста, категорически неправильно скатываться в детали. Например, говорить, что программист все сделал хорошо, а тестировщики не уследили. Или программист все сделал хорошо, а системные администраторы неправильно задеплоили. Эта манера свалить все на окружающих меня страшно раздражает. Мне кажется, в каждой точке наоборот нужно стараться как можно плотнее все взять под собственный контроль, потому что лучше проверить три раза, чем не проверить ни одного. И в этой ситуации мне кажется, что очевидно работу программиста оценивать по тому, насколько качественным получается продукт, которым он занимается. Даже если он делает маленькую шестереночку в этих часах, оценивать надо по тому, насколько точно работают эти часы.