Хеллоуин
Ох уже эти американские праздники.
Новый язык шаблонов для Rails
Haml - супер круто и жутко удобен. Моя Rails-душа наполнена счастьем. Это что?
Все права защищены © Иван???
- Перевод
Я познакомился с 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.Можете изменять окружение любым доступным способом.
Впервые увидев это, я был впечатлен. Представьте типичную ситуацию: вы стали использовать системный класс или класс, написаный кем-то другим и поняли, что вам надо некий дополнительный метод в нем. Есть несколько путей для решения этой проблемы в типичных языках программирования:- Вы изменяете исходный код класса, если вы имеете к нему доступ. Но обычно это - плохая идея, не делайте так.
- Вы наследуете свой класс от того и добавляете к нему новый метод. Обычно это - хорошая идея. Но из-за одного метода это может оказаться несколько монрообразным. Кроме того, придется немного подправить другой свой код соответственно.
- Можно просто создать метод вне класса. Это сработает, но будет не очень изящно, а еще - идет в разрез с ООП .
Мы хотим добавить метод, для пересчета значений из метров в футы? Просто расширим класс 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 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-канал для джуниоров , чтобы не пропустить интересные вакансии, стажировки, курсы, статьи.