Windows 8

Язык программирования Ruby (Руби). Язык программирования RUBY

Язык программирования Ruby (Руби). Язык программирования RUBY

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

История языка Ruby

Ruby как язык программирования существует уже очень давно. Работа над первой редакцией этого невероятно популярного сегодня языка началась в далеком 1993 году, а первая официальная версия датируется 1995 годом. Создатель языка, Юкихиро Мацумото, был энтузиастом программирования еще со времен студенчества, однако идея создания собственного инструмента появилась у него гораздо позже. Так что же такого примечательного в этом языке программирования, что сегодня он занимает одну из лидирующих позиций на мировой арене разработки программного обеспечения?

Язык программирования Ruby - это высокого уровня, с и независимой от исполняющей среды реализацией многопоточности. В нем есть свой сборщик мусора, а по особенностям синтаксиса он наиболее приближен к таким языкам как Perl. С развитием экосистемы эта платформа много позаимствовала также у Smalltalk, Python, Lisp и других языков программирования. Очень важным для существования и непрерывного развития является также то, что язык "Руби" и его реализация являются полностью свободной. Это означает, что любой желающий может предложить свои изменения, и если они будут приняты сообществом, то войдут в следующую версию языка.

Философия Ruby

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

Поэтому эту платформу очень часто выбирает как входную для обучения программированию. Главным принципом, на котором базируется этот язык, является так называемый принцип “наименьшей неожиданности” - это означает, что программа должна вести себя так, как того от нее ожидает автор (программист). Другой важной частью идеологии языка, которую привнес создатель, является большая его вариативность. Одного и того же результата можно добиться различными путями и функциями. Благодаря этому каждый программист может решать задачу так, как считает наиболее корректно и удобно. Это во многом повлияло на популярность языка среди профессионалов в сфере информационных технологий.

Основные характеристики языка

Что такое "Руби" как язык программирования? Это прежде всего объектно-ориентированный язык. В нем нет примитивных типов - все структуры и единицы данных являются объектами (в отличие от того же языка Java, его есть примитивные структуры данных). Каждая функция в "Руби" является методом. Многие свойства и возможности привнесены создателями из других языков программирования, поэтому можно смело сказать, что Ruby (язык) вобрал в себя лучшее от множества других языков и технологий.

Так, к примеру, в экосистеме "Руби" есть свой собственный сборщик мусора, идея которого была перенята из Smalltalk и Java, и который может работать со всеми объектами в системе. Этот механизм позволяет незаметно для пользователя приложения и разработчика выполнять очистку памяти от объектов, которые уже не будут востребованы. Сборщик мусора позволяет разработчику в большинстве случаем не отвлекаться на управление памятью приложения, а сосредоточиться на функциональности и удобстве пользования.

Парадигмы языка

Отвечая на вопрос о том, что такое "Руби" как мультипарадигменный язык, можно неожиданно для себя оказаться в пылу спора. Ведь этот язык позволяет использовать любую из парадигм программирования одинаково успешно: процедурный стиль программирования, объектно-ориентированный или Разработчик волен выбрать для себя ту парадигму, которая ему ближе, и его набор инструментов от этого не станет ограниченнее или слабее. Язык программирования "Руби" только поощряет этот выбор.

Причины популярности

Во многом этот язык стал популярен благодаря простоте разработке различных дополнений к нему. Поэтому количество фреймворков и библиотек постоянно растет, и задачи, которые они решают самостоятельно, позволяют разработчикам в кратчайшие сроки довести продукт до состояния готовности. Очень часто "Руби"-программирование ассоциируется с разработкой веб-приложений и поддержкой функционирования различных сайтов и интернет-платформ. Эту нишу язык занял благодаря своей простоте и скорости разработки. Ведь альтернативные платформы (например, Java), требуют гораздо большего багажа знаний и опыта для решения тех же задач.

Популярные фреймворки

