Что такое красивый код, и нужен ли он? Что думают в Яндексе

в 11:08, , рубрики: Блог компании Яндекс, красивый код, Программирование, программисты, Совершенный код, яндекс, метки: , , ,

В Яндексе работает больше 6000 человек, и, по некоторым оценкам, больше половины наших сотрудников имеют опыт в программировании. И конечно же, у каждого из этих людей есть своё самое правильное мнение о том, каким должен быть идеальный код.

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

Чтобы понять, какие свойства кода отстаивают разные стороны, я по горячим следам очередных бурных обсуждений решила спросить коллег, что такое красивый код и должен ли он вообще быть красивым? Достаточно того, чтобы он хорошо работал и был понятным? Или понятный код по умолчанию красивый?

В опросе участвуют bobuk, anatolix, anton, Андрей yafinder Плахов, Антон Самохвалов, Андрей Гулин, Владимир Иванов и другие. Суммарный опыт программирования всех участников этого микро-интервью на восьмерых составляет 198 лет.

Андрей yafinder Плахов
Программирует 24 года. В Яндексе — 6 лет.

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

Андрей Плахов

Спрашивать программиста о том, что такое красивый код и должен ли он таким быть, — это все равно, что спрашивать архитектора, что такое красивый дом и должен ли он таким быть. Что такое красивый дом вряд ли тебе архитектор объяснит, а если спросить, должен ли он таким быть, он, кончено, скажет, что должен.

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

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

Красота и понятность кода не совсем одно и то же. Самый понятный код — это код, которого нет. Чем меньше кода, тем лучше. Код из ста строчек понятнее кода из 10 000 строчек, как бы красиво и волшебно бы ни был написан второй. Это во-первых. Во-вторых, мне кажется, что понятность и вообще понимание кода — это как секс. В смысле, что лучше не заниматься в одиночку.

Владимир Иванов
Программирует 30 лет. В Яндексе — 22 года.

Начал работать программистом Яндекса за несколько лет до старта собственно Яндекса. В 1992 году из того, что было, собрал в локальную сеть пять компьютеров — ночью, из любопытства. Когда Яндекс выделили в отдельную компанию, перешёл в неё заниматься сетью и долгое время руководил всеми NOC. Сейчас опять программирует — большей частью вещи, относящиеся к работе с сетью. Из проектов, которые вышли в свет, можно назвать FastDNS в Яндекс.Браузере. Глубоко понимая несовершенство мира, легко перепишет весь мир.

Владимир Иванов

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

Наверное, код должен быть в какой-то степени красивым, а в какой-то — приличным. Красивыми буквами можно написать глупость какую-то несусветную. А бывает… То есть это не только отступы, конечно.

Анатолий anatolix Орлов
Программирует 25 лет. В Яндексе — 9 лет.

Первые два года в Яндексе писал Маркет, потом «чуть-чуть сделал питерский офис», долгое время занимался поиском — в основном его производительностью, а потом и всем остальным. Сейчас занимается разными проектами в области скорости, архитектуры и т.д. Говорят, Анатоликс — самый хитрый из программистов Яндекса.

Анатолий Орлов

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

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

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

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

Антон Самохвалов

Красивый код — это минималистичный код. Это значит, что он не должен делать ничего лишнего помимо той задачи, которую мы собственно этим кодом пытаемся решить. Чтобы не было развесистой лапши, а просто чёткое лаконичное описание той мысли, которая есть. Вот что такое красивый код.

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

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

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

Пришёл в Яндекс программистом на C++. Первой задачей было переделать формат инвертированного индекса, чтобы записать в него информацию о точной форме слова в документах (до этого хранилась только лемма). Один из главных создателей Матрикснета, нашей технологии машинного обучения. Сейчас руководит службой ранжирования. Если бы Кнут не написал свой трехтомник, эту работу стоило бы отдать Андрею. Сам Андрей на вопрос, чем он занимается в Яндексе, ответил: «Я работаю за компьютером и делаю всякие штуки, чтобы всем было хорошо».

Андрей Гулин

Я не знаю, что такое красивый код. Красивый — это какая-то эстетическая категория. Умещается ли он на экран, напоминает ли картинку. Мне сложно оперировать этими понятиями. Они меня не очень-то интересуют, честно говоря.

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

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

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

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

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

Андрей Мищенко

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

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

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

Антон anton Волнухин
Программирует 23 года. В Яндексе — 8 лет.

Программист, решающий задачи кратчайшим путем. Пришёл в Яндекс в 2006 году менеджером проектов. Много лет был руководителем сервиса Поиск по блогам. Сейчас руководит группой распространения технологий: «Стараюсь сделать так, чтобы все знали о том, как много клёвых технологий есть в Яндексе, и повысить качество рассказов о технологиях и понимание их важности в России в целом».

Антон Волнухин

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

Должен ли код быть красивым, зависит от какой-то конкретной цели. В целом мне кажется, что да. Люди должны стремиться к тому, что им самим нравится. И красивый код — это что-то, что им нравится. Если люди пишут что-то, по их мнению, неприятное и ужасное, то им не будет нравиться то, что они делают. Тогда, например, и Яндексу будет плохо. Так что все должны стремиться писать красивый код, но с некоторыми исправлениями, которые с годами происходят в головах.

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

На вопрос, чем он занимается в Яндексе, ответил: «Всем». Когда-то пришёл работать системным администратором, а сейчас — директор по распространению технологий.

Григорий Бакунов

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

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

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

Автор: Zalina

Источник

Поделиться