Что пишут на ruby
Современный, простой и дружелюбный – так Ruby описывает тот, кто знаком с этим языком программирования. Сегодня мы хотим разобраться, какой Ruby на самом деле и стоит ли он вашего времени. Нашим проводником в мир Ruby-разработки стал Senior Software Engineer, ментор курсов EPAM Training Center, Александр Шагов. В статье мы раскроем минусы и плюсы этого языка программирования, развеем мифы и подскажем, где обучиться на Ruby-разработчика и как получить первый опыт работы.
Ruby – лаконичный язык программирования, который был создан в середине 90-х в Японии. Часто Ruby называют японским стилем программирования. Страна никак не повлияла на стиль самого языка. Если почитать историю предков Ruby, то можно увидеть там такие языки, как Smalltalk и Lisp. Ruby унаследовал всю модель этих языков в каком-то виде, но с Японией это никак не связано. Программирование вообще не имеет различий по национальном признаку.
Чем Ruby отличается от других языков программирования?
Выразительностью. Даже человек, который не программировал ни разу в жизни, может прочитать хороший код на Ruby как английский текст и интуитивно понять, о чем идет речь.
Стоит ли выбирать Ruby первым языком программирования?
Я бы не рекомендовал, лучше рассматривать Ruby в качестве второго или третьего языка, сейчас объясню, почему. Технология современная и очень развитая, язык построен на большом количестве абстракций. Человек, который ни разу не программировал, может принимать все на веру и бездумно использовать некоторые абстракции, не понимая, как внутри это работает. Те, кто пришел в Ruby-разработку из других языков программирования четко понимают, как все сделано внутри.
С какого языка начать, чтобы потом было легче изучать Ruby?
Я бы рекомендовал выбрать что-нибудь фундаментальное, чтобы выучить основы. Курсы, которые есть в университетах, начиная с языка C, очень хорошо подойдут. Они дают понять суть программирования, а узнав базу, человек понимает куда двигаться дальше.
Почему ты в свое время выбрал Ruby?
Я еще в университете познакомился с ребятами, которые заинтересовались этим языком программирования, и пошел за ними. Это был неосознанный выбор совершенно. И вот я пришел на курс БГУИРа, а мне там стали рассказывать вещи, которые я не то что не знал, а никогда не слышал. И первая моя реакция была: «Что это вообще такое?» Было слишком много непонятного, хотя я имел определенный бэкграунд: знал циклы, переменные и т.д. В общем, я не понял абсолютно ничего и не смог закончить курс. Ушел и стал самостоятельно читать историю языка, углубляться. Спустя время начал понимать больше. Но вопросы все равно копились в голове: у нас есть какая-то конструкция, почему она такая, откуда это пришло. Начал сам раскручивать клубок и докапываться до истины. Но было сложно, честно. Поэтому я обратился за помощью к Ruby-комьюнити. Год готовился, читал, искал ответы на свои вопросы, вернулся на курс и закончил его. Пришел к тому, что есть сейчас, наверное, именно благодаря вопросам «как», «зачем», «почему» и «откуда это взялось».
Что пишут на Ruby?
Если человек наберет в строчке поиска Google слово Ruby, то скорее всего он натолкнется на статьи о Ruby on Rails. Это фреймворк, который написан на Ruby. Этот язык в 80% случаев используют для создания веб-приложений. Но есть еще те самые 20%, которые занимают инструменты для автоматизации серверов, пакетный менеджер OS X и небольшое количество приложений. К примеру, GitHub, Ask.fm, SoundCloud и Bloomberg используют Ruby on Rails. Если рисовать дерево, то в самом верху будут располагаться веб-приложения, скрипты для автоматизации, потом парсинг сайтов (скрапинг), а после – различные системные утилиты.
Но, в целом, это язык общего назначения, на нем можно делать все то же, что и на других языках. Ответвления зависят от того, как сообщество развивает язык. На данном этапе он очень хорошо сделан для веб-разработки, а для всех остальных операций поддержка инструментов чуть менее активна.
Насколько Ruby популярен на рынке?
Мне сложно ответить на этот вопрос. Я бы не сравнивал Ruby с фундаментальными языками, как Java или C#. Там совершенно другого размера комьюнити, Ruby в этом плане поменьше. Проекты Enterprise-уровня на Ruby не делаются. Чаще всего он используется в стартапах, которые на каком-то этапе выросли и стали просто большими проектами.
Я бы не сказал, что Ruby вообще очень популярен, но в узком кругу его все любят. Инженеры из других сообществ называют Ruby-комьюнити одним из самых дружелюбных и активных. Из-за того, что нас не так много, ты можешь быть лично знаком с человеком, чьей библиотекой ты пользуешься.
За что ты любишь Ruby?
За то, что во время работы я думаю о бизнес-логике, а не о коде. Инструмент будто становится продолжением моей руки. Он настолько лаконично сделан, что у тебя не возникает никаких остановок и даже мыслей, что тебя что-то тормозит. Ты просто выражаешь свою мысль, и она становится программной.
Если человек профессионал, то такое у него, скорее всего, получается на любом языке. Язык на каком-то этапе просто стирается, становится неважен, и ты просто решаешь задачу. Например, тебе нужно забить гвоздь. Ты идешь в гараж, но не находишь молоток. А ты всю жизнь пользовался только молотком. И что, это значит, что нужно опустить руки и принять неизбежность происходящего? Это так не работает, гвоздь можно забить кувалдой или любым другим тяжелым предметом. Это и есть работа инженера. У меня нет особой привязанности к Ruby. Я просто люблю его за простоту и выразительность.
С каким образованием будет проще освоить Ruby?
Вопрос только в том, какого уровня вы хотите достигнуть. Если речь идет о разработке базовых приложений, то особая техническая база не нужна. Можно просто брать язык, изучать простой синтаксис и начинать писать приложения. С таким подходом рано или поздно вы упретесь в какие-то непонятные вещи. Именно поэтому я рекомендую начать с другого языка программирования.
С моей точки зрения, техническому специалисту желательно общее техническое образование: не образование программиста, а образование инженера. Чтобы человек хотя бы в общих чертах знал, как работают платы в компьютере и т.д., чтобы для него ничего не казалось магией. Из личного опыта могу сказать, что большинство людей, которых я уважаю как профессионалов, это физики, инженеры, математики – люди, у которых кругозор гораздо шире, чем просто понимание кода. Потому что программирование само по себе – это всего лишь абстракция. Если коротко, то подойдет любое техническое образование, которое расширит ваш горизонт. А дальше нужно задавать вопросы.
Можно ли обучиться на Ruby-разработчика самостоятельно?
Да, если подходить к обучение осознанно и постоянно задавать вопросы. Например: мне непонятно, что такое базы данных – значит надо найти в интернете хорошие книги на эту тему и почитать. Для этого необязательно ходить на курсы. Советую использовать Reddit – это новостной портал, где люди обмениваются информацией и мнениями. Можно зайти в сообщество Learn Programming и попросить подсказать нужную литературу или даже roadmap выбранной профессии.
Не бойтесь быть самоучкой. Из своего опыта скажу, что на собеседовании на сертификаты о прохождении курсов никто не смотрит. Как сказал мне один мой коллега: «Лицо разработчика – это его GitHub. Если кандидат хочет попасть к нам и скидывает не просто резюме, а еще и GitHub-профиль, где видна его активность, его стиль – это хороший знак.
Мой главный совет: идти в сообщество и спрашивать, обсуждать, созваниваться для обмена опытом. Я сам из такого сообщества вырос. Конечно, я прошел курс в университете, и это дало свои плоды, но основу моей инженерной культуры заложили в комьюнити Hexlet.
Можно ли пройти обучение на Ruby-разработчика в EPAM?
По этому поводу есть история. Еще пару лет назад про Ruby-практику в EPAM никто не знал. В окружении сложилось впечатление о компании исключительно с Enterprise-технологиями, в которой Ruby нет места. Но это не совсем так. Наша практика началась с нескольких человек, а теперь в минском офисе нас около 40 специалистов.
С ростом команды мы решили открыть курсы, чтобы передавать свой опыт другим. Мы создали комьюнити Rubyl’nik, и на базе сообщества запустили первую итерацию четырехмесячных оффлайн курсов. В этом году запустилась вторая итерация полностью в онлайн-формате. Тренинг ориентирован на практику и работу в командах. Я не просто шарю презентацию с информацией на лекциях, а делюсь экраном и делаю проект в реальном времени и параллельно отвечаю на вопросы.
В последние полтора месяца курса мы разбиваем студентов на команды и пытаемся закончить проект. Это очень важный этап обучения, потому что современная разработка – это не про одного человека, а про активность группы людей. На каком-то этапе я даже никого не проверяю, вижу, что команда сама общается между собой, составляет расписание и контролирует работу. Я только наблюдаю за тем, как процесс становится более автономным и отлаженным.
Почему люди не доходят до конца обучения?
- Перестают делать домашние задания. Скорее всего, это происходит из-за нехватки времени. Но с этим ничего нельзя сделать. Мы двигаемся в своем темпе, держим его и не можем замедляться, если один или два человека отстают. Это довольно жестко. Но 4 месяца – это довольно маленький срок. Есть люди, которые его не потянут.
- Не умеют и не хотят работать в команде. Повторюсь, современная разработка – это командная работа. Все всё знать не могут: есть один человек, который хорош в одном направлении, а второй – в абсолютно другом, они собираются все вместе, обсуждают задачи и делают что-то общее. Вот как это работает, а не иначе. Поэтому навык эмпатии сейчас в цене. Довольно сложно найти человека, который и разрабатывает хорошо и еще умеет общаться с людьми.
Где получить первый опыт работы?
Сейчас на рынке потребность в кандидатах с опытом. Найти хорошего опытного Ruby-разработчика сложно, потому что часто Senior в резюме не значит Senior на деле. Если вы новичок в профессии, и вам нужен опыт, предлагаю такой вариант. Любой проект основан на каких-то зависимостях, библиотеках. Они, как правило, с открытым кодом. Рекомендую вам открывать репозитории библиотек, пытаться понять, как они работают, и писать улучшения. Таким образом у вас появится опыт разработки, по сути, реального проекта. И строчка open source contribution experience в резюме будет иметь большее влияние, чем любые курсы. Потому что человек проявил инициативу, сам разобрался в том, как библиотека работает (значит и с проектом разберется), внес изменения (значит умеет анализировать и находить недочеты), изменения подтвердили другие разработчики этой библиотеки (поработал в команде), скорее всего это были инженеры из других стран (значит у него неплохой разговорный английский), его изменения теперь используются во всем мире. Вот это самый настоящий опыт, живой и бесплатный. Просто нужно немного времени на то, какую библиотеку выбрать, что изменить и как. Но результат будет.
Советы начинающим Ruby-разработчикам:
- Читайте историю индустрии, вашего направления и языка. Хороший разработчик знает не только как пользоваться тем или иным инструментом, но и почему он появился, какие задачи решает, и почему возникла необходимость эти задачи решать.
- Общайтесь с другими разработчиками. Коммуникация – это самый активный процесс обучения. Найдите интересное сообщество, задавайте вопросы, делитель опытом и учитесь друг у друга.
- Развивайтесь и копите контакты. Ходите на Ruby-митапы и конференции. Здесь всегда можно найти людей с горящими глазами, завести знакомства, зарядиться энергией, получить полезные знания и дозу мотивации.
Ruby
Ruby — это язык программирования, который можно использовать для разных целей. Чаще всего он применяется в веб-разработке. Ruby высокоуровневый, близкий к человеку: код на нем интуитивно понятный, а писать программы удобно. Язык часто используют со фреймворком Ruby on Rails для веб-программирования.
Освойте профессию
«Fullstack-разработчик на Python»
Язык создал в 1995 году японский программист Юкихиро Мацумото (Matz), но распространяться в Европе он начал только в 2000-х: сначала вся документация Ruby была на японском языке и европейцы не могли его освоить. Сейчас этот язык находится на 18-м месте в мире по популярности согласно рейтингу TIOBE. Чаще всего Ruby используют как серверный язык, но создавался он как универсальный: на нем можно писать и другие виды программ.
Название читается как «руби», ударение ставится на первый слог. Фреймворк Ruby on Rails русскоязычные разработчики иногда называют «рельсами».
Где используется язык Ruby
Мацумото планировал создать язык общего назначения. Это значит, что в теории его можно использовать для разных целей. Но чаще всего на Ruby пишут серверную часть сайтов и веб-программ с помощью фреймворка Ruby on Rails. Им пользуются бэкендеры и фуллстек-разработчики. Это не единственная, хоть и популярная сфера применения. На Ruby также написаны некоторые программы: Metasploit для пентестинга, Vagrant для работы с виртуальной средой, Homebrew для установки приложений через командную строку в macOS. То есть встретить код, написанный на Ruby, можно фактически в любой сфере разработки.
Профессия / 12 месяцев
Fullstack-разработчик на Python
Создавайте веб-проекты самостоятельно

