Как я отказался от Ruby в пользу Python, работая над бэкендом



Перевели для вас статью Бенуа Зен, разработчика ПО в компании Sqreen. Бенуа работает над backend веб-сервиса и недавно перешел с Ruby на Python.

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

Веб-сайт, который стал бы лицом сервиса, должен был быть быстрым, эффективным и простым в управлении. Примерно в то время появилось демо-видео Ruby on Rails «Как создать блог за 15 минут», после чего основатели твердо решили работать именно с ним.

Skillbox рекомендует: двухлетний практический курс «Я — веб-разработчик PRO».

Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».


Через несколько недель им понадобилась помощь, и они обратились ко мне.

Как многие разработчики моего поколения, я работал с PHP и Mysql, иногда даже добавлял свою лепту в open source CMS. В задаче мне было все очень хорошо знакомо, кроме, собственно, Ruby. Я о нем даже никогда не слышал (не забываем, речь идет о 2008 годе, примечание переводчика). В общем, я стал работать с Ruby и последующие десять лет провел именно с ним.

Почему Ruby?


Дело в том, что это очень экспрессивный язык. Главный его создатель ставил своей целью сделать программистов счастливыми при работе с Ruby. И он добился своего. Практически любой элемент здесь является объектом. Виртуальная машина Ruby переводит синтаксис в реальную инструкцию. Она постоянно улучшается, так что сгенерированный код становится лучше с каждой новой версией. Ruby легко анализировать, что-то изменять или даже создавать специализированные интерфейсы.

По своей сути Ruby on Rails представляет собой набор DSL и инфраструктуру для простого создания управляемых моделями веб-приложений. На сегодняшний день он особенно адаптирован и хорош для создания приложений, в которых бизнес-логика и моделирование будут играть важную роль.

В своей компании Sqreen я работал с Ruby над backend. Но потом, довольно быстро, пришло решение использовать Python.

Любить Ruby, но перейти на Python, почему?


Во-первых, наш backend представляет собой связку из нескольких сервисов, часть которых открыта миру, часть — нет. Первое, что видит клиент, — корпоративный статический сайт, который генерируется при помощи Jekyll. Затем открывается панель инструментов — это динамичное React-приложение. Панель работает с выделенным API, мы его называем «backend для внешнего интерфейса». Он у нас основной.

Изначально было решено, что мы не будем писать API на разных языках, поскольку хотелось бы, чтобы все они соответствовали определенной бизнес-логике и моделям. Кроме того, в самом начале пути мы понимали, что, по крайней мере, backend для агентов должен быть легко масштабируемым, для того, чтобы поддерживать расширяющуюся базу клиентов.

К сожалению, Rails оказался слишком медленным. Конечно, он не единственный, существует масса микрофреймворков для Ruby, включая известный Sinatra.

Но мы все же решили выбрать Python. Основных причин две. Во-первых, наше руководство было с ним неплохо знакомо, поскольку ранее многие продукты разрабатывались на Python. Во-вторых, нам необходим был глубокий анализ данных, с чем Ruby справляется не слишком хорошо. И выбор был очевиден.

Начало работы с Python


На этом этапе у меня почти не было опыта работы с Python — раньше я писал на нем лишь небольшие скрипты, которые помогали общей реализации проекта. Мне пришлось быстро все осваивать и ускоряться в разработке API, над которыми мы трудились. К счастью, базовые компоненты не зависят от того, какой язык вы используете: HTTP/HTML/JSON/REST — все они остаются прежними. Возможность приложений обмениваться данными с вебом на более низком уровне реализована на Ruby с использованием Rack. Как оказалось, у Rack многое взято из Python, так что работать не было очень уж тяжело.

Но что насчет языка? Ruby — объектно-ориентированный язык, Python тоже объектно-ориентированный. Но все же разница между этими двумя языками значительна. Так, Ruby описывает блоки с использованием ключевых слов, в Python для этого применяются пробелы. К этому нужно было привыкнуть, причем мне больше нравится путь Ruby с его begin/rescue/end. Тем не менее, Python позволяет писать более эффективный код, работающий быстро.

Что лично я сделал для того, чтобы побыстрее разобраться в синтаксисе Python? Основное — начал практиковаться с Python Koans, это проект с открытым исходным кодом, который позволяет изучать Python, предоставляя все более сложные модульные тесты.

Python Koans знакомит с различными возможностями языка, документация здесь очень подробная.