Если говорить о популярных фреймворках, которые существуют на рынке сегодня, то среди них стоит выделить Rails. Много людей, отвечая на вопрос о том, что такое "Руби", интуитивно подразумевают RubyOnRails. Этот набор программных компонентов стал промышленным стандартом среди разработчиков. Он постоянно поддерживается, развивается и дополняется сообществом программистов, оставаясь при этом бесплатным. Этот фреймворк описывает компоненты веб-приложения в рамках шаблона MVC (Model-View-Controller), а также предоставляет готовую интеграцию с и интерфейс для доступа к базе данных. Эти 3 компонента, по сути, позволяют в считанные часы написать и запустить в интернет простой блог или частную веб-страничку.

На языке программирования Ruby можно создавать даже нативные мобильные приложения, благодаря библиотеке RubyMotion. Она позволяет исполнять код Ruby на платформах iOS, OS X и Android. Она создана частной группой разработчиков, поэтому за ее использование необходимо платить, но она лишний раз подтверждает богатые возможности языка.

Важность написания тестов

Другой важной составляющей экосистемы языка Ruby, и его веб-ориентированной части, являются фреймоврки и библиотеки для написания тестов. RubyOnRails проповедует философию BDD (behavior-driven development), что означается, что сначала программист создает последовательность тестов, описывающих ожидаемое поведение программы, а потом уже создает код, который должен успешно пройти эти тесты. Негласным стандартом в этой сфере является RSpec - это фреймворк позволяет писать тест-кейсы на понятном даже неопытным в разработке пользователям.

Ruby Gems

Благодаря детально описанному стандарту, которому должны соответствовать все пакеты и библиотеки на Ruby, разработка дополнений не составляет особого труда. Поэтому среди так называемых gems (от англ. - драгоценный камень) можно найти модули для решения практически любых задач - от интеграции с социальными сетями и сторонними сервисами до готовых платформ для электронной коммерции. Все, что нужно для использования сторонней библиотеки - это описать зависимость своего проекта от какой-то библиотеки, находящейся в удаленном или локальном репозитории, и при следующей сборке эта библиотека автоматически загрузится в приложение. Это также упрощает миграцию проекта между разработчиками, так как нет необходимости вручную делиться зависимостями для сборки проекта.

Поэтому если вас снова спросят о том, что такое "Руби", то вы с уверенностью сможете заявить, что это мощный и универсальный язык программирования, который наверняка подойдет как для опытных разработчиков, так и для новичков, которые хотят освоить нелегкое ремесло программирования. В нем найдутся средства для создания любых приложений - от настольных программ до мобильных сервисов и веб-платформ.

Удивляетесь, почему Ruby так популярен? Его поклонники называют его красивым, искусным языком. И в то же время они говорят, что он удобный и практичный. Что же перевешивает?

Идеалы создателя Ruby

Ruby – это тщательно сбалансированный язык. Его создатель Юкихиро Мацумото (так же известный как “Matz”), объединил части его любимых языков (Perl, Smalltalk, Eiffel, Ada и Lisp) чтобы сформировать новый язык, в котором парадигма функционального программирования сбалансирована принципами императивного программирования.

Он часто повторял, что он “пытается сделать Ruby естественным, но не простым” языком, который отражает жизнь.

Основываясь на этом, он добавляет:

Ruby прост на вид, но очень сложен внутри, подобно человеческому телу .

Рост популярности Ruby

Со времени выпуска публичной версии в 1995 году, Ruby привлек внимание программистов со всего мира. В 2006 году Ruby завоевал массовое признание. В крупнейших городах по всему миру активно действуют группы пользователей Ruby, а конференции, посвященные Ruby, заполнены до предела.

В 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 говорил, “замыканиями в руби я хотел отдать дань уважения культуре языка Lisp .”