Особенности и свойства Ruby
Основной идеей разработчика Ruby было создание языка, который был бы удобен и комфортен, мог «приносить радость программистам». На язык повлиял Perl, который сам Мацумото считал слишком «игрушечным», Python и некоторые другие. Все это сказалось на синтаксисе и особенностях Ruby: язык получился лаконичным, предсказуемым и заточенным под объектно-ориентированное программирование.
Язык для людей. Ruby — язык, созданный так, чтобы с ним легко было управляться человеку. Он помогает снять с программиста рутинные задачи и поручить их компьютеру. Время и трудозатраты человека — важнейший приоритет; если их при выполнении задачи можно сократить, это стоит сделать. Такова основа философии Ruby.
Еще одна идея языка — возможность выполнять одну и ту же задачу несколькими способами в зависимости от того, что удобно разработчику. Понятность и изящество решения в философии Ruby превыше производительности, кроме случаев, где та критична.
Принцип наименьшего удивления. Это характерная черта Ruby: Мацумото было важно, чтобы язык был предсказуемым. Поэтому он вывел «принцип наименьшего удивления»: поведение программы должно вызывать минимум удивления у разработчика. Программа должна вести себя максимально ожидаемым способом и не выдавать сюрпризов. Такой подход, реализованный в Ruby, упрощает работу с языком, отладку и чтение кода.
Интерпретируемость. Ruby — не компилируемый, а интерпретируемый язык. Это значит, что его исполняет программа-интерпретатор — построчно, в режиме реального времени. Компилируемые же языки сначала переводятся в единый блок машинных кодов программой-компилятором, а потом их исполняет система.
Благодаря интерпретируемости Ruby — кроссплатформенный язык, который можно запустить под любой системой, он исполняется одинаково под каждой платформой. Поэтому же он довольно гибкий: в нем реализованы принципы, которые невозможны в компилируемых языках.
Объектно-ориентированный подход. Объектно-ориентированное программирование представляет все сущности, с которыми работает программист, как объекты. Объекты могут взаимодействовать с другими, но не вмешиваться в их внутреннее устройство. Действия с ними происходят внутри методов — специальных свойств-функций, которые прописываются для каждого объекта. Метод объекта можно вызвать и таким образом изменить его сущность.
У объектно-ориентированного программирования много плюсов, в частности четкость и понятность кода, упрощение отладки и ясная архитектура. Его используют в разных сферах разработки — сейчас ООП считается одним из ведущих концептов, хоть и не единственным.
Ruby — язык с сильным уклоном в объектно-ориентированное программирование. В языке много функций для работы с объектами: их создания, изменения, защиты и других действий с ними. Все возможности выстроены так, чтобы реализовывать ООП и работать с этим подходом было удобнее.
Поддержка блоков. Блок — одна из основных конструкций в Ruby и еще одна отличительная особенность языка. Так называется произвольный участок кода, который можно передать в какую-нибудь функцию или метод. Это может быть любой код, в том числе чужой. Он не меняет работу самого метода, но может выполниться внутри него. Для запуска кода из блока существуют особые команды, передающие ему управление. Например, команда yield, которая означает «передай сейчас контроль блоку и исполни его».
Блоками удобно пользоваться, когда нужно, чтобы объект был более гибким и вел себя по-разному в зависимости от обстоятельств.
Динамическая типизация. В Ruby типы определяются динамически. Это значит, что пользователь не задает тип переменной сразу при ее создании: тот определяется, когда переменной присваивается какое-то значение. Если это число, у переменной будет числовой тип, если слово или буква — строковый, и так далее.
Для Ruby действует принцип, который называют утиной типизацией. Это термин, который появился благодаря пословице: «Если что-то плавает, как утка, выглядит, как утка, и крякает, как утка, то скорее всего, это и есть утка». Утиная типизация означает, что сущность определяется по набору ее методов — то есть по тому, как она выглядит и ведет себя, какие у нее свойства.
Многопоточность. В Ruby «из коробки» есть поддержка многопоточности, не связанной с системой. Многопоточность означает, что какие-то процессы могут выполняться параллельно и тем самым повышать производительность программы. Обычно она реализована на низком уровне: «железо» делает несколько вычислений одновременно, а управляется этот процесс на уровне системы.
Ruby — язык более высокого уровня, далекий от «железа», поэтому его многопоточность реализована внутри интерпретатора. Реализация не трогает систему, поэтому многопоточная программа на Ruby кроссплатформенна и не связана с ОС.