Кроме того, я изучаю и документацию Python — у этого языка она чрезвычайно полная. Язык разделен на модули, каждый из которых снабжен подробным объяснением. Оно включает ответ, почему модуль существует, какую проблему он пытается решить и как все это реализовать.

Совет тем, кто хочет перейти на Python


Если вы — Ruby-разработчик, который размышляет о том, чтобы перейти на Python, просто сделайте это, вам может понравиться. Правда, необходимо помнить о том, что прежде, чем перед вами начнут открываться новые возможности, придется освоить немало особенностей языка. Хорошая точка старта — интерактивный туториал и документация. Кроме того, обучение должно подкрепляться практикой, стоит сразу начать реализовывать реальное приложение.
Skillbox рекомендует:

Skillbox
305,00
Онлайн-университет профессий будущего
Поделиться публикацией

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

    +17
    Зашёл с мыслью «ща мы этих рубистов размажем по асфальту железными аргументами». Прочитал. Всплакнул.

    Текст ни о чём.
      +9
      Краткое содержание: «Сначала использовали руби, но питон мы знали лучше, поэтому перешли на него.»
        +5
        Программисты делятся на две категории.

        Первая — отказываются от одних технологий и выбирают другие.
        Вторая — пишут код.
          +2
          1. Первый коммит в Jekyll был в 2012 году
          2. Первый коммит реакта — в 2013 году
          3. не забываем, речь идет о 2008 годе

          Рельсы медленные, а вот нативный питон быстрый. Уровень пруфов — боженька — в том смысле что их просто нет :)

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

            0
            Рельсы медленные, а вот нативный питон быстрый.

            Вот тут интересный момент. ruby в общем медленный, не только рельсы. Но вообще ruby можно сильно ускорить, просто сменив интерпретатор на jruby. И, вместе со скоростью и мощью JVM получить бесплатно интероп с джавой, в которой с анализом данных (а то, что питон лучше руби подходит для анализа данных было одним из аргументов за переход) всё нормально

              0
              В Jruby есть свои приколы — а именно несовместимость с некоторыми гемами + немного другой стек (JVM).
              Меня порадовало другое — что в статье нативный питон (без джанги) сравнивается с рельсами. Это таааак глупо!
                0
                В Jruby есть свои приколы — а именно несовместимость с некоторыми гемами

                Ну Рельсы то работают.


                немного другой стек (JVM).

                В разрезе анализа данных это скорее плюс, чем минус. Тем более, что альтернатива — вообще питон.

            0
            Я выбрал Django вместо Rails, хотя бы потому, что сообщество начало активно донатить, и это показалось мне отдельным перспективным плюсом. Документация у Django мне также нравится больше. Потом Python мне нравится больше, чем Ruby во-первых потому, что у него есть озвученная философия, в которой есть пункт «Должен существовать один — и, желательно, только один — очевидный способ сделать это.», а вот когда «Главный его создатель ставил своей целью сделать программистов счастливыми при работе с Ruby», он этим пунктом пожертвовал в угоду удобству. Потом появилась Raspberry PI и программирование на Python в британских школах, TensorFlow, Ansible, HomeAssitant и я вовсе забыл про проблему выбора среди этих двух языков.
              +2
              Пока читал, много думал — толи мне пора в дурку, толи автору.

              Менять шило на мыло, причём на… хозяйственное (без обид), потому что по производительности эти языки плюс-минус равны; и вот прям всерьёз сравнивать у кого там какие отступы (или ещё какая разница по синтаксису) и из этого ещё и целую статью высосать — это какой-то сюр.
                0
                Видимо автор забыл прилепить гипножабу к посту, без неё не так убедительно.
                Зашёл посмотреть, что же с руби не так, может быть я пропустил какой-то анонс, где в свежем релизе из языка с корнем выдирают руки и ноги… так нет же, он просто не такой удобный как питон… верните мне мои 10 минут.
                  0
                  Мощные аргументы.

                  Во-первых, наше руководство было с ним неплохо знакомо, поскольку ранее многие продукты разрабатывались на Python.

                  Чем Python лучше Ruby? Тем, что руководство какого-то чувака лучше знало Python.

                  Во-вторых, нам необходим был глубокий анализ данных, с чем Ruby справляется не слишком хорошо. И выбор был очевиден.

                  Ruby отстой, так как на Python есть TensorFlow.

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

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