search_engines = %w . 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 сравнительно недавно, благодаря чудесному фреймворку Ruby on Rails . Я не считаю себя экспертом в Ruby, но я прочитал PickAxe, написал несколько утилит на Ruby для личного пользования, а также разрабатываю на Rails в свободное время.

Ruby на данный момент, мой основной язык. Начинал же я с TurboPascal в школе, изучал C и C++ в университете, дисертацию писал на Java , а еще я изучал PHP с нуля, так как хотел научиться делать веб-сайты быстро и легко. Думаю, что написание кода для меня это некая форма развлечения, а уж потом все остальное. В начале у меня были размышления, какой язык изучать, Python или Ruby. Я выбрал второй, так как не хотел, чтоб неправильные отступы были причиной неполадок в моем коде.

Есть целая куча введений, руководств, статьей и эссе, написанных гуру, о том, как получить максимум пользы от Ruby. Данная статья ничем таким не является.

Это более скромный, неполный перечень причин, которые могут (или не могут) побудить вас использовать Ruby, ну или в крайнем случае поиграть с ним. Предостережение: если вы используете другой язык программирования для работы или в других целях - не жалуйтесь мне, если больше не захотите им пользоваться. Именно это и произошло со мной, но для меня это не столь важно. Ruby чудесный и элегантный язык и как многие подобные вещи, он может захватить ваш разум и поломать душу.

Короче, вы - предупреждены.

Зачем изучать Ruby?

1.Вы получаете все удобства (удовольствия) без уловок.

Ruby позаимствовал все лучшее из других языков программирования, от smalltalk до Java , от Perl до Python . Вот базовые возможности, которые вы в принципе могли видеть и в других языках:
  • Исключения. Верите или нет, исключения являются одной из важнейших вещей при разработке программ любого рода. Программисты на PHP4 , не знают ничего о них и будут говорить вам, что можно просто печатать(ошибки) на экран или использовать их собственный «супер-пупер» класс для обслуживания ошибок. К счастью для всех нас, Ruby поставляется с try/catch (или еще лучше begin/rescue ) блоками и набором предопределенных, расширяемых Исключений, для правильной обработки ошибок.
  • Пространства имен: модули Ruby делают использование пространства имен легким, это должно понравиться энтузиастам C++ и Java .
  • Встроенные регулярные веражения: Для всех знатоков Perl , вы можете заключить нечто в // и оно становится регулярным выражение, готовым для сравнения (для этого используем оператор =~ ).
  • Перегрузка операторов: Ruby позволяет определять операторы, такие как +, -, > , и т.д. для любого вашего класса.
  • Пакеты: называемые «gems »(камешки), они действительно оправдывают свое название, кроме того - они работают. Пакеты поддерживают зависимости, а еще могут быть как кросс-платформенные, так и платформо-зависимыми.
  • Интерактивная консоль: может использоваться для тестирования кода интерактивно, подобно консоли Python

2.Вы полюбите мелочи.

Ruby изящен. Почему? Потому-что он не старается делать код лаконичным настолько, что б это мешало читабельности и пониманию. Есть несколько советов, которые могут вам помочь:
  • Вы можите использовать оба оператора, 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.Можете изменять окружение любым доступным способом.

Впервые увидев это, я был впечатлен. Представьте типичную ситуацию: вы стали использовать системный класс или класс, написаный кем-то другим и поняли, что вам надо некий дополнительный метод в нем. Есть несколько путей для решения этой проблемы в типичных языках программирования:
  • Вы изменяете исходный код класса, если вы имеете к нему доступ. Но обычно это - плохая идея, не делайте так.
  • Вы наследуете свой класс от того и добавляете к нему новый метод. Обычно это - хорошая идея. Но из-за одного метода это может оказаться несколько монрообразным. Кроме того, придется немного подправить другой свой код соответственно.
  • Можно просто создать метод вне класса. Это сработает, но будет не очень изящно, а еще - идет в разрез с ООП .
