Ruby

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

Логотип Ruby

Язык создал в 1995 году японский программист Юкихиро Мацумото (Matz), но распространяться в Европе он начал только в 2000-х: сначала вся документация Ruby была на японском языке и европейцы не могли его освоить. Сейчас этот язык находится на 18-м месте в мире по популярности согласно рейтингу TIOBE. Чаще всего Ruby используют как серверный язык, но создавался он как универсальный: на нем можно писать и другие виды программ.

Название читается как «руби», ударение ставится на первый слог. Фреймворк Ruby on Rails русскоязычные разработчики иногда называют «рельсами».

Где используется язык Ruby

Мацумото планировал создать язык общего назначения. Это значит, что в теории его можно использовать для разных целей. Но чаще всего на Ruby пишут серверную часть сайтов и веб-программ с помощью фреймворка Ruby on Rails. Им пользуются бэкендеры и фуллстек-разработчики. Это не единственная, хоть и популярная сфера применения. На Ruby также написаны некоторые программы: Metasploit для пентестинга, Vagrant для работы с виртуальной средой, Homebrew для установки приложений через командную строку в macOS. То есть встретить код, написанный на Ruby, можно фактически в любой сфере разработки.

Особенности и свойства Ruby

Основной идеей разработчика Ruby было создание языка, который был бы удобен и комфортен, мог «приносить радость программистам». На язык повлиял Perl, который сам Мацумото считал слишком «игрушечным», Python и некоторые другие. Все это сказалось на синтаксисе и особенностях Ruby: язык получился лаконичным, предсказуемым и заточенным под объектно-ориентированное программирование.

Язык для людей. Ruby — язык, созданный так, чтобы с ним легко было управляться человеку. Он помогает снять с программиста рутинные задачи и поручить их компьютеру. Время и трудозатраты человека — важнейший приоритет; если их при выполнении задачи можно сократить, это стоит сделать. Такова основа философии Ruby.

Еще одна идея языка — возможность выполнять одну и ту же задачу несколькими способами в зависимости от того, что удобно разработчику. Понятность и изящество решения в философии Ruby превыше производительности, кроме случаев, где та критична.

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

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

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

Объектно-ориентированный подход. Объектно-ориентированное программирование представляет все сущности, с которыми работает программист, как объекты. Объекты могут взаимодействовать с другими, но не вмешиваться в их внутреннее устройство. Действия с ними происходят внутри методов — специальных свойств-функций, которые прописываются для каждого объекта. Метод объекта можно вызвать и таким образом изменить его сущность.

У объектно-ориентированного программирования много плюсов, в частности четкость и понятность кода, упрощение отладки и ясная архитектура. Его используют в разных сферах разработки — сейчас ООП считается одним из ведущих концептов, хоть и не единственным.

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

Поддержка блоков. Блок — одна из основных конструкций в Ruby и еще одна отличительная особенность языка. Так называется произвольный участок кода, который можно передать в какую-нибудь функцию или метод. Это может быть любой код, в том числе чужой. Он не меняет работу самого метода, но может выполниться внутри него. Для запуска кода из блока существуют особые команды, передающие ему управление. Например, команда yield, которая означает «передай сейчас контроль блоку и исполни его».

Блоками удобно пользоваться, когда нужно, чтобы объект был более гибким и вел себя по-разному в зависимости от обстоятельств.

Динамическая типизация. В Ruby типы определяются динамически. Это значит, что пользователь не задает тип переменной сразу при ее создании: тот определяется, когда переменной присваивается какое-то значение. Если это число, у переменной будет числовой тип, если слово или буква — строковый, и так далее.

Для Ruby действует принцип, который называют утиной типизацией. Это термин, который появился благодаря пословице: «Если что-то плавает, как утка, выглядит, как утка, и крякает, как утка, то скорее всего, это и есть утка». Утиная типизация означает, что сущность определяется по набору ее методов — то есть по тому, как она выглядит и ведет себя, какие у нее свойства.

Многопоточность. В Ruby «из коробки» есть поддержка многопоточности, не связанной с системой. Многопоточность означает, что какие-то процессы могут выполняться параллельно и тем самым повышать производительность программы. Обычно она реализована на низком уровне: «железо» делает несколько вычислений одновременно, а управляется этот процесс на уровне системы.

