Розбий моноліт! Kuberton — конференція для DevOps-ів & Python, Java, Ruby, GO розробників. 2-3 March, 2019
×Закрыть

Советы сеньоров: как прокачать знания junior Ruby

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

Елена Моргун, Ruby Team Leader в Rails Reactor

10 лет опыта, из них 5 в Ruby

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

Я хотела бы порекомендовать новичкам уделять меньше внимания изучению Rails. У этого фреймворка прекрасная документация с кучей примеров, ее не нужно учить наизусть, с ней можно свериться в любой момент. Вместо этого я советую изучить принципы работы языка Ruby, разобраться с работой HTTP-протокола, научиться писать руками SQL-запросы, попробовать поработать с JavaScript.

Если у вас есть базовые знания языка — начните с книги «The Well-Grounded Rubyist». Она местами читается сложно, но если вы честно осилите ее и проработаете все примеры — вы забудете такое словосочетание, как «рельсовая магия». Вы будете смотреть на код совсем другими глазами. Кстати, это очень поможет вам при прохождении собеседований и выгодно выделит вас на фоне кандидатов, которые вызубрили список валидаций в моделях, но не понимают, что такое инстанс и что такое класс (это не шутка, если что).

Микола Бохонко, Competence Lead у Perfectial

6 років досвіду у Software Development

У сфері програмування купа крутих книг, ресурсів, технічних блогів, статей, які присвяченні вирішенню тих чи інших специфічних питань, а тому дуже важливо вміти вибирати правильні навчальні матеріали.

Звідки ж брати інформацію?

1. Документація

У першу чергу новачок повинен загуглити офіційний сайт технології і уважно вивчити все, що там написано. Доки завжди повинні бути твоєю першою точкою контакту з будь-якою бібліотекою, мовою програмування, фреймворком або будь-яким іншим інструментом. Найкраще технологію знають самі її розробники, і якщо вони молодці, то вже подбали про хорошу і вичерпну документацію.

2. GitHub Issues, GitHub Pull requests та інші канали зв’язку з розробниками

Ок, ти відкрив офіційну документацію, зробив все, як у ній написано, але проклятий redis все ніяк не хоче запускатися. Ось тут ти думаєш — пора гуглити!

Але ні. Наступний крок — подивитися відкриті і закриті issues на гітхабі, переглянути pull requests. Якщо проблема і справді не була наслідком неуважності, то або на неї вже є тікет в репозиторії проекту, або його потрібно створити. У багатьох великих технологій є навіть окремі форуми та чати, в яких можна задати своє питання. Заодно ще й в англійській мові попрактикуватися.

3. А як же книги?

Я не особливо підтримую занурення в читання книг на початкових етапах вивчення технології. «Agile Web Development With Ruby on Rails» і «Rails Tutorial» є, безумовно, якісними творами, але, читаючи їх, людина змушена наслідувати приклади з книги, замість написання і осмислення коду самостійно. Тому якщо ти недавно почав вивчати програмування, то пачка книг тільки сповільнить прогрес. Краще опиратися на документацію і постійно практикуватися.

Ruby language

Спершу потрібно мати чітке розуміння мови програмування, оскільки це дозволить правильно використовувати фантастичні можливості Ruby. Для того, щоб постійно бути up-to-date з Ruby-спільнотою, рекомендую на постійній основі відвідувати ці ресурси:

  • RubyFlow — Ruby community blog;
  • Awesome Ruby — колекція Ruby гемів, інструментів, фреймворків;
  • Ruby Koans — шпаргалка по Ruby — синтаксис, структура та деякі загальні функції та бібліотеки;
  • Ruby Weekly — щотижнева розсилка новин у світі Ruby;
  • Ruby — офіційний сайт Ruby.

Також дуже важливо розуміти Ruby Object Model — це маркер, який відразу показує рівень знань девелопера і загалом дозволяє використовувати Ruby правильним чином.

Rails framework

Декілька важливих пунктів, які повинен знати кожен джуніор:

  • Парадигма MVC — вам потрібно знати, який рівень несе відповідальність, за що і як структурувати додаток так, щоб ви знали, де слід поставити бізнес-логіку і де представлення.
  • ​​Haml/Slim — препроцесори HTML, дозволяють швидко писати структурований псевдокод, перетворений в HTML за допомогою інтерпретатора.
  • ActiveRecord — потрібно знати, що таке ORM, як реалізовані міграції, асоціації, валідації.
  • API + JSON — Ruby on Rails дуже часто використовується як API провайдер, тому вам потрібно знати API як концепцію та JSON як формат.
  • Основи REST та HTTP.

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

Кілька корисних статей:

Деякі Rails тематичні ресурси, які також раджу додати в закладки:

RSpec testing

Написання тестів є надзвичайно важливими для джуніорів, особливо якщо працювати в команді. Тести додадуть впевненості під час рефакторингу і відразу повідомлять, як тільки ти щось зламав. Раджу спробувати проганяти тести з певним інтервалом під час розробки нової фічі — таким чином ти будеш певен, що новий функціонал не поламав існуючого.

Корисні ресурси:

