Skip to content

Instantly share code, notes, and snippets.

@psylone
Last active April 20, 2016 11:06
Show Gist options
  • Save psylone/123dcd93cea31cdc1859768c8aba2ff7 to your computer and use it in GitHub Desktop.
Save psylone/123dcd93cea31cdc1859768c8aba2ff7 to your computer and use it in GitHub Desktop.
Профессия «Программист Ruby»

Профессия «Программист Ruby»

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

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

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

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

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

Ruby - удивительный язык программирования. Он был создан в далёком 1995-ом году в Японии и долгое время не покидал пределов этой страны. Со временем ситуация изменилась: стала появлятся документация на других языках, а с выходом фреймворка Rails, Ruby покорил сердца многих разработчиков.

Тому есть множество причин, всё же одна из основных, на мой взгляд, в том что «Ruby был создан для того, чтобы сделать программистов счастливыми». Это слова автора языка - Юкихиро Мацумото которые в полной мере воплощаются в ядре и всей экосистеме языка.

Ruby обладает невероятно элегантным синтаксисом и широчайшими возможностями, среди которых: динамическая типизация, превосходная работа с блоками, итераторы и великолепная объектно-ориентированная модель.

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

Ruby находит применение не только в современных веб приложениях, но и в самых различных сферах, например: менедежер пакетов для Mac OS Homebrew или среда для создания музыки в реальном времени Sonic Pi.

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

Ответить на этот вопрос можно по-разному. С моей точки зрения, знания и навыки программиста Ruby состоят из трёх измерений.

Первое измерение - конечно знание языка. На первый взгляд, Ruby очень прост (и это действительно так), но это лишь верхушка айсберга. Если погрузиться глубже, мы увидим продвинутую работу с блоками и прок-объектами, метапрограммирование и рефлексию, синглтон-объекты и ещё множество возможностей. Какие-то из них используются чаще других, всё же хорошее знание и понимание работы языка является необходимым.

Второе измерение - парадигмы и техники программирования, в особенности ООП и SOLID принципы. Каким бы мощным ни был язык, если мы точно не представляем что хотим создать, разрабатываемое нами ПО вряд ли получится надёжным и хорошо расширяемым. Именно поэтому очень важно понимать концепции программирования. Например, если копнуть поглубже в ООП, мы обнаружим что такой образ мышления очень близок тому как думают люди. Мы часто взаимодействуем с объектами, посылаем им сообщения и ждём результат. Видеть эту связь между реальным миром и программным кодом, на мой взгляд, крайне важно. Это позволяет писать более понятный и лёгкий в сопровождении код. Паттерны программирования также являются превосодным вкладом в копилку знаний и навыков Ruby программиста.

Третье измерение - это окружение и смежные технологии. Под окружением я понимаю IDE и текстовые редакторы, SQL клиенты и все прочие инструменты, которые используются в повседневной работе. Ведь чем совершенней инструмент и чем лучше мы им владеем, тем более качественный результат можем получить. Смежные технологии также невероятно важны. Будем откровенны, современный мир программирования требует гораздо более обширных знаний, чем знания Ruby. Достаточно часто Ruby используется при написании веб-приложений, а это автоматически подразумевает знания в области JavaScript и HTML. С другой стороны, не смотря на мощную поддержку ActiveRecord для работы с СУБД, знание SQL крайне пригодится. Не стоит также забывать о самых Ruby фреймворках (таких как Rails, Grape, Sinatra, Hanami) и системах управления исходным кодом (Git). Таким образом, третье измерение включает в себя рабочее окружение и любые смежные технологии которые используются (или могут использоваться) в проекте.

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

Как мы уже успели сказать, конечно же первым и самым основным инструментом является сам язык. Сюда же стоит отнести стандартную библиотеку 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. Есть ли специфические требования, которые обусловлены спецификой деятельности компании?

Да, безусловно специфические требования есть. Они во многом зависят от предметной области в которой работает компания. Например, платформа для обучения почти наверняка потребует разработку системы мгновенных сообщений. Приложение для работы с рынком ценных бумаг или в медецинской сфере скорее всего будет подразумевать глубокое знание предметной области. Приложения из сферы электронной коммерции (интернет-магазины), вероятно, потребуют продвунутую систему поиска, механизмы для реализации платежей и аналитики.

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment