Привет!
Мы готовимся к предстоящей конференции RubyRussia 2019 (вы уже отметили в календаре 28 сентября?) и беседуем с нашими спикерами о жизни, комьюнити и программировании. В сегодняшнем интервью Феликс Яснопольский из Evrone общается с Иваном Шаматовым: лидером Saint P Ruby Community (тут можно присоединиться к уютному чату сообщества в Telegram) и VP of engineering в Cybergizer.
О чем будет твое выступление на предстоящей конференции?
Я хочу показать, что деньги в программировании — это просто! С помощью денег мы выражаем некоторую стоимость товара или услуги. В общем случае их можно описать как кортеж размерностью 2, состоящий из значения цифрового (например 100) и символьного (например USD,$). В случае операций с деньгами с одинаковыми символами математической аппарат относительно прост, но даже тут можно обнаружить подводные камни. Что уж говорить про сценарий конвертирования денег из одной валюты в другую. Тут идеальный математический мир рушится и начинается бизнесово-бухгалтерский. Я покажу, как разобраться в некоторых сценариях и какие могут быть ошибки на примерах практик из финтех-проектов.
Почему ты выбрал эту тему?
Я участвовал в разработке системы платежей для метрополитена, аэроэкспресса, системы для оплаты коммунальных счетов для некоторых штатов в США и много других. Самый первый скрипт, который я написал за деньги — скрипт на php для оплаты интернета через терминалы в Пушкине. В следующий раз я столкнулся с темой денег, когда работал в Cryptopay — там тоже были переводы и транзакции. Потом я ушел работать в Toptal, где был частью команды, занимавшейся биллингом. Готовясь к конференции, я подумал, что многие могут рассказать об особенностях Ruby, но мало кто разбирается в том, как же написать деньги и как сделать это правильно. А это тема, с которой мы часто сталкиваемся в самых разных проектах.
Какие технологии, кроме Ruby, тебе симпатичны?
Мне очень нравится JavaScript. Получаю удовольствие от легкости написания на ES6. Нравятся парадигмы, которые приходят в Ruby из других языков: в этом случае нам становится не обязательно использовать эти самые другие языки. Можно открыть concurrent gem и увидеть кучу инструментов из Go, Clojure, Java и JavaScript. Мне нравится, что в разных языках необходимо использовать разные способы мышления. Есть люди, которые переходя с Ruby на Go сохраняют принципы Ruby-мышления. Или приходят в Ruby с принципами из PHP. В программировании так не работает: у каждого языка свой подход, свой воркфлоу, свой mindset. Нужно понимать, как правильно писать программы именно в рамках конкретной технологии.
Мне очень интересна мобильная разработка: те же паттерны, тот же MVC, но все работает совсем по-другому. Очень интересно было изучать React и Redux — отличная репочесалка для типичного рельсовика :)
Расскажи о своих самых больших провалах и поводах для гордости.
Я могу гордиться проектами, в которых участвовал, к которым приложил руку. Например, проект, который дает возможность оплатить paypass картой аэроэкспресс в Москве. Эта же система используется в метрополитене Казани. Я писал и клиент для турникетов на JRuby, и бэкенд на Rails, который обслуживает эти транспортные транзакции, работает с различными API. Это был очень интересный проект, при этом в нем участвовало всего три разработчика.
Факапов не стыжусь, даже когда они случаются. Человек имеет право на ошибку. Ошибся — и больше так не делаешь.
Одно из твоих занятий — менторство. Почему ты занимаешься этим?
У меня самого всегда были менторы, которые подсказывали, что и как делать. Это ребята из разных чатов, люди, с которыми я общался на конференциях и митапах. Когда я достиг определенного уровня, сам стал менторить как офлайн, так и онлайн. Сейчас я занимаюсь с людьми, которые пришли к нам из Rubizz’ы. Это один из моих основных проектов на сегодняшний день, интенсивное практическое изучение Ruby для новичков. Ребятам предоставляется максимальная свобода действий и право на ошибку. И только после того, как шишки набиты, ментор объясняет, почему это была ошибка и почему так делать не стоит. Я считаю, что это правильный подход: какие-то вещи нельзя понять, пока не соберешь эти грабли сам. Если ты никогда не использовал коллбеки неправильно, то не поймешь, в чем может быть проблема с ними. И почему многие в сообществе ненавидят коллбеки.
Я слышал, что ты пытался попасть в команду Toptal шесть или семь раз. Это правда?
Да, это правда, я много раз об этом рассказывал. Toptal вел агрессивную, или правильнее сказать, проактивную политику по найму с момента старта компании. Меня приглашали на собеседования где-то раз в год. После многократных неудачных попыток я решил, что больше и не буду пытаться. Но мой приятель, с которым мы когда-то начинали наш путь в Ruby, устроился туда работать и предложил мне попробовать еще раз. И в этот раз я таки смог пройти все этапы собеседования. На входе есть большой технический тест, потом собеседование, потом еще одно, и еще… И теперь я считаю, что проводить по 5–6 этапов собеседований — это очень крутая практика. Только так ты можешь понять кто перед тобой, хочешь ли ты работать с этим человеком, впишется ли он в команду. И я понимаю, почему меня не брали в первые разы, я и правда тогда не тянул.
Как, на твой взгляд, должно быть устроено идеальное собеседование и процесс приема на работу?
Когда я помогал с отбором людей в предыдущую команду, Cryptopay, у нас было два этапа. В качестве тестового задания мы давали кусок кода на рефакторинг. По этому фрагменту кода мы делали предварительную оценку кандидата. Потом проводили собеседование в формате лайвкодинга, чтобы понять, подходит ли этот человек именно нам. Лайвкодинг позволяет понять, как человек думает. Можно оценить не только то, что написано, но и то, как разработчик пользуется операционной системой, IDE, знает ли хоткеи, насколько глубоко понимает определенные темы, какие применяет подходы, какие вопросы задает коллегам в процессе. Такой подход дает намного больше информации о человеке, чем тест или интервью об алгоритмах.
Но я считаю, что и этого недостаточно. Сейчас, в Cybergizer, я чаще всего нанимаю людей, с которыми уже работал. Есть люди, с которыми мы не работали, но вместе писали какой-то open source. Такая совместная деятельность позволяет увидеть, как человек пишет код. А еще ты понимаешь, насколько совпадает ваш воркфлоу, насколько вы ментально близки.
Я не считаю себя экспертом по найму, мой подход тоже дает осечки. Одна из моих недавних ошибок: я не хотел брать человека после лайвкодинг сессии на интервью, он меня не впечатлил. Но другие члены команды проголосовали за него, и мы стали работать вместе. И в совместной работе я понял, что это высококлассный специалист. Был и абсолютно противоположный случай, когда я всеми руками был за человека, а он как разработчик из себя ничего не представлял. После этих двух случаев я не готов судить о правильности какого-то конкретного способа найма. Может повезти, может не повезти. Перефразируя известную шутку:
— Как вам удается нанимать таких хороших разработчиков?
— Это всё опыт найма хороших разработчиков!
— А как получить такой опыт?
— Надо нанимать разных разработчиков.
Мне кажется странным то, что очень многие интересуются, как захантить хороших специалистов. Но мало кто интересуется, как стать такой компанией, в которой хорошие специалисты захотят работать. А может стоит думать в первую очередь об этом?
Ты организуешь в Питере митапы и конференцию Saint P Rubyconf. Почему и зачем ты это делаешь?
Это часть Ruby культуры — контрибьюшн в сообщество. Кто-то вкладывается кодом, пишет opensource. Я вношу вклад тем, что у меня получается. Многие думают, что для того, чтоб внести какую-то лепту, нужно быть семи пядей во лбу. Но это не так! Почти 10 лет назад, когда я был в самом начале пути в Ruby, я с командой ребят переводил на русский и озвучивал RailsCasts. Так что каждый может быть полезным всему сообществу: не важно, обновляешь ли доку в геме, пишешь статью или организуешь митап.
Увидимся на RubyRussia 28 сентября!
Смотрите программу и присоединяйтесь тут, следующее повышение цены ожидается после 15 сентября.
Спасибо компаниям, которые нас поддерживают:
Организатор — Evrone
Генеральный партнер — Toptal
Золотой партнер — Gett
Серебярные партнеры — JetBrains, Bookmate и Cashwagon
Бронзовый партнер — InSales
Мы готовимся к предстоящей конференции RubyRussia 2019 (вы уже отметили в календаре 28 сентября?) и беседуем с нашими спикерами о жизни, комьюнити и программировании. В сегодняшнем интервью Феликс Яснопольский из Evrone общается с Иваном Шаматовым: лидером Saint P Ruby Community (тут можно присоединиться к уютному чату сообщества в Telegram) и VP of engineering в Cybergizer.
О чем будет твое выступление на предстоящей конференции?
Я хочу показать, что деньги в программировании — это просто! С помощью денег мы выражаем некоторую стоимость товара или услуги. В общем случае их можно описать как кортеж размерностью 2, состоящий из значения цифрового (например 100) и символьного (например USD,$). В случае операций с деньгами с одинаковыми символами математической аппарат относительно прост, но даже тут можно обнаружить подводные камни. Что уж говорить про сценарий конвертирования денег из одной валюты в другую. Тут идеальный математический мир рушится и начинается бизнесово-бухгалтерский. Я покажу, как разобраться в некоторых сценариях и какие могут быть ошибки на примерах практик из финтех-проектов.
Почему ты выбрал эту тему?
Я участвовал в разработке системы платежей для метрополитена, аэроэкспресса, системы для оплаты коммунальных счетов для некоторых штатов в США и много других. Самый первый скрипт, который я написал за деньги — скрипт на php для оплаты интернета через терминалы в Пушкине. В следующий раз я столкнулся с темой денег, когда работал в Cryptopay — там тоже были переводы и транзакции. Потом я ушел работать в Toptal, где был частью команды, занимавшейся биллингом. Готовясь к конференции, я подумал, что многие могут рассказать об особенностях Ruby, но мало кто разбирается в том, как же написать деньги и как сделать это правильно. А это тема, с которой мы часто сталкиваемся в самых разных проектах.
Какие технологии, кроме Ruby, тебе симпатичны?
Мне очень нравится JavaScript. Получаю удовольствие от легкости написания на ES6. Нравятся парадигмы, которые приходят в Ruby из других языков: в этом случае нам становится не обязательно использовать эти самые другие языки. Можно открыть concurrent gem и увидеть кучу инструментов из Go, Clojure, Java и JavaScript. Мне нравится, что в разных языках необходимо использовать разные способы мышления. Есть люди, которые переходя с Ruby на Go сохраняют принципы Ruby-мышления. Или приходят в Ruby с принципами из PHP. В программировании так не работает: у каждого языка свой подход, свой воркфлоу, свой mindset. Нужно понимать, как правильно писать программы именно в рамках конкретной технологии.
Мне очень интересна мобильная разработка: те же паттерны, тот же MVC, но все работает совсем по-другому. Очень интересно было изучать React и Redux — отличная репочесалка для типичного рельсовика :)
Расскажи о своих самых больших провалах и поводах для гордости.
Я могу гордиться проектами, в которых участвовал, к которым приложил руку. Например, проект, который дает возможность оплатить paypass картой аэроэкспресс в Москве. Эта же система используется в метрополитене Казани. Я писал и клиент для турникетов на JRuby, и бэкенд на Rails, который обслуживает эти транспортные транзакции, работает с различными API. Это был очень интересный проект, при этом в нем участвовало всего три разработчика.
Факапов не стыжусь, даже когда они случаются. Человек имеет право на ошибку. Ошибся — и больше так не делаешь.
Одно из твоих занятий — менторство. Почему ты занимаешься этим?
У меня самого всегда были менторы, которые подсказывали, что и как делать. Это ребята из разных чатов, люди, с которыми я общался на конференциях и митапах. Когда я достиг определенного уровня, сам стал менторить как офлайн, так и онлайн. Сейчас я занимаюсь с людьми, которые пришли к нам из Rubizz’ы. Это один из моих основных проектов на сегодняшний день, интенсивное практическое изучение Ruby для новичков. Ребятам предоставляется максимальная свобода действий и право на ошибку. И только после того, как шишки набиты, ментор объясняет, почему это была ошибка и почему так делать не стоит. Я считаю, что это правильный подход: какие-то вещи нельзя понять, пока не соберешь эти грабли сам. Если ты никогда не использовал коллбеки неправильно, то не поймешь, в чем может быть проблема с ними. И почему многие в сообществе ненавидят коллбеки.
Я слышал, что ты пытался попасть в команду Toptal шесть или семь раз. Это правда?
Да, это правда, я много раз об этом рассказывал. Toptal вел агрессивную, или правильнее сказать, проактивную политику по найму с момента старта компании. Меня приглашали на собеседования где-то раз в год. После многократных неудачных попыток я решил, что больше и не буду пытаться. Но мой приятель, с которым мы когда-то начинали наш путь в Ruby, устроился туда работать и предложил мне попробовать еще раз. И в этот раз я таки смог пройти все этапы собеседования. На входе есть большой технический тест, потом собеседование, потом еще одно, и еще… И теперь я считаю, что проводить по 5–6 этапов собеседований — это очень крутая практика. Только так ты можешь понять кто перед тобой, хочешь ли ты работать с этим человеком, впишется ли он в команду. И я понимаю, почему меня не брали в первые разы, я и правда тогда не тянул.
Как, на твой взгляд, должно быть устроено идеальное собеседование и процесс приема на работу?
Когда я помогал с отбором людей в предыдущую команду, Cryptopay, у нас было два этапа. В качестве тестового задания мы давали кусок кода на рефакторинг. По этому фрагменту кода мы делали предварительную оценку кандидата. Потом проводили собеседование в формате лайвкодинга, чтобы понять, подходит ли этот человек именно нам. Лайвкодинг позволяет понять, как человек думает. Можно оценить не только то, что написано, но и то, как разработчик пользуется операционной системой, IDE, знает ли хоткеи, насколько глубоко понимает определенные темы, какие применяет подходы, какие вопросы задает коллегам в процессе. Такой подход дает намного больше информации о человеке, чем тест или интервью об алгоритмах.
Но я считаю, что и этого недостаточно. Сейчас, в Cybergizer, я чаще всего нанимаю людей, с которыми уже работал. Есть люди, с которыми мы не работали, но вместе писали какой-то open source. Такая совместная деятельность позволяет увидеть, как человек пишет код. А еще ты понимаешь, насколько совпадает ваш воркфлоу, насколько вы ментально близки.
Я не считаю себя экспертом по найму, мой подход тоже дает осечки. Одна из моих недавних ошибок: я не хотел брать человека после лайвкодинг сессии на интервью, он меня не впечатлил. Но другие члены команды проголосовали за него, и мы стали работать вместе. И в совместной работе я понял, что это высококлассный специалист. Был и абсолютно противоположный случай, когда я всеми руками был за человека, а он как разработчик из себя ничего не представлял. После этих двух случаев я не готов судить о правильности какого-то конкретного способа найма. Может повезти, может не повезти. Перефразируя известную шутку:
— Как вам удается нанимать таких хороших разработчиков?
— Это всё опыт найма хороших разработчиков!
— А как получить такой опыт?
— Надо нанимать разных разработчиков.
Мне кажется странным то, что очень многие интересуются, как захантить хороших специалистов. Но мало кто интересуется, как стать такой компанией, в которой хорошие специалисты захотят работать. А может стоит думать в первую очередь об этом?
Ты организуешь в Питере митапы и конференцию Saint P Rubyconf. Почему и зачем ты это делаешь?
Это часть Ruby культуры — контрибьюшн в сообщество. Кто-то вкладывается кодом, пишет opensource. Я вношу вклад тем, что у меня получается. Многие думают, что для того, чтоб внести какую-то лепту, нужно быть семи пядей во лбу. Но это не так! Почти 10 лет назад, когда я был в самом начале пути в Ruby, я с командой ребят переводил на русский и озвучивал RailsCasts. Так что каждый может быть полезным всему сообществу: не важно, обновляешь ли доку в геме, пишешь статью или организуешь митап.
Увидимся на RubyRussia 28 сентября!
Смотрите программу и присоединяйтесь тут, следующее повышение цены ожидается после 15 сентября.
Спасибо компаниям, которые нас поддерживают:
Организатор — Evrone
Генеральный партнер — Toptal
Золотой партнер — Gett
Серебярные партнеры — JetBrains, Bookmate и Cashwagon
Бронзовый партнер — InSales