Упорство vs Тупость: правильный настрой при создании продуктов

Интервью с Сергеем Кремнёвым (Senior Developer, Roowix)

У Сергея нет понятия о сглаживании углов, поэтому общение с ним вдохновляет на борьбу со Вселенским лицемерием. Он не любит тупость, цитаты и излишнюю вежливость. Последовательность, упорство и внимательность позволяет ему в большинстве ситуаций оказываться правым (и быть хорошим разработчиком).
Основной стек: PHP, PostgreSQL, MongoDB, MySQL, Angular.js.
Область интересов: гейминг и разработка игр, сноуборд, гитара, настольный теннис.
— Что мотивирует тебя в работе?
— Мне нравится идея «Звёздных Войн» (в отличие от самого фильма): тёмная сторона черпает свою силу в своей ненависти. Я точно также делаю на работе — черпаю силу в раздражении и желании сделать лучше.
— Что раздражает больше всего?
— Терпеть не могу цитаты. Ещё ненавижу тупость. Например, когда менеджер не хочет нормально сделать, а просто хочет выслужиться перед начальством. Классическая проблема у менеджеров: прямо сейчас нужно решить. На это всегда нужно сначала забить. Часто разработчики слишком вежливые, чтобы сказать: «Ты немного посиди, подумай и потом нормально решим. Вопросов нет — проблему надо решить, но по-другому и потом». Эта ситуация раздражает: один устраивает истерику, а другой ведётся. Я всегда стараюсь придумать процессы, чтобы у менеджера не было возможности устраивать истерики, а у разработчика не было возможности сделать по-быстрому: без тестов, проверок и так далее.
— Какие требования выдвигаешь к людям и с какими приятно работать?
— С умными. Это те люди, которые тебя иногда удивляют своими предложениями. Таких людей, которых я знаю, в принципе мало.

На первой работе я понял, насколько разные должны быть отношения на работе и вообще по жизни. Я стал замечать разницу между людьми. Есть те, с которыми приятно общаться и есть те, с кем приятно работать. И очень часто это совершенно противоположные люди.

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

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

Если вернуться к вопросу, то люди, с которыми приятно работать, должны предлагать что-то новое, отлично знать основы, уметь внедрять новые штуки. Они умеют это объяснять и продвигать в компании. При этом сами постоянно изучают что-то новое. Необязательно они круглые сутки программирует. Человек может новый виски пробовать или на борде кататься или книжки новые читать. Соответственно, люди, которые сами себя развивают и захватывают других рядом с собой — такие люди чаще всего получаются умными. Они и так уже что-то себе наразвивали, продолжают развивать и тебе помогают.
— С кем не хочется?
— С глупыми. Люди, которым всё равно. Например, тесты нужны, не нужны — ему пофигу. Если надо, то давай попробуем, если нет, то и ладно. Не стремятся сделать что-нибудь интересное, новое. Перед тобой задача и ты не в лоб её решаешь, просто выставляя «if», а переделываешь, чтобы всем было удобнее и на будущее улучшаешь жизнь. Себе же улучшаешь жизнь. Нет, он выставит «if» и сидит чай пьёт. Обычно такие люди и в жизни ничего особенно нового не делают. С такими людьми неинтересно работать. Бывает, что такие люди полезны — для исправления багов. И возможно, их такое положение дел вполне устраивает: они правят баги с 9:00 до 18:00 (или какое там бывает расписание) и уходят домой.
— Тебе приписывают такое качество как упорство.
— Лучше назвать — несгибаемость. Часто бывает ситуация, когда тебе приходится идти против начальства, у которого есть своя идея и иногда она просто неправильная, иногда в конкретной ситуации неправильная. В принципе неважно. Ты в этой конкретной ситуации оказываешься и блин — это же неправильно. И многие изначально понимают, что это неправильно. Но зачастую люди или стесняются, или боятся чего-то и не пытаются объяснить другим, почему нельзя так делать. Не пытаются сделать продукт лучше, а просто делают, как им говорят, даже если это очевидно неправильное решение. И проект становится хуже. Но если человек достаточно упёртый (и упоротый) и для него правда важнее, то он будет упираться до конца: либо пока его не уволят нафиг, либо пока не согласятся. Вроде у меня есть такая черта.
— Какие требования выдвигаешь к себе сам и стараешься им следовать каждый день?
— Важное требование — не косячить. Один из косяков — это формировать такие требования. Часто люди не понимают, что в принципе не сложно работать качественно. Это элементарная, на самом деле, работа программистом. У тебя просто есть список «to-do», который ты каждый день выполняешь. Есть некоторые разработчики в команде, которые невнимательны. Дело даже не в том, что они специально что-то портят, а просто невнимательные. Допустим, мы подумали и решили выставлять к каждому коммиту сообщение. Чтобы все сообщения были однообразны, я предложил придумать какое-нибудь правило, на самом деле, без разницы какое. Пусть они даже пустые будут — это тоже правило. Мы просто его придумаем и будем следовать. Решили, что будем писать номер задачи, название задачи и комментарий через дефис. По-моему, до сих пор не все этому следуют. В чём сложность— непонятно.

Те же проблемы потом встречаются и в коде. Нужно написать комментарий — не все пишут. Почему? Я не знаю. Таким мелочам, которые просто требуют порядка в голове, я стараюсь следовать. Если я прокосячил, то стараюсь больше так не делать или ещё лучше: настроить что-нибудь, чтобы у меня не было возможности прокосячить в будущем.
— Изменились ли критерии выбора проектов за твою карьеру?
— Не очень. У меня вообще какие-то общие принципы не меняются. Всегда просто хотелось делать какие-то прикольные штуки. Нельзя назвать критерии таких штук. Просто на месте смотришь — о, прикольно. В институте я делал терминал оплаты — было интересно. Вроде простая идея, но были свои нюансы — IE 6, компьютер старый, писал всё на JS. Плюс у тебя перед глазами была живая аудитория, которую ты видишь, как они тыкают эти терминалы и у них что-нибудь ломается.