В Ruby вы можете добавить метод в оригинальный класс, без правки исходных кодов. Это можно сделать даже для системного класса.
Мы хотим добавить метод, для пересчета значений из метров в футы? Просто расширим класс Numeric , как показано:
class Numeric
def feet
self*3.2808399
end
end

С этого момента, все наши числа, будут иметь новый метод, который может использоваться, как любой другой:
5.feet # возвратит 16.4041995
Классы в Ruby никогда не закрываются и могут быть расширены в любой момент, из любого места. Естественно использовать такую возможность надо с осторожностью!

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 ). Фрагмент, представленный выше, был получен исполнением следующего фрагмента кода:
{"string" => "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 :
.each {|c| puts c*2} #=> возвратит каждый элемент, умноженный на 2
Если код не умещается на одной строчке, рекомендуется использовать конструкцию do… end , вместо использования скобок. Фаны Ruby не любят скобок.

10. Вы можете использовать Rails.

Последнее, но не по важности… Вы всегда можете использовать Rails для разработки веб-приложений. Разработка будет не настолько простой, как с PHP , но Rails были написаны на Ruby , поскольку он имет возможности, отсутствующие в других языках.

Заключение

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

Уважаемые Читатели - не забывайте, что хабраюзер, просто перевел (паршиво, да) текст. Идеологических претензий ему высказывать нет нужды.

В любом деле стоит, аргументировать свои слова. Я попытаюсь показать нам всю прелесть языка, почему мы его так рубим и лелеем.


Ruby высокоуровневый язык программирования (ЯП) . Ruby позволяет сместить акцент при написании кода больше в сторону «что делать», и уйти от объяснения тупому компьютеру «как это делать». Как говорит Matz человек должен управлять, а машина подчиняться .
Объяснением того, как выполнить ваше желание занимается переводчик - интерпретатор языка Ruby. Японцы очень гордый народ, народ потомков самураев, в котором все еще тлеют феодальные замашки.

Ruby интерпретируемый язык программирования . Я уже говорил, что если вы прикажите этой тупой железяке 5.times{puts «hello!»}, то она не поймет этого без интерпретатора. Языки программирования требующие интерпретатора, который читает скрипты, написанные на них называются интерпретируемыми языками. Примерами таких языков являются (php, python, perl, bash и собственно наш великий!)
Языки, коды которых превращаются в программу называются компилируемыми. Примерами таких языков служит (C/C++ , C#, GO)

Разница состоит в том, что компилируемые программы компилируются один раз для множественного использования, а программы написанные на интерпретируемых языках интерпретируются каждый раз при своем запуске, из-за чего являются более медленными, но всегда с открытым исходным кодом:D

Скорость важна, но это не самое главное. Ruby гораздо медленнее Си и еще медленнее Asembler’а, но это не мешает Ruby приобретать все новых и новых поклонников, которые сжигают образы своих старых богов, ломают бубны и обращаются в новую светлую религию Ruby-программизма.
Ruby позволяет писать приложения так быстро, что вы обанкротитесь нанимая спец отряд программистов на Си, которые напишут программу выполняющую те же действия. Кроме того, если вам нужно посчитать до завтра какой-нибудь финансовый расчет, то имеет ли для вас разницу то, будет он считаться 10 секунд или 0.1 секунду?
Даже если для вас будет действительно важна производительность, то у Ruby имеется огромное количество драйверов к библиотекам написанным на Cи, к различным базам данных и прочему программному обеспечению, таким образом получаете скорость Cи, при этом пишите код на Ruby.
Ruby также позволяет писать расширения на Си для критичных участков кода, то есть таких, где производительность крайне важна (все это потому, что Ruby сам написан на Си, не полностью, но довольно большой своею частью). Вам стоит привыкнуть к тому, что нет универсального языка программирования, зная который, вам больше ничего не нужно будет знать.

Ruby многолик но в каждом лике он прекрасен. Есть стандартная реализация Ruby, она носит имя Matz Ruby Interpreter (MRI). Начиная с ветки 1.9 и по текущую используется другой интерпретатор YARV.
Также существует Ruby для виртуальной Java - машины (JRuby), который позволяет использовать все множество библиотек написанных на Java и других языках выполняемых на JVM, например Scala или Clojure.
Существует MacRuby - версия для Mac OS X.
Существует Ruby Enterprise Edition (Ruby EE или REE) - это несколько переделанный MRI, который позволяет программам на Ruby потреблять меньше оперативной памяти.
Существуют также различные авторские наработки, которые позволяют заменять оригинальные компоненты Ruby на более функционально богатые и быстрые, однако в силу того, что такие наработки, как правило, плохо испытаны в боевых условиях и не имеют широкого распространения, я бы не рекомендовал вам использовать их. Используйте официальные версии Ruby.
Помимо описанных реализаций Ruby существует еще большое количество, например Rubinius и Ruby MagLev и так далее. В чем их особенность я не знаю, но обязательно разберусь и опубликую в одной из следующих версий учебника.

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

Ruby лаконичен . Программы написанные на Ruby очень кратки и понятны. Виной тому и его высокоуровневость и динамичность и слабая типизированность.
Я не знаю таких языков, которые выигривали бы у Ruby по наименьшему числу строк кода для реализации определенного функционала. Подозревая что таких сейчас нет) на момент 2015 года, либо они столь запутаны и страшны, что боятся показаться.

Ruby - слаботипизированный язык программирования . В не которых других языках программирования вам необходимо было бы объявлять тип хранимых в переменной данных, при этом переменная не может хранить данных другого типа. Адепты программирования во главе с Якихиро Мацумото потрудились над тем, чтобы вы могли использовать переменные для хранения абсолютно любых значений без предварительного их объявления.

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

Ruby - простой язык программирования. Ruby простой для понимания язык программирования, простой для разработки, но не для изучения:). Разумеется, приложение выводящее на экран классическую фразу «hello world» вы можете написать уже в первую секунду знакомства, кстати вот она: puts «helo word!», однако чтобы добиться истинного мастерства, вам следует потратить годы!
Нельзя сравнивать Ruby с PHP, это как сравнивать элегантного лебеда с каким-то гусем, однако я пойду на такую жертву и сделаю это. Сам по себе язык Ruby не на много сложнее PHP в изучении, однако на много удобнее его и логичней. Сложнее сама экосистема Ruby, так как Ruby программисты привыкли все автоматизировать, и я наверное скажу не просто правду, но и истину, когда сообщу вам, что Ruby’исты продвинулись в этом куда дальше, чем какое-либо другое сообщество программистов. Эта автоматизация вынуждает разработчика изучать множество сторонних технологий, зато упрощает и сокращает затраты времени на побочные процессы разработки (тестирование, разворачивание приложения на сервере, и так далее). В PHP всего этого нет, либо все это совсем примитивно! Самое интересное, что порядка 25% PHP программистов не пользуются фреймворками и тонами плодят говнокод, попробуйте найти Ruby программиста, который не знаком с фреймворком Rails!
Главное помните большинство Ruby программистов являются экспертами, профессионалами в разработке. И вам всегда нужно к этому стремиться. Только так и не иначе, только радикальный подход к этому делу. Нельзя быть быть плохим программистом на Ruby, либо ты профессионал, либо не рубист!

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

