+1 мова у портфель. Чому варто вивчити Ruby
Привіт! Мене звати Влад Ганкевич, я Software Engineer в SoftServe. До компанії я приєднався цього року, щоб стати Ruby-інженером.
До того я зовсім не знав цієї мови та навіть не міг уявити, на якому проєкті буду працювати. Чому так? Я прийшов в компанію на ретренінг-програму. Це такий інтенсив, де головна твоя робота — вчитися. І це саме робота, яка триває 8 годин у будні та повноцінно оплачується.
Таким чином, за два місяці Ruby стала третьою мовою, яку я опанував, і першою, яку я вчив через ретренінг-програму. Кілька років до цього я працював на PHP на одному проєкті, поки його ж не вирішили переписати на Go. Буквально в процесі треба було переключитися на Go, і в підсумку я використовував його ще близько року.
Проте якось у SoftServe мені порадили спробувати Ruby та запропонували пройти ретренінг. На мою думку, розробнику варто розширювати свій портфель знань, щоб створювати цікаві розробки та рішення, незалежно від мови, на якій вони написані. Тож я подумав, що Ruby буде хорошим доповненням для мене та почав проходити.
Я вчив Ruby не супер швидко, але був дуже вмотивованим через кілька факторів. По-перше, я прийшов в компанію саме на проєкт з Ruby, не вчивши її до цього. Це був челендж, який хотілося пройти. По-друге, мені була цікава ця мова. Я знав, що на ній створюються глобальні проєкти як GitHub, Airbnb, Kickstarter. Як я вчив мову, що у ній мені ще сподобалося, які переваги та недоліки та чи варто вчити Ruby, поділюся у статті.
Ruby is not dead
Перед тим як вчити щось, треба зрозуміти, чи це того варте. У випадку з Ruby, одразу можна потрапити на дискусії, де обговорюють, що ця мова вмирає. Я з цим не згоден. Наприклад, фреймворк цієї мови — Ruby on Rails — чудово себе почуває у списку найбільш популярних фреймворків та посідає у ньому 13 місце вже два роки поспіль. Мій досвід також показує, що поки мову будуть підтримувати, а проєкти на ній створюватимуться, то вона буде жити. Але звичайно, грає роль і кількість таких проєктів. Проте я зараз працюю в проєкті, який використовує Ruby для своїх рішень протягом останніх 20 років. Думаю, це досить велика цифра, особливо для такої помірно поширеної мови.
Процес вивчення: теорія та практика
На цей проєкт я потрапив після того, як пройшов ретренінг-програму. Її особливості — ти можеш прийти в компанію, вивчити необхідну мову для роботи і пройти технічне інтерв’ю, щоб потрапити на проєкт. Це здається трохи ризикованим, адже йдеш працювати навіть ще не знаючи, наскільки тобі сподобається працювати на тій самій Ruby. Разом з цим, це чудовий шанс спробувати щось нове, не втрачаючи дарма час, адже ти вчишся прямо на роботі.
Така навчальна програма тривала приблизно два місяці, і за цей час я опанував необхідні основи та набив руку. Такий результат реальний, якщо присвячувати всі робочі 8 годин навчанню. Якщо ж виділяти кілька годин на день після основної роботи, думаю, процес затягнеться не менш ніж на півроку.
Загалом перші два тижні я вивчав основи мови, її особливості. Про це багато розповідав координатор програми, а також ділився корисними статтями, книгами чи просто цікавинками. Наприклад, David A. Black, Joseph Leo III — The Well-Grounded Rubyist, Sandi Metz — Practical object-oriented design, Metaprogramming Ruby: Program Like the Ruby Pros, Hal Fulton — The Ruby. Новини та спірні питання ми обговорювали у спільному чаті. Тож можна було проговорити якісь складнощі чи просто дізнатися нові факти про мову.
Паралельно з цим треба було практикуватися. Для цього я вирішував задачі, які брав з HackerRank, CodeWars та Exercism — сервісів, де розв’язання задачі можна порівняти з іншими користувачами. Інколи це демотивує, бо можеш розписати все на 50 рядків, а хтось те саме зробить в 1. Але це той момент, коли треба просто рухатися далі. Порада, яку я зараз дав би самому собі на початку вивчення, — не засмучуватися через такі випадки. Вони лише говорять про те, що є над чим працювати та вдосконалюватися.
Так проходило два місяці інтенсиву — ми поєднували теорію та практику, з цим могли допомагати також ментори. Також паралельно ми мали свій пет-проєкт — розробляли новинний портал, який створювали за готовими мокапами. Це можна порівняти зі завданням на іспиті — демо, яке ми мали зробити за кілька тижнів до кінця ретренінг-програми. Показували, хто що встиг зробити та які геми використовували. Після цього ми мали ще трохи часу підготуватися до технічних інтерв’ю, щоб отримати свої проєкти.
Я був дуже добре підготовлений і мав сильну підтримку свого ментора, тому технічне інтерв’ю не було для мене складним. Зараз, вже на проєкті, я продовжую поглиблювати свої знання з Ruby. Адже з проходженням програми навчання не закінчується. Я чудово опанував основи і можу почати розбиратися в нюансах.
Ruby: що вже створили та де загалом використовують
На Ruby вже створили Airbnb, Github, Kickstarter. Мова широко використовується у вебі. Через те, що розробка на Ruby не потребує багато часу, вона добре підходить і для стартапів чи проєктів, де треба швидко показати результат. Створити MVP на Ruby можна швидше, ніж на Java.
Що я ціную в Ruby:
1. Обидва оператори if і unless в умовних виразах. Звичайно ж, можна використовувати if з протилежним значенням виразу, але використання unless зазвичай призводить до меншого числа помилок.
2. Гнучкість. Є купа способів зробити одну й ту саму задачу і отримати потрібний результат. Тільки сам розробник обирає, який спосіб йому буде комфортнішим.
3. Псевдоніми (alias) для вже створених методів, а також дужки (чи навпаки прибирати їх для методів).
4. Числа, символи, булеві значення і все інше є об’єктом. Це означає, що можна писати так і економити час:
«YOU SHOULD NOT ALWAYS USE CAPITALS» .lowcase
замість такої реалізації:
# PHP Code
strtolower («YOU SHOULD NOT ALWAYS USE CAPITALS»)
5. Duck typing — це чудовий підхід, який також до душі частині РНР-спільноти. Замість того, щоб заявити: «Аргумент повинен бути екземпляром класу, який реалізує FooInterface», в результаті чого у FooInterface буде метод bar (int $ a, array $ b), можна сказати інакше: «Аргумент може бути чим завгодно, лише б реагував на метод bar. А якщо не буде реагувати, то придумаємо щось ще».
6. Метапрограмування — це чудова концепція, що використовується в Rails, і ви також можете застосовувати її у своїй роботі. Основна ідея полягає в тому, що додаток чи скрипт, виконуючись, створює функції або методи «на льоту», а також викликає їх. Найпростішим прикладом метапрограмування можна вважати attr_accessor — метод, який визначає методи getter і setter для атрибутів класу. Приклад використання:
Class Message attr_accessor :header, :title end
Прикладом реалізації може бути:
def self.attr_accessor(*names) names.each do |name| define_method(name) {instance_variable_get("@#{name}")} - getter define_method("#{name}=") {|arg| instance_variable_set("@#{name}", arg)} - setter end end
Інформації щодо метапрограмування дуже багато. Якщо цікаво поглибитися, дуже раджу книгу Metaprogramming Ruby: Program Like the Ruby Pros.
7. Велика кількість доступних гемів для всього, що тільки можна уявити.
Загалом за час, поки я програмую на Ruby, бачу, що ком’юніті досить активне. Наприклад, не так давно додали 3.0 версію, яка стала одним з наймасштабніших оновлень. Його готували ще з 2015 року. Завдяки цьому у мові додали інструментарій для типування RBS та паралелізм, а також вперше з’явився планувальник легких fiber-потоків Fiber#scheduler.
Продуктивність теж покращили, наприклад, вставка великих частин коду відбувається у 53 рази швидше. Повний список оновлень ком’юніті опублікувало на свої сторінці. З найсвіжішого — в липні вийшло оновлення безпеки.
Недоліки (куди ж без них)
Я виділив кілька недоліків. По-перше, наскільки хороший Ruby для написання коду, настільки ж і важкий для читання. Зрозуміти, що виконує той чи інший блок коду, буває важко.
По-друге, найбільший недолік Ruby — це швидкість виконання та проблеми з багатопоточністю. В нових оновленнях мови ці недоліки пробують усунути, і тільки час покаже, наскільки це вдасться.
Крім цього, бувають складнощі з варіативністю, коли одну задачу можна зробити
Загалом мову критикували у різний проміжок часу за продуктивність, відсутність типізації та інше. Однак Ruby покращується і можливостей стає більше, тож деякі недоліки вже давно не актуальні.
Вчити чи ні
Ком’юніті зараз досить добре справляється з підтримкою Ruby, враховуючи, що воно невелике. Крім цього, воно залишається основним драйвером розвитку мови. Тому зважаючи на останні оновлення та досягнення, можна сказати, що Ruby буде жити та набирати обертів.
Для інженерів я б порадив хоча б ознайомитися з основами Ruby. Ця мова — цікавий досвід, який розширює кругозір. Вона має в собі елементи інших мов, що може допомогти у вивченні Python чи PHP.
Це працює також навпаки — ті, хто знають, наприклад, PHP, може бути легше опанувати Ruby.
Крім цього, Ruby — чудовий спосіб доповнити свій портфель, але я б не радив її як першу. Щоб оцінити всі радощі, які надає мова і її інфраструктура, потрібно попрацювати з чимось іншим, більш типізованим і менш динамічним, на мою думку.
Найкращі коментарі пропустити