Рубрика:
Карьера/Образование /
Рынок труда
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
Вакансия: программист Ruby
Ruby является языком программирования, популярность которого в последнее время растет. Согласно индексу TIOBE в апреле 2016 года Ruby занимает девятую позицию (год назад– 18-ю). Популярен он и в России. Чтобы выявить общее и особенное в практике его использования, мы обратились к представителям компаний и проектов с рядом вопросов
- Какими знаниями и навыками должен обладать Программист Ruby?
- Каков инструментарий программиста Ruby?
- Каковы требования компании к уровню образования потенциальных сотрудников?
- Какие требования предъявляются к опыту работы?
- Есть ли особые требования, которые обусловлены спецификой деятельности компании?
Ярослав Маркин, основатель Evil Martians (http://evilmartians.com)
1. Узкая специализация на языке программирования или платформе ушла в прошлое: сейчас любой хороший программист не только знает несколько языков или платформ, но и закороткие сроки должен уметь освоить новый язык, фреймворк или базу данных. Именно благодаря неудовлетворенности от печально известного PHP или усталости от«энтерпрайзного» Java многие классные программисты когда-то открыли для себя Ruby; сейчас они не останавливаются и осваивают функциональные языки или программирование микроконтроллеров, уже имея Ruby в багаже. Поэтому поговорим о том, какими навыками и знаниями должен обладать хороший программист.
Главное – то, что обычно называют профессиональными качествами. Умение планировать собственное время и работать без напоминаний, умение давать оценку и отвечать за нее, умение выдавать качественный результат на высоком уровне – стабильно, а не как придется.
Саморазвитие, самообразование и широкий кругозор. И язык, хороший технический английский: перед освоением любого языка программирования сначала нужно заняться своим английским.
Хорошему программисту, особенно на Ruby, нужно каждый день продираться через гору информации: блогпосты, скринкасты, презентации с конференций. Если этого не делать, можно быстро потерять хватку: нужно постоянно расширять кругозор. Для программиста, основной язык которого – Ruby, владеть еще несколькими «серверными» языками – этонорма.
Кроме отличного знания самого языка, Ruby-программист должен разбираться в стандартной библиотеке, деталях реализации виртуальной машины (сборка мусора, треды), альтернативных интерпретаторах. Важно обладать всеми навыками грамотного объектно-ориентированного проектирования, уметь со вкусом рефакторить код, владеть инструментами для автоматического тестирования.
Три главных инструмента программиста – консоль, редактор и система управления версиями. В подавляющем большинстве проектов на Ruby используется Git, который нельзя назвать простым в освоении, но знать особенности его работы и идеально работать по git flow – обязательное требование.
Большинство проектов на Ruby – проекты на Ruby on Rails, поэтому хороший программист должен отлично разбираться в деталях работы реляционной СУБД, на которой работает проект (PostgreSQL или MySQL). План запросов, типы индексов и другие, казалось бы, «мелочи» – обязательные вопросы на хорошем собеседовании.
Отдельное частое требование – опыт с оптимизацией производительности. Нужно хорошо знать детали работы Ruby (треды и сборка мусора), HTTP-стек, уметь оптимизировать реляционные базы данных, работать с кэшированием и вообще выдерживать высокую внешнюю нагрузку.
2. Главные черты, характерные для всего инструментария Ruby-программистов, это тяга к автоматизации во всем и упрощение, популяризация уже известных полезных инструментов и методов. Программист Ruby обычно работает на Linux или Mac OS X. Два из трех основных инструментов программиста – это, конечно, консоль и текстовый редактор. В мире Ruby программисты тяготеют к расширяемым редакторам (Vim, Sublime Text, Atom), пользователи интегрированных сред вроде RubyMine в меньшинстве. Крайне популярен Vim, несмотря на сложность в освоении, есть огромное количество обучающих ресурсов для новичков; вершина моды сейчас – использование Vim вместе стерминальным мультиплексором tmux.
Конечно, для работы нужна классная система управления версиями, третий основной инструмент программиста. Git доминирует в Ruby-мире, равно как и GitHub.com дляразмещения Open Source и коммерческих проектов. Хотя иногда программисты пользуются другими распределенными системами версий или даже морально устаревшей Subversion.
Ruby-программисты одними из первых ввели в моду использование менеджеров версий для рантаймов для легкого переключения между версиями интерпретатора – RVM (Ruby Version Manager), который часто заменяют на rbenv или chruby.
Ruby-проект Capistrano первым популяризовал автоматическую выкладку (деплоймент) приложения в рабочее окружение. Сейчас вместо Capistrano зачастую используют окружения, построенные на Docker.
Первые инструменты управления серверной конфигурацией (и движение DevOps в целом) тоже появились в Ruby-среде: Chef и Puppet остаются до сих пор крайне популярными. Такие инструменты нужны для того, чтобы единожды задать описание окружения сервера и в дальнейшем разворачивать его автоматически.
Автоматизация фронтенд-разработки тоже когда-то началась с Ruby on Rails и плагинов, и только несколько лет назад полностью перешла на использование Node.js. До этого Ruby был пионером в использовании новых необычных шаблонизаторов (Haml, Slim), компилируемых в JavaScript-языках (CoffeeScript), средств сборки (Rails Asset Pipeline и многие другие).
Автоматизированное тестирование, конечно, существовало задолго до популяризации Ruby и Rails, но именно с развитием Rails-экосистемы удалось сделать его по-настоящему красивым и выразительным с помощью RSpec (который стал возможен благодаря изумительным возможностям метапрограммирования Ruby), Cucumber (с помощью которого приемочные тесты можно описывать на естественном языке) и многих других инструментов.
В стремительно меняющейся экосистеме Ruby и Rails-проектов зачастую используются не только самые последние возможности привычных СУБД, но и нереляционные СУБД.
Самой популярной, «основной», СУБД для Rails-проектов остается PostgreSQL, и многие полезные нововведения, например JSONB, уже привычны в Rails-проектах. Redis используется повсеместно как основная нереляционная СУБД, часто для хранения очереди задач приложения. А использованием ElasticSearch, MongoDB и даже некоторых БД дляработы с большими объемами данных уже никого не удивишь.
Как правило, Ruby-программист знает и активно использует сразу несколько серверных языков: с чем-то он был знаком еще до Ruby, что-то изучает для задач, где Ruby мало применим.
Сейчас среди Ruby-разработчиков крайне популярны Go (из-за простоты и быстрого освоения), функциональные языки (Erlang, Clojure, даже Haskell), Elixir (напрямую вдохновленный Ruby язык для работы на виртуальной машине Erlang).
Из альтернативных реализаций Ruby можно отметить JRuby – полностью реализованная поверх виртуальной машины Java-реализация Ruby, с каждой версией работающая всебыстрее и быстрее.
И, конечно, Ruby-разработчики пользуются инструментами для организации совместной работы. Работа во многих Ruby-проектах построена на гибких (Agile) методологиях разработки, для поддержки которых нужны соответствующие трекеры. Удаленная работа стала привычной для стартапов, поэтому общение через мессенджеры вроде Slack илианалоги давно стало частью работы.
3. К уровню образования разработчиков в наше время особенных требований нет: в индустрии есть великолепные разработчики и без высшего образования, есть с образованием лингвистическим или юридическим. Конечно, отличное CS-образование (Физтех, ВМиК МГУ и другие достойные университеты) будет только кстати, особенно при дальнейшем профессиональном росте – работе с машинным обучением, например.
Вклад потенциального сотрудника в Open Source, его выступления и статьи намного важнее, чем «корочка» университета.
4. Формальные требования к опыту работы (вроде X лет работы с определенной технологией или Y лет в «статусной» должности) при найме в классные команды отошли в прошлое и остались только в арсенале компаний для массового найма сотрудников. Важно знать, чем именно кандидат был полезен на предыдущем месте работы, как лично он сделал компанию лучше. Должность тоже мало о чем говорит: зачастую бывшие технические директора или начальники разработки просто не могут пройти собеседование лучше, чем вчерашние новички, только что закончившие университет. Минимальное обязательное требование по опыту для работы в «Марсианах» – весомый интересный опыт работы вреальном коммерческом проекте или отличное Open Source-портфолио. Последнее обязательно для найма на позицию младшего (Junior) программиста.
5. Специфических требований к работе в «Злых марсианах» два – это отличная способность к работе в распределенной команде и увлечение Open Source-разработкой.
В распределенной (удаленной) команде все недостатки в организации, особенно в самоорганизации сотрудников, становятся видны намного быстрее, чем в традиционной «офисной» команде. Требования к самодисциплине намного выше, чем в других командах: важно делать точные оценки, отвечать за поставку функционала в срок, всегда быть насвязи и управлять ожиданиями как заказчика, так и членов своей команды. Особые требования предъявляются к коммуникации: важно не стесняться задавать вопросы, хорошо документировать свои решения, унылым часовым митингам предпочитать быстрые пятиминутные созвоны, быть дружелюбным и отзывчивым.
Увлечение Open Source – не только кармическая особенность (если бизнес построен на использовании открытых продуктов, нужно поддерживать сообщество самому и делиться своим трудом). Участие в Open Source крайне важно для самообразования, особенно для начинающих программистов. Новые открытые проекты и развитие существующих помогают программисту самореализоваться, а компании – найти единомышленников в команду.
Евгений Фатеев, инженер-программист в Instamotor
Ruby – удивительный язык программирования. Он был создан в 1995 году в Японии и долгое время не покидал пределов этой страны. Со временем ситуация изменилась: стала появляться документация на других языках, а с выходом фреймворка Rails Ruby покорил сердца многих разработчиков.
Тому есть множество причин, все же одна из основных, на мой взгляд, в том что «Ruby был создан для того, чтобы сделать программистов счастливыми». Это слова автора языка – Юкихиро Мацумото, которые в полной мере воплощаются в ядре и всей экосистеме языка.
Ruby обладает невероятно элегантным синтаксисом и широчайшими возможностями, среди которых динамическая типизация, превосходная работа с блоками, итераторы ивеликолепная объектно-ориентированная модель.
На сегодняшний день это развитая экосистема с огромным количеством проверенных задачами и временем библиотек, зрелыми фреймворками, большим количеством книг и блогов и крайне дружелюбным сообществом.
Ruby находит применение не только в современных веб-приложениях, но и в самых разных сферах, например: менеджер пакетов для Mac OS Homebrew или среда для создания музыки в реальном времени Sonic Pi.
1. Ответить на этот вопрос можно по-разному. С моей точки зрения, знания и навыки программиста Ruby состоят из трех измерений.
Первое измерение – конечно, знание языка. На первый взгляд Ruby очень прост (и это действительно так), но это лишь верхушка айсберга. Если погрузиться глубже, мы увидим продвинутую работу с блоками и прок-объектами, метапрограммирование и рефлексию, синглтон-объекты и еще множество возможностей. Какие-то из них используются чаще других, все же хорошее знание и понимание работы языка является необходимым.
Второе измерение – парадигмы и техники программирования, в особенности ООП и SOLID принципы. Каким бы мощным ни был язык, если мы точно не представляем, что хотим создать, разрабатываемое нами ПО вряд ли получится надежным и хорошо расширяемым. Именно поэтому очень важно понимать концепции программирования. Например, если копнуть поглубже в ООП, мы обнаружим, что такой образ мышления очень близок тому, как думают люди. Мы часто взаимодействуем с объектами, посылаем им сообщения и ждем результат. Видеть эту связь между реальным миром и программным кодом, на мой взгляд, крайне важно. Это позволяет писать более понятный и легкий в сопровождении код. Паттерны программирования также являются превосходным вкладом в копилку знаний и навыков Ruby-программиста.
Третье измерение – это окружение и смежные технологии. Под окружением я понимаю IDE и текстовые редакторы, SQL-клиенты и все прочие инструменты, которые используются в повседневной работе. Ведь чем совершеннее инструмент и чем лучше мы им владеем, тем более качественный результат можем получить. Смежные технологии также невероятно важны. Будем откровенны, современный мир программирования требует гораздо более обширных знаний, чем знания Ruby. Достаточно часто Ruby используется при написании веб-приложений, а это автоматически подразумевает знания в области JavaScript и HTML. С другой стороны, несмотря на мощную поддержку ActiveRecord для работы с СУБД, знание SQL крайне пригодится. Не стоит также забывать о самых Ruby-фреймворках (таких как Rails, Grape, Sinatra, Hanami) и системах управления исходным кодом (Git). Таким образом, третье измерение включает в себя рабочее окружение и любые смежные технологии, которые используются (или могут использоваться) в проекте.
2. Как мы уже успели сказать, конечно же, первым и самым основным инструментом является сам язык. Сюда же стоит отнести стандартную библиотеку Ruby, фреймворки и gem (сторонние библиотеки).
Следующая категория инструментов – рабочее окружение. Сюда относятся IDE и текстовые редакторы, графические SQL-клиенты, различные расширения веб-браузера (например, REST клиент), средства для создания диаграмм, графические Git-клиенты. Иными словами, все то, что помогает в решении поставленных задач. На мой взгляд, рабочее окружение должно быть прозрачным, то есть таким, чтобы программист не тратил время на доступ к истории файла с исходным кодом, объединение Git-веток или другие сопутствующие решению задачи операции.
3. Требования компаний, безусловно, зависят от уровня самих компаний. Например, если вы претендуете на должность Ruby/Rails-программиста, от вас могут потребоваться базовые (иногда более продвинутые) знания Rails, HTML, JavaScript (иногда JavaScript-фреймворка). Этого может оказаться вполне достаточно для написания относительно простых веб-приложений без высокой нагрузки и специфических требований.
С другой стороны, если вы хотите работать над высоконагруженным проектом с большим количеством специфических требований и с применением смежных технологий, вам потребуется глубокое знание языка и фреймворка, знания и навыки в написании API, хорошие знания ООП, SOLID и других принципов программирования, знания паттернов программирования, умение выстраивать архитектуру приложения и разбираться в предметной области. Может потребоваться знание инструментов поиска (например, ElasticSearch) или очереди сообщений (RabbitMQ), различных протоколов (HTTP, AMQP, MQTT). Этот список можно расширять и расширять, и он в большей степени зависит от специфики проекта и предпочтений компании. Если попробовать абстрагироваться от конкретных технологий, на мой взгляд, требования к сотруднику можно сформулировать так: умение думать и способность развиваться.
Что касается именно требований к образованию, здесь также многое зависит от политики компании. Однако в моей практике, мне ни разу не потребовался диплом, поскольку знания и навыки оцениваются исходя из беседы с кандидатом, и их источник не имеет значения. С другой стороны, академическая среда положительно влияет на развитие и становление специалиста, поэтому, на мой взгляд, получение диплома стоит усилий и времени.
4. Требования к опыту работы также зависят от политики компании и рассматриваемой должности. Если вы претендуете на позицию уровня Junior, вряд ли кто-то будет ожидать откандидата участия в большом количестве проектов. Хотя в этом случае наличие собственных наработок, конечно же, необходимо. Иными словами, вы можете написать проект длярешения собственной задачи (например, приложение для формирования плей-листа) и рассказать, с какими трудностями столкнулись, как их разрешили, какие технологии использовали и почему.
Позиция уровня Middle, на мой взгляд, подразумевает хорошее знание языка, участие в нескольких проектах, собственное видение архитектуры приложений и умение работать автономно.
Уровень Senior говорит сам за себя. Глубокие знания языка, парадигм и принципов программирования, опыт разработки большого количества проектов с различными специфическими требованиями, умение проектировать и реализовывать архитектуру проекта. Опыт на этом уровне не имеет ограничений и во многом зависит от индивидуального пути каждого программиста.
Если оценивать опыт с позиции времени, я бы не рискнул давать какие-то оценки. Разные специалисты за одно и то же время могут достигнуть разных результатов. Этообуславливается как индивидуальными особенностями, так и средой, в которой работают специалисты. И все же, если попробовать дать оценки, на мой взгляд, их можно выстроить так: 1-3 года для Junior, 3-5 лет для Middle, 5-7...<настоящее_время> для Senior.
5. Да, безусловно, специфические требования есть. Они во многом зависят от предметной области, в которой работает компания. Например, платформа для обучения почти наверняка потребует разработки системы мгновенных сообщений. Приложение для работы с рынком ценных бумаг или в медицинской сфере скорее всего будет подразумевать глубокое знание предметной области. Приложения из сферы электронной коммерции (интернет-магазины), вероятно, потребуют продвинутую систему поиска, механизмы для реализации платежей ианалитики. Я бы сказал, что почти любая компания имеет свои специфические требования. Справиться с ними кандидату помогут хорошие позиции по трем рассмотренным измерениям знаний и навыков и принципиальное умение решать задачи.
Илья Аверьянов, директор службы разработки в компании FunBox
1. Как и любой разработчик, он должен в первую очередь быть любознательным, внимательным и сообразительным. Если говорить о конкретных знаниях по языку Ruby и смежным технологиям, то состоявшийся Ruby-программист должен:
- знать сам язык Ruby и его стандартные библиотеки;
- знать Ruby оn Rails в объеме как минимум http://guides.rubyonrails.org (Ruby без Rails – это все еще очень узкая ниша);
- знать принципы работы сетевых протоколов (TCP, HTTP, HTTPS, FTP...);
- знать принципы работы веб-серверов и балансировщиков нагрузки (Nginx, HAProxy...);
- знать принципы построения фронтенда для веб-приложений, иметь представление о хотя бы одном из популярных JS-фреймворков;
- уметь работать в Linux shell на уровне опытного пользователя;
- уметь работать с реляционными БД, знать SQL в чистом виде, понимать принципы индексации данных;
- уметь работать с некоторыми из NoSQL БД;
- уметь взаимодействовать с другими разработчиками, свободно обращаться с Git;
- уметь работать с различными представлениями времени, таймзонами (это целый отдельный навык);
- понимать уместность и необходимость тестирования кода;
- владеть знаниями об архитектуре программных решений, плохих и хороших паттернах;
- иметь адекватное представление о своих возможностях, о применимости различных технических средств к поставленным задачам.
2. Инструменты для разработки, запуска и отладки решений на Ruby разнообразны, всевозможных библиотек также существует огромное количество, выделять какие-то конкретные нет особого смысла – все зависит от проекта и от задачи. Однако есть несколько стандартных для разработки действий, для которых нужны надежные, знакомые и отлаженные инструменты (хотя они могут и различаться):
- инструмент для воспроизведения окружения для проекта, т.е. для работы с виртуальными средами (Docker, Vagrant, Amazon...) и их настройки (Ansible, Bash, Salt-Stack...);
- инструмент для работы с кодом проекта (хорошо настроенный Vim, Emacs, Sublime, Atom или, например, IDE RubyMine), поиска по коду;
- инструменты для работы с историей кода и ее анализа.
3. В компании мы смотрим на реальный опыт и навыки; высшее образование желательно, но не обязательно. При этом системное мышление, техническая грамотность и аккуратность для нас часто намного важнее, чем пассивный багаж знаний в профильных для нас технологиях.
4. Мы достаточно крупная компания, поэтому для нас вопрос стоит немного по-другому. От опыта работы зависит позиция, на которую мы можем взять сотрудника: у нас есть задачи даже для перспективных новичков без опыта.
5. Таких требований нет.
Даниил Жирнов, Team Lead и главный разработчик компании «Прогресс софт»
Замечание: ответы отражают мое субъективное мнение и не являются официальной позицией компании, в которой я работаю.
1. Если ограничиться только данной спецификой языка, конечно же, знание профильного языка – Ruby. Помимо этого, опыт использования баз данных (реляционные инереляционные), понимание принципов работы веб-сервера. Если проект в работе будет связан с автоматизированными рабочими местами, то потребуется знание HTML, JavaScript (и JS-фреймворки), CSS.
2. Linux или MacOS на выбор, RVM или rbenv, Git, любой удобный текстовый редактор или IDE (например, Sublime или RubyMine).
3. Высшее или неполное высшее техническое образование. Однако практика показывает, если у человека есть диплом о высшем образовании, то это говорит о завершенности какминимум одного проекта в своей жизни, в данном случае это дипломный проект, а это большой плюс.
4. Эффективнее брать в команду человека с опытом работы в реальных проектах. Однако выпускники технических вузом зачастую имеют опыт своих проектов (не обязательно коммерческих), и это является плюсом для кандидата на вакансию. Если рассматривать в целом опыт работы в среде разработки под Ruby, то обязателен опыт использования популярных gem, а также желательно иметь один или несколько своих созданных gem.
5. Опыт работы с проектами госсектора, а также реальное участие в проектах с высокими нагрузками.
Александр Типугин, ведущий разработчик компании «Тематические Медиа»
1. Ruby чаще всего применяется в вебе, все благодаря Ruby on Rails. Поэтому потребуется знание именно этого фреймворка. Сюда же можно добавить более общие навыки – понимание принципов работы HTTP, устройства веб-серверов, навыки работы с СУБД. В Ruby-сообществе очень сильно развита культура тестирования, поэтому уметь и любить писать разнообразные тесты – одно из ключевых требований. Также не лишним будет понимание того, как вообще устроен Ruby под капотом. Хороший разработчик должен знать, как Ruby работает с тредами и что такое GIL, как устроена работа с памятью, и уметь профилировать ее утечки.
2. Инструментарий – вопрос исключительно индивидуальный. Кто-то использует RubyMine, кому-то нравится Vim. Мои инструменты – это Макбук, Sublime Text 3 (IDE неприемлю) в качестве редактора, SourceTree для работы с Git, iTerm.
3. Высшее образование желательно. Фундаментальные знания довольно сложно (хотя и возможно) приобрести самостоятельно. Однако это совершенно необязательно условие. Гораздо важнее предыдущий опыт работы. Правда, если вы вдруг захотите уехать работать в Европу или США, то там у вас обязательно попросят диплом.
4. Опыт важен, причем это не должен быть какой-то разовый фриланс, а полноценные реальные проекты. Совсем замечательно, если кандидату есть что показать в плане Open Source-проектов.
5. В целом никаких специфических требований нет.
Ильдар Шайнуров, технический директор компании MetaStudio
1. В первую очередь, как и программисту на любом другом языке, нужно уметь думать. Говоря о программистах на Ruby, в большинстве случаев подразумевают Ruby on Rails и всесопутствующие навыки: Git, понимание принципов HTTP, хороший опыт работы с базами данных (обычно это MySQL и PostgreSQL), html/css/js.
2. Руки, Unix-подобная система (Mac OS или Linux), любой удобный программисту редактор (мы, например, используем Sublime Text). В работе постоянно приходится использовать терминал. Обязательно https://www.ruby-toolbox.com для поиска нужных гемов. Код в основном храним на github.com либо bitbucket.com.
3. Особых требований к образованию нет. Но, при прочих равных, отдадим предпочтение тому, кто закончил профильный вуз. На практике, еще не было ни одного кандидата, у кого не было бы высшего образования.
4. Зависит от того, на какую должность/зарплату приходит кандидат. Если для Senior, то минимум 3 года на Ruby. Если Junior, то можно и вообще без опыта работы. Но, кроме опыта работы, обязательно просим всех выполнить тестовое задание. Люди разные и учатся с разной скоростью, кто-то и 5 лет может проработать Ruby-программистом и не знать простейших вещей, а кто-то за пару лет до сениора дорастает. Также смотрим, на каких проектах до этого работал и в каких командах. Если 5 лет просидел на одном проекте водиночку, то ни о каком опыте там речи быть не может. Поэтому предпочтение отдадим тому, кто работал на большом количестве проектов и в большой команде. Также будут интересны кандидаты, у которых есть опыт работы с Open Sourсe, есть какие-то свои проекты.
5. Да, конечно. Для нас важно, чтобы программист владел техническим английским, так как задачи часто приходят на английском языке, плюс приходится общаться санглоговорящими разработчиками.
Евгений Родионов, сооснователь, программист KitchenCoders
1. Достаточно широкий портфель. Ruby – как опорный язык, Ruby on Rails – фреймворк. Желателен опыт с различными типовыми gem (библиотеки). Например, Devise – для работы с моделями пользователя, Capistrano – для деплоя приложения.
2. IDE (мне по душе Atom, Text mate), контроллер версий (Git), mac (на мой взгляд, удобен для развертывания тестовой среды). Интернет.
3. Практические навыки. Нам все равно, какое образование. Главное – выполнить поставленную задачу и сделать это максимально аккуратно и рационально. Умение работать вкоманде, потому что часто даже небольшие проекты пишутся 2-3 людьми, имеющими определенную специфику (скажем, классическое деление – бэкенд, фронтенд).
4. В зависимости от позиции. От года работы, желательны продакшн-проекты. Свой Git с примерами.
5. Особо нет.
Станислав Герман, руководитель группы разработки Ruby-проектов Rambler&Co
1. Многие Ruby-разработчики начинают с изучения веб-фрейморка Rails и в результате знают фреймворк, но не достаточно хорошо знают язык программирования, на котором оннаписан. Именно поэтому знание Ruby – первое, на что мы смотрим при собеседовании. Также обращаем внимание, насколько разработчик понимает и использует принятые в Ruby-сообществе стандарты и гайды. Это позволяет писать хорошо поддерживаемый код, понятный любому «рубисту» компании. Немаловажным является общее понимание того, какфункционирует веб-приложение, как организована СУБД.
2. Базы данных, как реляционные (PostgreSQL, MySQL), так и не очень (mongo). Различные сервисы для background job processing (Rescue, Sidekiq). Инструменты для тестирования: Rspec, minutest, capybara. В качестве системы контроля версии Git. Инструменты для деплоя (Сapistrano, Mina). Многопроцессные или многопоточные веб-серверы (unicorn, passenger).
3. Ценза по уровню образования нет, но мы ожидаем увидеть хорошую теоретическую подготовку.
4. На должности младших разработчиков мы готовы брать людей с минимальным опытом или даже без опыта. Тут гораздо важнее способность и готовность кандидата постоянно совершенствоваться.
5. На Ruby у нас реализуются контентные проекты, поэтому большим плюсом для кандидата будет опыт работы в электронных СМИ.
Серафим Ненароков, веб-разработчик в компании «Флант» (http://flant.ru)
1. Голова на плечах и хорошие знания языка и ООП. Остальное зависит от специализации. Обычно веб-разработчику необходимо владение Ruby on Rails и крайне желательны навыки TDD.
2. Удобный редактор (SublimeText/Atom/RubyMine/vim/...), Git, GitHub, Ruby-Gems, Rspec.
3. Не думаю, что отсутствие высшего образования может помешать адекватному программисту устроиться на работу.
4. Если человек талантливый и подает надежды, его можно взять и без опыта, все зависит от конкретной ситуации. Если говорить о веб-разработке, то человек, хорошо знакомый сдругими MVC-фреймворками, обычно быстро осваивается в Ruby on Rails.
5. Так как основные профили нашей компании – системная интеграция и поддержка Linux-серверов, у нас есть множество разработок для внутреннего использования. Важным преимуществом будет умение быстро осваиваться в больших объемах чужого кода.
Анатолий Пронин, Ruby-разработчик, компания VoltMobi
1. Необходимые знания и навыки для веб-разработчика в нашей компании: фундаментальные знания по архитектуре компьютеров; принципы ООП, SOLID, GRASP, CQS и шаблоны проектирования; знание основных структур данных; оценка сложности алгоритмов; знание синтаксиса языка Ruby; мета-программирование в языке Ruby; тестирование (Minitest, Code Coverage).
2. Необходимый инструментарийдля веб-разработчика в нашей компании: компьютер/ноутбук под управлением Ubuntu или Mac OS; Vagrant/Docker для разработки приложений, изолированно от основной системы; среда разработки – Vim (сборки), RubyMine.
3. В компании нет специфических требований к образованию. Красный, синий диплом или вообще без диплома, в любом случае, важны человеческие качества в работе – целеустремленность, ответственность, желание учиться и развиваться. Конечно, есть желание видеть выпускников специальностей по ИТ с определенной базой. Но, даже имея технические знания, человек порой максимально не проявляет себя в области разработки. Иногда это видно уже на собеседовании.
4. Количество предыдущих лет – 1 год или 5 лет, не имеет значения. Важно то, насколько он грамотно подходит к решению любой задачи, какие навыки и знания демонстрирует приэтом. Очень важен опыт анализа, декомпозиции и постановки задачи, так как это играет важную роль при ее решении. Также важен опыт командной работы, так как чаще всего напроектах трудится больше одного разработчика.
5. Основное направление компании – мобильная разработка, поэтому для Ruby-разработчика важны знания по проектированию архитектуры приложений, по устройству HTTP-протокола, по разработке API для мобильных приложений, то есть back-end-разработка.
Андрей Куманяев, Software Engineer (не имеет права разглашать своего работодателя)
1. Сейчас довольно часто ставят в одну линию язык программирования Ruby и фреймворк Ruby on Rails. Иногда даже шутят по поводу того, что Ruby без Ruby on Rails умер бы. Да, я не просто так упомянул о них в самом начале. Потому что Ruby используется не только для веб-проектов. Как пример можно привести Chef, Capistrano и другие продукты иинструменты. Поэтому для ответа на этот вопрос стоит сначала определиться, в какой отрасли вы будете его использовать. Соответственно, в зависимости от отрасли необходимо удовлетворять определенным квалификационным требованиям. А теперь к тому, что должен уметь разработчик на Ruby (я намеренно не буду перечислять требования к Ruby как кобъектно-ориентированному языку программирования, они для всех языков едины):
- Дружить с головой. Увы, этот язык позволяет легко переметнуться на темную сторону силы и выстрелить себе в ногу из дробовика. Экосистема включает очень много «готовых» решений на все случаи жизни, но не каждое из них можно или стоит использовать. Вам нужно уметь отфильтровывать хорошее и плохое.
- Уметь черпать информацию из многих источников. Если вы не будете следить за развитием языка и крупных проектов на нем – вы очень быстро станете аутсайдером.
- Понимать работу основных продуктов, которые вы будете использовать (например, nginx, postgresql, redis и другие). Большая часть задач обычно выносится из Ruby, так как онне настолько быстр и не является серебряной пулей.
- Понимание работы ОС и владение основами bash.
- Придется учить еще какие-нибудь языки. Мне в своей работе пригодились и JavaScript, C, Java, Erlang, Clojure.
2. Большую часть работы разработчик на Ruby проводит в своем редакторе + консоли. Написание кода, проверка работы, тесты. Этих двух инструментов достаточно длябольшинства разработчиков. Дальше уже смотреть по задачам и специфике работы. При работе с большим проектом (особенно незнакомым) довольно сложно обойтись без IDE наподобие RubyMine. Вторая часть – это переиспользование трудов комьюнити, и тут без github и google никак не обойтись. В-третьих, хорошо бы уметь работать с инструментами виртуализации (Docker, Vagrant и т.п.) и хранить проекты изолированно. Все остальные задачи (например, профилирование Ruby-кода) могут потребовать использования отдельных инструментов, которые меняются и обновляются довольно часто (в зависимости от версии языка).
3. Потенциальный сотрудник должен обладать прокачанной смекалкой и иметь широкий кругозор. Фундаментальное понимание программирования, работа с Linux и командной строкой, написание автоматических тестов, алгоритмическое мышление, работа с базами данных, знание SQL, объектно-ориентированное программирование, понимание протокола HTTP, знание инструментов Configuration Management – так или иначе серьезный разработчик должен все это знать (или понимать, о чем идет речь) и не ограничиваться только этим списком.
4. Опыт работы – штука очень скользкая. Человек может отработать 10 лет в студии и не уметь ничего, а может не иметь опыта работы «на дядю» и быть гениальным разработчиком. Тут важнее навыки, чем запись в трудовой.
5. Все специфические требования обычно указываются в вакансиях.
Подготовил Игорь Штомпель
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|