Ruby - это все-таки мейнстрим технология! Многие говорят, что Ruby это мало популярный язык программирования, однако он в ходит в 10 самых популярных ЯП, имеет огромное сообщество и огромное количество библиотек - rubygems.
Кстати, наличие у Ruby gem’ов - еще одно его преимущество над PHP! В PHP есть унылый Pear, который пишется обезъянами которые строят из себя космонавтов, об этом можно судить по тому, что в кодах Pear найдено много помета похожего на человеческий, но мы то знаем, что люди на это не способны.
И вообще я только что согрешил сравнивая RubyGems и Pear. На Ruby реализовано огромное количество крупных успешных проектов, что доказывает удачный выбор Ruby в качестве составляющего звена про построении бизнеса основанного на веб проекте. Ruby, как и Python также входящий в 10 самых популярных языков программирования, лишен одного очень большого изъяна мейнстримных технологий - Ruby не перенасыщен программистами, программисты на Ruby все еще дефицит, а значит ваша будущая зарплата в роли Ruby программиста будет гораздо больше по сравнения с теми, кто программирует на PHP или Java. Даже если спрос на Ruby программистов будет полностью удовлетворен, Ruby программист будет зарабатывать больше потому, что есть два очень важных фактора: более высокое качество кода и более высокая производительность труда.

