Языков программирования в современной разработке очень много. Некоторые из них являются узкоспециализированными и применяются для строго определенных задач, а какие-то универсальны. Каждый из них предусматривает свои преимущества, недостатки и ключевые особенности. Зная соответствующую информацию, человек сможет выбрать оптимальный для себя и своих задач инструмент разработки.
Огромным спросом сейчас пользуются объектно-ориентированные языки. Они являются функциональными и очень часто – еще и интуитивно понятными. Освоить такие инструменты сможет даже человек, который ранее был весьма далек от программирования.
Но есть и другие типы языков программирования. В качестве примера можно привести Ruby. Сегодня предстоит изучить его более детально. Необходимо выяснить, что это за язык программирования, для чего он используется, какими особенностями, плюсами и минусами обладает.
Опубликованная информация рассчитана на широкий пользовательский круг. Она поможет IT-специалистам понять, когда им нужен Ruby. Обычным пользователям – даст возможность расширить свой кругозор и узнать больше информации о существующих языках разработки программного обеспечения.
Определение
Ruby – язык программирования, который может быть использован разработчиками для самых разных целей. Он является динамическим, рефлективным, высокоуровневым и интерпретируемым средством разработки. Предусматривает полную независимость от операционной системы реализацией многопоточности. У Ruby сильная динамическая типизация. Дополнительно язык оснащен сборщиком мусора и некоторыми другими полезными функциями.
Своими ключевыми особенностями синтаксиса Руби напоминает Perl и Eiffel, по объектно-ориентированному подходу – Smalltalk. Некоторые черты Ruby унаследовал от Клу, Lisp, Dylan и Python.
Данный инструмент чаще всего используется в веб-разработке. Программы на Ruby будут иметь понятный на уровне интуиции исходный код. Это делает процедуру программирования еще более удобно й и быстрой. Чаще всего язык применяется для разработки совместно с фреймворком Ruby on Rails.
Руби был создан еще в 1995 году. Его создателем выступил Юкихиро Мацумото. В Европейской части мира инструмент стал распространяться только после 2000-х годов. Изначально вся документация Ruby была на японском языке. Это делало освоение языка практически невозможным для европейцев. Сейчас ситуация кардинально изменилась.
Ruby входит в 20-ку самых популярных языков программирования. Обычно он используется в качестве полноценного серверного языка, несмотря на то, что создавался он универсальным. Другие виды программного обеспечения на нем тоже можно писать, но делается это достаточно редко.
Языковая философия
Создатель Руби был фанатом объектно-ориентированного программирования. Он хотел разработать язык, который будет мощнее Perl и более объектно-ориентированным, чем Python. Это успешно удалось реализовать в рассматриваемом инструменте.
Основным назначением Руби является формирование простых и понятных программ для решения задач, в которых в процессе программирования на передовую выходят такие свойства, как простота и понятность. Скорость функционирования для подобных проектов уходит на второй план.
Философия языка характеризует принципы его устройства. Она носит название «Путь Ruby». Включает в себя следующие концепции:
- Язык для людей, а не для компьютеров. Приоритетом у рассматриваемого инструмента выступает удобство для разработчика и минимизация трудовых затрат при программировании. Специалиста нужно освободить от рутинной работы, которую устройство способно выполнять самостоятельно и более быстро/качественно. Особое внимание уделяется здесь рутинным занятиям вроде администрирования или обработки текстов. Для них инструмент настроен особенно хорошо.
- Принцип наименьшей неожиданности. Он гласит, что программа, которую пишут на Руби, должна быть предсказуема. Она должна вести себя так, как ожидает программист. В контексте рассматриваемого языка наименьшее удивление подразумевается не при знакомстве с ним, а при его основательном изучении. Мацумото уверяет, что цель разработки Руби – это минимизация неожиданностей при написании проектов для него самого. Позже стало известно, что аналогичным принципом руководствуются другие программисты.
- Просто, но не слишком. Этот принцип указывает на то, что упрощение разработки – благо. Только оно не должно переходить некоторые границы. Такие, за которыми простота превращается в самоцель и негативно сказывается на итоговом продукте.
- Не нужно быть рабом производительности. Если производительность для одной конкретной ситуации очень низкая, нужно исправлять положение. Если же в процессе программирования изначально ясно, что она будет существенной – нужно полностью перепроектировать программу с учетом этого момента. Необходимо предпочитать элегантность эффективности тогда, когда эффективность – не критичный критерий.
- Естественность важнее ортогональности. Избыточность в исходном коде допустима, если она удобна программисту. Руби стал наследником идеологии Perl в области предоставления разработчику возможностей достижения одного и того же результата несколькими методами. Каждый человек индивидуален, обществу нужна свобода и возможность выбирать. Соответствующие принципы применимы и к сфере разработки программного обеспечения.
- Не быть педантичным в процессе следования простым и строгим правилам. В Ruby используются строгие и простые правила. Они нужны для формирования более простого и понятного исходного кода. Если отступление от соглашений и правил в отдельно взятом случае является логичным и понятным решением, оно будет полностью оправданным.
- Не бояться изменений в процессе работы. У языка Ruby поддерживаются разные динамические средства, включая самомодификации во время реализации проекта. Они позволяют получить доступ к возможностям, которые являются очень полезными для эффективной разработки. Снижение производительности, на которое приходится соглашаться рани них, обычно не выходит за рамки допустимого.
Еще один принцип Руби, на котором пишут разные проекты, – это «не нужно с ним бороться». Язык придуман таким, какой он есть. Ждать от данного инструмента программирования того, что он будет вести себя как «привычный» инструмент программирования, нет никакой необходимости. Разработчик в процессе написания тех или иных приложений может следовать своим привычкам и предпочтениям, сложившимся под влиянием других инструментов программирования. Если ожидания специалиста неверны, это нужно принять и использовать в дальнейшей работе.
Плюсы и минусы
Ruby – язык, который имеет как преимущества, так и недостатки. Если знать о них, можно более быстро и эффективно разобраться в том, когда рассматриваемый инструмент будет полезен, а когда – не очень.
К преимуществам Ruby можно отнести:
- Ориентированность непосредственно на людей. Разработчики на Руби уверяют, что язык достиг своей основной цели – он делает программистов счастливыми. Это связано с его идеями и концептами. Они такие, чтобы программисту было удобно пользоваться Ruby. Исходный код на нем понятен и прост для человека. Он легко читается. Адаптация исходного кода под функциональную разработку допустима, причем без существенных затруднений.
- Изящество и лаконичность. Язык придуман так, чтобы в нем можно было реализовывать изящные, удобные для программиста концепты. Именно поэтому с его помощью разрабатывать программное обеспечение приятно. Данную особенность часто отмечают люди, которые ранее активно пользовались другими языками, но теперь перешли на Руби. Решать одни и те же задачи этот инструмент позволяет несколькими методами. Данная особенность наделяет Ruby гибкостью. Огромный акцент делается на изяществе готовых решений, что благоприятно сказывается на чистоте и красоте исходных кодов.
- Многофункциональность. Ruby может применяться в самых разных областях разработки программного обеспечения. Несмотря на это, он часто применяется в качестве инструмента веб-программирования. Только он – не скриптовый язык. Руби встречается в десктопных проектах, а также в приложениях для macOS и других направлениях. В теории написать с его помощью получится все, что угодно.
- Стабильную нишу. Веб-разработка на Руби является востребованной. Количество вакансий в данном направлении можно назвать стабильным. Программисты на Ruby хорошо ценятся. Это позволяет человеку стать не только хорошим специалистом, но и не испытывать трудности при поиске работы.
- Широкую востребованность. Изначально может показаться, что вакансий для разработчиков на Руби меньше, чем на других языках. Это не совсем так. На самом деле программистов на Ruby не хватает. Некоторые компании даже готовы нанимать разработчиков и переобучать их самостоятельно. Все это положительно сказывается на заработке специалиста – он в среднем выше, чем у обычного веб-программиста.
- Активное сообщество. В нем пользователи могут всегда попросить помощи. Сообщество программистов на Ruby активно развивается. Много времени в нем уделяется качеству кодов и разнообразным хорошим практикам. В выбранном направлении разработки принято писать программы сразу грамотно, чтобы добиться его прозрачности и хорошей читаемости.
Недостатки у рассматриваемого языка тоже есть. К ним можно отнести:
- Сложность изучения. Руби – язык, который бывает проблематично выучить «с нуля». Особенно тем, кто раньше вообще никак не был связан с разработкой программного обеспечения. Новичкам стоит сначала освоить базовые концепции программирования. Это можно сделать как полностью самостоятельно, так и при помощи специализированных курсов
- Производительность. Первые версии Руби получали много критики из-за вопроса производительности. Язык работал в несколько раз медленнее, чем его аналоги. Со временем удалось этот минус сгладить, но не полностью. Проект, написанный на Ruby, работает все равно медленнее, чем при использовании компилируемых языков. Из-за этого в областях, где скорость является критичной, рассматриваемый инструмент почти не используется.
- Большие ресурсозатраты. Интерпретатор у языка является «тяжелым». Ruby выступает в качестве сложного языка. Он требует у системы много ресурсов для обработки. Под маломощные устройства писать на Руби из-за этого недостатка не получится. Это основная причина, по которой инструмент почти не применяется в мобильной разработке и других похожих областях деятельности.
- Отсутствие поддержки обратной совместимости. Она отсутствует еще со времен Ruby 1.8. На такой шаг создатели изучаемого инструмента разработки пошли намеренно – чтобы он мог дальше развиваться и «не стоять на месте». Оглядываться на старые его версии программистам не приходится. Отсюда следует простой и понятный факт – разные версии Руби не будут гарантированно совместимы др��г с другом. Это касается даже ситуаций, когда разница между двумя проектами необычайно мала. Соответствующий момент может принести немало хлопот, если нужно перевести приложение на более новую версию языка. А еще трудности могут возникнуть при использовании библиотек, написанных на других версиях Руби.
- Отсутствие поддержки всех платформ. Этот недостаток связан не с самим Ruby, а с его технологиями, библиотеками и фреймворками. Из-за данного минуса не всегда проекты, написанные на Руби, можно перенести на ту или иную систему. От соответствующего недостатка пока не удалось избавиться, даже несмотря на кроссплатформенность изучаемого инструмента.
- Неполную многопоточность. Ruby является многопоточным языков, в нем есть механизм глобальной блокировки интерпретатора. Соответствующая технология используется для синхронизации потоков. Она не позволяет одному процессу выполнять больше одного кодового потока. Внедрена такая система в целях обеспечения потокобезопасности. Ее наличие частично накладывает ограничение на возможности многопоточности языка. Несмотря на это, столкнуться с упомянутым недостатком удается далеко не всегда – только в сильно нагруженных проектах, которые чаще всего выполняются на серверах или мощных устройствах.
Теперь можно выяснить, что именно пишется на Руби. А еще – какие ключевые свойства и характеристики имеет рассматриваемый язык.
Свойства и особенности
Руби – это язык, который должен был стать простым, понятным и комфортным инструментом в руках программиста. Реализовать данную концепцию действительно удалось, хоть и не для новичков в области разработки. Язык получился объектно-ориентированным, предсказуемым и лаконичным.
Он предусматривает следующие свойства и особенности:
- Ориентированность на людей. Это не только преимущество, но и одна из ключевых особенностей инструмента. Ruby сделан так, чтобы с ним было легко и просто управляться человеку. С разработчика удается снять рутинные задачи, что благоприятно сказывается на скорости программирования.
- Возможность выполнять задачи разными методами. Тут все зависит от удобства для разработчика. Данная особенность вытекает из предыдущего свойства. Понятность и изящество – часть философии изучаемого инструмента.
- Принцип наименьшего удивления. Является одной из самых важных черт языка. Поведение приложения, написанного с помощью Руби, должно быть предсказуемым, без сюрпризов. Это положительно сказывается на читаемости исходного кода, его обработку и отладку.
- Интерпретируемость. Рассматриваемый инструмент не является компилируемым. Он интерпретируемый. Это значит, что его исполняет специальная программа-интерпретатор. Она функционирует в режиме реального времени и обрабатывает исходный код построчно. Компилируемые языки сначала переводятся в единый блок машинных кодов компилятором. Только потом система сможет их выполнить.
- Кроссплатформенность. Это плюс, минус и свойство Ruby. Данная особенность достигается за счет интерпретируемости. Запустить программу, написанную на Руби, получится на любой операционной системе. И везде проект будет исполняться одинаково. То же самое касается гибкости – Руби предусматривает наличие принципов, которые невозможны в компилируемых средствах разработки.
- Поддержка объектно-ориентированной концепции. В ней все сущности, с которыми имеет дело программист, представлены в виде объектов. Они могут взаимодействовать друг с другом, но не вмешиваться во внутреннее устройство. Действия с объектами осуществляются внутри методов – специальных свойств-функций, которые должны прописываться для каждого компонента программы.
- Поддержка блоков. Блок – это одна из ключевых конструкций в Ruby. Такое название получили участники кодов, которые можно передавать в те или иные методы/функции. В качестве блока может использоваться любой код, включая чужой. Он не оказывает влияния на работу самого метода, но может быть реализован внутри него. Для запуска кода их блока поддерживаются специальные команды управления. Блоками очень удобно пользоваться, если нужно, чтобы объект оказался более гибким, а также вел себя по-разному в зависимости от ситуации.
- Динамическая типизация. В Ruby типы определяются автоматически – пользователь не задает этот параметр заранее. Он устанавливается при присваивании переменной того или иного значения. В языке действует «утиная» типизация. Этот термин указывает на то, что сущность будет определяться по набору ее методов – по тому, как она выглядит и ведет себя, какими именно свойствами обладает.
- Многопоточность. У Руби «из коробки» предусматривается поддержка многопоточности, не связанной с системой. Она реализована непосредственно внутри интерпретатора.
Теперь, когда общее понимание рассматриваемого языка есть, осталось выяснить, что пишут на Ruby.
Для чего требуется язык
Ruby – это универсальное средство разработки. С его помощью можно написать по мере необходимости почти любую программу.
Больше всего инструмент используется веб-программистами. С его помощью пишутся разные приложения в областях:
- e-commerce;
- SaaS-решений;
- биржевых площадок;
- иных сложных проектов.
Единственное, для чего Руби гарантированно не подходит, – это проекты, работающие в режиме реального времени (real-time). Они предусматривают необходимость взаимодействия с сокетами, а также применения последовательной идентификации пользователей. Изучаемый инструмент испытывает с подобными операциями некоторые затруднения.
Стартапы часто используют упомянутый язык из-за того, что на нем можно быстро и эффективно проверять свои идеи. В сочетании с Rails он будет идеальным средством формирования прототипов.
Разработчики выбирают рассматриваемый инструмент из-за того, что он позволяет быстро делать новые проекты, вовлекать в них новых программистов, формировать фичи и функциональность проектов, а затем успешно и удобно тестировать их.
Ruby активно внедряется в проекты крупных компаний вроде SoundCloud, Dribble, GitHub, а также GitLab и другими. Существуют также организации, которые пользуются рассматриваемым языком, но открыто не говорят об этом.
Ruby on Rails и его применение
Ruby сейчас очень редко применяется в «чистом» виде. Обычно с ним работают совместно с фреймворком Ruby on Rails. Он используется для разработки серверной части клиент-серверных моделей. Выступает в качестве своеобразного шаблона для той или иной веб-программы.
Ruby on Rails имеет архитектуру MVC, которая разделяет приложение на:
- модель данных;
- представление модели;
- контроллер.
Соответствующие компоненты взаимодействуют друг с другом, каждая из них отвечает за выполнение определенных (своих собственных) задач.
Ruby on Rails был создан в 2005 году. Развивается он активно и стабильно до сих пор. Изначально данный фреймворк принес в веб-программирование концепты, которые позже появились в других фреймворках и повлияли на упомянутую сферу. Ruby on Rails является первым фреймворком, в котором появилась бесшовная интеграция с базами данных и миграции.
Идеи «рельсов» продолжают концепции классического Руби: в них поддерживаются соглашения по конфигурации. Это значит, что дополнительная конфигурация нужна лишь там, где отсутствуют готовые соглашения по реализации чего-либо.
Перспективы и востребованность
В IT говорят в шутку, что Руби является мертвым языком. На самом деле это не так. Он является достаточно популярным и применяется при работе с крупными проектами и приложениями. Интерес к Ruby немного упал в 21 веке, но он все равно является стабильным и востребованным.
Сейчас количество сайтов, работающих на Руби, значительно возрастает. В 2011 году он составляет всего 0,5%, а в 2022 – уже около 6%. С 2018 года рост распространенности рассматриваемого инструмента стремительно возрос.
Все это указывает на то, что Руби активно используется и развивается. Он часто применяется в разных стартапах, а также в разработке, где значимость имеет необходимость создания работающего прототипа с его дальнейшим выпуском на рынок.
Что собой представляет Ruby, понятно. И для каких именно целей он используется, тоже. Лучше всего изучить его получится при помощи дистанционных компьютерных курсов.
Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Язык Ruby: что это такое и зачем он необходим OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Языков программирования в современной разработке очень много. Некоторые из них являются узкоспециализированными и применяются для строго определенных задач, а какие-то универсальны. Каждый из них предусматривает свои преимущества, недостатки и ключевые особенности. Зная соответствующую информацию, человек сможет выбрать оптимальный для себя и своих задач инструмент разработки. Огромным спросом сейчас пользуются объектно-ориентированные языки. Они являются функциональными и" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/#article","name":"\u042f\u0437\u044b\u043a Ruby: \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c OTUS","headline":"\u042f\u0437\u044b\u043a Ruby: \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2024\/10\/oj-1080x720-2024-10-14T233742.017.jpg","width":2245,"height":1587},"datePublished":"2024-10-14T20:38:07+00:00","dateModified":"2024-10-14T20:38:10+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, Ruby, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/#listItem","position":2,"name":"\u042f\u0437\u044b\u043a Ruby: \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/#webpage","url":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/","name":"\u042f\u0437\u044b\u043a Ruby: \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c OTUS","description":"\u042f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u0437\u043a\u043e\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u0430 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430, \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u0417\u043d\u0430\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438 \u0441\u0432\u043e\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u0441\u043f\u0440\u043e\u0441\u043e\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438. \u041e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2024\/10\/oj-1080x720-2024-10-14T233742.017.jpg","@id":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/#mainImage","width":2245,"height":1587},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/#mainImage"},"datePublished":"2024-10-14T20:38:07+00:00","dateModified":"2024-10-14T20:38:10+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/11015" /><link rel='shortlink' href='https://otus.ru/journal/?p=11015' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fyazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fyazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-11015 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-11015" class="the-post post-11015 post type-post status-publish format-standard has-post-thumbnail category-polza tag-ruby tag-programmirovanie">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Язык Ruby: что это такое и зачем он необходим
</h1>
<a href="https://otus.ru/journal/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim/" class="date-link" data-wpel-link="internal"><time class="post-date">14 октября, 2024</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-2024-10-14T233742.017.jpg" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Язык Ruby: что это такое и зачем он необходим" title="Язык Ruby: что это такое и зачем он необходим" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-2024-10-14T233742.017-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-2024-10-14T233742.017-270x180.jpg 270w" data-src="https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-2024-10-14T233742.017-770x515.jpg" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="Определение">Определение</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%AF%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F_%D1%84%D0%B8%D0%BB%D0%BE%D1%81%D0%BE%D1%84%D0%B8%D1%8F" title="Языковая философия">Языковая философия</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%9F%D0%BB%D1%8E%D1%81%D1%8B_%D0%B8_%D0%BC%D0%B8%D0%BD%D1%83%D1%81%D1%8B" title="Плюсы и минусы">Плюсы и минусы</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%B8_%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8" title="Свойства и особенности">Свойства и особенности</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%94%D0%BB%D1%8F_%D1%87%D0%B5%D0%B3%D0%BE_%D1%82%D1%80%D0%B5%D0%B1%D1%83%D0%B5%D1%82%D1%81%D1%8F_%D1%8F%D0%B7%D1%8B%D0%BA" title="Для чего требуется язык">Для чего требуется язык</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-6" href="#Ruby_on_Rails_%D0%B8_%D0%B5%D0%B3%D0%BE_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5" title="Ruby on Rails и его применение">Ruby on Rails и его применение</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%9F%D0%B5%D1%80%D1%81%D0%BF%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D1%8B_%D0%B8_%D0%B2%D0%BE%D1%81%D1%82%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C" title="Перспективы и востребованность">Перспективы и востребованность</a></li></ul></nav></div>
<h1 class="wp-block-heading"></h1>
<p>Языков программирования в современной разработке очень много. Некоторые из них являются узкоспециализированными и применяются для строго определенных задач, а какие-то универсальны. Каждый из них предусматривает свои преимущества, недостатки и ключевые особенности. Зная соответствующую информацию, человек сможет выбрать оптимальный для себя и своих задач инструмент разработки.</p>
<p>Огромным спросом сейчас пользуются объектно-ориентированные языки. Они являются функциональными и очень часто – еще и интуитивно понятными. Освоить такие инструменты сможет даже человек, который ранее был весьма далек от программирования.</p>
<p>Но есть и другие типы языков программирования. В качестве примера можно привести Ruby. Сегодня предстоит изучить его более детально. Необходимо выяснить, что это за язык программирования, для чего он используется, какими особенностями, плюсами и минусами обладает.</p>
<p>Опубликованная информация рассчитана на широкий пользовательский круг. Она поможет IT-специалистам понять, когда им нужен Ruby. Обычным пользователям – даст возможность расширить свой кругозор и узнать больше информации о существующих языках разработки программного обеспечения.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>Определение<span class="ez-toc-section-end"></span></h2>
<p>Ruby – язык программирования, который может быть использован разработчиками для самых разных целей. Он является динамическим, рефлективным, высокоуровневым и интерпретируемым средством разработки. Предусматривает полную независимость от операционной системы реализацией многопоточности. У Ruby сильная динамическая типизация. Дополнительно язык оснащен сборщиком мусора и некоторыми другими полезными функциями.</p>
<p>Своими ключевыми особенностями синтаксиса Руби напоминает Perl и Eiffel, по объектно-ориентированному подходу – Smalltalk. Некоторые черты Ruby унаследовал от Клу, Lisp, Dylan и Python.</p>
<p>Данный инструмент чаще всего используется в веб-разработке. Программы на Ruby будут иметь понятный на уровне интуиции исходный код. Это делает процедуру программирования еще более удобно й и быстрой. Чаще всего язык применяется для разработки совместно с фреймворком Ruby on Rails.</p>
<p>Руби был создан еще в 1995 году. Его создателем выступил Юкихиро Мацумото. В Европейской части мира инструмент стал распространяться только после 2000-х годов. Изначально вся документация Ruby была на японском языке. Это делало освоение языка практически невозможным для европейцев. Сейчас ситуация кардинально изменилась.</p>
<p>Ruby входит в 20-ку самых популярных языков программирования. Обычно он используется в качестве полноценного серверного языка, несмотря на то, что создавался он универсальным. Другие виды программного обеспечения на нем тоже можно писать, но делается это достаточно редко.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%AF%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F_%D1%84%D0%B8%D0%BB%D0%BE%D1%81%D0%BE%D1%84%D0%B8%D1%8F"></span>Языковая философия<span class="ez-toc-section-end"></span></h2>
<p>Создатель Руби был фанатом объектно-ориентированного программирования. Он хотел разработать язык, который будет мощнее Perl и более объектно-ориентированным, чем Python. Это успешно удалось реализовать в рассматриваемом инструменте.</p>
<p>Основным назначением Руби является формирование простых и понятных программ для решения задач, в которых в процессе программирования на передовую выходят такие свойства, как простота и понятность. Скорость функционирования для подобных проектов уходит на второй план.</p>
<p>Философия языка характеризует принципы его устройства. Она носит название «Путь Ruby». Включает в себя следующие концепции:</p>
<ol>
<li>Язык для людей, а не для компьютеров. Приоритетом у рассматриваемого инструмента выступает удобство для разработчика и минимизация трудовых затрат при программировании. Специалиста нужно освободить от рутинной работы, которую устройство способно выполнять самостоятельно и более быстро/качественно. Особое внимание уделяется здесь рутинным занятиям вроде администрирования или обработки текстов. Для них инструмент настроен особенно хорошо.</li>
<li>Принцип наименьшей неожиданности. Он гласит, что программа, которую пишут на Руби, должна быть предсказуема. Она должна вести себя так, как ожидает программист. В контексте рассматриваемого языка наименьшее удивление подразумевается не при знакомстве с ним, а при его основательном изучении. Мацумото уверяет, что цель разработки Руби – это минимизация неожиданностей при написании проектов для него самого. Позже стало известно, что аналогичным принципом руководствуются другие программисты.</li>
<li>Просто, но не слишком. Этот принцип указывает на то, что упрощение разработки – благо. Только оно не должно переходить некоторые границы. Такие, за которыми простота превращается в самоцель и негативно сказывается на итоговом продукте.</li>
<li>Не нужно быть рабом производительности. Если производительность для одной конкретной ситуации очень низкая, нужно исправлять положение. Если же в процессе программирования изначально ясно, что она будет существенной – нужно полностью перепроектировать программу с учетом этого момента. Необходимо предпочитать элегантность эффективности тогда, когда эффективность – не критичный критерий.</li>
<li>Естественность важнее ортогональности. Избыточность в исходном коде допустима, если она удобна программисту. Руби стал наследником идеологии Perl в области предоставления разработчику возможностей достижения одного и того же результата несколькими методами. Каждый человек индивидуален, обществу нужна свобода и возможность выбирать. Соответствующие принципы применимы и к сфере разработки программного обеспечения.</li>
<li>Не быть педантичным в процессе следования простым и строгим правилам. В Ruby используются строгие и простые правила. Они нужны для формирования более простого и понятного исходного кода. Если отступление от соглашений и правил в отдельно взятом случае является логичным и понятным решением, оно будет полностью оправданным.</li>
<li>Не бояться изменений в процессе работы. У языка Ruby поддерживаются разные динамические средства, включая самомодификации во время реализации проекта. Они позволяют получить доступ к возможностям, которые являются очень полезными для эффективной разработки. Снижение производительности, на которое приходится соглашаться рани них, обычно не выходит за рамки допустимого.</li>
</ol>
<p>Еще один принцип Руби, на котором пишут разные проекты, – это «не нужно с ним бороться». Язык придуман таким, какой он есть. Ждать от данного инструмента программирования того, что он будет вести себя как «привычный» инструмент программирования, нет никакой необходимости. Разработчик в процессе написания тех или иных приложений может следовать своим привычкам и предпочтениям, сложившимся под влиянием других инструментов программирования. Если ожидания специалиста неверны, это нужно принять и использовать в дальнейшей работе.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BB%D1%8E%D1%81%D1%8B_%D0%B8_%D0%BC%D0%B8%D0%BD%D1%83%D1%81%D1%8B"></span>Плюсы и минусы<span class="ez-toc-section-end"></span></h2>
<p>Ruby – язык, который имеет как преимущества, так и недостатки. Если знать о них, можно более быстро и эффективно разобраться в том, когда рассматриваемый инструмент будет полезен, а когда – не очень.</p>
<p>К преимуществам Ruby можно отнести:</p>
<ol>
<li>Ориентированность непосредственно на людей. Разработчики на Руби уверяют, что язык достиг своей основной цели – он делает программистов счастливыми. Это связано с его идеями и концептами. Они такие, чтобы программисту было удобно пользоваться Ruby. Исходный код на нем понятен и прост для человека. Он легко читается. Адаптация исходного кода под функциональную разработку допустима, причем без существенных затруднений.</li>
<li>Изящество и лаконичность. Язык придуман так, чтобы в нем можно было реализовывать изящные, удобные для программиста концепты. Именно поэтому с его помощью разрабатывать программное обеспечение приятно. Данную особенность часто отмечают люди, которые ранее активно пользовались другими языками, но теперь перешли на Руби. Решать одни и те же задачи этот инструмент позволяет несколькими методами. Данная особенность наделяет Ruby гибкостью. Огромный акцент делается на изяществе готовых решений, что благоприятно сказывается на чистоте и красоте исходных кодов.</li>
<li>Многофункциональность. Ruby может применяться в самых разных областях разработки программного обеспечения. Несмотря на это, он часто применяется в качестве инструмента веб-программирования. Только он – не скриптовый язык. Руби встречается в десктопных проектах, а также в приложениях для macOS и других направлениях. В теории написать с его помощью получится все, что угодно.</li>
<li>Стабильную нишу. Веб-разработка на Руби является востребованной. Количество вакансий в данном направлении можно назвать стабильным. Программисты на Ruby хорошо ценятся. Это позволяет человеку стать не только хорошим специалистом, но и не испытывать трудности при поиске работы.</li>
<li>Широкую востребованность. Изначально может показаться, что вакансий для разработчиков на Руби меньше, чем на других языках. Это не совсем так. На самом деле программистов на Ruby не хватает. Некоторые компании даже готовы нанимать разработчиков и переобучать их самостоятельно. Все это положительно сказывается на заработке специалиста – он в среднем выше, чем у обычного веб-программиста.</li>
<li>Активное сообщество. В нем пользователи могут всегда попросить помощи. Сообщество программистов на Ruby активно развивается. Много времени в нем уделяется качеству кодов и разнообразным хорошим практикам. В выбранном направлении разработки принято писать программы сразу грамотно, чтобы добиться его прозрачности и хорошей читаемости.</li>
</ol>
<p>Недостатки у рассматриваемого языка тоже есть. К ним можно отнести:</p>
<ol>
<li>Сложность изучения. Руби – язык, который бывает проблематично выучить «с нуля». Особенно тем, кто раньше вообще никак не был связан с разработкой программного обеспечения. Новичкам стоит сначала освоить базовые концепции программирования. Это можно сделать как полностью самостоятельно, так и при помощи специализированных курсов</li>
<li>Производительность. Первые версии Руби получали много критики из-за вопроса производительности. Язык работал в несколько раз медленнее, чем его аналоги. Со временем удалось этот минус сгладить, но не полностью. Проект, написанный на Ruby, работает все равно медленнее, чем при использовании компилируемых языков. Из-за этого в областях, где скорость является критичной, рассматриваемый инструмент почти не используется.</li>
<li>Большие ресурсозатраты. Интерпретатор у языка является «тяжелым». Ruby выступает в качестве сложного языка. Он требует у системы много ресурсов для обработки. Под маломощные устройства писать на Руби из-за этого недостатка не получится. Это основная причина, по которой инструмент почти не применяется в мобильной разработке и других похожих областях деятельности.</li>
<li>Отсутствие поддержки обратной совместимости. Она отсутствует еще со времен Ruby 1.8. На такой шаг создатели изучаемого инструмента разработки пошли намеренно – чтобы он мог дальше развиваться и «не стоять на месте». Оглядываться на старые его версии программистам не приходится. Отсюда следует простой и понятный факт – разные версии Руби не будут гарантированно совместимы друг с другом. Это касается даже ситуаций, когда разница между двумя проектами необычайно мала. Соответствующий момент может принести немало хлопот, если нужно перевести приложение на более новую версию языка. А еще трудности могут возникнуть при использовании библиотек, написанных на других версиях Руби.</li>
<li>Отсутствие поддержки всех платформ. Этот недостаток связан не с самим Ruby, а с его технологиями, библиотеками и фреймворками. Из-за данного минуса не всегда проекты, написанные на Руби, можно перенести на ту или иную систему. От соответствующего недостатка пока не удалось избавиться, даже несмотря на кроссплатформенность изучаемого инструмента.</li>
<li>Неполную многопоточность. Ruby является многопоточным языков, в нем есть механизм глобальной блокировки интерпретатора. Соответствующая технология используется для синхронизации потоков. Она не позволяет одному процессу выполнять больше одного кодового потока. Внедрена такая система в целях обеспечения потокобезопасности. Ее наличие частично накладывает ограничение на возможности многопоточности языка. Несмотря на это, столкнуться с упомянутым недостатком удается далеко не всегда – только в сильно нагруженных проектах, которые чаще всего выполняются на серверах или мощных устройствах.</li>
</ol>
<p>Теперь можно выяснить, что именно пишется на Руби. А еще – какие ключевые свойства и характеристики имеет рассматриваемый язык.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%B8_%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8"></span>Свойства и особенности<span class="ez-toc-section-end"></span></h2>
<p>Руби – это язык, который должен был стать простым, понятным и комфортным инструментом в руках программиста. Реализовать данную концепцию действительно удалось, хоть и не для новичков в области разработки. Язык получился объектно-ориентированным, предсказуемым и лаконичным.</p>
<p>Он предусматривает следующие свойства и особенности:</p>
<ol>
<li>Ориентированность на людей. Это не только преимущество, но и одна из ключевых особенностей инструмента. Ruby сделан так, чтобы с ним было легко и просто управляться человеку. С разработчика удается снять рутинные задачи, что благоприятно сказывается на скорости программирования.</li>
<li>Возможность выполнять задачи разными методами. Тут все зависит от удобства для разработчика. Данная особенность вытекает из предыдущего свойства. Понятность и изящество – часть философии изучаемого инструмента.</li>
<li>Принцип наименьшего удивления. Является одной из самых важных черт языка. Поведение приложения, написанного с помощью Руби, должно быть предсказуемым, без сюрпризов. Это положительно сказывается на читаемости исходного кода, его обработку и отладку.</li>
<li>Интерпретируемость. Рассматриваемый инструмент не является компилируемым. Он интерпретируемый. Это значит, что его исполняет специальная программа-интерпретатор. Она функционирует в режиме реального времени и обрабатывает исходный код построчно. Компилируемые языки сначала переводятся в единый блок машинных кодов компилятором. Только потом система сможет их выполнить.</li>
<li>Кроссплатформенность. Это плюс, минус и свойство Ruby. Данная особенность достигается за счет интерпретируемости. Запустить программу, написанную на Руби, получится на любой операционной системе. И везде проект будет исполняться одинаково. То же самое касается гибкости – Руби предусматривает наличие принципов, которые невозможны в компилируемых средствах разработки.</li>
<li>Поддержка объектно-ориентированной концепции. В ней все сущности, с которыми имеет дело программист, представлены в виде объектов. Они могут взаимодействовать друг с другом, но не вмешиваться во внутреннее устройство. Действия с объектами осуществляются внутри методов – специальных свойств-функций, которые должны прописываться для каждого компонента программы.</li>
<li>Поддержка блоков. Блок – это одна из ключевых конструкций в Ruby. Такое название получили участники кодов, которые можно передавать в те или иные методы/функции. В качестве блока может использоваться любой код, включая чужой. Он не оказывает влияния на работу самого метода, но может быть реализован внутри него. Для запуска кода их блока поддерживаются специальные команды управления. Блоками очень удобно пользоваться, если нужно, чтобы объект оказался более гибким, а также вел себя по-разному в зависимости от ситуации.</li>
<li>Динамическая типизация. В Ruby типы определяются автоматически – пользователь не задает этот параметр заранее. Он устанавливается при присваивании переменной того или иного значения. В языке действует «утиная» типизация. Этот термин указывает на то, что сущность будет определяться по набору ее методов – по тому, как она выглядит и ведет себя, какими именно свойствами обладает.</li>
<li>Многопоточность. У Руби «из коробки» предусматривается поддержка многопоточности, не связанной с системой. Она реализована непосредственно внутри интерпретатора.</li>
</ol>
<p>Теперь, когда общее понимание рассматриваемого языка есть, осталось выяснить, что пишут на Ruby.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%94%D0%BB%D1%8F_%D1%87%D0%B5%D0%B3%D0%BE_%D1%82%D1%80%D0%B5%D0%B1%D1%83%D0%B5%D1%82%D1%81%D1%8F_%D1%8F%D0%B7%D1%8B%D0%BA"></span>Для чего требуется язык<span class="ez-toc-section-end"></span></h2>
<p>Ruby – это универсальное средство разработки. С его помощью можно написать по мере необходимости почти любую программу.</p>
<p>Больше всего инструмент используется веб-программистами. С его помощью пишутся разные приложения в областях:</p>
<ul>
<li>e-commerce;</li>
<li>SaaS-решений;</li>
<li>биржевых площадок;</li>
<li>иных сложных проектов. </li>
</ul>
<p>Единственное, для чего Руби гарантированно не подходит, – это проекты, работающие в режиме реального времени (real-time). Они предусматривают необходимость взаимодействия с сокетами, а также применения последовательной идентификации пользователей. Изучаемый инструмент испытывает с подобными операциями некоторые затруднения.</p>
<p>Стартапы часто используют упомянутый язык из-за того, что на нем можно быстро и эффективно проверять свои идеи. В сочетании с Rails он будет идеальным средством формирования прототипов.</p>
<p>Разработчики выбирают рассматриваемый инструмент из-за того, что он позволяет быстро делать новые проекты, вовлекать в них новых программистов, формировать фичи и функциональность проектов, а затем успешно и удобно тестировать их.</p>
<p>Ruby активно внедряется в проекты крупных компаний вроде SoundCloud, Dribble, GitHub, а также GitLab и другими. Существуют также организации, которые пользуются рассматриваемым языком, но открыто не говорят об этом.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Ruby_on_Rails_%D0%B8_%D0%B5%D0%B3%D0%BE_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5"></span>Ruby on Rails и его применение<span class="ez-toc-section-end"></span></h2>
<p>Ruby сейчас очень редко применяется в «чистом» виде. Обычно с ним работают совместно с фреймворком Ruby on Rails. Он используется для разработки серверной части клиент-серверных моделей. Выступает в качестве своеобразного шаблона для той или иной веб-программы.</p>
<p>Ruby on Rails имеет архитектуру MVC, которая разделяет приложение на:</p>
<ul>
<li>модель данных;</li>
<li>представление модели;</li>
<li>контроллер.</li>
</ul>
<p>Соответствующие компоненты взаимодействуют друг с другом, каждая из них отвечает за выполнение определенных (своих собственных) задач.</p>
<p>Ruby on Rails был создан в 2005 году. Развивается он активно и стабильно до сих пор. Изначально данный фреймворк принес в веб-программирование концепты, которые позже появились в других фреймворках и повлияли на упомянутую сферу. Ruby on Rails является первым фреймворком, в котором появилась бесшовная интеграция с базами данных и миграции.</p>
<p>Идеи «рельсов» продолжают концепции классического Руби: в них поддерживаются соглашения по конфигурации. Это значит, что дополнительная конфигурация нужна лишь там, где отсутствуют готовые соглашения по реализации чего-либо.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%B5%D1%80%D1%81%D0%BF%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D1%8B_%D0%B8_%D0%B2%D0%BE%D1%81%D1%82%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C"></span>Перспективы и востребованность<span class="ez-toc-section-end"></span></h2>
<p>В IT говорят в шутку, что Руби является мертвым языком. На самом деле это не так. Он является достаточно популярным и применяется при работе с крупными проектами и приложениями. Интерес к Ruby немного упал в 21 веке, но он все равно является стабильным и востребованным.</p>
<p>Сейчас количество сайтов, работающих на Руби, значительно возрастает. В 2011 году он составляет всего 0,5%, а в 2022 – уже около 6%. С 2018 года рост распространенности рассматриваемого инструмента стремительно возрос.</p>
<p>Все это указывает на то, что Руби активно используется и развивается. Он часто применяется в разных стартапах, а также в разработке, где значимость имеет необходимость создания работающего прототипа с его дальнейшим выпуском на рынок.</p>
<p>Что собой представляет Ruby, понятно. И для каких именно целей он используется, тоже. Лучше всего изучить его получится при помощи дистанционных компьютерных курсов.</p>
<p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a href="https://otus.ru/?utm_source=oj" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">Otus<span class="wpel-icon wpel-image wpel-icon-6"></span></a>!</em> </p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/ruby/" rel="tag" data-wpel-link="internal">Ruby</a><a href="https://otus.ru/journal/tag/programmirovanie/" rel="tag" data-wpel-link="internal">программирование</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fyazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fyazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim%2F&text=%D0%AF%D0%B7%D1%8B%D0%BA%20Ruby%3A%20%D1%87%D1%82%D0%BE%20%D1%8D%D1%82%D0%BE%20%D1%82%D0%B0%D0%BA%D0%BE%D0%B5%20%D0%B8%20%D0%B7%D0%B0%D1%87%D0%B5%D0%BC%20%D0%BE%D0%BD%20%D0%BD%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fyazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fyazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2024%2F10%2Foj-1080x720-2024-10-14T233742.017.jpg&description=%D0%AF%D0%B7%D1%8B%D0%BA%20Ruby%3A%20%D1%87%D1%82%D0%BE%20%D1%8D%D1%82%D0%BE%20%D1%82%D0%B0%D0%BA%D0%BE%D0%B5%20%D0%B8%20%D0%B7%D0%B0%D1%87%D0%B5%D0%BC%20%D0%BE%D0%BD%20%D0%BD%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/c-oblasti-primeneniya-pljusy-i-minusy/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/c-oblasti-primeneniya-pljusy-i-minusy/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="C#: области применения, плюсы и минусы" decoding="async" data-srcset="https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-2024-10-14T231726.836-150x106.jpg 150w, https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-2024-10-14T231726.836-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-2024-10-14T231726.836-1024x724.jpg 1024w, https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-2024-10-14T231726.836-768x543.jpg 768w, https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-2024-10-14T231726.836-1536x1086.jpg 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-2024-10-14T231726.836-150x106.jpg" data-sizes="(max-width: 150px) 100vw, 150px" title="C#: области применения, плюсы и минусы" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/c-oblasti-primeneniya-pljusy-i-minusy/" data-wpel-link="internal">C#: области применения, плюсы и минусы</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/c-oblasti-primeneniya-pljusy-i-minusy/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2024-10-14T20:17:44+00:00">14 октября, 2024</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">6 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/pust-ljuboznatelnost-stanet-sterzhnem-korporativnoj-kultury/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/pust-ljuboznatelnost-stanet-sterzhnem-korporativnoj-kultury/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Пусть любознательность станет стержнем корпоративной культуры" decoding="async" data-srcset="https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-kopiya-3-150x106.png 150w, https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-kopiya-3-300x212.png 300w, https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-kopiya-3-1024x724.png 1024w, https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-kopiya-3-768x543.png 768w, https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-kopiya-3-1536x1086.png 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2024/10/oj-1080x720-kopiya-3-150x106.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Пусть любознательность станет стержнем корпоративной культуры" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/pust-ljuboznatelnost-stanet-sterzhnem-korporativnoj-kultury/" data-wpel-link="internal">Пусть любознательность станет стержнем корпоративной культуры</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/pust-ljuboznatelnost-stanet-sterzhnem-korporativnoj-kultury/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2024-10-16T08:23:13+00:00">16 октября, 2024</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/yazyk-ruby-chto-eto-takoe-i-zachem-on-neobhodim\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 14:57:03 GMT -->