Ruby — язык более высокого уровня, далекий от «железа», поэтому его многопоточность реализована внутри интерпретатора. Реализация не трогает систему, поэтому многопоточная программа на Ruby кроссплатформенна и не связана с ОС.

Ruby on Rails: особенности и применение

Сейчас Ruby чаще всего применяется вместе с фреймворком Ruby on Rails. Он предназначен для разработки серверной части и служит своеобразным «шаблоном» для веб-приложения. В Ruby on Rails реализована архитектура MVC, которая разделяет приложение на модель данных, представление модели и контроллер. Эти части взаимодействуют друг с другом, и каждая выполняет свою задачу.

Логотип Ruby on Rails

Ruby on Rails появился в 2005 году и сейчас стабильно развивается. В свое время он принес в веб-разработку концепты, которые позже появились в других фреймворках, например в Laravel, и в целом повлияли на сферу. Например, это первый веб-фреймворк, в котором появились бесшовная интеграция с БД и миграции.

Идеи «рельсов» продолжают классический Ruby: например, в нем внедрен принцип соглашения по конфигурации. Он означает, что дополнительная конфигурация необходима только там, где еще нет готовых соглашений по реализации чего-то, и поддерживает принцип наименьшего удивления.

Востребованность Ruby и его перспективы

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

По данным сервиса W3Techs, который занимается IT-статистикой, процент сайтов на Ruby стабильно растет. Если в 2011 году он составлял 0,5%, то в 2022 году — уже 5,7–6,0%. Рост стал активнее с 2018 года, до того количество сайтов на Ruby не превышало одного процента.

Все это говорит, что язык используется и развивается. Сервис hh.ru показывает пятьсот с лишним вакансий Ruby-разработчиков – и это только Россия и часть СНГ. Востребованность по миру еще выше.

Часто Ruby применяют в стартапах, быстрой разработке, где важно как можно скорее создать работающий прототип и выпустить его на рынок.

Преимущества Ruby

Ориентированность на человека. Разработчики на Ruby говорят, что язык достиг своей цели: он делает программиста счастливым. Его концепты и идеи — такие, чтобы разработчику было удобно, а код понятен для человека. Его легко читать и понимать, он объектно-ориентированный, но его можно адаптировать и под функциональное программирование.

Лаконичность и изящество. Язык спроектирован так, чтобы реализовать изящные, удобные для разработчика концепты, поэтому на нем приятно писать. Это часто отмечают люди, которые перешли на Ruby с других языков: им нравятся практики и концепции, принятые в нем. Решать одну и ту же задачу можно по-разному, и это делает язык гибким. Большой упор делается на изящество решения, в результате код получается чистым и красивым.

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

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

Востребованность. Может показаться, что вакансий на Ruby меньше, чем на других языках. Но вообще-то разработчиков на этом языке, наоборот, не хватает. Некоторые компании даже идут на такой шаг: нанимают специалистов, пишущих на других языках, и переучивают. Поэтому хороший «рубист» очень ценится, и это отражается на зарплате. Уровень зарплаты разработчиков на Ruby в среднем выше, чем для других популярных языков веб-разработки.

Еще одно следствие такой нехватки хороших специалистов — разработчику на Ruby легко найти работу, а конкуренция при трудоустройстве, скорее всего, будет ниже. Легче всего искать работу программистам, у которых уже есть опыт, но и новички могут устроиться на хорошую вакансию — некоторые компании предпочитают «растить» специалистов с нуля у себя в штате.

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

Недостатки Ruby

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

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

Большие затраты ресурсов. Интерпретатор языка «тяжелый», а язык сложный и потому требует много ресурсов системы на обработку. Так что программы на Ruby не получится писать под маломощные устройства. Это причина, по которой язык практически не используется в мобильной разработке и других подобных сферах.

Отсутствие обратной совместимости. Еще со времен версии 1.8 в Ruby не поддерживается обратная совместимость. Это сделано намеренно, чтобы оставить языку возможность развиваться без оглядки на старые версии. Но отсюда следует, что разные версии Ruby не будут гарантированно совместимы друг с другом, даже если различия между ними очень малы. Это может принести проблемы при переводе проекта на более новую версию языка или при использовании каких-либо библиотек, написанных для другой версии.

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

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

Другие термины на букву «R»

React
Redux
REST API
RFM-анализ
Roadmap
RxJava

Все термины

Освойте новую профессию

(рейтинг: 5, голосов: 3)
Добавить комментарий