Check Levi9 best QA positions to Backbase team!
×Закрыть

Если вы хотите стать Ruby/JS программистом

Добрый день, меня зовут Галина Калашник, я — комьюнити-менеджер в днепровской компании RubyGarage.

Как и другие аутсорсеры, RubyGarage помогает западным бизнесам с разработкой веб- и мобильных продуктов. На каждом проекте у нас сидят Ruby/JS программисты, и в этой статье я расскажу, почему для веба перспективно знать Ruby/JS и как его эффективно выучить.

Почему Ruby/JS разработчики

В 2011-м году, когда RubyGarage только был основан, мы решили ориентироваться преимущественно на новые бизнесы, у которых, как вы знаете, всегда ограничены бюджет и время. В таких условиях MVP нужно выкатывать быстро и смело, а потому мы использовали следующий стек технологий:
● бэк-энд — Ruby/Ruby on Rails
● фронт-энд — JavaScript/Angular
● (плюс нативная разработка на iOS/Android, если нужно)

Если стоит задача собрать команду под такой типичный проект, кажется логичным и простым набрать отдельно Ruby- и JS-разработчиков. Но на деле это неудобно никому:

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

Поэтому мы сразу решили работать с Ruby/JS программистами. В перспективе от этого выиграли все, и в первую очередь сами разработчики. Теперь они обладают большим контролем над проектом, не выгорают от работы над одними и теми же задачами и получают дополнительную гибкость в своем дальнейшем развитии и карьере. А если на проекте нужно несколько таких специалистов, то они с легкостью поймут друг друга, ведь они знают одни и те же методы разработки и технологии.

Впоследствии мы обнаружили, что много компаний, с которыми мы дружим, пошли похожим путем (и мы даже стали помогли им с поиском Ruby/JS программистов, но об этом чуть ниже). Да и количество клиентов с ограниченным бюджетом и временем за последние годы только возросло.

Что должен уметь Ruby/JS разработчик сегодня

Изначально мы искали ребят, готовых написать код как бэк-энда продукта, так и для его фронт-энда. Но со временем список базовых требований вырос.

Опираясь на текущие проекты компании и экспертизу наших специалистов, количество которых выросло с 3 до 70 за пять лет, мы составили следующий актуальный портрет типичного Ruby/JS-разработчика:

— Понимает ООП и Design Patterns
Это теоретическая база, без которой Ruby/JS разработчик имеет все шансы совершить архитектурную ошибку, для исправления которой придется переписывать если не весь, то бóльшую часть кода.

— Знает не только RoR, но и Ruby
Несмотря на то, что в большинстве проектов используется именно Ruby on Rails, вопреки частым ожиданиям одного его почти никогда не хватает для решения всех возникающих перед разработчиком задач. Основательные знания самого языка Ruby — это реальная необходимость.

— Разбирается в Ruby-гемах
Большинство веб-проектов требует решения кучи тривиальных задач, и легче всего они решаются с помощью уже готовых Ruby-библиотек (тех самых гемов).

— Пишет автотесты
Практика покрытия всего кода автотестами настолько себя оправдала, что единичные тестировщики у нас в компании привлекаются только к решению нестандартных QA-задач.

— Применяет современные подходы в разработке
Имеются в виду Agile-методологии, XP-практики (TDD, BDD, planning poker), Git flow, техники программирования на Ruby и Rails, знание инструментов и т.д.

— Разрабатывает фронт-энд
Тут подразумевается наличие опыта использования HTML, CSS, JavaScript, а также знаний AngularJS и ReactJS.

Ничего экстраординарного, однако на деле все не так просто. Во-первых, найти таких специалистов безумно трудно (по крайней мере, было). Во-вторых, разработчики и команды, заявляющие о том, что используют agile-подходы и всякие best practices, часто решают задачи крайне неэффективно.

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

В общем, не найдя нужных нам специалистов на рынке, мы решили обучить своих Ruby/JS программистов.

Как стать Ruby/JS-программистом

Основная проблема, стоящая перед специалистом, пытающимся «зайти» в Ruby/JS разработку — отсутствие практического опыта. Онлайн-курсы дают только «вакуумные», т.е. оторванные от реальности и контекста задачи. В то же время, компании тоже хотят перестраховаться и без практического опыта могут вас и не взять. Если на проекте сидит недостаточно опытный специалист, то конечный продукт от этого только пострадает.

