---------------------------------------------------------------------------------
Выбираю•IT помогает в выборе будущей профессии абитуриентам
и студентам, в развитии профессиональных навыков молодым специалистам,
в выборе дополнительных программ обучения и специальных курсов. " /> ---------------------------------------------------------------------------------
Выбираю•IT помогает в выборе будущей профессии абитуриентам
и студентам, в развитии профессиональных навыков молодым специалистам,
в выборе дополнительных программ обучения и специальных курсов. " />

Портал издательского дома "ПОЛОЖЕВЕЦ и ПАРТНЕРЫ"
---------------------------------------------------------------------------------
Выбираю•IT помогает в выборе будущей профессии абитуриентам
и студентам, в развитии профессиональных навыков молодым специалистам,
в выборе дополнительных программ обучения и специальных курсов.

О портале Каталог профессий

Программист Ruby

Ruby является языком программирования, популярность которого в последнее время растет.

Чтобы выявить общее и особенное в практике использования Ruby, мы обратились к представителям компаний и проектов с рядом вопросов


1. Какими знаниями и навыками должен обладать Программист Ruby?

2. Каков инструментарий программиста Ruby?

3. Каковы требования компании к уровню образования потенциальных сотрудников?

4. Какие требования предъявляются к опыту работы?

5. Есть ли особые требования, которые обусловлены спецификой деятельности компании?


Ярослав Маркин, основатель 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. Таких требований нет.


Подготовил Игорь Штомпель

 
Проект Издательского дома "Положевец и Партнеры"

По вопросам партнерства обращайтесь по электронной почте chooseit@samag.ru

Телефон: +7 499 277-12-45