Rubyist’ы - самая тестолюбивая тусовка. Я не знаю, так ли это, но то, что программисты на Ruby продвинулись явно очень далеко в тестировании собственного кода - это факт! Каждый более-менее опытный Ruby программист пишет спецификации и/или тесты для своего кода. Это делает код на Ruby более надежным и качественным.

Ruby сообщество более квалифицировано , чем многие другие сообщества. В первую очередь речь идет о PHP - сообществе, которое весьма плодовито в выращивании уродов.
Каждый школьник разобравшийся с основами php за неделю и написавший свой кривой сайт уже кричит на всех углах, что он php программист. Нет я не испытываю ненависть к детям, то что вы изучаете и создаете это прекрасно. Но есть один нюанс, что за каждое слово в свой адрес нужно чем то ответить. Вообщем не будьте высокомерны, но совершенствуйтесь, занимайтесь тем, что вам нравится. А это и есть главное в нашей жизни!

Не каждый, кто программирует на Ruby достоен звания программиста, например я не достоин, потому, что имею крайне малый опыт и совсем недостаточный набор знаний, однако, если брать среднюю температуру по больнице, то сообщество Ruby значительно превосходит сообщество PHP. Не буду говорить о других языках программирования, так как Python, Java, и Perl являются основными экспортерами новых членов в сообщество Ruby, то есть многии программисты на Ruby добились своего мастерства работая с другими языками программирования и набрав достаточный багаж знания и опыта обратились в религию Ruby. Кроме того, многие люди, которые программируют на Ruby программируют и на Python и на Perl и на Java, Си, Objective-C, javascript, и, вы даже не поверите, на PHP.

Это первая из статей, в которых я расскажу об особенностях Ruby и Ruby on Rails и поделюсь советами о том, с чего начать в изучении Ruby, где находить ответы на вопросы, как получить нужный опыт и чем вы сможете выгодно отличаться от других кандидатов. Буду рад, если мои советы помогут кому-то определиться со специализацией и выбрать Ruby для изучения и работы.

Основные особенности и отличия Ruby

Часто слышу вопрос: стоит ли учить Ruby? Как правило, вопрос основан на сомнениях: насколько легко найти работу с данной специализацией, будут ли интересные проекты и так далее и тому подобное. Ruby - современный, постоянно развивающийся язык программирования, областей применения ему - масса. Наверняка вы слышали про Chef, Vagrant, Homebrew, но чаще всего все мы слышим о Rails. Вот пост с комментарием самого автора фреймворка о том, почему стоит учить Rails.

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

Ruby - интерпретируемый, полностью объектно-ориентированный язык программирования с четкой динамической типизацией. Он сочетает в себе Perl-подобный синтаксис с объектно-ориентированным подходом. Также некоторые черты заимствованы из языков программирования Python, Lisp, Dylan и CLU. Кроссплатформенная реализация интерпретатора языка Ruby распространяется на условиях открытого программного обеспечения. Код, написанный на Ruby, может быть понятен даже человеку, который не разбирается в программировании. На RoR были созданы такие проекты, как Redmine, Twitter, Shopify, Basecamp, GitHub, Kickstarter, Airbnb и другие.