Поэтому с 2011-го года мы с сотрудниками проводим бесплатные курсы, основной упор которых сделан именно на практику. После каждой лекции, насыщенной примерами из нашей работы, дается обязательное к выполнению домашнее задание. Затем проводится практическое занятие, на котором студенты занимаются групповым (больше двух человек) code review и групповым программированием.

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

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

Теперь у нас есть базовые требования к студентам, и это тот необходимый минимум знаний, которые необходимо обрести будущему Ruby/JS разработчику в первую очередь:
● базовые знания и опыт работы с HTML, CSS, JavaScript
● понимание основных принципов работы баз данных и языка SQL
● знание объектно-ориентированного программирования
● технический английский на уровне чтения документации

Для попадания конкретно на наши курсы также приветствуется знакомство с одним из серверных языков программирования (PHP, Java, С++/С#, Python, ...).

Конечная цель нашего курса — не просто обучить людей, а дать им возможность на уровне Junior-специалистов присоединиться к текущим проектам и приносить реальную ценность в разработке продукта. Именно поэтому на выходе студент получает следующее:
• Навыки программирования на Ruby
• Навыки создания веб-приложений на Rails
• Опыт разработки по TDD и BDD
• Опыт парного программирования
• Навыки программирования на AngularJS и ReactJS
• Опыт в разработке реальных проектов
• Опыт эффективной коммуникации в процессе разработки

По итогам последнего набора (весна 2016) имеем следующие цифры, которые указаны в инфографике ниже:

За период с января по март 2016 года мы получили 250 запросов на тестовое задание, но только 40 студентов смогли его выполнить в объеме, достаточном для приглашения на собеседование. Столь «жесткий» отбор объясняется тем, что мы нацелены не на набор и прокачку человека «с нуля», а выбираем людей со знаниями и пониманием принципов программирования. Почему? Потому что за полгода обучить человека с «нулевыми» знаниями до уровня специалиста в своей области не то, чтобы сложно, фактически — не реально.

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

Следующий этап — собеседование: общение с целью понять мотивацию и заинтересованность человека. На собеседовании мы показываем объем работ, который нужно выполнить за время курса и количество времени, которое необходимо будет потратить на изучение нового материала (от 16 до 24 часов в неделю). Для некоторых такая загрузка оказывается серьезным препятствием и они принимают решение не в нашу пользу.

На этапе учебного процесса есть несколько причин, по которым люди уходят. Это могут быть проблемы совмещения наших курсов с работой/учебой, изменением графика, сменой места жительства, личными обстоятельствами. Таким ребятам мы предлагаем разобраться с проблемой и продолжить обучение вместе с группой следующего набора, уже без обязательного выполнения тестового задания.

Есть студенты, которые получают на курсах (еще до их окончания) достаточное количество знаний и опыта для того чтобы трудоустроиться. Решив таким образом свою основную задачу, они направляют все свои силы в другое русло, стремятся качественно зарекомендовать себя, решая рабочие задачи и, соответственно, прекращают посещать занятия.

Мы настоятельно рекомендуем не спешить уходить с половины курса, потому что по его окончанию ваша ценность на рынке труда, опыт и знания будут намного выше.

Посмотрите, в какие компании устраиваются Ruby/JS программистами наши выпускники:

В сухом остатке, стать Ruby/JS программистом — это реальный вызов. И если вы его приняли, то засучите рукава и приготовьтесь к тому, что вам придется не только учиться, но и много и упорно практиковаться. Ну а мы вам в этом всегда готовы помочь.

Прошлая статья на DOU об опыте проведения курсов: dou.ua/forums/topic/16183
Сайт нашей школы: rubygarage.com.ua
Также можете задавать мне как организатору наших курсов любые вопросы.

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Full Stack
мы решили ориентироваться преимущественно на новые бизнесы, у которых, как вы знаете, всегда ограничены бюджет и время
Читаем:
  • знать в 2 раза больше
  • меньше зарабатывать
  • овертаймы
А оно надо вообще?

ну Рельсы изначально для стартапов предназначены..Или нет?)

знать в 2 раза больше

да, надо знать больше, это правда, для кого то это проблема

меньше зарабатывать
овертаймы

это чисто ваше субъективное мнение, задача органиченного бюджета и времени решается качественным менеджментом, пониманием как быть Lean для клиента и умение достигать результата, а не работы в ущерб разработчикам