Станьте Fullstack-разработчик на Python и найдите стабильную работу
на удаленке
Ruby on Rails: особенности и применение
Сейчас Ruby чаще всего применяется вместе с фреймворком Ruby on Rails. Он предназначен для разработки серверной части и служит своеобразным «шаблоном» для веб-приложения. В Ruby on Rails реализована архитектура MVC, которая разделяет приложение на модель данных, представление модели и контроллер. Эти части взаимодействуют друг с другом, и каждая выполняет свою задачу.
Ruby on Rails появился в 2005 году и сейчас стабильно развивается. В свое время он принес в веб-разработку концепты, которые позже появились в других фреймворках, например в Laravel, и в целом повлияли на сферу. Например, это первый веб-фреймворк, в котором появились бесшовная интеграция с БД и миграции.
Идеи «рельсов» продолжают классический Ruby: например, в нем внедрен принцип соглашения по конфигурации. Он означает, что дополнительная конфигурация необходима только там, где еще нет готовых соглашений по реализации чего-то, и поддерживает принцип наименьшего удивления.
Востребованность Ruby и его перспективы
В IT-кругах ходит шутка, что Ruby мертв. На самом деле язык вполне жив и довольно популярен, применяется в разработке крупных проектов и приложений. Волна интереса к нему как к новой технологии угасла, но он занял свою стабильную нишу и востребован в ее рамках.
По данным сервиса W3Techs, который занимается IT-статистикой, процент сайтов на Ruby стабильно растет. Если в 2011 году он составлял 0,5%, то в 2022 году — уже 5,7–6,0%. Рост стал активнее с 2018 года, до того количество сайтов на Ruby не превышало одного процента.
Все это говорит, что язык используется и развивается. Сервис hh.ru показывает пятьсот с лишним вакансий Ruby-разработчиков – и это только Россия и часть СНГ. Востребованность по миру еще выше.
Часто Ruby применяют в стартапах, быстрой разработке, где важно как можно скорее создать работающий прототип и выпустить его на рынок.
Преимущества Ruby
Ориентированность на человека. Разработчики на Ruby говорят, что язык достиг своей цели: он делает программиста счастливым. Его концепты и идеи — такие, чтобы разработчику было удобно, а код понятен для человека. Его легко читать и понимать, он объектно-ориентированный, но его можно адаптировать и под функциональное программирование.
Лаконичность и изящество. Язык спроектирован так, чтобы реализовать изящные, удобные для разработчика концепты, поэтому на нем приятно писать. Это часто отмечают люди, которые перешли на Ruby с других языков: им нравятся практики и концепции, принятые в нем. Решать одну и ту же задачу можно по-разному, и это делает язык гибким. Большой упор делается на изящество решения, в результате код получается чистым и красивым.
Многофункциональность. Ruby можно использовать во множестве сфер, хоть чаще всего его и применяют в веб-разработке. Этот язык также можно встретить в десктопных программах и в приложениях для macOS, а также в других направлениях. Так что в теории на Ruby можно писать почти все что угодно — хотя есть и ограничения, о которых мы расскажем ниже.
Стабильная ниша. Веб-разработка на Ruby востребована, количество вакансий стабильное, а разработчики на этом языке ценятся. Процент сайтов, написанных на Ruby on Rails, увеличивается, хоть и медленно, так что в ближайшее время язык точно останется актуален. Еще Ruby позволяет быстро создать и запустить продукт, поэтому его активно используют в стартапах и технологичных проектах, которые должны скорее выйти на рынок. А это инновации и шанс создать что-то принципиально новое, что «выстрелит» и принесет много пользы.
Востребованность. Может показаться, что вакансий на Ruby меньше, чем на других языках. Но вообще-то разработчиков на этом языке, наоборот, не хватает. Некоторые компании даже идут на такой шаг: нанимают специалистов, пишущих на других языках, и переучивают. Поэтому хороший «рубист» очень ценится, и это отражается на зарплате. Уровень зарплаты разработчиков на Ruby в среднем выше, чем для других популярных языков веб-разработки.
Еще одно следствие такой нехватки хороших специалистов — разработчику на Ruby легко найти работу, а конкуренция при трудоустройстве, скорее всего, будет ниже. Легче всего искать работу программистам, у которых уже есть опыт, но и новички могут устроиться на хорошую вакансию — некоторые компании предпочитают «растить» специалистов с нуля у себя в штате.
Активное сообщество. Сообщество «рубистов» — активное, открытое и дружелюбное. В нем хватает разработчиков с опытом, которые знают, как правильно, и могут подсказать другим. Много внимания уделяется качеству кода и хорошим практикам: в этой сфере принято сразу писать код грамотно, чтобы его было легко и приятно читать. Кроме того, представители сообщества охотно делятся знаниями, а опытные разработчики готовы помочь новичкам и сориентировать их.
Недостатки Ruby
Сложность освоения. Ruby — язык, который довольно сложно учить с нуля, если до того человек никогда не занимался программированием. Новичку желательно сначала освоить базовые концепции программирования и только потом переходить к изучению этого языка. Это можно сделать самостоятельно, с помощью учебников и статей, или на курсах. Действующие разработчики отмечают, что хороший ментор — ключевой фактор в том, насколько качественно начинающий сможет изучить Ruby.
Производительность. Первые версии Ruby критиковали из-за низкой производительности: язык работал в несколько раз медленнее аналогов. Со временем этот недостаток сгладился, но Ruby, как интерпретируемый язык, все равно работает чуть медленнее компилируемых. Поэтому в сферах, где критична скорость, его не используют.
Большие затраты ресурсов. Интерпретатор языка «тяжелый», а язык сложный и потому требует много ресурсов системы на обработку. Так что программы на Ruby не получится писать под маломощные устройства. Это причина, по которой язык практически не используется в мобильной разработке и других подобных сферах.
Отсутствие обратной совместимости. Еще со времен версии 1.8 в Ruby не поддерживается обратная совместимость. Это сделано намеренно, чтобы оставить языку возможность развиваться без оглядки на старые версии. Но отсюда следует, что разные версии Ruby не будут гарантированно совместимы друг с другом, даже если различия между ними очень малы. Это может принести проблемы при переводе проекта на более новую версию языка или при использовании каких-либо библиотек, написанных для другой версии.
Еще одна проблема с совместимостью — многие технологии, библиотеки и фреймворки, написанные для Ruby, поддерживают не все платформы. Поэтому программу на Ruby не всегда можно перенести на другую систему, даже несмотря на кроссплатформенность самого языка.
Неполная многопоточность. Хоть Ruby и многопоточен, в нем есть механизм глобальной блокировки интерпретатора. Это технология для синхронизации потоков, которая не дает одному процессу выполнять больше одного потока кода. Она внедрена для потокобезопасности, но частично ограничивает возможности многопоточности языка — правда, проявляется это преимущественно в нагруженных проектах, которые выполняются на серверах и мощных устройствах.
Fullstack-разработчик на Python
Fullstack-разработчики могут в одиночку сделать IT-проект от архитектуры до интерфейса. Их навыки востребованы у работодателей, особенно в стартапах. Научитесь программировать на Python и JavaScript и создавайте сервисы с нуля.
О Ruby
Удивляетесь, почему Ruby так популярен? Его поклонники называют его красивым, искусным языком. И в то же время они говорят, что он удобный и практичный. Что же перевешивает?
Идеалы создателя Ruby
Ruby – это тщательно сбалансированный язык. Его создатель Юкихиро Мацумото (также известный как “Matz”), объединил части его любимых языков (Perl, Smalltalk, Eiffel, Ada и Lisp) чтобы сформировать новый язык, в котором парадигма функционального программирования сбалансирована принципами императивного программирования.
Он часто повторял, что «пытается сделать Ruby естественным, но не простым» языком, который отражает жизнь.
Основываясь на этом, он добавляет:
Ruby прост на вид, но очень сложен внутри, подобно человеческому телу 1 .
Рост популярности Ruby
Со времени выпуска публичной версии в 1995 году, Ruby привлек внимание программистов со всего мира. В 2006 году Ruby завоевал массовое признание. В крупнейших городах по всему миру активно действуют группы пользователей Ruby, а конференции, посвященные Ruby, заполнены до предела.
Ruby-Talk, основная рассылка для обсуждения языка Ruby, содержала в среднем 200 сообщений ежедневно в 2006 году. В последние годы это количество уменьшилось, так как сообщество стало использовать несколько тематических рассылок вместо одной общей.
Индекс TIOBE, который измеряет рост популярности языков программирования, помещает Ruby в десятку общепризнанных языков программирования. Во многом, рост популярности языка приписывается популярности программного обеспечения, написанного на Ruby, в особенности – Ruby on Rails, фреймворку для разработки веб-приложений.
Ruby также абсолютно открыт. Открыт для бесплатного использования, изменений, копирования и распространения.
Всё в Ruby – объекты.
Вначале Matz рассматривал другие языки в поисках идеального синтаксиса. Вспоминая свои изыскания, он говорил: «Мне нужен был скриптовый язык, который был бы более мощным, чем Perl, и более объектно-ориентированным, чем Python 2 .»
В Ruby всё – объект. Для каждой частицы информации или кода могут быть определены собственные свойства и действия. В объектно-ориентированном программировании свойства называются переменными объекта, а действия – методами. Чистейший объектно-ориентированный подход Ruby может быть продемонстрирован парой строк кода, в которых производится действие над числом.
5.times print "Мы любим Ruby! Ruby – это замечательно!" >
Во многих языках числа и другие примитивные типы данных не являются объектами. Ruby под влиянием языка Smalltalk позволяет задать методы и переменные объекта всем типам данных. Это упрощает использование Ruby, так как правила применимые к объектам – применимы ко всему Ruby.
Гибкость Ruby
Ruby очень гибкий язык, так как он позволяет его пользователям свободно менять его части. Основные части Ruby могут быть удалены или переопределены по желанию. А существующие части можно изменять. Ruby старается ни в чём не ограничивать пользователя.
Например, сложение выполняется операцией плюс ( + ). Но, если вы хотите использовать для этого более читаемое слово plus – вы можете добавить такой метод прямо в Numeric , внутренний класс языка Ruby.
class Numeric def plus(x) self.+(x) end end y = 5.plus 6 # y теперь равно 11
Операторы в Ruby – синтаксический сахар для методов. Вы также можете переопределить их.
Блоки — по-настоящему выразительная конструкция
Блоки в Ruby также являются отличным источником гибкости. Программист может добавить замыкание к любому методу, описывая, как этот метод должен действовать. Замыкание — это блок, являющийся одной из наиболее популярных конструкций для пришедших в мир Ruby из мира императивных языков программирования, таких как PHP или Visual Basic.
Создание блоков было вдохновлено функциональными языками программирования. Мац (Matz) говорил, «замыканиями в Ruby я хотел отдать дань уважения культуре языка Lisp 3 .»
search_engines = %w[Google Yahoo MSN].map do |engine| "http://www." + engine.downcase + ".com" end
В коде выше блок описан внутри конструкции do . end . Метод map применяет блок кода к представленному списку слов. Многие другие методы в Ruby оставляют путь, открытый для программиста, чтобы тот написал собственный блок кода, детально говорящий методу, что тот должен сделать.
Ruby и примеси
В отличие от многих объектно-ориентированных языков, Ruby намеренно предоставляет лишь одиночное наследование. Но Ruby также предоставляет концепцию модулей (называемых «категориями» в Objective-C). Модули – это коллекции методов.
Классы могут свободно вмешивать модуль и получать все его методы. Например, любой класс, который реализует метод each , может подмешать модуль Enumerable , который добавит кучу методов использующих each для создания циклов.
class MyArray include Enumerable end
В основном, рубисты находят это более прозрачным, нежели множественное наследование, которое может быть довольно сложным и иметь какие-либо ограничения.
Визуальное представление Ruby
Так как в Ruby зачастую пунктуация встречается довольно редко и обычно в качестве ключевых слов используется английский язык, некоторые знаки препинания используются для украшения Ruby. Ruby не нуждается в объявлении переменных. В нем используются простые соглашения по именованию, для того чтобы разделить области видимости переменных.
- var — может быть локальной переменной.
- @var — переменная объекта.
- $var — глобальная переменная.
Данная символика повышает читабельность, позволяя программисту легко идентифицировать роль каждой переменной. Это также позволяет не использовать утомительное self. для каждого объекта.
Помимо основ
Ruby полон другими особенностями и конструкциями, и вот некоторые из них:
- В Ruby есть конструкции для обработки исключений, как в Java или Python, которые позволяют проще работать с ошибками.
- В Ruby представлен настоящий сборщик мусора типа mark-and-sweep (пометь и отчисти) для всех Ruby-объектов. Не нужно вручную отслеживать количество ссылок в сторонних библиотеках. Как говорит Matz, «Это полезней для вашего здоровья.»
- Писать расширения на C в Ruby проще, чем в Perl или Python при помощи очень элегантного API для вызова Ruby из C. Он включает в себя вызовы для встраивания Ruby в программное обеспечение, чтобы использовать его как скриптовый язык. Также доступен интерфейс SWIG.
- Ruby может подгружать сторонние библиотеки динамически, если позволяет операционная система.
- В Ruby реализованы независимые от операционной системы потоки. Таким образом, на любых платформах, где вы запускаете Ruby, вы также можете использовать многопоточность, не зависимо от того, поддерживает ли данная система потоки или нет. Вы можете использовать возможности многопоточности даже в MS-DOS!
- Ruby отличается высокой переносимостью: он был разработан большей частью на GNU/Linux, но работает на многих типах UNIX, macOS, Windows, DOS, BeOS, OS/2, и так далее.
Другие реализации Ruby
Ruby как язык имеет несколько разных реализаций. Данный сайт посвящен реализации MRI (“Matz’s Ruby Interpreter” – Ruby интерпретатор Матца) или CRuby, но также существует несколько других. Они бывают очень полезны в различных ситуациях, предоставляют большую интеграцию с другими языками или окружениями, или имеют возможности, которых нет в MRI.
- JRuby — это Ruby, реализованный на JVM (Java Virtual Machine), использует оптимизированный JIT-компилятор, сборщик мусора, нативные потоки, инструментальную экосистему и огромное количество библиотек JVM.
- Rubinius это — «Ruby написанный на Ruby». Реализован на основе LLVM – изящной виртуальной машине, на который созданы и другие известные языки.
- mruby — это легковесная реализация Ruby, которая может быть подключена и встроена в приложение. Возглавляет разработку mruby создатель языка Ruby, Юкихиро Мацумото (Yukihiro Matsumoto), известного под псевдонимом Мац (Matz).
- IronRuby — это реализация «тесно интегрированная с .NET Framework».
- MagLev — это «быстрая, стабильная реализация Ruby с интегрированным долговременным хранением объектов и распределенным открытым кешем”.
- Cardinal — это «компилятор Ruby для виртуальной машины Parrot» (Perl 6).
Ссылки
1 Matz, сообщение в списке рассылок Ruby-Talk, 12 мая 2000 года.
2 Matz, в Интервью с Создателем Ruby, 29 ноября 2001 года.
3 Matz, в Блоки и Замыкания в Ruby, 22 декабря 2003 года.
10 причин для перехода на Ruby
Я познакомился с Ruby сравнительно недавно, благодаря чудесному фреймворку Ruby on Rails. Я не считаю себя экспертом в Ruby, но я прочитал PickAxe, написал несколько утилит на Ruby для личного пользования, а также разрабатываю на Rails в свободное время.
Ruby на данный момент, мой основной язык. Начинал же я с TurboPascal в школе, изучал C и C++ в университете, дисертацию писал на Java, а еще я изучал PHP с нуля, так как хотел научиться делать веб-сайты быстро и легко. Думаю, что написание кода для меня это некая форма развлечения, а уж потом все остальное. В начале у меня были размышления, какой язык изучать, Python или Ruby. Я выбрал второй, так как не хотел, чтоб неправильные отступы были причиной неполадок в моем коде.
Есть целая куча введений, руководств, статьей и эссе, написанных гуру, о том, как получить максимум пользы от Ruby. Данная статья ничем таким не является.
Это более скромный, неполный перечень причин, которые могут (или не могут) побудить вас использовать Ruby, ну или в крайнем случае поиграть с ним. Предостережение: если вы используете другой язык программирования для работы или в других целях — не жалуйтесь мне, если больше не захотите им пользоваться. Именно это и произошло со мной, но для меня это не столь важно. Ruby чудесный и элегантный язык и как многие подобные вещи, он может захватить ваш разум и поломать душу.
Короче, вы — предупреждены.
Зачем изучать Ruby?
1.Вы получаете все удобства (удовольствия) без уловок.
- Исключения. Верите или нет, исключения являются одной из важнейших вещей при разработке программ любого рода. Программисты на PHP4, не знают ничего о них и будут говорить вам, что можно просто печатать(ошибки) на экран или использовать их собственный «супер-пупер» класс для обслуживания ошибок. К счастью для всех нас, Ruby поставляется с try/catch (или еще лучше begin/rescue) блоками и набором предопределенных, расширяемых Исключений, для правильной обработки ошибок.
- Пространства имен: модули Ruby делают использование пространства имен легким, это должно понравиться энтузиастам C++ и Java.
- Встроенные регулярные веражения: Для всех знатоков Perl, вы можете заключить нечто в // и оно становится регулярным выражение, готовым для сравнения (для этого используем оператор =~).
- Перегрузка операторов: Ruby позволяет определять операторы, такие как +, -, >, и т.д. для любого вашего класса.
- Пакеты: называемые «gems»(камешки), они действительно оправдывают свое название, кроме того — они работают. Пакеты поддерживают зависимости, а еще могут быть как кросс-платформенные, так и платформо-зависимыми.
- Интерактивная консоль: может использоваться для тестирования кода интерактивно, подобно консоли Python
2.Вы полюбите мелочи.
- Вы можите использовать оба оператора, if и unless в условных выражениях. Кончно же вы можите использовать if с противоположным значением выражения, но использования unless обычно приводит к меньшему числу ошибок. Кроме того, вы можите использовать оба оператора, как условные модификаторы, ставя их после выражения, а не до: order.new unless order.exists
- Можно использовать знаки вопроса и восклицания в конце имени метода. Данное соглашение не навязывается, но знак «?» используется, когда метод возвращает true или false, в то время, как знак «!» используется для методов, делающих нечто необратимое, на подобии удаления записи из базы данных, отщепления последнего символа из строки и т.п.
- Можно использовать псевдонимы (alias) для уже созданных методов. Таким образом можно получить методы exist и exists, без накладных расходов и без повторений.
- Вы можете использовать директивы attr_reader, attr_writer или attr_accessor для автоматического создания getter/setteer для членов класса.
- И еще некоторое соглашение об именах: константы, классы и модули пишут с заглавной буквы, методы и члены класса должны начинатся с маленькой буквы, глобальные переменные именуют начиная с «$», имена переменных объекта начинаются с «@», а имена переменных класса с «@@», ну и т.д.
- При вызове методов, можно не писать скобки. Можно писать write File.open(«/home/h3rald/test.txt») или просто File.open «/home/h3rald/test.txt» , что особенно удобно с методами, без аргументов.
3.Больше не нужно использовать точку с запятой.
Хотите написать следаующую инструкцию? Просто переходите на новую строку. Нажмите «Enter» и готово. В Ruby как и в Python, новая линия разделяет инструкции, так что вам не придется все время ставить точку с запятой. К сожалению это означает, что подобно фанатам C++, мы не сможем написать программу в одну строчку. Но это не так уж и плохо, правда?
4.Все является объектом, как это и должно быть.
Когда я изучал Java, мне говорили, что все является объектом.
— «Че, 14 и 374346.678 — объекты?»
— «Нет, глупыш, это числа!»
В Ruby числа, символы, булевы значения и все остальное является объектом. Серьезно. Это означает, что можно писать вещи подобно этим:
«YOU SHOULDN’T ALWAYS USE CAPITALS».lowcase # вернет «you shouldn’t always use capitals» , вместо нечто такого:
# PHP Code
strtolower(«YOU SHOULDN’T ALWAYS USE CAPITALS»)
Этим вы экономите время, экономите скобки и так более логично.
5.Все имеет значение.
Или «больше не надо использовать return для возврата значений». Если побыстрячку, то так: все инструкции в Ruby возвращают значение, даже присваивание переменных, так что вам действительно не нужно использовать ключевое слово «return» в конце методов. Значение последнего присваивания всегда будет возвращено.
6.Можете изменять окружение любым доступным способом.
- Вы изменяете исходный код класса, если вы имеете к нему доступ. Но обычно это — плохая идея, не делайте так.
- Вы наследуете свой класс от того и добавляете к нему новый метод. Обычно это — хорошая идея. Но из-за одного метода это может оказаться несколько монрообразным. Кроме того, придется немного подправить другой свой код соответственно.
- Можно просто создать метод вне класса. Это сработает, но будет не очень изящно, а еще — идет в разрез с ООП.
7.Вы не сможите получать единорогов из птиц и конец, но вы получите ослов, если захотите.
Я четко помню, как моя учительница по C++, использовала животных, для иллюстрации основных концепций объектно-ориентированного программирования — классов и наследования. Было нечто загадачно, когда объясняла нам множественное наследование, образовывая «пегаса» из «птиц» и «лошадей». Сумасшедшие вещи, Ruby не позволяет множественного наследования. Это выглядит как тренд и в конце-концов это дело вкуса. Я не в восторге от множественного наследования, так как это может привести к непредсказуемым вещам. Несмотря на это есть возможность создания нечто подобного, используя модули Ruby, так что переменные и методы одного модуля, будут добавлены в определенный класс, если модуль включен в него.
8. XML — реально ненужен.
XML — красивый, общеупотребительный, язык разметки, который может быть обработан всеми языками программирования и используется повсеместно. К сожалению, он слишком громоздкий для написания, трудный для обработки(парсинга) и, давайте будем честны — трудный для чтения в большинстве случаев. А вот взгляните на следующий фрагмент:
regexp: !ruby/regexp /a-zA-Z/
number: 4.
string: a string
Безусловно это легче и проще XML, правда? Добро похаловать в YAML, любимый (но не единственный) язык разметки Ruby, с помошью которого любой объект может быть представлен в простом, лаконичном, но полном виде.
Ruby способен работать с XML, но простота YAML подкупила многих разработчиков, которые теперь используют его вместо XML, например для файлов конфигурации (так поступили в Rails). Фрагмент, представленный выше, был получен исполнением следующего фрагмента кода:
«a string», «number» => 4.7, «regexp» => /a-zA-Z/>.to_yaml
Метод to_yaml, определен для класса Object, который является родителем для всех остальных объектов, а потому доступен для всех объектов Ruby. Это позволяет преобразовывать объекты в YAML и обратно, абсолютно прозрачно для разработчика. Круто, да?
9.Лямбда — нечто больше, чем просто греческая буковка.
Ruby позаимствовал некую магию из Lisp и Perl в объекты и блоки Proc. Proc — это «блок кода, связанный с набором локальных переменных. Однажды связанные, они могут вызываться в различных контекстах и все еще обращаться к тем переменным.». Поглядим на следующе:
def gen_times(factor)
return Proc.new <|n| n*factor >
end
times3 = gen_times(3)
times5 = gen_times(5)
times3.call(12) #=> 36
times5.call(5) #=> 25
times3.call(times5.call(4)) #=> 60
Можно было использовать ключевое слово lambda вместо Proc.new, на результат это не влияет. Это могло показаться знакомым людям, знающим Perl и Python (или Lisp). Такое можно сдалать даже на PHP, но не много людей пользуются этой возможностью.
Кроме того в Ruby широко используются блоки типа «несозданные Proc», например, для итерации по содержимому объекта и исполнения некоторого кода, подобно методу each, доступного для класса Array:
[1, 2, 4, 6, 8].each <|c| puts c*2>#=> возвратит каждый элемент, умноженный на 2
Если код не умещается на одной строчке, рекомендуется использовать конструкцию do… end, вместо использования скобок. Фаны Ruby не любят скобок.
10. Вы можете использовать Rails.
Последнее, но не по важности… Вы всегда можете использовать Rails для разработки веб-приложений. Разработка будет не настолько простой, как с PHP, но Rails были написаны на Ruby, поскольку он имет возможности, отсутствующие в других языках.
Заключение
Время вышло. Возможно вы уже задумываетесь о взгляде на Ruby, возможно вы уже пробовали его, а возможно вы просто проигнорировали его. Как бы там нибыло, в следующий раз, когда глядя на свой код, он будет казаться страшным, а размер его устрашающим — не обвиняйте меня.
Уважаемые Читатели — не забывайте, что хабраюзер, просто перевел (паршиво, да) текст. Идеологических претензий ему высказывать нет нужды.