С ростом Node.js популярность Ruby on Rails несколько уменьшилась, но технологические стартапы часто используют RoR благодаря простоте прототипирования. Ruby - 11-й самый популярный язык в индексе TIOBE .

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

  • Многочисленное и доброжелательное комьюнити.
  • Довольно высокий порог входа, что означает, что Ruby-разработчик с большой вероятностью имеет опыт работы как минимум с еще одним языком программирования.
  • Вы используете только те библиотеки и модули, которые необходимы.
  • Существует большое количество полезных библиотек, которые уже готовы к использованию (Ruby Gems).
  • В интернете есть много информации по Ruby, в структурированном и отсеянном виде.
  • В контексте обсуждения Ruby нельзя не упомянуть популярнейший фреймворк Ruby on Rails.

А теперь поговорим о некоторых преимуществах Ruby более подробно.

Скорость разработки

Одним из плюсов Ruby и фреймворка RoR считается скорость разработки. Личный опыт и опыт коллег показывает, что решение задач на Rails происходит в полтора раза быстрее по сравнению с другими фреймворками подобного плана. Ruby очень прост как инструмент, а также существует огромное количество готовых решений для различного рода задач.

Штатные средства кеширования данных

При разработке масштабного проекта одним из самых важных моментов является кеширование. Ruby on Rails в основной комплектации имеет штатные средства кеширования данных. То есть у вас сразу будут в наличии инструменты для кеширования данных на проекте, и вы можете легко кешировать отдельные блоки кода или даже целые страницы.

Вначале тесты, потом код

Часто в процессе разработки крупных проектов возникает вопрос о тестировании, и не редкость, когда нет дополнительных средств на отдельную команду тестировщиков. В Rails есть решение и этой проблемы. Если сравнивать RoR с другими фреймворками в контексте тестирования приложения, то вы найдете массу готовых решений для любого вида тестов, будь то интеграционные или юнит. Все эти библиотеки работают «из коробки». В идеале в проекте на Ruby on Rails код не пишется до тех пор, пока под него не написаны тесты. RoR идеология предполагает изначальное использование методов BDD (Behavior Driven Development) или TDD (Test Driven Development).

Общепринятые стандарты процесса разработки у Ruby-разработчиков

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

Также очень важный момент - в Ruby-сообществе уже много лет есть стандарты процесса разработки, некие правила/соглашения сообщества, по которым ведется разработка, что очень сильно упрощает работу. За счет этих стандартов каждый проект очень структурируется, соответственно, новый разработчик в команде быстро войдет в курс дела и уже с первых дней работы сможет быть полезен. И даже больше: если проект начинала одна команда, а заканчивает другая - это тоже совсем не проблема. Поскольку разработка ведется по уже упомянутым правилам и соглашениям сообщества, новая команда быстро и без трудностей вникнет в проект и успешно его закончит без особых потерь времени.

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

Готовые решения для многоязычности проекта

Rails в базовой комплектации имеет очень мощные средства для локализации проекта. Есть возможность как предусмотреть поддержку нескольких языков изначально, так и осуществить её позже. В проекте присутствуют специальные файлы для переводов терминов, инструменты для отображения шаблонов на разных языках и многое другое.

Высокий уровень защиты данных

Сейчас нередко в сети публикуются статьи о взломах различных ресурсов. Разработчики фреймворка Ruby on Rails очень серьезно отнеслись к проблеме защиты данных. В RoR изначально присутствует шифрование паролей, данных кредитных карт и других личных данных пользователя, также исключены SQL инъекции и XSS атаки. Все входные параметры экранируются по умолчанию.

Изучение Ruby

А теперь поговорим, как именно можно освоить Ruby.

Теория