есть плюс работы с такими бизнесами — это возможность использовать самые последние технологии, но это плюс для тех кто любит новенькое

Собственно вопрос, ответа на который я не увидел и на сайте куров, курсы онлайн, или таки требуется личное участие?

Курсы проводятся у нас в офисе, в Днепре. Требуется личное участие

Спасибо всем, кто указал на неточности, связанные с формулировкой full stack, в статье. Имелись в виду конкретно Ruby (Ruby on Rails)/JS (Angular/React) программисты. Внесла изменения.

— Знает не только RoR, но и Ruby
Несмотря на то, что в большинстве проектов используется именно Ruby on Rails, вопреки частым ожиданиям одного его почти никогда не хватает для решения всех возникающих перед разработчиком задач. Основательные знания самого языка Ruby — это реальная необходимость.
Для рельсиста знание Ruby и гемов — необходимость? Да Вы шутите )))
Для рельсиста знание Ruby и гемов — необходимость? Да Вы шутите ))
Увы, но это не шутка. Есть определенная категория «рельс девелоперов», которые слабо знакомы с базовыми конструкциями языка и на вопросы типа «как работает вот это» отвечают «это рельсовая магия».

А как они на работу попадают?

проходят собеседование по рельсам

Те по идее можно придти на позицию java dev в стек spring+hibernet не зная java и sql?)

насколько знаю — просто по джаве на собеседовании будут гонять обязательно. так что знать ее придется. могут даже по ее спеке помучить, не говоря о системной библиотеке.

по sql — обычно нет. так что да, хибернейтовский код который тупейше мучит сервер БД — не редкость.
этот код кстати, нередко является причиной — «джава тормозная».

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

Когда их собеседуют такие же :D

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

мы использовали следующий стек технологий:
● бэк-энд — Ruby/Ruby on Rails
● фронт-энд — JavaScript/Angular
● (плюс нативная разработка на iOS/Android, если нужно)

Работал на таком проекте. Все делали разные люди. Плюс еще верстальщики. У вас же фулстек дев еще и верствть должен?) ах да, еще и тестировщики, которых вы редко привлекаете)
Так вот. Грамотный менеджмент+ адекватные девы=все отлично работало.

от этого выиграли все, и в первую очередь сами разработчики.
Взять Java-девелопера, заставить еще и JS делать. И курсов не надо никаких.

А оно ему зачем, Джава девелоперу? Как раз его то и не заставить соваться в джс

Фулстек нужен там где у клиента бюджет ограничен. А значит там и джавы то обычно не будет.

Да хз зачем оно ему надо, но тенденция такова, что все больше и больше заставляют туда соваться, чуть ли mandatory requirement стало и это совсем не радует.

Полностью согласен с Сергеем, бюджет ограниченный, когда бюджет ограниченный решается задача MVP, цена, скорость, качество

от этого выиграли все, и в первую очередь сами разработчики
ппф... ну та понятно, как всегда выиграл разраб, которому стали платить зп за 3-х и в его сутках стало 72 часа :)

а причем тут ЗП и количество часов в сутках? у тебя в стеке технологий написано что ты знаешь Node.js, Design Patterns, OOP, MV*, REST, AJAX, HTML5, CSS, Backbone.js, MySQL, jQuery, PHP, это разве не full-stack (backend + frontend programming)? тебе это не помогает в работе каждый день?

это разве не full-stack

то что написано в резюме — не означает фуллстек программиста.
а, если честно написано — какие-то практические навыки использования.

скажем — если поставил и используешь транслятор SASS в CSS на Node.js, то в резюме и появится SASS, Node.js

а речь о троих сутках возникает из:
— полностью сам верстаешь по предоставленному дизайну
— полностью сам, на этой верстке делаешь UI на Backbone.js, Angular, и т.д.
— полностью сам делаешь бекенд — контролеры, модели, схема БД

вот тот кто это делает сам, или почти сам в проекте и есть — фулстек.

а не то что человек в курсе как и что делается в каждой из областей, и, в принципе, может выполнить работы в своей неосновной области на уровне трейни-джуна.

а чем крупнее проект. тем каждая область становится специфичней. даже «схема БД» может потребовать DBAщика, потому что придется писать хранимые процедуры, тюнить тригеры, индексы, и т.д.