Постійне вдосконалення англійської мови

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

Практика, практика і ще раз практика

Тільки так можна якнайшвидше і найефективніше розвивати знання мови і фреймворка. Мабуть, найкращий спосіб — написати свій маленький тестовий проект (наприклад, дошка оголошень) і з часом придумувати і реалізовувати нові фічі. Також суперефективною буде наявність ментора — можливо, хтось з друзів або колег, хто має вищий технічний рівень, погодиться ставити вам задачі, робити code-review, практикувати парне програмування.

Дмитрий Семенов, Senior Ruby Developer в Dev-Pro

6 лет опыта

Если вы собираетесь стать разработчиком, который всегда под прицелом у самых крутых рекрутеров — придется постараться. В первую очередь убедитесь, что базовые понятия из Computer Science вам знакомы. Для этого можно просмотреть онлайн-курсы вроде лекций-бестселлеров CS50.tv от ребят из Гарварда.

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

Если это все не проблема, можно уже и про Ruby поговорить. Многие новички пренебрегают изучением стандартной библиотеки Ruby и при первом же знакомстве пробуют использовать Ruby on Rails — я считаю это ошибкой. «Народ, не знающий своего прошлого, не имеет будущего». Так же и разработчики, которые не понимают, на что опирается их любимый фреймворк, не станут лучшими из лучших. Начинайте изучение языка с его истории и ценностей, пройдите туториал «Ruby in Twenty Minutes» и почувствуйте, поэкспериментируйте с возможностями языка, не используя лишних зависимостей.

Изучив синтаксис и базовые конструкции, можно разбираться с экосистемой и комьюнити, благо, у Ruby с этим проблем нет. Познакомьтесь с тем, как комьюнити договаривается писать красивый и стандартизированный код. По статистике скачивания гемов, можно посмотреть, какие задачи чаще всего решают ваши будущие коллеги и заодно узнать самые популярные расширения (некоторые из которых, конечно же, и являются кусочками Rails). Наконец откройте уже Rails Guides — отличные гайды посвятят в детали работы с RoR.

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

Систематизируйте свои знания. В этом очень помогают конференции и митапы: даже если темы давно вами освоены, услышав ту же информацию от другого человека в новом контексте, вы чему-то научитесь! Используйте чужой опыт, читая статьи. RubyFlow — хороший ресурс для отслеживания заметок, связанных с Ruby и RoR.

Для тренировки решайте задачи. Например, Codewars не просто дает задания для решения, но и возможность посмотреть, как его выполнили другие пользователи. Изучение этого материала откроет знакомый язык с новой стороны.

Не будьте RoR, будьте Ruby!

Дмитро Комісарик, Senior Software Engineer в EPAM Ukraine (Lviv)

6 років досвіду

Більшість Ruby-розробників, з якими я знайомий, починали з основ об’єктно-орієнтованої мови Ruby, хоча деякі відразу переходили до Ruby on Rails. Це потужний фрейморк, тому опишу декілька важливих навичок, які тобі стануть у нагоді саме у світі Rails:

Знання англійської мови обов’язкове. Ruby дуже швидко розвивається, а більшість сучасних книжок, блогів та відео, які допомагають «рубістам» — англомовні. Тому тобі доведеться багато спілкуватися та читати англійською, якщо хочеш і надалі розвиватися.

Розуміння синтаксису мови Ruby. Чим краще ти вивчиш синтаксис, тим швидше зможеш розуміти код більш досвідчених фахівців і набиратися досвіду від них. Також слід розуміти базові речі: цикли, класи, умовні вирази, модулі, блоки. Як розробник Ruby, ти будеш в основному використовувати об’єктно-орієнтоване програмуванням. Отже, потрібно знати деякі поняття OOP: інкапсуляція, поліморфізм, наслідування та абстракція. Щоб добре ознайомитись із Ruby-синтаксисом, пропоную почитати:

Занурення у Ruby on Rails framework. Повинно бути розуміння MVC концепції цього фреймворку. Також важливим є знання HTTP/HTTPS протоколів і розуміння REST. У сучасному світі існують мільйони проектів на Ruby on Rails лише з backend-розробкою, тому варто добре знати, що таке API та JSON.

Рекомендована література по Rails:

Без знання та розуміння баз даних (БД) складно стати хорошим рубістом. PostgreSQL / MySQL — дві найбільш поширені реляційні бази даних. Рекомендую розібратися у їхніх відмінностях та налаштувати їх на твоєму комп’ютері, а після цього вивчити основи SQL. Це дуже проста мова запитів, яку використовують для вибірки даних. Для початківців рекомендую книгу «SQL QuickStart Guide». Варто згадати ще й нереляційні бази даних NoSQL. У них є свої плюси, та їх потрібно розуміти, щоб знати, в яких ситуаціях використовувати.

Я уже згадував про backend розробку — «невидимий двигун» сторінки. Та є ще таке поняття, як front-end — це «красива сторона» аплікації, яка створюється за допомогою HTML, JavaScript, CSS. Відповідно, щоб вільно почувати себе у цьому напрямку, потрібно мати базові знання структури веб-сторінки HTML. Тоді ти будеш розуміти, як цю сторінку можна «зафарбувати», використовуючи CSS і як її зробити динамічною за допомогою JavaScript.

