Интервью с Ильей «Зайко» Зыкиным о его open-source проектах, frontend и backend разработке
августа 4, 2012 | Published in Интервью | 2 Comments
Продолжая традиционную рубрику интервью с разработчиками на RubyDev раз приветствовать в нашей виртуальной студии нового гостя — разработчика на платформе Rails — Илью Зайко.
Добрый день Илья. Представься пожалуйста читателям RubyDev.
Привет, Владимир! Ну для начала расставим точки над i. Зайко — это не фамилия, а псевдоним. Прозвище Зайко появилось, что называется “шутки для”, на основе , да так и прилипло. На эту тему есть у меня даже фирменный смайл зайца >;0)
По диплому я школьный учитель физики. До того момента, пока не перепрофилировался в Ruby/Rails разработчика я отработал в образовании 5 лет. Только физику не преподавал — с первых дней занимался преподаванием информатики. Сначала в колледже, потом вел частные курсы для школьников при университете. Последние 2 года преподавал в гимназии. Буквально несколько недель назад выпустились ребята у которых я вел информатику в 9 — 10 классах. Рад за них. Говорят последний год информатику вела у них какая-то “грымза” (улыбаюсь).
С момента окончания вуза в 2007 успел поучиться в аспирантуре и послужить лейтенантом в отделе Информационного обеспечения в МЧС РФ (тоже кстати хороший опыт).
В августе 2011 я оставил образование и начал работать удаленно Ruby разработчиком вместе со своим близким другом.
В январе 2012 меня пригласили на постоянную работу в Петербург работать над фронтендом нового проекта по бронированию авиабилетов. Сейчас подобные сервисы очень популярны и востребованы, и очень надеюсь, что у нас все получится.
В свободное время я занимаюсь не только программированием, но и кулинарией. Точнее занимается жена, а я в меру сил ей не мешаю. Мы с женой ведем кулинарный блог — open-cook.ru Где публикуем рецепты домашней кухни, которые может приготовить каждый. Многие разработчики начинают изучение руби и рельса с создания блога или кулинарной книги, но видимо мы с женой пока что единственные, кто решил выпустить наш маленький кулинарный проект в мир. Наша домашняя кухня открыта для вас, уважаемые Rails разработчики, по адресу !
Илья, расскажи пожалуйста как ты познакомился с Ruby и Rails и как начал работать с этими технологиями?
На руби вел разработку мой преподаватель из университета еще в 2006 году. К тому времени он уже несколько лет использовал ruby наравне с C++ для решения ряда математических задач. Первое зерно интереса к руби и рельсам было заложено, наверное, еще тогда.
История перехода на Ruby и Rails была такая.
В 2008 (к тому момент я уже 1,5 года служил в МЧС) меня попросили найти подрядчика для создания сайта для Ивановского Института МЧС. Я нашел одну из самых сильных в тот момент студий в городе. И начал переговоры о создании сайта.
Совершенно случайно директор студии, который приезжал согласовывать договор, рассказал о том, что студия хочет разрабатывать городскую социальную сеть и использовать они будут скорее всего Ruby on Rails. Я загорелся. Специалистов в тот момент (тем более в провинции) не было — и я спросил — “а если я брошу все и приду к ним, возьмут?” Мне ответили утвердительно и через месяц я уже работал в студии. Так я оставил офицерские погоны в пользу Ruby.
За 2 месяца мы с парнями освоились в рельсах. Я написал основную часть CMS на которой, кажется, до сих пор работает сайт студии. То сайт стал первым учебным проектом и сразу после этого мы начали разработку социальной сети. Релиз социалки вышел примерно через 3-4 месяца, что для троих новичков в Rails (в условиях нечеткой задачи), я уверен, что это был хороший результат.
Один из парней из той команды сейчас работает в известном сервисе Aviasales, другой — один из ведущих разработчиков в Social Quantum.
Все шло хорошо, но личные обстоятельства вынудили меня через некоторое время уйти из разработки и вернуться на работу в школу, чему, я был вполне рад.
Откровенно говоря, оплата труда офицера, разработчика и учителя в провинции примерно одинакова. Поэтому, по сути, я ничего не потерял, а только приобрел свобдное время для того, что бы заниматься интересным для себя делом.
Как думаешь, чего не хватает Rails? Есть планы что-то закоммитить в Rails? Кстати, у тебя уже был опыт отправки пул-регвестов в Rails?
Современный рельс вызывает у меня благоговейный ужас. Фреймворк становится все более и более технологичным, мощным… и даже несколько монструозным.
Нет, я не против современного пути развития — все идет правильно, но если бы мне пришлось изучать рельсы сейчас — я бы, наверное, испытал сильнейший шок от того объема и переплетения технологий, которые предоставляют рельсы сегодня.
Даже с опытом работы со вторыми рельсами я далеко не сразу принял все нововведения Rails 3.x. На это потребовалось, кажется, несколько месяцев.
Стать коммитером в рельсы я не стремлюсь, да и не хочу. Задавать тренды развития фреймворка мне вряд ли под силу, а с такими вещами, которые требуют срочного исправления я, как правило, не сталкиваюсь, но в принципе, я наверное мог бы что-то закоммитить в рельсы.
Еще в 2009 году мне потребовалось несколько функций для работы с Hash’ами. Я просто взял и написал то, что мне потребовалось и положил в initializers. Все прекрасно работало. Несколько дней назад я увидел абсолютно идентичные функции в edge ветке Rails 4.
Я даже представить не мог себе, что кому-то кроме меня может понадобится подобный функционал. Так что быть коммитером в рельсы — это реально, только порою для этого нужна некоторая расторопность и, в определенном смысле, наглость. Дерзайте!
Относительно недавно ты написал статью о Padrino на хабре, можешь рассказать какие сейчас отношения между тобой и этим фреймворком? В чем-то серьезном уже применил его?
Padrino замечательная штуковина. Я опечален тем, что интерес к статье был (она оказалась в избранном у более чем 100 человек), но, сильного обсуждения она не нашла.
Сама статья была не так о Padrino, как о том, как можно практически мгновенно поднять окружение для разработки на SCSS + CoffeeScript + HAML, причем даже под Windows.
Я вижу две основные причины отсутствия активного интереса к статье:
1. Я не смог правильно донести суть повествования публике,
2. Люди боятся использовать передовые техники и предпочитают топтаться на месте.
Что касается реальных проектов с Padrino, то я ничего серьезного на нем не делал и не собираюсь.
Для меня Padrino — это окружение для frontend разработки, для удобного написания HTML, JS, CSS. Именно здесь я использую Padrino постоянно. Честно.
Padrino очень легко запустить на Windows. Можно в одном окружении резать PSD макеты и верстать с помощью привычных ruby-программисту средcтв. Сказка!
Какими с какими еще языками и фреймворками ты имел опыт работы?
Ну этот… как его… PHP, кажется. В моем суровом детстве еще не было фреймворков. Многие, как и я, побывали в том темном царстве. И возвращаться туда не хочется.
Хотя, сейчас я “подрос”. Я воспринимаю PHP только как инструмент. Не больше и не меньше, но писать на PHP уже не приходится.
Начинал я с Pascal. Было счастливое время изучения C++. Помню, он приносил мне много радости, но теперь я его напрочь позабыл. Все на уровне туманных образов.
Сейчас все больше JavaScript. У JavaScript нынче эпоха ренессанса. CoffeeScript дал ему второй шанс. Баловался Node.js У меня на гитхабе есть пару зарисовок.
Меня часто упрекают в том, что я нелицеприятно отзываюсь о PHP. Каково твое мнение касательно PHP? Нет, не говори, что просто еще один инструмент, а будь честен, PHP — это ведь ужас! Ведь так?
Сейчас все стараются пнуть PHP. Да и я не исключение. В нем много странностей и какой-то несогласованности и безалаберности.
Но, я честно не понимаю, чем может быть плох php если вы делаете сайт визитку из 10-15 страниц. Я сам подрабатывая на фрилансе часто пользовался php что бы запустить простенькие сайтики на самом дешевом хостинге, с минимальными трудозатратами.
Но делать большой проект я бы на пхп не решился. Но это не столько проблема пхп, сколько пхп эко-системы, которая де-факто отсутствует.
PHP — ужас?! Ну хорошо, пусть будет так. Но мне это чуть более чем безразлично.
Ты упомянул, что имел опыт работы с Node.js. Расскажи пожалуйста какие впечатления у тебя вызвала эта платформа и почему ты не выбрал, например, EventMachine, который написан на любимом Ruby, при этом код под EventMachine получается гораздо чище и понятнее на крупных приложениях с использованием этой платформы.
Я не backend разработчик, мне жаль, но я не могу делать сравнения. Да и работа с Node.js была скорее игрой, чем реальной необходимостью. Я не хочу делать вид эксперта в том, в чем не имею опыта.
Я знаю, что ты хорошо разбираешься во frontend разработке. Расскажи пожалуйста имел ли ты опыт работы с JavaScript MVC, MVVC и т.п. клиентскими фреймворками, которые стали так популярны в последнее время?
Надо понимать, что всякий новый инструмент, который появляется на рынке имеет строго определенный круг задач.
Те задачи, которые сейчас приходится решать мне спокойно реализуются на основе стандартного стека HTML/HAML + JS/JQuery/CoffeeScript + CSS/SCSS/Compass
Хвалить и ругать другие средстава не имею никакого желания , поскольку последние месяцы в рамках рабочей необходимости я с ними не сталкивался.
Что касается MVC подхода — без него писать JS код сегодня практически нельзя. Мозг уже сам разделяет логику от процессинга данных и функций построения вида. CoffeeScript дал JavaScript вторую жизнь. И это радует.
Недавно в группе ты презентовал свой гем для определения прав пользователям и авторизации. Расскажи пожалуйста подробнее о нем и чем TheRole отличается от, например, CanCan?
это гем для организации разделения прав пользователей на сайте. Он не хуже и не лучше CanCan, он просто другой. Это мой вариант решения давно известной задачи. И мне кажется я справился с ней не самым худшим образом. Я решил задачу, так как я хотел. Возможно, мое решение кому то придется по вкусу. Как знать.
Я уже неоднократно слышал мнение, что я сделал велосипед, но справедливости ради надо сказать, что основа и идея гема TheRole была создана еще до создания и релиза CanCan. Просто недавно у меня наконец-то появилось время его закончить.
Я не работал с CanCan, поэтому могу ошибаться и получить минус в карму, но, как я понимаю в CanCan авторизация примерно так выглядит:
Есть некий файл, в котором ты описываешь права пользователя на выполнение определенных действий на сайте.
Если ты захочешь, что то поменять — то нужно найти файл настроек CanCan, переопределить права и заново загрузить файл на сервер, после чего, видимо, сервер надо перезагрузить, чтобы изменения вошли в силу.
Эх. Видимо не один помидор в меня полетит. Ну, да ладно.
О TheRole
ACL системы — очень простые штуки. Тебе нужно просто выписать список всех действий пользователя в системе и каждому действию назначить true или false. Может пользователь это сделать или не может. Это очень простой принцип назначения ролей. Этим принципом я руководствовался когда создавал прототип TheRole на php в 2006 году для одного своего сайта.
MVC — подсказывает нам очень соблазнительную структуру построения ACL (списка контроля доступа) — это разделы (контроллеры) и правила (названия экшенов в контроллерах).
Для формирования ролей я беру за основу 2-х уровневый хеш массив — полностью соответствующий в названиях именам контроллеров и действий в них. И просто назначаю true тем действиям к которым пользователь имеет доступ и false к которым не имеет. Отсутствие правила конечно воспринимается как false — доступа нет. Вот и все. Имея хеш со списком правил доступа очень легко сделать before_filter, который контролирует доступ к действиям опираясь на этот хэш.
Еще бывает нужно проверить не только факт доступа, но и то, что пользователь собственник объекта. А это и того проще. Соглашения rails заставляют нас делать внешние ключи у объектов единообразными. А это значит что страница @page принадлежит пользователю @user если @page.user_id == @user.id
По сути мой гем — это интерфейс работы с хешем, который хранится в БД в виде JSON строки и несколько простых фильтров.
Благодаря простоте идеи мне удалось сделать очень гибкую ролевую систему с интерактивным интерфейсом, где можно настраивать права доступа на лету.
В этом и отличие от того самого CanCan.
Помимо TheRole над чем еще OpenSource’ным работаешь?
У меня сейчас 3 проекта.
- — система распределения прав на сайте с административным интерфейсом.
- — Графический интерфейс для алгоритма NestedSet.
- — Обертка над объектом Date в JS для удобной работы с датами в Браузере или Node.js.
Все проекты носят приставку The. Потому что я тот самый школьный учитель информатики (the-teacher)
TheTime — уже завершен.
TheSortableTree в ожидании времени для завершения 2 версии со сверхбыстрой отрисовкой деревьев на стороне клиента.
TheRole — Новинка. Еще в альфе. Активно разрабатывается. Стараюсь делать коммиты каждое утро. Медленно но верно.
Какие задачи на будущее ставишь перед собой? Возможно, новые open-source проекты, или собственный бизнес?
Мечтаю пожить и поработать в Канаде или на Аляске. Я сам родом из Магадана. Северный край. Видимо потому и тянет куда-то в ту сторону. Больше пока ничего не загадываю. Как говорится — все сбудется — стоит только расхотеть.
Скажи пожалуйста, как ты относишься к TDD и BDD? Их применение в сообществе Ruby/Rails дэфакто стандарт, однако многие говорят, что приносят применение TDD или BDD в жертву скорости разработки. Как думаешь, действительно ли TDD/BDD оправдывают потраченное на написание тестов и спеков время?
Нужно относится к тестам прагматично.
Вариант первый.
Как написать тесты, когда ты еще не знаешь как должна будет работать система? Думаю, никак. Что бы писать тесты нужно четко знать что ты хочешь в итоге получить.
В вебе при разработке первых вариантов системы, на мой взгляд, тесты могут только повредить. Ок, пусть ваша система дает сбой, но приносит прибыль, чем вы будите отлаживать и покрывать тестами ее еще 2-3 месяца. Не забывайте — на тесты тоже нужно время. И искать ошибки в тестах порою ничуть не легче, чем в коде. Ведь нужно еще и понять как работает код, и что идет не так — Почему тест валится?
Даже если программист точно знает что нужно, заказчик завтра может все поменять. И где тогда будут ваши тесты?
Вариант второй.
А как создать ролевую систему на сайте без тестов? Мы четко понимаем как должна работать система. Доступ есть в одних случаях, его нет в других.
Ок. Кто возьмется прокликать 10 страниц на предмет доступа от имени пользователя, модератора и администратора + еще и проверив права собственности на редактирование некоторых объектов? Не думаю, что найдутся добровольцы, которые будут это делать при каждом изменении кода.
А вот тесты сделают это за 20 секунд (учитывая старт тестового окружения). Вот оно торжество тестов.
Вариант третий.
Вы готовы без тестов загрузить в продакшн приложение, которое приносит миллионные прибыли каждый день? Одна ошибка и сервис ляжет на несколько часов, а вы, возможно даже не сразу узнаете об этом. Я лично не готов в таких условиях работать без тестов.
Если вы до сих пор не пишите тесты — значит вы еще можете жить без них. И это нормально.
Надеюсь я пояснил свою точку зрения. Все хорошо в меру и без фанатизма.
- Тесты ведь не сразу все приложение покрывают, а их можно итерациями писать. тест на итерацию, а не на конечный продукт, а то, что продукт меняться может сильно — это проблема отсутствия ТЗ, проблема организации работы и архитектуры проекта + Agile методологии предполагают быстрые и частые изменения. В общем это спорный момент. Я бы поспорил с 1 пунктом.
Да, спорно. Я просто за то, что нужно придерживаться здравого смысла. Конечно с тестами лучше чем без них.
Можешь поведать о том, как выглядит твое рабочее место? Мне всегда интересно в каких условиях работают другие разработчики и, думаю, что это будет интересно многим читателям RubyDev.
У меня Win7 машина с 4 гигами и каким-то Интелом на борту. В качестве редактора SublimeText 2.
Вообще мы программируем и работаем в облаке. Каждый подключается по ssh к удаленному серверу, правит там код, запускает веб-вервер, делает все что можно в *nix окружении. Есть какая-то утилита, которая позволяет подключаться винде к удаленному диску через ssh и работать как с локальным диском. Для всего остального есть консоль.
Винда по сути нужна только для работы в графическом редакторе и доступа к файлам в облаке через TotalCommander.
Илья, можешь поделиться своими практиками, секретами разработки? У каждого разработчика, наверное, должно быть, имеется какое-то особое, суперсекретное знание, ну по крайней мере это ему так кажется =)
- Не торопитесь. Вы все равно уже опоздали. Работайте медленнее, но качественнее,
- Пишите код для людей, а не для машины,
- Всегда нарывайтесь на критику и code review. Нет лучшего способа что-то изучить, чем задеть свое самолюбие.
Я знаю, что недавно ты посещал Brainwashing, который организовывают EvilMartians, можешь поделиться своими впечатлениями? Имеет ли смысл таким бывалым разработчикам как ты посещать “промывки мозгов” от EvilMartians или их двудневные курсы рассчитаны на разработчиков уровнем пониже?
Программа занятий доступна на официальном сайте. Пусть каждый решает для себя — полезна для него информация, раскрываемая в курсе, или нет.
По соглашению об обучении я ничего не могу говорить о том, что там было. Но личные суждения и эмоции мне, наверное, можно озвучить.
Впечатление от промывки мозгов — исключительно положительное. Здорово познакомится с теми ребятами, которые по праву считаются одними из сильнейших разработчиков в России и узнать что-то новое от сильных практиков.
Промывка мозгов от злых марсиан, как мне кажется, больше расчитана на корпоративный сегмент и на это сильно так намекает ценник курса.
Имеет ли смысл “бывалым” там побывать?
Тут комплексный ответ:
- Backend? Да. Я узнал много нового и интересного про backend. Это то, с чем я обычно не сталкиваюсь. Нагора я узнал много новых заклинаний.
- Frontend? Тоже да. Приятно знать, что почти всю магию марсиан ты уже знаешь.
- Платить самому? … я бы предпочел, что бы компания платила за повышение моей квалификации. Хотя, иногда можно себе позволить и такой внушительный ценник.
В целом да, курс был хорошим. Респект марсианам. Были и знания и шутки и разговоры за жизнь.
Работа программиста далеко не самая высокооплачиваемая. Да, в провинции она окутана неким туманом мистицизма, но в реальности программисты — это скорее обслуживающий персонал, чем зодчие новых миров. И все же что-то есть такое, что увлекает людей в профессию. Что повлияло на твой выбор стать разработчиком?
Я фанатик-трудоголик. Людям нравится то, что у них получается. То, чем я занимаюсь мне нравится и получается. Создавать — интересно.
Не тешьте себя мыслями о том, что если бы вам дали возможность заниматься чем-то своим, то вот тогда бы вы ОГО-ГО! Тогда бы вы ЭХ! Вы были бы зодчим новых миров!
Когда я был школьным учителем, у меня было достаточно свободного времени чтобы сделать “ОГО-ГО!” и “ЭХ!”. Что из этого получилось?
Если нет важной практической задачи и вас никто не гонит и не заставляет — скорее всего вы ничего не сделаете.
Прелесть работы программистом в том, что можно найти в каждой рутинной задаче свою изюминку. Просто когда вам дают задание найдите то, ради чего вы бы хотели ее сделать.
- Вам дали рутинную задачу? Вам бросили вызов! Ах, так! Да вы сделаете эту задачу! 100%!
- Вы уже решали такую задачу? Здорово! Устройте себе соревнование. Запустите таймер и бегом! Как быстро вы сделаете задачу в этот раз?
- Вам дали что-то новое? Ну так это же здорово! Есть реальная возможность прокачать скилы!
Спасибо за интервью, Илья. Чего можешь напоследок посоветовать/пожелать новичкам в разработке на Ruby on Rails и вообще всем читателям RubyDev?
Я люблю повторят фразу моей жены: “Все проблемы от неправильной организации труда”. Помните это и вы.
В целом — нет ничего не возможного. Если что-то не получается — не комплексуйте , задавайте вопросы. Глупых вопросов не бывает. Страйтесь и все получится. Возможно, не сразу, но получится!
Занимайтесь тем, что нравится. Жизнь слишком коротка, что бы тратить её на … PHP :)
Успеха вам и удачи!
— Илья “Зайко” Зыкин
GitHub:
Email: zykin-ilya{улитка}ya.ru
skype:
Кулинарный блог Ильи и Анны:
августа 5, 2012 at 10:56 (#)
Данный автор известен мне по скринкасту (не помню точно) «Развертывание рельсов на вирт. сервере». Я даже удивился что он им не пользуется.
Был бы рад его продолжению скринскатов.
Хорошее интервью, продолжайте, ибо очень интересно читать и понимать что ты не один =)
августа 6, 2012 at 08:58 (#)
Илья-замечательный, творческий человек, общение и работа с которым доставляет удовольствие. Искренне желаю успехов, dreams come true!