Node.js, ... PHP,
в проектах на PHP сейчас нередко используются сборщики фронтенда типа Bower, Gulp, Grunt

Поэтому, если в проекте это есть — то PHP программист честно поставит их в свое резюме.
Что не означает что он в состоянии за приемлимое время написать функционал фронтенда, который написан фронтендщиком.

это разве не full-stack (backend + frontend programming)?
да backend+frontend, но это все тот же JS и смежные области типа баз данных. Это можно засчитать как full stack javascript dev, а не куда шире понятие full stack.
написано что ты знаешь
знать и реально юзать каждый день это не то же самое- совсем разные уровни. При реальном «мастере на весь кодинг и не только» не выигрывает никто, кроме конторы в плане хорошей масштабируемости, взаимозаменяемости, высокой занятости персонала, без простоя и меньших трат — нанять отдельных людей куда дороже, чем доплатить идейному 20% и прилепить медаль fullstack.
Разрабу же все это надо выучить, отпрактиковать, познать лучшие практики, следить за тенденциями и изменениями и держать скилл на каждом направлении, да и еще во время работы быстро переключаться между технологиями.
а причем тут ЗП и количество часов в сутках?
С этого и выплывает что знать надо за 3-х скажем, а сутки и так не резиновые и пока мы не обучаемся во сне, но с точки зрения конторы, не очень переживающих за высокое качество и психическое здоровье своих разрабов, все ништяк.
Был бы я на месте таких контор, то думал бы также- зачем мне отдельная суровая мясорубка, суровая соковыжималка , суровый блендер, если можно взять бюджетный кухонный комбайн, чуть дороже мясорубки и он будет всегда при деле.

Если курсы по узким специализациям не ахти эффективны, то фулстек курсы...
Как курсы повышения квалификации так наз вебмастеров — пожалуй да.

А если программисту до фулстека не хватает чего-то одного — то я бы советовал и прокачать то чего не хватает. На спец курсах, или самому, не суть.

Приходят разные люди, кто то чего то до качать, кто то выучиться, приходят разные. Курс на выходе дает Junior специалиста если человек не в теме был до курсов. Если был в тебе он добирает того чего не знал (посещая нужные занятия). Каждая отдельная тема по сути и есть спец курс.

ну, сам я ушел из джавы вобщем-то из-за желания фулстека.
я называю такой выбор («мне комфортнее быть большим в маленьком проекте, чем маленьким в большом»)

но ваш курс не выбрал бы.

там руби и рельсы. слава которых в прошлом, а в будущем — медленная маргинализация.

тот кто помониторит вакансии, тренды — поймет примерно тоже самое.

как там в коментах заметили — хм, а следующий по рейтингу за Ruby — Perl
причем с ростом!

здесь имеет место пресловутый закон 80-20

в торговле он звучит примерно так
80% покупок приходится на 20% ассортимента.
20% — на остальные 80%

так вот соседство с Perl можно трактовать что и Ruby там, в этих 80% ассортимента.

то есть — в маргинальной группе. там же и Scala, Haskell, Erlang и т.д.

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

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

теперь о славе в прошлом
Когда руби ворвался в веб рельсами — пых был ну полнейшее гуано, питон — тоже детским лепетом.
SPA — еще не в тренде, и толком не знали как их писать.
Node.js и Go — не было вообще.

Руби-Рельсы были реальной бомбой. И по уровню исполнения, и по идеям.

Теперь же — идеями поживились и другие.
и Рельсы уже не бомба. И Руби уже — не супер-бупер ЯП.

т.е. потенциала опять претендовать на мейнстрим у него уже нет.
наоборот, те же тормоза рантайма, как понимаю — фундаментальная проблема Руби VM

когда-то аналогичная загнала и Smalltalk в маргиналы.
Хотя цифры по преимуществах в скорости разработки, которые на сайтах о Руби — взяты именно с Smalltalkовских проектов.

вы не путайте божий дар с яичницей.

платформа Apple — давно живет своей жизнью. и технологии под нее рассчитанные — не подпадают в общую оценку по рейтингу Tiobe
VB от Майкрософт — тоже надо рассматривать отдельно.

Руби-Рельсы — это универсальная технология. поэтому она — подпадает.

рейтиниг же Tiobe никак не отражает специфику платформ.
например тот же Javascript там — а какой? «jQuery»? «Angular»? «PhoneGap»? а о Node.js — мы можем по этому рейтингу делать выводы?