Начать следует, конечно же, с литературы. Я рекомендую эти источники:

  • Ruby за 20 минут - хороший ресурс для совсем начинающих. Позволяет меньше, чем за полчаса ознакомиться с основными конструкциями языка и начать писать свои небольшие программы.
  • Codecademy - платформа с онлайн-курсами по множеству направлений, включая чистый Ruby и Rails. Здесь довольно интересно построен обучающий процесс, дается теоретический материал и сразу же практическое задание, чтобы его закрепить. Финальные задания платные, но и без них можно получить нужные навыки.
  • Материалы по Ruby и Rails - сборник ссылок на различные сайты и книги, посвященные изучению Ruby и Rails.
  • Отдельно могу посоветовать книгу Flanagan D., Matsumoto Y. «The Ruby Programming Language» . Она считается одной из лучших, её автор - сам создатель языка Ruby.
  • Google:)

Вот парочка ресурсов, с которых можно начать:

  • w3schools.com/sql - здесь можно почитать, попробовать и проверить свои знания по SQL.
  • quizful.net/test - тут можно найти вопросы, которые часто задают на собеседованиях.

Английский

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

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

Во-вторых, чем лучше ваши знания английского, тем больше шансов найти работу. Большинство клиентов зарубежные, соответственно, знание английского важно для продуктивного общения, четкого понимания ТЗ и хорошего контакта с клиентом.

Практика

После изучения нескольких ресурсов стоит перейти к более важной части, а именно к практике. Примеров заданий с интернет-магазином или простым блогом в сети масса (вот один из них), особенно если говорить о Rails. В ходе выполнения задач, уже немного приближенным к реальным, вы точно столкнетесь с какими-то проблемами и тогда перейдете к тренировке одного из самых главных качеств - это умение гуглить. К сожалению, мне не удалось найти какой-то туториал или курсы, посвященные этому навыку, но он определенно играет очень важную в роль в повседневной работе.

Курсы

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

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

Сразу скажу, что я ни в коем случае не рекомендую идти на курсы, не имея уже какого-то багажа знаний. Я рассматриваю курсы как отличный способ закрепить знания, полученные в процессе самообучения. И сейчас не пытаюсь рекламировать какую-то конкретную школу, а объясню, какую именно пользу можно из этого извлечь:

С высокой долей вероятности там вы узнаете то, чего не знали раньше . На курсах довольно большой объем материала, который подается в структурированной форме, что позволяет лучше усваивать материал.

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

Мотивация . Это в первую очередь для тех, кому нужна помощь с самодисциплиной. Порой довольно трудно заставить себя что-то делать, какие бы перспективы не маячили на горизонте. При посещении курсов у вас будет четкий график, которому нужно следовать, и задания, которые нужно выполнять, иначе вас исключат. Финансовая мотивация также играет здесь роль, в случае платных курсов. Ведь когда отдаешь свои кровные, то уже совсем по-другому относишься к делу, и мысли просто прогулять возникают намного реже.

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

Плюс один проект на GitHub в вашу копилку. Если вы начинающий разработчик, то вероятнее всего проект, написанный на курсах, будет интереснее с точки зрения технологий, чем те, которые были написаны ранее.

И самое главное - трудоустройство . Говоря о курсах, я не имею ввиду только те, за которые нужно платить деньги. Часто компании сами проводят набор на обучение, чтобы потом лучших взять к себе на работу. Это могут быть внутренние курсы или стажировка/интернатура. Такой вариант - наилучший, так как вам не нужно ни за что платить, вы получаете опыт и все выше перечисленные плюсы и вдобавок - реальную перспективу трудоустройства. Попасть на них сложнее, но перспективы значимее.

Итого

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

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

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

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

Удачи в изучении! А в следующей статье мы поговорим о коде.

Подписывайтесь на наш Telegram-канал для джуниоров , чтобы не пропустить интересные вакансии, стажировки, курсы, статьи.