Постійне тестування. Для того щоб переконатись, що написаний тобою код працює і буде успішно працювати у майбутньому, то прямо в структурі проекту при кожній зміні пишуться додатково тести на Ruby. RSpec-тестування є дуже поширеним підходом для проектів, створених за допомогою Ruby on Rails. І початківцю обов’язково потрібно всю свою роботу тестувати. Тому що, покривши код тестами, ти забезпечуєш себе від проблем, які можуть виникнути у майбутньому з реальними користувачами. Дізнатися більше про тестування можна у таких джерелах:

Звичайно, у переліку необхідних інструментів для Ruby on Rails є GIT. Це система зберігання та керування файлами для спільної роботи в команді. Ти повинен знати і розуміти створення branch та базові команди («git pull», «git push»). Цікавий туторіал — try.github.

А далі йде — практика, практика і ще раз практика :) Ось відеокурси, де можна побачити код і практикуватись:

І ще одна дуже важлива рекомендація. Не лінуйся відвідувати курси чи тренінги, навіть якщо тобі здається, що ти вже все знаєш. Гарантовано, що на таких зустрічах ти зможеш почути щось нове та цікаве, а постійний обмін досвідом із досвідченими рубістами дасть тобі можливість розвиватися в правильному напрямку. Одне із найкрутіших Ruby-ком’юніті — це #pivorak. Вони проводять безкоштовні курси і дають хороше розуміння мови. Тому обов’язково приєднуйся до них!

LinkedIn

15 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Странный вопрос, и поэтому же не менее странные ответы.

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

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

Плюсуй, если зашел в статью, потому что узнал на постере Елену Моргун!

Не понимают, что такое инстанс и что такое класс

O_o Почему никто не спрашивает профиль на codewars или подобных ресурсах например, ведь по коду сразу понятно что за джун? Приходя пособеседоваться на руби джуна мало-кого интересует, как ты хорошо знаешь дефалтные библиотеки и как они реализованы. Большинству Рельсу подавай. Или просто мне так везло и я был не в тех местах :) П.С.: WGR — хорошая книжка.

Не понимают, что такое инстанс и что такое класс
O_o

Хз, но в случае Руби я бы, пожалуй, поостерегся отвечать на такие «очевидные» вопросы, не задав интервьюеру предварительно пару уточняющих...
c = Class.new — `c` у нас тут инстанс? или класс? :)
То есть если интервьюера интересует, понимает ли человек вообще самые азы ООП — это одно. А если понимает ли человек «некоторые нюансы» (очень важные, на самом деле) реализации объектной модели в Руби — совсем другая песня же...

Главное быстро бежать за поездом по рельсам.

Толково и по делу !

IMHO в неї найгірші поради. Те що її поставили на превью це клікбайт.

Считаете, что стоит просто кастовать рельсомагию из туториалов и все норм?

Дима, по началу — да, руби и рельсы, это разные вещи. Если человека сразу окунуть во все то метапрограмированние, которое DHH использовал при написании фреймворка, то будет беда. Мой совет — учить руби после рельс, сам так делал, но до того я довольно хорошо знал Java

Мой совет — учить руби после рельс

А рельсами при этом, надо полагать, нужно пользоваться как спеллбуком, ага? То есть DHH туда назаписывал суперзаклинаний, но мы люди маленькие и нам их понимать пока не положено — зажмуриваемся, копипастим из мануала и молимся чтобы заработало?

Если человек понимает базу и объектную модель руби, то никакой магии в рельсах нет. Другое дело, что в рекомендованных в этой статье книгах объектная модель описана так себе как по мне (как справочник годно, как учебник — не фонтан). Скажем, во в целом отличной WGR описание модели в какой-то момент скатывается в беспомощное (цитатко, болд мой)
---
The class Class is an instance of itself; that is, it’s a Class object. And there’s more. Remember the class Object ? Well, Object is a class—but classes are objects. So, Object is an object. And Class is a class. And Object is a class, and Class is an object. Which came first? How can the class Class be created unless the class Object already exists? But how can there be a class Object (or any other class) until there’s a class Class of which there can be instances? The best way to deal with this paradox, at least for now, is to ignore it.
---
То есть «дети, это понять невозможно — это нужно заучить». Но слава б-гу свет клином не сошелся ни на Матце, ни на WGR. Скажем, если новичку, освоившему базу языка, взять «Metaprogramming Ruby» Перотты, и методично ее пройти, то вся магия куда-то исчезает — становится понятно что, как и почему работает.

Так что для новичков совет Елены имхо совершенно верный — чем дольше не трогаешь рельсы, тем лучше...

рельсы как эталон в области, пример для десятков фреймворков, сами по себе заставляют начинающих интересоваться. именно поэтому надо начинать с agile web development with rails. иначе всё это скука смертная.

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

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

руби и рельсы, это разные вещи.

Надеюсь, твой СТО не увидит этот коммент ;)

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