В Alawar было прикольно, потому что там делают игры. Они тогда начали делать свои игры и я под них писал бэкенд. Было прикольно — я люблю играть в игры и соответственно делать их. Многие ругаются на геймдев, но я всю жизнь хотел писать игры и до сих пор хочу.

В Roowix делаю Gelato проект тоже интересный со своими заманухами.
— Тебе нравится, как проект развивается?
— Не всегда. Но если тебя что-то не злит на проекте и не раздражает, то нет смысла в нём участвовать. Многое не нравится, многое поправили. Изначально мне не нравилась фраза «мы стартап». До сих пор в головах эта идея осталась — давайте быстрее и пожертвуем качеством. Мне это никогда не нравилось. Быстрее делать хорошо, но не обязательно при этом жертвовать качеством. Можно и другими вещами пожертвовать: меньшим функционалом, другими подходами в программировании. Можно делать более-менее контролируемый код и быстро. Не надо делать его супер-крутым. Можно делать его атомарным, чтобы как раз потом быстро его переписать.

Например, раньше не было тестов. И менеджерам вообще сложно было доказать важность тестов — нет визуального эффекта и так далее. И как минимум 2 года я ходил и нудил — давайте писать тесты. В итоге, я никого не убедил — просто начал сам писать. А потом получилось так, что в руководстве решили, что тесты важны.
— Какая главная функция менеджера?
— Менеджер должен уметь ставить задачи. Для начала хорошо, чтобы они вообще были — стрёмно, когда задач нет. Он должен уметь приоритизировать задачи и иметь общую картину. В целом: менеджеры имеют плохую привычку говорить, как делать, а должны говорить, в чём проблема и уметь объяснить.
— Была идея сделать свой продукт? И какие продукты в целом нравятся?
— Да, чаще в геймдеве. Сейчас пишу простейшую игру на Go и React Native — прикольно поизучать. Иногда с женой обсуждаешь — например, было бы прикольно сделать нормальный список продуктов с нотификациями. На самом деле, таких приложений полно, но не всегда в них есть всё необходимое, и сразу мысль — можно написать приложение, которое будет удобно для тебя и, возможно, для других.

Ещё нравятся игры. Сейчас играю в «Ведьмака 3», недавно прошёл «Fallout», «WOW» нравится. Вообще популярные игры сложно не любить. Интересная игра «SOMA» — там крутая идея про перемещение сознания и интересный сюжет. Вообще люблю вещи с интересным сюжетом.
— Отдаёшь предпочтения каким-то технологиям?
— На самом деле без разницы. Например, когда Егор пришёл в компанию, он начал рассказывать про никому неведомую технологию, которая называется Elm. У неё есть свои преимущества по отношению к JS, но когда я посмотрел код — я ничего не понял. Любой нормальный язык можно хотя бы прочитать, а там вообще набор непонятных символов. Его так сложно было изучать, что я чуть не умер, пока его смотрел. Но я же крутой разработчик — как так, кто посмел? Потом думаю: «Ну всё». Стрёмно же, когда смотришь и не понимаешь. Начал читать туториалы, развернул тестовый проект, стал потихоньку со скрипом изучать. Мне понравилось. На практике проверять не буду, но тем не менее несколько полезных вещей для программирования в целом вынес. Когда собеседуем кого-нибудь на фронтенд, я хоть и не фронтенд разработчик, но какие-то вещи понимаю, а люди нет.
— На что смотришь на собеседованиях?
— На то же самое: если человек умный, то это нормально. Сразу видно, сидит человек на месте или нет. Например, если у него есть области знания, в которые он по идее не должен знать. Если он фронтендер и знает бэкенд — это круто. Если ещё и пробовал, то ещё лучше. Но если пришёл на Angular.js и не знает его отличие от React.js или даже, чем вторая версия от первой отличается — это печально.

Я не люблю спрашивать, что делает эта функция в таком-то языке. Люблю вопросы на стыке программирования и общения с командой. Например, любой разработчик в начале всегда осваивается, а потом вдруг находит проблемные места (гавнокод) и предлагает всё переписать. Тут возникает вопрос: что такое гавнокод? Это он должен будет объяснять людям и вообще показывать понимание проектирования архитектуры. Он может не знать конкретных терминов или принципов SOLID, но если у него мысли идут в правильную степь — это хорошо.
— Как относишься к литературе?
— Техническую литературу читаю, но редко. В принципе, если ты что-то понимаешь, то книжки помогут только систематизировать знания, а если не понимаешь, то и не поймёшь, прочитав книгу. Смотришь и блин: ну что я тут не знаю.

Бизнес-литературу тоже не очень люблю: вот было плохо, а мы сделали хорошо — очень полезная информация [сарказм]. Или какие-то мотивационные книжки: вот тебе нужно поменять отношение к жизни, тебе сначала будет неудобно и плохо, но потом ты достигнешь успеха и люди тебя будут любить. Во-первых, это очевидные вещи. Во-вторых, они часто неприменимые. Если ты строишь компанию, то тебе, наверное, полезно иметь сборник чужого опыта. Кто-нибудь поумнее пишет про фэйлы компании.

Из художественной литературы мне нравится «Винни-Пух». В остальном всякую фантастику люблю, особенно в детстве много читал. «Гарри-Поттера» и «Хоббита» тоже читал. Главное, чтобы сюжет хороший был.

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