или даже Java в Tiobe — какая, серверная или Android?

Если с этой стороны смотреть, то согласен.

Насколько я понимаю -рельсы нашли свою ниши -стартапы. Я, например, не знаю, на чем можно накидать проект быстрее ,причем не как попало, а нормальный код ,покрытый тестами) А потом если взлетит и будет огромная нагрузка можно и переписать)
Ну и второе применение -Puppet, Chef и Metasploit для девопсов)
Да, не спорю,маргинилизация может придти когда-нибудь, если какая-то крупная корпорация не возьмет руби под свое крыло. Например VM переписать..
Пока держатся.

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

еще и потому что руби код — очень сложно майнтенсить. статьи на эту тему и причины опускаю.

хотя если кратко
все что является главным преимуществом — является и главным недостатком в ЯП в 50ке Tiobe
и наоборот.

Метапрограммирование — огромный плюс Руби. Оно же — жирнючий минус.

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

для девопсов)
девопсы предпочитают Питон.
Например VM переписать..
обязательность работы с AST деревом в рантайме — делает теоретически невозможным оптимизацию такого VM.
а если убрать — то Руби лишится своего главного жирного плюса.
Пока держатся.
и будут.
в стартапах очень важно как можно быстрее выдать работающий концепт.
и тут, метапрограммирование — очень хорошая подмога.

тут уже вопрос личного предпочтения: стартапы или саппорт)

девопсы предпочитают Питон.
Да, он подъедает очень много кусков у Руби..
тут уже вопрос личного предпочтения: стартапы или саппорт)
конечно.

но я все же о статистике, как вероятности удовлетворения личного предпочтения.
стартапов нааааамного меньше чем саппорта.

а значит, чисто статистически, даже если все программисты мечтают об участии в стартапе, подавляющее большинство будет сидеть на саппорте.

ну это как в спорте. каждый участник олимпиады имеет шанс на золото.
из чего никак нельзя сделать вывод что все участники — получат золото :)

А какие ваши прогнозы, что является перспективным сейчас?

из совсем новеньких надо смотреть на Node.js и Go

а так, все те же бессмертные
Java (серверная), PHP, JavaScript (любой)

Питон у нас мало распространен, но в мировом масштабе — думаю уже тоже, наверное стал бессмертным, и «аудитория», применение будет медленно но уверенно расширяться.

.NET — тоже вполне.

и еще

да, С и С++ тоже бессмертные, как и эппловские.

то есть прорывных подвижек пока не вижу.

были идеи, новшества, которым пророчили взлет, но — не взлетели.

сейчас можно сказать — «застой».
все друг у дружки копируют идеи, и эволюционно наращивают качество инфраструктуры.

Питон у нас мало распространен, но в мировом масштабе — думаю уже тоже, наверное стал бессмертным
Чем по-вашему Питон лучше Руби того же?)
Чем по-вашему Питон лучше Руби того же?)
ответ не один год слышу простой, от самого разного уровня программистов, живьем, и в разных хабрах с редитами:

магии меньше.

за все надо платить. за каждую киллер-фичу.
и за метапрограммирование — тоже.

Ruby повторяет судьбу не только Smalltalk из-за VM
а и судьбу Perl
Write once, read never

Интересно, спасибо, я все думаю переходить ли куда-то с CRMки или нет. Пока не перехожу)

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

Алексей, спасибо вам за указанную проблему. Показала в статье статистику по последнему набору и объяснила, почему люди уходят на разных этапах обучения.

Проблема в том, что курс при этом нужно разбивать не просто на этапы, а считать разными курсами. Тогда показатель успешности будет правильным, и он будет выше: следующий этап можно будет пройти с отсрочкой. Равно как и брать на него не с нуля, а подключать тех кто завис на предыдущем (получил образование не у вас).

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

Як варіант — JS (angular/react) + node.js. Теж Full-stack

Це не просто full-stack, це прямо сквозні full-stack розраби (не побоюсь цього слова =).

Ага, хранилищем взять MongoDb и задеплоить все на JS/Linux bellard.org/jslinux

не монго — это не совсем то (ибо она не написана на JS’е). Надо брать что-то типа pouchdb.com .или www.forerunnerdb.com
Тогда все окружение будет полностью джаваскриптовое)

Подписаться на комментарии