Xavier Noria о Rails 6, консалтинге и не только

    Уже в эту субботу встречаемся со всеми рубистами на главной конференции, посвященной этой технологии — RubyRussia 2019. 28 сентября совсем близко, а в этом интервью вопросы для Xavier Noria подготовил разработчик компании Evrone Павел Аргентов, а помогли ему студенты и преподаватели, с которыми он работает над курсом «Языки интернет-программирования» в МГТУ.

    image
    Раритетное фото с прошлого приезда Шавье в Россию — на RailsClub Moscow 2012

    Что ты считаешь наиболее интересным и важным из того, что недавно произошло в мире RoR?

    Я считаю, что Rails 6 был впечатляющим релизом. Новые основные компоненты, поддержка нескольких баз данных, распараллеленное тестирование; новый загрузчик, который «отправляет в историю» известные грабли с автозагрузкой.

    Ты зарабатываешь на жизнь Rails консалтингом. Что это дало тебе, как программисту?

    Главным образом, это дало мне опыт и осведомлённость, которые обычная работа не может обеспечить. Консалтинг обогащает. Каждая компания и каждая команда, они разные. Сталкиваешься с различными областями бизнеса, культурами, рабочими процессами, архитектурой, особенностями и предпочтениями. Адаптация к подвижным средам, задачи, с которыми приходится бороться, сохраняют навыки решения проблем остро отточенными.

    Продолжая предыдущий вопрос, исходя из твоего опыта, о чем должны помнить разработчики Rails?

    Разработчики в первую очередь должны знать Ruby и Rails как можно глубже. Это означает чтение книг и документации, а не разрозненных постов в блогах. Мастер должен владеть своим инструментом. Нужно, например, хорошо понимать SQL, чтобы Active Record был катализатором процесса, а не черным ящиком. Использовать Active Record — чтобы легко и безопасно генерировать SQL, который иначе писался бы от руки — и легко обрабатывать полученные наборы данных. Важно приличное понимание HTTP, потому что это язык, на котором приложение говорит с внешним миром (в том числе, не забывать WebSockets). Есть много других вещей, о которых следует помнить, но я бы особо отметил производительность. Нужно знать, как гонять бенчмарки, нужно знать о GVL в MRI и всякое такое. Ищите ресурсы по этой теме, изучайте их, вырабатывайте информированную интуицию.

    Действительно ли Ruby – это тот язык, который делает ум программиста лучше? Как извлечь из этого максимум удовольствия?

    Я лично скептически отношусь к подобным обобщениям. Ruby волнует меня, а Scala — программистов Scala. Я занимался Perl-ом сколько-то лет и очень его люблю, но многим он не нравится. Разные мозги находят удовольствие в разных формализмах, даже ваши собственные предпочтения могут меняться со временем. Как программисту, вам лучше использовать как можно больше языков и как можно больше парадигм. Язык, который сломал мой разум – это был Prolog. Парадигма, которая больше всего на меня повлияла, состояла в «литературном программировании» в Knuth-стиле. Проходя через эти совершенно разные способы программирования, становишься лучше. Ruby я считаю особенно гибким и высокоуровневым.
    Высокоуровневость помогает рассуждать «ближе к задаче». Это привлекает меня в сверхвысокоуровневых языках (VHLL). По образованию я математик, и могу работать с любым формализмом, который мне подбросят; языки программирования тут – это детские игрушки. Полнота по Тьюрингу, например, не совпадает с практической эквивалентностью. Для решения реальных проблем сложно придумать что-то лучше, чем VHLL. Чувствуешь себя действительно мощным и продуктивным, потому что меньше искусственной сложности, и можно лучше сконцентрироваться на настоящем решении задачи. Решение реальных задач — вот что заставило меня заняться карьерой в программировании. Говоря в общем, «где нужен С — бери С».

    Мы делаем конференцию более «Ruby» чем «on Rails». Какие применения Ruby существуют кроме Rails, или даже помимо webdev?

    Если мне не изменяет память, первой программой на Ruby, которую я использовал, был менеджер портов/пакетов на FreeBSD. Это было в начале двухтысячных еще до Rails. Популярное ПО на Ruby, не имеющее прямого отношения к веб-разработке — это Vagrant, Metasploit, Jekyll, Chef, Puppet или Homebrew. Кроме того, системы в Rails-компаниях редко состоят только из веб-интерфейса. Как правило, существует целая экосистема программного обеспечения. Компания, основным языком которой является Ruby, обычно имеет также чистое бэкэнд-ПО на Ruby (возможно, совместно с другими технологиями).

    Например, в компании, которую я сейчас консультирую, «Stuart Delivery», я только что внедрил сервис, который принимает сообщения, приходящие из Kafka в Redis, для их обработки воркерами Sidekiq. Также поработали над нетривиальным проектом миграции данных и над суперинтересным бизнес-эмулятором. Всё написано на чистом Ruby. Фронтенд серверной части компании — Rails, но за кулисами и на всей платформе гораздо больше разных программ и языков. Это частое явление в моей практике.

    Время спойлеров — о чем будет твой доклад на RubyRussia 2019?

    Я расскажу о Zeitwerk, новом геме Ruby, который реализует автозагрузку, перезагрузку и активную загрузку для Ruby-проектов. Rails 6 делегирует эти функции Zeitwerk по умолчанию.

    Какое твое лучшее впечатление от мира Ruby? Возможно код, технология, знание или отношение?

    Это субъективное впечатление, но я считаю, что мир Ruby был удивительно инновационным. Мы говорили об этом с Теренсом Ли некоторое время назад. Для начала, думаю, трудно не согласиться с утверждением, что Rails представляет собой настоящую революцию в веб-разработке. Такие компании, как Heroku, New Relic, Shopify или GitHub были просто революционными. Тем не менее, по моему опыту, люди, которые тяготеют в основном к определенным сообществам, отчасти слепы к тому, что происходит в сообществах по соседству. Я уверен, что найти инновации можно в любом сообществе, будь то Scala, Haskell или даже Brainfuck. Таким образом, если бы я мог глобально наблюдать за каждым сообществом, я бы обнаружил, что сообщество Ruby не является каким-то особенно инновационным, потому что все они инновационны в той или иной мере.

    По твоему мнению, нужно ли Rails что-то вроде стандартной библиотеки компонентов CMS? Как например scaffolds для сборки стандартных частей CMS?

    На мой взгляд, это немного не в тему для Rails. Позвольте мне также использовать этот вопрос, чтобы прокомментировать, что scaffolds – это просто доступный способ сделать быструю демонстрацию на конференции или сгенерировать приложение, чтобы проверить что-либо, воспроизвести ошибку, посмотреть, как работает определенная функция. Я никогда не видел scaffolds «в бою», они не подходят для практического использования.

    Современные решения, как правило, неоднородны: мы можем использовать Julia для ML, Java для тяжелых бизнес-нагрузок. Достаточно ли Ruby предоставляет инструментов для языкового взаимодействия? Есть ли инструменты, чтобы сделать это легко?

    JRuby общается с Java нативно. Можно писать C-расширения для MRI, можно оборачивать C-библиотеки переносимым способом с помощью FFI, а Helix позволяет писать расширения на Rust. Вообще говоря, проще сообщаться с процессами стандартными способами, используя файловую систему, сокеты, HTTP, базы данных, gRPC, брокеры сообщений.

    Как многие заметили, Ruby уже не «новый и блестящий». Теперь это больше «старый добрый язык». Студенты, с другой стороны, молоды. Как мотивировать их интерес к изучению Ruby?

    В 2000-х я в течение семи лет в свободное время преподавал Perl студентам в университете Барселоны. До моего курса они имели дело преимущественно с C и Java, а я рассказывал о языках сценариев, и Perl использовал в качестве примера. Это было очень весело. Нужна увлекательная программа, которая и обучит программированию, и сделает акцент на том, что доступно с этими языками, и позволит углубиться в конкретный выбор. В случае Ruby, это — от простой реализации ООП, до фантастических возможностей метапрограммирования. Можно показать, например, как работает модель Active Record без единой строки кода в теле класса.

    Есть десятки языков программирования, которые можно выбрать. Почему нужно выбирать Ruby, почему не Python или JavaScript, как насчет Clojure, Rust, C++, Go? Все варианты спорны или наоборот — это все отличные варианты. Выберите один, сделайте курс запоминающимся, заставьте студентов изучать программирование, лучшие практики, концепцию идиоматизма, позвольте им научиться проверять документацию, исследовать важные смежные вопросы, выходящие за рамки формализма. Это то, что заставит их расти, подготовит их к профессии фундаментально. На мой взгляд, такова и есть роль университета.

    Есть много разных инструментов для одного и того же: ядро ​​Rails с Active Record, Dry-rb и другие. Нужно ли хвататься за альтернативы? Не делают ли они Рельсы «путями» вместо «пути»?

    Это во многом зависит от индивидуальных предпочтений. Следует обязательно изучить и понять комбинации инструментов, слоев, паттернов, которые тебе подходят. Важно помнить, что «путь Rails» не означает «набросать все приложение в папки по умолчанию». Это распространенное заблуждение. Хочется декораторов? Сервисных объектов, POROs? Отлично! Это не идет вразрез с так называемым «The Rails Way». Rails дает набор абстракций по умолчанию и организацию кода, которые, на наш взгляд, достаточно хороши для многих применений, по крайней мере, в качестве отправной точки. А потом, если нравится писать экшены контроллера как однострочники, которые выгружают всю работу в сервис-объекты, можно делать и так. Кому-то это может и не понравиться. Разные люди – разные мозги.

    Увидимся на RubyRussia!

    Напомним, что конференция уже в эту субботу, регистрация еще открыта.

    Будут не только доклады, но и стенды лучших компаний:

    Организатор — Evrone
    Генеральный партнер — Toptal
    Золотой партнер — Gett
    Серебряные партнеры — Валарм, JetBrains, Bookmate и Cashwagon
    Бронзовый партнер — InSales
    RubyRussia
    0,00
    Конференция разработчиков на Ruby и RoR
    Поделиться публикацией

    Комментарии 0

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

    Самое читаемое