Інтерв'ю з Еріком Михаельс-Обером, RubyHero-2014

Ерік — Ruby-герой 2014 року, популярний ментор серед різних Ruby-спільнот (Ruby Summer of Code, Google Summer of Code і Rails Girls Summer of Code) і просто цікава людина. Спочатку інтерв'ю повинно було виглядати в стилі «коротко продовж фразу», але Ерік підійшов до справи творчо, тому публікую його повністю.

  • Розкажи, будь ласка, про свій досвід роботи на Ruby. Коли почав і з чого?
Я почав повноцінно працювати на Ruby у 2006 році, коли моя команда вирішила перевести наш веб-додаток з PHP на Rails. Rails на той момент був на рівні версії 1.0. Здається, ми використовували Ruby версію 1.8.4 і веб-сервер Mongrel. Це було ще до Rack, Bundler, RubyGems.org або GitHub. Озираючись назад, важко собі уявити роботу на Ruby без цих інструментів, які я зараз використовую кожен день.

  • Ruby допоміг мені...
Ruby допоміг мені усвідомити, що люди цінніше комп'ютерів. Більшість мов програмування оптимізовані для швидкого виконання коду. Ruby оптимізовано так, щоб можна було швидко читати і писати код. Це змінило моє розуміння коду, тепер я пишу для людей, а не для комп'ютерів.

  • Я люблю Ruby...
Ruby, як мова, дуже класний, але набагато більше мені подобається Ruby-співтовариство. Будучи його частиною, я спілкуюся з чудовими людьми по всьому світу. Мені подобається зустрічати нових Ruby-програмістів на Meetup'ах і конференціях. Я дуже багато дізнався від тих, хто відкрито ділиться своїми знаннями в своїх блогах, подкастах, відеороликах і т. д. Я люблю Rails Girls, RailsBridge і інші ІТ-спільноти, які роблять програмування більш різноманітним і змістовним. Мені по душі творчий дух Ruby-спільноти, який надихає на створення таких проектів як Artoo, Kids Ruby, Shoes, Gosu, Sonic Pi і т. д.

  • Я не люблю Ruby...
Я думаю, що Ruby буде краще, якщо його синтаксис буде більш послідовним. Наприклад, у Ruby є 2 різні способи зробити хеш і 7 різних способів зробити функцію (def, proc, Proc.new, lambda, ->, {}, do...end) порівняно з JavaScript, який має єдиний синтаксис хеша/об'єкта і один спосіб визначити функції, незалежно від того, іменована це функція або анонімно. Ruby також має занадто багато псевдонімів порівнянні з філософією Python, яка говорить, що повинен бути тільки один очевидний спосіб зробити що-то. Дизайн – це мистецтво прийняття рішень. При наявності кількох імен для одного методу (наприклад, map/collect, reduce/inject, find/detect, find_all/select і т. д.), творці Ruby уникали жорсткого рішення, передавши цей вибір користувачеві. Ruby також має багато схожих імен для методів, які дещо відрізняються (наприклад,==,===, eql?, equal?). Я використовую Ruby щодня протягом майже 10 років, і я до сих пір не можу згадати різницю між eql? і equal?, не подивившись підказку. Мені б хотілося, щоб ці методи мали більш описові імена.

Іншим прикладом є тонкі відмінності між alias і alias_method, або private і protected. Думаю, Symbol можна замінити на frozen String і видалити з користувацької частини мови. Є кілька інших мовних «особливостей», які я хотів би виключити з Ruby, якщо б міг, наприклад глобальні змінні, що прийшли з Perl. На мій погляд, це не пов'язано з іншою частиною мови. Є також багато погано підтримується і застарілого коду в стандартній бібліотеці Ruby. Хотілося б щоб стандартні бібліотеки оновлювалися, для використання нових можливостей мови, наприклад keyword arguments. Якщо подібні функції не використовуються для основних/стандартних бібліотек, їх потрібно виключити, так як вони створюють зайві труднощі. Було б чудово, якби в Ruby була можливість знаходити деякі види помилок на початковій стадії (під час запуску).

І ще не завадив би динамічний компілятор, здатний генерувати двійкові файли. І кращу продуктивність виконання. Я почав використовувати замість Ruby Crystal, яким і буде присвячений мій доповідь, так як в ньому є більшість функцій, які мені подобаються в Ruby і відсутні ті, які мені не подобаються.

  • найжахливіше архітектурне рішення/ код, що ти коли-небудь зустрічав...
Перше, що приходить на розум, це те, як Rails виконує перевірку унікальності. Для тих, хто не знає, вона просто робить SELECT, щоб побачити, існує поле, перш ніж робити INSERT. Перша проблема полягає в тому, що ці дві операції не робляться в транзакції, так що виникають умови для появи гонок сигналів, які дозволяють вставляти неунікальні запису. Тим не менш, транзакції, в принципі, не дуже гарне рішення, так як вони викликають надто багато блокувань таблиць. Кращим рішенням є просто створення унікального індексу на цьому полі бази даних, що гарантує правильність і оптимальну продуктивність. Підхід Rails до валідації унікальності – це слабкий захист, яка дає користувачеві помилкове відчуття безпеки.

  • Найбільш вражаюча новина про Ruby у 2014 році...
Це новина про створення RubyBench.org Аланом Го Сян Таном (Alan Guo Xiang Tan). Це неймовірно цінний (і давно очікуваний) внесок у спільноту Ruby. Цей проект буде гарантувати зростання продуктивності Ruby, і з кожним релізом він стає все швидше. Якби RubyBench існував раніше, він міг би запобігти втраті продуктивності в Ruby 1.9.

  • Життя після Ruby – це...
Crystal! Щоб дізнатися більше – приходьте на мій доповідь :) (В кінці травня Ерік буде виступати на Ruby-конференції в Києві з темою доповіді про Crystal).

  • Над чим працюєш зараз?
В даний момент я працюю над переписуванням Twitter CLI під Crystal а також навчаю студентів на Rails Girls Summer of Code

  • В процесі розробки я обов'язково використаю...
Особливе місце в моєму середовищі розробки займає Fish shell, який я рекомендую всім, хто проводить багато часу в командному рядку. Спробуйте користуватися ним тиждень, і ви вже не зможете без нього обходитися!

  • Твої улюблені Ruby блоги/співтовариства/сайти
Ruby-Talk, Ruby Weekly, This week in Rails розсилки. Блоги Aaron Patterson, Aman Gupta, Sam Saffron, Edward James Gray II, Thomas Reynolds, Sandi Metz, Tom Stuart, Avdi Grimm, Jessica Kerr і Pat Shaughnessy. Також я читаю багато блогів, які не мають відношення до Ruby.

  • Я рекомендую книгу...
«Ruby Under a Microscope», Pat Shaughnessy, оскільки це захоплюючий погляд на те, як працює Ruby зсередини. Я також рекомендував би Practical Object-Oriented Design in Ruby, Sandi Metz кожному Ruby-програмісту, який ще її не читав. Для кращого розуміння IT, як області знань, я рекомендую Understanding Computation, Tom Stuart. А для зовсім початківців, я рекомендую Learn to Program by Chris Pine. Ну і нарешті, книга Why's (Poignant) Guide to Ruby, займає особливе місце в моєму серці.

  • Твій особистий лайфхак:
Додай такий рядок у свій crontab: */30 9-17 * * 1-5 say «Stand up and walk around».

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.