Программист руби: Работа программистом Ruby в Москве

Содержание

Так вы хотите стать Ruby разработчиком? / Хабр

В каком-то времени меня попросили создать команду Ruby для отдельного подразделения Codequest’s, что означало, что я стану Тимлидом (черт возьми, да!!!) и — что более важно, по сути стать человеком, к которому обращаются все HR, пытающиеся набрать новых разработчиков (хм…). Совершенно очевидно, большинство из этих разработчиков, были новичками со средними знаниями. Подходя к каждому интервью, я не забываю, что не так давно я сам был начинающим студентом, сидящим по другую сторону стола, поэтому я стараюсь быть терпеливым, добрым и дать каждому кандидату честную и полезную обратную связь, даже если мы решим, что он нам не подходит. Как бы там ни было, я выявил некоторые закономерности – многие разработчики, особенно новички, делают ошибки, которые не только затрудняют их старт, но и которые можно легко избежать, если бы им только кто-то об этом сказал ранее. Я сам совершил большинство ошибок в свое время и если бы меня кто-то об этом предупредил, хотя может так и было, я просто не слушал, вероятно, это бы спасло меня от многих разочарований – поэтому, чтобы облегчить чью-то жизнь, я постараюсь указать, на то, что новичок (или даже middle) может сделать лучше, если он хочет эффективно развиваться как разработчик в престижном направлении разработки программного обеспечение.


GitHub


Все в сообществе знают, что ваш репозиторий GitHub — это то, что действительно важно для будущего работодателя. Не так ли? Если вы написали библиотеку с открытым исходным кодом, которую используют люди или внесли в нее свой вклад, да, это может быть довольно ценным козырем. Если вы написали приложение, даже если это учебное приложение, которое решает некоторые повседневные проблемы, которые у вас есть — это также может показать ваши навыки. Однако если все репозитории, которые вы можете показать — это наполовину законченные задачи других компаний, не затронутые ни разу за последние девять месяцев, или супер-базовые Rails, вашего первого «rails new», то действительно ли вы хотите, чтобы мы это увидели? Возможно ты сейчас намного лучше, чем 9 месяцев назад, черт возьми, наверное, так и есть, но мы этого не знаем наверняка и когда ты присылаешь нам ссылку на кладбище своего кода — ну, как говорится, у вас есть только один шанс произвести хорошее первое впечатление, верно?

И это относится не только к новичкам (junior) — если бы вы заглянули в мои репозитории GitHub, вы бы нашли точно такие же вещи повсюду — задания по набору персонала, из прошлых лет или некоторые заброшенные эксперименты на ЯП, которые я изучал в процессе и т. д. Я делаю коммиты(commit) на GitHub каждый день – но эти коммиты относятся к приватным репозиториям, здесь не на что смотреть. Все, что я хочу сказать, это нормально, если в вашем GitHub ничего не плодится, но в таком случае и не показывайте его нам.

Ruby


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

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

Думайте об этом так — вы же не будете пытаться написать книгу на иностранном языке, используя только Google Translate и цитаты из ваших любимых фильмов, верно? Тоже самое и с написанием приложения — вы буквально пишете то, что должно иметь смысл и чем лучше вы знаете язык, тем лучше вы можете передать предполагаемый смысл и чем эффективнее вы становитесь в составлении предложений — тем больше смысла это имеет. Когда вы знаете только Rails, ваш словарный запас ограничен. И я могу заверить вас, вы не захотите работать в компании, которой нужен «ограниченный», потому что уже очень скоро вы превратитесь в робота, который реализует только основные функции CRUD, что является захватывающим в течение, например, двух месяцев, но затем быстро надоедает, подобно чистки зубов, вы должны сделать это, вы должны сделать то, но это ведь не совсем то, чего бы вам хотелось, не так ли?

Каждое интервью я начинаю с очень простого и основного вопроса:

— Что такое класс в Ruby, что такое модуль, в чем их отличия и для чего они нужны?

Вы бы удивились, узнав, как много людей на самом деле не знает ответа на этот вопрос! И это люди, которые хотят стать разработчиками программного обеспечения. Все они могут создать блог с постами и комментариями в считанные минуты — и на этом все. Был у меня один кандидат, на должность mid разработчика, который утверждал, что работал в течение года над клиентским приложением в качестве руководителя команды — так он до сих пор не знает, что такое модуль Ruby.

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

Rails


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

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

Учебные пособия


Уроки великолепны – все их используют! Однако следовать чьим — то инструкциям недостаточно, помните, что цель этого пособия, не создать рабочий блог с постами и комментариями, а научить Вас создавать свое собственное приложение. И это именно то, что вы должны научиться делать, как можно скорее. Вспомните все те моменты, когда вы думали «если бы у меня только было приложение для этого!». Или спросите своих друзей и семью, в каком приложении они нуждаются больше всего. Это может быть что угодно — простой органайзер задач, список желаний или любое другое приложение. Мое первое приложение было своего рода записной книжкой для экспериментов моей жены в ее лаборатории (она ученый). Я так и не закончил его, но это не имеет значения — в данном случае речь идет о процессе, а не о результате. При выполнении урока, вы имеете дело с искусственно созданными проблемами и готовыми решениями. Когда вы создаете свою собственную вещь, вы вынуждены думать, как построить ее. Вы должны найти решение своих проблем самостоятельно.Я твердо верю, что нет лучшего способа научиться творить, чем начать творить, потому что это то, чем вы будете заниматься как веб-разработчик. Преодоление трудностей, даст вам огромное чувство удовлетворения, укрепит вашу уверенность и зажжет ту искру, которая заставляет нас часами сидеть, сгорбившись над клавиатурой, только чтобы увидеть правильный JSON или рабочую регистрационную форму. Это даст вам опыт и что-то, что можно показать. Ваш код не обязательно должен быть красивым или кричащим — вы новичок, никто не ожидает, что вы напишете операционную систему!

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

Мистер Хороший парень.


Этот последний пункт относится не к одному конкретному уровню опыта, а по существу ко всем, кто работает в нашей отрасли. Все очень просто — не будь засранцем. Будьте добры к другим. Будь полезным. Улыбайся. Спросите, если не знаете, объясните, если спросят. Не смотрите на людей свысока, если они ничего не знают, потому что каждый из нас может быть на его месте, информатика, программирование, это такая широкая область, что практически невозможно быть экспертом во всем. Признайте, что вы можете учиться у любого, даже если у них есть лишь доля вашего опыта. Учите других, потому что учить других, это один из лучших способов проверить то, что вы действительно знаете. И примите тот факт, что, если вы самый умный человек в комнате, вы должны сменить комнату, потому что это единственный способ расти и не становиться самодовольным. Проверяйте свои знания и навыки, как можно чаще. Как гласит общепринятая практика в тренажерном зале, «если болит, значит растет», покидайте зону комфорта, не оставайтесь в ней.

Если вы также занимаетесь front-end разработкой, обязательно ознакомьтесь с полным списком наиболее распространенных ошибок начинающих front-end разработчиков , составленным нашим front-end Тимлидом Петром Кабачинским.

Пацаны, так Ruby умер или нет? / Хабр

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

Но при этом существуют же некие преданность технологии и даже культ инструмента. Скажи пхп-шнику, что пора переезжать на .NET, услышишь «PHP отличный, полмира на нем пишет», или просто получишь в лоб.

Что же не так с Ruby, и куда делась его взрывная популярность? Я поговорил с несколькими рубистами. Например, Максимом Индыковым из Staply, чья команда переезжает с Ruby на Go, и с Алексеем Кузнецовым из GeekBrains, компании, которая начиналась с курсов по Ruby, а сейчас отказалась от них полностью.


Чем хорош Ruby?


Максим Индыков (maks_ohs): Продуманный синтаксис, на котором код выглядит максимально читаемым. Можно писать действительно понятно и лаконично. Огромное количество реализованных библиотек, подключение которых не вызывает проблем.

Павел Сережин: Самый главный плюс ruby — это rails, лучший фреймворк. Четко реализованные паттерны, не то, что на node.js, крути как хочешь. Само написание кода напоминает английскую речь.

Алексей Кузнецов: У языка легковесный и очень лаконичный синтаксис, хорошо подходящий для описания DSL и бизнес логики. Низкий порог входа, доброжелательное комьюнити. Хороший кандидат, чтобы учить как первый язык.

Чем плох Ruby?


Максим Индыков: Требователен к ресурсам, всю историю разработки языка сопровождают серьезные оптимизации по потреблению памяти. В эталонной реализации интерпретатора (MRI) отсутствует реальная многопоточность с использованием нескольких ядер процессора (GIL).

Динамическая типизация. Но это сложно отнести к минусам, ведь она позволяет ускорить разработку, хоть и с потерей качества.

Павел Сережин: Насколько хорош ruby для написания, настолько же отвратителен для чтения. Понять, что происходит бывает достаточно сложно, а не дай боже автор был с синдромом велосипеда и натворил говнеца — тут хоть сразу вешайся. Иногда не хватает статической типизации.

Алексей Кузнецов: Язык практически не развивается на фоне его ближайших конкурентов (JavaScript и Python). Взрывной рост интереса к Ruby основывался в первую очередь на Ruby on Rails. Но сейчас, когда Rails-like фреймворки есть в каждом популярном ЯП, Ruby мало что может предложить. Отсутствие даже опциональной статической типизации также не добавляет Ruby очков.

Расскажи, почему ты выбирал его?


Алексей Кузнецов:
Я перешел на Ruby c C++ около 5 лет назад и на тот момент это было разумным выбором. Хотелось делать продукты, которые ближе к конечным пользователям. У PHP была не самая лучшая репутация. В JS балом правил ES5+JQuery, а синтаксис Python не вдохновлял.

Павел Сережин: Прежде всего из-за rails, он идеально подходит под область web разработки, которой я и хотел заниматься. И приятно писать на языке ориентированном на разработчика.

Максим Индыков: Очень повлияло коммьюнити. Огромное количество качественно написанных туториалов и best practices. Rails фреймворк, делающий разработку максимально понятной от самого старта проекта, до деплоя. Богатство подходов и реализаций для написания тестов: RSpec, MiniTest и так далее.

На тот момент, казалось ли тебе, что за ним будущее?


Максим Индыков: Да, язык постоянно развивался (и сейчас продолжает это делать). Было огромное количество вакансий. На фоне php все казалось максимально логичным и правильным.

Павел Сережин: Никогда не считал, что ruby будет в топе, а наоборот. Всегда казалось, что разрабов будет достаточно мало, и это создаст конкуренцию на ровном месте. Правда — это один из минусов, с уровня джуна зайти кроме как в столицах практически невозможно.

Почему сейчас Ruby все реже требуется?


Павел Сережин: Сейчас все чаще для создания новых проектов просто выбирают более популярные языки и фреймворки. И ruby, и rails немного отстают в производительности и не успевают за трендами. В rails завезли поддержку webpack, что не сильно помогает — легче разделить на два отдельных проекта.

Алексей Кузнецов: Node.js активно канибализирует нишу веб-приложений, а со стороны всевозможных утилит поджимает Go.

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

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


Алексей Кузнецов: Мне кажется, что ситуация противоположная. Остальные языки подтянулись до уровня, на котором с ними стало приятно работать разработчикам (destructuring в ES6, стримы в Java8, нуллабилити в Kotlin и Swift, модель конкуренции в Go).

Максим Индыков: Бизнес хочет экономить деньги — ресурсы серверов. Когда появляется технология способная держать нагрузку на порядки выше, мало кто откажется сэкономить.
Когда эта технология имеет строгую типизацию, что является плюсом к надежности — это еще один камень в огород Ruby.

По ощущениям, в РФ такая ситуация: была и есть php разработка. Потом пришла локальная популярность ruby, который преподносился как убийца php, но часто не хватало других аргументов для бизнеса, кроме «Ну на Ruby реально удобно писать». Всех пугал недостаток специалистов. С появлением elixir и go аргументы уже гораздо более понятны.

С Ruby надо уходить?


Алексей Кузнецов: Не думаю, что надо бежать с Ruby, но стоит посмотреть на альтернативы.

Максим Индыков: Весь рынок мигрирует. Крупные компании во всю объявляют об использовании Go. Но речь идет о миграции в определенных областях задач. Знаниями новых популярных технологий точно нужно обладать.

Павел Сережин: Сейчас js куда более популярен и достаточно неудобно распыляться на два разных по синтаксису языка. Исторически сложилось, что у меня к Реакту душа лежит больше, так что думаю уйти с фулстека на фронт.

Встанет ли он в число совершенно невостребованных языков?


Максим Индыков: Нет, для быстро написания прототипов и MVP, где требуется простота реализации, ему нет равных. Есть непаханое поле проектов, которые нужно реализовать быстро и качественно. Момент, когда потребуется оптимизация может и не наступить, а как известно, преждевременная оптимизация — это зло.

Павел Сережин: Не думаю. За Ruby так и останется некая репутация слегка непопулярного языка, ниша со своим комьюнити.

Алексей Кузнецов: До этого еще далеко. Есть много ситуаций, когда не так важно, на чем написан проект. И много разработчиков, готовых за выходные собрать MVP.
А имея прокачанную команду рубистов можно успешно развивать продукт годами (GitHub и GitLab — оба написаны на RoR).

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

Что бы могло помочь Ruby оставаться популярным?


Максим Индыков: Большая гибкость разработчиков языка. Реализация улучшений по работе с многопоточностью.

Павел Сережин: Повышение производительности самого языка и rails. И поставить корпорацию с кучей денег на поддержку.

Алексей Кузнецов: Ruby не превратился в тыкву. Просто появились другие кареты. В комплекте с некоторыми идут реактивные двигатели, другие сильнее сияют.
Думаю, опциональная статическая типизация (и тулинг, который можно сделать поверх нее) могли бы помочь.

Какой из популярных сейчас ЯПов больше всего подходит рубисту?


Максим Индыков: Скорее зависит от задач, но чаще всего на этот вопрос ответ: elixir. Язык созданный людьми из ruby/rails сообщества.

Алексей Кузнецов: В целом мне не близко деление на разработчиков по языкам программирования. Для software developer не должно быть проблемой освоить новый стек на достаточном уровне за 2-4 недели.

А так я бы смотрел в сторону Go/JS/Swift в зависимости от задач, на которых разработчик планирует сфокусироваться. Есть еще Elixir и Clojure, но они не мейнстримовые.

Павел Сережин: Почти каждый уважающий себя рубист уходит на Golang. Так что ответ очевиден.

Покорим Ruby вместе! Капля первая / Хабр

Дабы сразу определить целевую аудиторию этого цикла заметок-статей-поучений пару слов о себе. Бывший школьник, будущий студент, в программинге толком ничего не смыслю, хотя есть пара сайтиков на готовых движках. В php-скриптах могу чего-нить лишнее удалить, изменить, но написать что-то с чистого листа — это не ко мне. Неоднократно пытался научится мастерству создания программ, но обычно тормозил как только дело доходило до ООП (видел в коде эти многочисленные классы, в пособиях всякие «объекты», «инкапсуляции» и т.п. и зависал…)

Собственно точно такое же желание появилось и сейчас. Порыскав по сети в поисках «чего-бы такого интересного выучить» наткнулся именно на Ruby с его рельсами. По словам спецов разного качества Руби сейчас актуален, программировать на нем быстро, это полный ООП (что перспективно в дальнейшем покорении олимпа программирования), синтаксис несложен… В то же время язык — тормоз, нагружает систему, twitter в нем барахтается, пытаясь удержаться на плаву, постоянные проблемы с хостингом. Но я вроде как стартапить в многомиллионную аудиторию не собираюсь, а для общего образования всегда подойдет.

Так что стоит признаться, что и Ruby я знаю совсем каплю, но уверен, что и мои «капли» будут интересны некоторым индивидам, подобным мне. Я могу (и буду) часто ошибаться в каких-то понятиях, методах, но мы ведь готовы помогать друг другу? Вроде бы как Хабр — это элита ИТ, но я думаю, что местные спецы не будут против, если мы тут с начинающими ребятами немного «потусим» 🙂

Собственно в этой серии статей мы будем капля за каплей наполнять стаканчик знаниями о Руби, наполнять будем вместе — для меня это также станет дополнительным стимулом не бросать занятия. Надеюсь, что и вам будет интересно! Начнем?

Руби, Рельсы…

Что такое Ruby? Руби — это полноценный интерпретируемый язык программирования высокого уровня для объектно-ориентированного программирования. Интерпретируемый — значит что код программы хранится в виде обычного текста, который передается исполняющему его интерпретатору. Можно сравнить с PHP и C++ — как и в PHP достаточно написать код, условно загрузить его на сервер-хостинг, где его будет выполнять интерпретатор. В противовес C++ необходимо компилировать, но зато мы получаем готовое приложение, которое выполняется само по себе, никуда код передавать не надо, но и посмотреть в исходники, заглянуть в программу, увы, не выйдет — там нечитаемый бинарный код. Возвращаясь к Руби, делаем вывод, что язык этот замечателен для разработки веб-приложений, скриптов, в ОС же его использование ограничено скоростью приложения (как подсказали ниже, для фронтендов и небольших утилит Ruby очень даже подходит).

Что такое Ruby on Rails? Дословно: «Руби на Рельсах». На какие такие рельсы поставили этот ЯП? Rails — это наиболее известный фрэймворк для языка Ruby. Мы можем писать скрипты и на «чистом» Ruby (подобно большинству скриптов на PHP), однако рельсы позволяют повысить скорость, производительность написания кода, кроме того, этот фрэймворк реализует архитектуру MVC (Model — View — Controller) — о том, что это такое и как это использовать, поговорим позже.

Концепции Ruby и Rails

Ruby и Ruby on Rails следуют паре принципов для того, чтобы помочь писать код чище и красивее. Первый: DRY (Don’t repeat yourself). Это означает, что мы должны писать необходимый код только один раз и только в строго определенном месте. Второй: CoC (Conventions over Configuration) — общие соглашения важнее собственной конфигурации. Для большинства необходимых в кодинге методов уже есть замечательные автоматические установки, которые и следует использовать, а в крайних случаях, если умолчания нас не устраивают, мы просто переписываем их под себя. Всё, для того, чтобы код был чистым и лаконичным, и при этом мы затрачивали минимум усилий.

Почему Ruby?
  • Язык предельно лёгок в изучении в сравнении с другими ЯП
  • Полностью объектно-ориентированный
  • Архитектура MVC у Rails
  • Нет необходимости писать много кода
  • Очень расширяемый
  • Open Source
  • Несмотря на то, что фрэймворк Rails молодой, он многофункционален и содержит совсем немного багов

Эпилог

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

Вторая капля уже ждет вас здесь, третья здесь!

Где искать Ruby-разработчиков?

Мац долго рассматривал языки программирования для создания идеального. Он говорил: «Мне нужен был скриптовый язык, который был бы более мощным, чем Perl, и более объектно-ориентированным, чем Python». Таким образом, синтаксис Ruby аналогичен синтаксису многих языков программирования, таких как C++ и Java, поэтому программистам довольно легко ему обучиться.

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

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

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

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

В последнее время ходит много слухов, что Ruby «умирает». Многие компании отказываются от этого кода, так как видят много проблем в использовании. Подробнее узнать о мнении рубистов по поводу будущего языка на Хабре.

Подборка Telegram-каналов

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

@rubyjob — 1500 подписчиков. Вакансии для разработчиков из России, Украины, Беларуси и стран Европы.

@forruby — 120 подписчиков. Вакансии для разработчиков от New.HR.

@rubyata — 350 подписчиков. Чат разработчиков. Публикация вакансий только по пятницам.

@codenamecrud — 500 подписчиков. Чат разработчиков и вакансии для разработчиков.

@rubylang — 1300 подписчиков. Чат про Ruby и Ruby on Rails.

@proRuby
— 1300 подписчиков. Чат разработчиков, возможно ненавязчивое размещение вакансий.

@rubyrush — 360 подписчиков. Чат разработчиков-новичков на Ruby. Полезная информация простыми словами.

@rubyschool — 1180 подписчиков. Чат для тех, кто только учится писать на Ruby.

@moscowrb — 250 подписчиков. Чат разработчиков из Москвы. Бесплатная публикация вакансий на отдельном сайте.

@rubykrd — 100 подписчиков. Чат и вакансии для разработчиков Краснодара.

@ruby_ruby_ruby — 50 подписчиков. Новости, статьи и прочее о Ruby.

Курс «Языки веб-программирования» (на основе Ruby) от МГТУ им. Н. Э. Баумана на канале Технострим

В этой статье мы расскажем о курсе «Языки веб-программирования», который читается на кафедре «Компьютерные системы и сети» (ИУ-6) МГТУ им. Н.Э. Баумана. Примеры приводятся на Ruby, а сам курс и представляет собой 16 видеолекций, доступных бесплатно на канале Технострим. В «Бауманке» курс читается для студентов второго курса, уже знакомых с высокоуровневыми языками программирования, такими как Pascal, C++ или Java. Основной акцент делается на системное понимание технологий, используемых в веб-программировании, а не на глубину освоения именно технологий Ruby. Поэтому курс также будет полезен слушателям, имеющим отрывочные знания о веб-технологиях на любых языках.

Содержание


  1. О курсе «Языки веб-программирования»

  2. Содержание лекций

  3. Как создать курс для вуза
  4. Почему Ruby?
  5. Почему Ruby не популярен?
  6. Резюме

Языки веб-программирования

Почему курс называется «Языки веб-программирования»? Ответ очень прост. Как 30 лет назад, когда Интернет только зарождался, так и сейчас нет возможности использовать один язык программирования.
  • Языки разметки — это HTML и CSS.
  • Языки конфигурирования и обмена данными — JSON, XML, YAML.
  • Браузерное программирование — Javascript (Typescript, Coffeescript…).
  • Серверное программирование — Ruby, PHP, Perl, Java, Javascript…

Чтобы понять веб-программирование даже в минимальном объёме требуется знать 4-5 языков разметки и программирования (хотя границы между ними сейчас уже размыты).
Цель курса

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

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

Автор курса

Главный разработчик курса — кандидат технических наук, доцент кафедры «Компьютерные системы и сети» МГТУ им. Н. Э. Баумана Самарев Роман Станиславович. Программист с более чем 20-летним опытом (C++, C, Java, Perl, PHP, Ruby и др. для Windows, Linux, Embedded Linux, MacOS), руководитель программных разработок, исследователь в области СУБД, обработки данных и больших данных, работал в России, в Германии и в США.
Длительность и формат

Полный курс включает 192 академических часа: 16 лекций по 2 часа, 8 семинаров по 2 часа, 48 часов на 12 лабораторных работ. Остальное время выделено на самостоятельную подготовку. Видеоматериалы же включают только лекционную часть. Желающим глубже погрузиться в тему курса, материалы лабораторных работ и семинаров придется осваивать самостоятельно. Все вопросы можно задавать преподавателю: [email protected]
Результаты

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

Лекции 1-2. Введение
  • Введение в веб-программирование с точки зрения базовой архитектуры.
  • Минимальные сведения о языках разметки и таблицах стилей.
  • Минимальное введение в Javascript.



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

Лекции 3-5. Ruby

Следующие три лекции посвящены Ruby, поскольку именно технологии на этом языке Ruby положены в основу курса. Лекции включают:

  • Основы языка Ruby.
  • Необходимые сведения о структуре типов и объектной модели.
  • Функциональный стиль.




Лекция 6. Принципы построения веб-приложений
  • Common Gateway Interface.


Кто-то скажет, что этот стандарт не актуален, но он лежит в основе всего современного веб-программирования. Поэтому любой веб-программист просто обязан знать, что это такое, и должен понимать, что простейшее веб-приложение — это всего лишь put ‘Hello World’.

Лекция 7. Rack

  • Rack — промежуточный слой для большинства веб-фреймворков на Ruby.
  • Sinatra — распространенный фреймворк для создания простых приложений.
  • Пример создания приложения.


Лекция 8. Введение в Rails
  • Ключевые аспекты Rails-приложения.


Ruby on Rails — тот самый фреймворк, который сделал язык Ruby знаменитым и стал почти его синонимом. Это один из примеров глубоко проработанного фреймворка с концепцией Model-View-Controller, который послужил прототипом для создания множества других веб-фреймворков, включая Grails и Django. Отметим, что концепция Rails: генерировать как можно больше кода при помощи автоматических генераторов и меньше писать руками.

Лекция 9. Асинхронное взаимодействие

Большинство современных веб-приложений используют асинхронный метод, то есть запросы к серверу уходят в фоновом режиме для пользователя. Ответы отрабатываются где-то в глубине браузера. Что здесь надо знать?

  • Обменные форматы — XML и JSON.
  • Запуск асинхронного запроса из Javascript.
  • Концепция ненавязчивого Javascript применительно к Rails.


Лекция 10. Тестирование

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

  • Тестирование различных аспектов веб-приложений.
  • Введение в языки предметной области (поскольку RSpec и Cucumber — те самые примеры «человечности» в тестах: программа тестирования должна быть понятна не только для программиста, который «заточен» под используемый язык, но и для нормального человека). Обратите внимание, что подход, использованный как в RSpec, так и в Cucumber, сейчас широко растиражирован в средствах тестирования для многих других языков программирования.
  • Средства типа SikuliX и Selenium, которые могут быть использованы для тестирования программ с графическим интерфейсом и браузерами соответственно.


Лекция 11. Технологии XML
  • Языки запросов типа Xpath, Xquery.
  • XSL и XSLT.


Казалось бы, какое это отношение всё это все имеет к веб-программированию? Но XML лежит в основе веб-технологий. То, что сейчас мы не используем XML в качестве обменного формата, вовсе не гарантирует, что через 5 лет мы опять не начнем это делать. До сих пор нет единого подхода к верификации данных в формате JSON. А в случае с XML схема разметки заложена самим языком.

Язык запросов Xpath — это, по сути, универсальный язык путевых запросов, который может быть использован для поиска любых элементов древовидных структур данных, куда входит и JSON.

Преобразования XSLT — это также еще один из способов трансформации документов XML, знание о котором позволит студентам не изобретать велосипеды в будущем, когда они столкнутся с ETL.

Лекция 12. ORM (Object-Relational Mapping)

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

  • для чего нужен такой механизм;
  • какие у него ограничения;
  • как им пользоваться на практике.

В данном случае всё рассматривается в контексте Ruby on Rails.


Лекция 13. Сессии, безопасность и всё, что с этим связано
  • Способ хранения состояния, основанный на cookies.
  • Типовые способы аутентификации.
  • Пример добавления авторизации в Rails.
  • Вопросы безопасности веб-приложений как таковых.


Лекция 14. Сервисы
  • Исторические аспекты.
  • Конкретные рекомендации по разработке и размещению собственных сервисов для Web.


Лекция 15. CMS (Content Management Systems)
В веб-программировании важно не только уметь написать приложение, но и понимать, нужно ли его писать. Эта лекция — демонстрация основных типов уже созданных веб-приложений, которые можно настроить под требования конкретного заказчика и, при необходимости, доработать.
  • Акцент на Ruby-средства.
  • Самые распространенные CMS, написанные на PHP.


Лекция 16. Размещение Ruby веб-приложений в Интернете

Рассматривается общая идеология веб-сервисов. Объясняются истоки появления этой архитектуры с обменным форматом XML и её дальнейшая модификация в Web-API с JSON и REST или GraphQL.

  • Веб-серверы.
  • Методы виртуализации.
  • Способы размещения приложения в Интернете.


Как создать курс для ВУЗа

Сложно создавать учебные курсы по темам, связанным с программированием, где технологии меняются каждые 5-10 лет. При создании курса для университета приходится балансировать между формированием практических навыков по конкретным языкам программирования и подачей теоретических основ, необходимых для понимания технологий как таковых. А кроме того, отличие университетского образования от учебных курсов заключается в системной подаче материала, что также накладывает ограничения на то, когда и в каком объеме может быть подан определенный материал.

В последние годы появилась тенденция записывать университетские лекции на видео и создавать видеокурсы. Курс «Языки веб-программирования» является первой такой официальной попыткой нашего ВУЗа. И на основе отзывов мы решим, как и в каком формате делать новые записи.

10 лет назад нужно было радикально обновить учебную программу, внедрив, в том числе, веб-программирование. На кафедре «Компьютерные системы и сети» на курсы, связанные с электроникой и проектированием ЭВМ, традиционно выделяют примерно столько же учебных часов, сколько и на программирование. Причем курсы по программированию включают в себя алгоритмическую подготовку на высокоуровневых языках Pascal, С, С++/Qt, подготовку на на различных ассемблерах, а также теорию языков программирования и компиляторы. И даже языки для программирования ПЛИС и специфического железа. То есть кафедра готовит универсальных специалистов, которые в дальнейшем сами выбирают специализацию.

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

Почему Ruby?

Почему выбран Ruby? Выбор языков для веб-программирования достаточно богат. Помимо Ruby это PHP, Perl, Javascript, Java, Go и другие. Если же подходить с позиции высоконагруженных веб-приложений, то, отправляя сомневающихся в Web Framework Benchmarks, видим в первых рядах C++, Java, Rust, Ur, Go и пр. Ruby не является ни самым популярным для веб-разработки, ни самым быстрым для высоконагруженных решений. Однако у Ruby есть масса других достоинств, делающих его языком программирования, о котором должен иметь представление любой образованный программист.

Недавно Ruby отметил 25-летие, то есть это достаточно зрелый язык. Несмотря на то, что большинство упомянутых языков также перешагнули или близки к этому возрасту (Rust, Dart, Go пока «зеленые» по сравнению с ним), Ruby — один из немногих языков, сохраняющий обратную совместимость на протяжении этих лет.

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

Почему Ruby хорош для университетского образования? Это чистый объектный язык. И поскольку он динамический, переопределить можно почти всё. Никаких простых типов в его модели нет (не будем здесь размышлять о системной реализации, речь только о модели). Любые данные — это объект. Код — это объект. То есть Ruby позволяет легко усвоить принципы объектно-ориентированного программирования. Кроме того, синтаксис языка достаточно прост и почти не имеет исключений. Любой код, написанный в программе, должен быть когда-то выполнен, причем не важно, где этот код написан — внутри объявления класса или снаружи. Что бы ни было написано, оно будет выполнено. Синтаксис Ruby очень гибкий, что делает его очень удобным для написания языков, ориентированных на предметную область (DSL/DSEL). Кроме того, базовый концепт Ruby — блок — это анонимная функция. Освоение этих принципов позволяет студентам легко овладеть функциональным программированием на чистых функциональных языках программирования.

И, скорее, декоративное достоинство Ruby — не нужно тратить время на объяснение обязательности форматирования кода отступами. Программа в любом случае четко размечена. Форматирование автоматически обеспечит rubocop, а писать правильно студенты научатся со временем.

Почему Ruby не популярен?

Почему же Ruby, обладая такими достоинствами, всё же не популярен и относится к языкам с высоким порогом вхождения?

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

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

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

Простой пример ограниченности большинства других языков программирования. Допустим, есть массив products, и требуется определить, что он не пуст. В большинстве языков мы напишем что-то типа if (products.size() > 0)…. Но, придя в магазин, мы не спрашиваем продавца: «Если у вас больше нуля такого-то товара?». Мы задаем простой вопрос: «Есть ли у вас такой-то товар?». В Ruby надо использовать методы, выражающие смысл действия. Да, мы можем использовать проверку на «больше нуля», но естественный способ — спросить if products.any? То есть буквально: есть ли продукты? Отметим, что Ruby хорошо работает с Юникодом, поэтому при необходимости на базе этого языка можно создать специализированные языки с региональной адаптацией. Например, если требуется переопределить по-русски все имена классов и методов.  

Интересный, хоть и не совсем прямой пример: Bato: A Ruby port for Filipinos.

К вопросу об объектности языка: в Ruby четко разделяются переменные/константы и объекты. В силу динамической природы языка данные «живут» своей жизнью как объекты. Любой идентификатор представляет собой константу или переменную, которая всего лишь ссылается на объект. Непонимание этого принципа приводит к неожиданностям:

str1 = "Test"
str2 = str1
str1.sub! "Te", "La"
puts str2 # => "Last" ???? Мы же меняли str1, что случилось?..

Здесь мы всего лишь использовали модифицирующий метод объекта, ссылки на который хранили две переменные. Отмечу, что это не традиционный для Ruby способ изменения. Обычно объекты сохраняют неизменными, а изменения порождают новые объекты. Кроме того, использованный здесь метод sub! имеет суффикс — восклицательный знак, — что является принятой в Ruby схемой именования методов, которые изменяют сам объект. Без этого символа метод просто породит новый объект.

Еще одна особенность Ruby, которая очень часто ставит в тупик разработчиков, пришедших из других языков программирования: концепция «блока». Синтаксически блок выглядит так же, как и в других языках программирования, причем сразу в двух вариантах: {…} и do..end (не забывайте, что Ruby создан для человека, поэтому выбираем для лучшей читаемости скобки, если выражение однострочное, и слова, если строк много). Суть блока в Ruby — это код, который хранится как объект и может быть активирован вызовом yield. Прямой аналог в C и  C++ — функции обратного вызова. В Javascript — анонимная функция типа some_func('on_element_click', function(event) {…}).

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

(1..5).map { |x| x * x } # => 1, 4, 9, 16, 25,

где { |x| x * x } — блок с объявленной локальной переменной x, то есть функция преобразования элементов массива. А метод, которому она передается, просто называется map (то есть «отобразить»). Причем не надо писать слово return, хотя это и возможно, потому что всё и так ясно (в Ruby результат последней операции всегда является возвращаемым значением). Причем код блока — это код, вызываемый автономно для каждого элемента массива. Именно поэтому бессмысленно пытаться заводить внутри блока переменные и надеяться, что их значение сохранится при обработке следующего элемента. Блок — это сохраненная функция обработки, и не более.

Если же мы хотим разобрать строку с числами, введенными с клавиатуры, достаточно написать:

gets.chomp.split.map(&:to_i)

То есть прочитать строку (gets), отбросить всякий мусор вроде символов перевода строк (chomp), разбить на слова (split), вызвать преобразование с функцией to_i (строго говоря, метода объектов типа «строка»). И ничего лишнего. Split знает, что в нормальном человеческом языке «разбить строку» означает разделить её по словам, где разделители — пробелы и знаки препинания. Map может быть использован в такой короткой форме с именем метода, который надо взять у объекта. Хотя можно было бы написать и полную форму map { |x| x.to_i }, или даже { |x| return x.to_i }. Но это не улучшает читаемость, поэтому можно оставить просто map(&:to_i).

Замечу, что концепция блока откровенно пронизывает Ruby. Даже код вида

class HelloWorld
  (1..3).each { puts 'Hi from class declaration!' }

  def hi
    puts 'Hello World!'
  end
end
HelloWorld.new.hi

выводит на экран:

Hi from class declaration!
Hi from class declaration!
Hi from class declaration!
Hello World!

Что здесь может показаться неожиданным? Цикл внутри объявления класса вывел сообщения. Потом получили сообщение из метода экземпляра этого класса. А секрет очень прост. Ruby — язык с регулярной моделью программирования. Типовой способ вызова любого метода с блоком:

method_with_block(args) do
...
end

Слова class и def в примере, по сути, являются именами методов, которым передаются аргументы HelloWorld, hi. Аргумент HelloWorld станет для нас константой-именем класса, а hi — именем метода. Остальная часть до слова end — это блок. А код блока активируется вызовом yield, после чего всё последовательно выполняется. То есть даже здесь практически нет разницы между вызовом обычного метода и объявлением методов, классов, модулей.

Также обратите внимание на активирующую конструкцию HelloWorld.new.hi. HelloWorld — константа — указывает на объект типа Class. У этого объекта есть метод new. Результатом вызова new является созданный объект типа HelloWorld, от которого вызываем метод hi. И даже здесь проявляется регулярность Ruby. Мы не пишем something = new HelloWorld, а просто вызываем метод конкретного объекта (Class, на который ссылается HelloWorld), который и порождает объект типа HelloWorld.

Непониманию языка способствуют и длинные цепочки вызовов:

Если вы знаете JavaScript или jQuery, то ничего особенно страшного здесь не видите. У тех же, кто пришел из C и C++, может возникнуть недоумение относительно количества точек. В Ruby применяется функциональное преобразование объекта. То есть вся эта цепочка — процесс преобразования строки, заключающийся в выделении слов, их преобразовании в числа, отборе только четных из них, возведении в квадрат и сложении результата.

Любой метод в Ruby порождает объект-значение. Исключений нет. Даже nil является объектом. Поскольку Ruby — динамический язык с автоматическим сборщиком мусора, нет необходимости заводить новые переменные. Промежуточные объекты будут удалены. То есть длинное выражение легко может быть разобрано на последовательность присвоения значений локальным переменным, которые последовательно вызывают соответствующие методы. Но зачем, если и так всё понятно?

В программах на Ruby крайне редко можно увидеть циклы типа for, while, loop. Они предусмотрены в синтаксисе, но почти не используются. Почему? Да потому, что не несут семантическую нагрузку.

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

products…# какой-то массив с объектами — товарами.
found_product = nil
for i in 0...products.size do
  if products[i].name == 'булочка с маком'
    found_product = products[i]
    break
  end
end

if  found_product != nil
  # Булочки нашли, делаем что-то полезное.
end

При этом нормальный Ruby-код выглядит как:
products… # какой-то массив с объектами-товарами
found_product = products.find { |product| product.name.eql? 'булочка с маком' }
unless found_product.nil?
# Булочки нашли, делаем что-то полезное.
end

То есть пишем буквально в одну строчку: товар найти по названию. И всё. Потому что реально нас интересует только отбор товара, а вовсе не индексы товаров и не их количество.

Пример из жизни: вы пришли в магазин и спросили несчастного продавца двумя способами: первый —  «Для всех товаров от нуля до 15143, если наименование товара равно булочка с маком, то дайте мне её»; второй — «Дайте мне булочку с маком». Вроде бы оба варианта синтаксически правильны, но естественен второй. Большинство программистов почему-то считают нормальным первый вариант. А Ruby-программисты — второй. И метод find здесь просто как один из заменителей цикла. Обращаю на это внимание, упреждая замечания, что в других языках тоже есть поиск по массиву с функцией отбора.

Так вот, хотя в Ruby есть синтаксические конструкции for, while и loop, их почти никто не использует, потому что есть конкретные методы: each, each_index, each_with_index, select, map, reduce, find, detect и многие другие, выражающие конкретный смысл — для каждого индекса, для каждого элемента и его индекса, отобрать, преобразовать, свернуть, найти и пр. И если надо получить индексы, мы будем использовать array.each_index. А если надо отобрать элементы, воспользуемся select. Акцент на естественность. Запрашиваем только то, что реально нужно сделать. Не нужен индекс — незачем его просить. Подробнее см. документацию по модулю Enumerable.

Резюме

Ruby — синтаксически простой, но гибкий язык с развитой объектной моделью, основной акцент которого — лаконичный, но хорошо воспринимаемый код, ориентированный на живого человека. Ruby присутствует по умолчанию в комплекте любой современной операционной системы (или может быть доустановлен в Windows). На этом языке написано огромное количество программ, существуют стабильные сообщества, готовые помочь советом или действием. Программы на Ruby — это базовые скрипты администрирования для Linux и MacOS (OpenSuSE/SuSE и brew.io соответственно), это математика и машинное обучение, это тесты (Rspec, Cucumber, Capybara…), это развертывание приложений (Puppet, Chef) и многое другое.

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

Ruby для начинающих — курс обучения Руби с нуля

Приступаем к изучению языка Ruby для начинающих. В ходе курса мы изучим синтаксис Руби и научимся писать консольные программы на нем.

Полезная ссылка:

Информация про Ruby

Ruby — мощный и популярный язык программирования. Помимо своей популярности на нём основывается известный фреймворк Ruby On Rails, который позволяет создавать крутые и динамические веб сайты различной тематики. Если взглянуть на рейтинг TIOBE, то язык входит в двадцатку самых популярных языков мира.

Язык появился в 1995 году и считается молодым языком в сравнении с Си или же C++, которые появились в 1972 и 1983 году соответсвенно. Язык имеет ряд преимуществ и специфичных возможностей, которые реализованы исключительно в нем, если брать в сравнение другие популярные языки программирования.

План курса

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

За курс мы изучим как установить и работать с языком, изучим синтаксис Руби (переменные, циклы, условные операторы), а также более сложные вещи: ООП, работа с файлами, исключения, методы и затронем еще множество других тем.


Установка Ruby на Windows

Для установки Руби на Виндовс используйте RubyInstaller, который можно скачать на официальном сайте по этой ссылке. Скачивайте последнюю версию и устанавливайте её как обычную программу. После завершения установки перед вами будет похожее окно:

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

В открывшемся окне введите поочередно 1 и нажмите Enter, дождавшись конца установки нажмите 2 и Enter и в конце выполните третью команду нажав 3 и Enter

Установка Руби на Мак

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

ruby -v

Если версия устаревшая, то можно выполнить загрузку новой. Для начала необходимо загрузить менеджер версий Ruby. Это делается через терминал при помощи команды:

curl -L https://get.rvm.io | bash -s stable

После установки менеджера необходимо перезапустить терминал. Выполните следующую команду:

rvm list known

После перезапуска вы можете установить ту версию, которую пожелаете. В нашем случае была установлена версия 2.4.2:

rvm install ruby-2.4.2

В конце вы можете еще раз проверить версию и если она по прежнему старая, то просто установите по-умолчанию новую версию:

rvm use ruby-2.4.2 --default

Не совсем крутой Ruby / Хабр

Помню, как два года назад столкнулся с Руби. Язык показался прекрасным, все в нем понятно и просто, нет ничего лишнего, нет ничего не очевидного. Шло время, навыки росли, времена менялись и вот уже Руби не кажется мне таким привлекательным как раньше: медленно работает, да и большие проекты поддерживать тяжело. Почему? Да потому что большие проекты и Руби — это вообще вещи несовместимые. Ты видишь скорость выполнения на других языках и хочется плакать — из-за того, что когда-то был сделан выбор именно в сторону этого языка программирования.

Ниже вы найдете 5 наиболее угнетающих меня вещей в Руби. Все они расписаны достаточно поверхностно.

1) Rails

Раньше казалось, что на Рельсах можно писать все. Быстро и уверенно. Не сомневаться в поддержке сообщества и вообще процветать. Однако, оказалось, что Рельсы — это очередная RAD-технология, в которой, не дай бог, ты отступишь вправо или влево. А если хочется использовать NoSQL или вообще XML? Как? А никак, можно смело выпиливать половину библиотек и даже не париться, однако не стоит забывать, что от этого Рельсы не станут работать быстрее, нет, нет, вы так же будете очень долго время ждать, пока проект подгрузит все не нужные вам зависимости. Никакой гибкости при Рельсах вы не получите.
2) ООП

Кто-то может смело сказать, что Руби — это ООП язык, но тут-то он и ошибется. Ведь в каком языке программирования Private — это не Private, а «Ну как бы Private, но так уж и быть можно и не Private». Про Protected и говорить нечего, до выхода Ruby 2.0 Private и Protected вообще ничем не отличались. Зачем все это внедрять в язык? Сидели бы как JS и не парились, хотя даже там есть хоть какое-то разделение (пусть и не очевидное). А вы слышали про Абстрактные классы в Руби? Нет? Конечно нет, ведь они не живут в этом доме. Я, конечно, не против Модулей в Руби. Но вы пробовали отследить все места, куда вы добавили этот модуль? А если проект большой? Вы точно никогда не найдете, куда именно вставили тот или иной модуль. Можно, конечно, на это все писать тесты, но кто в здравом уме будет писать тесты на инклуды (includes)?
3) Скорость выполнения

Вот это вообще больная тема. Скорость в сравнении с другими языками просто поражает (JS, GO): обычно наполнения массива числами и суммирование всех элементов на Ruby выполнится за 0.15, на Node.js — 0.056, на Go — 0.005. И как мне кажется, это серьезная заявка на просадки в скорости. При этом я не использовал старую версию 1.9.3, нет, я взял новенькую 2.2.0, где все должно быть радужно и прекрасно.
4) Многопоточность

Хорошо, в вашем языке нет скорости, нет малого ресурсопотребления. А что есть? Может быть, многопоточность сделали? Но нет, нет тут многопоточности, нет, ну она есть, но по-моему это не правильно, когда в один потом работает все быстрее, чем в несколько. Конечно, есть вариант использовать Rubinius и его крутые нативные треды, но вы же понимаете, что половину библиотек он поддерживать не будет. И это на самом деле подводит к пункту 5.
5) Кроссплатформенность

Казалось бы, Руби весь такой крутой с огромным комьюнити, но и тут есть подвох. Ничего дельного под Windows до сих пор не сделали. Все веб-проекты заточены под Unix и это немного сводит сума. Не то, чтобы я был большой фанат продукции Microsoft, но все же хочется иметь выбор. Хочется, чтобы команда пользовалась именно тем, чем ей удобном (у нас в команде есть Windows-фанат и Frontend разработчик, а запускать проект приходится в виртуалке), а не тем, что диктует язык программирования (когда речь идет о веб-разработке). Ведь node.js может работать под Windows, Java может работать под Windows, а хваленый Руби — нет.

Таким образом, я перечислил основные проблемы Ruby и Ruby сообщества. Я стал относить Руби к числу бесполезных языков — таких же бесполезных, как Python или Rust. Для чего они существуют — не очень понятно, но они существуют и будут продолжать существовать до тех пор, пока остаются люди, которые уверены в том, что это лучшие языки современности.

Экзамен сертифицированного Ruby Programmer Association для Ruby

Обзор и цели сертификационных экзаменов

Экзамены Ruby Association Certified Ruby Programmer предназначены для инженеров, которые проектируют, разрабатывают и / или эксплуатируют системы на основе Ruby, консультантов, которые делают предложения по системам на основе Ruby, и инструкторов, обучающих Ruby. Сертифицированные специалисты признаны за свои навыки Ruby-инженеров и за высокий уровень возможностей разработки систем на основе Ruby.Сдающие экзамен сертифицированы Ruby Association как Ruby Association Certified Ruby Programmer.

Наименования и уровни квалификации (экзамен)

Сертифицированный Ruby Association Certified Ruby Programmer Silver, версия 2.1 :

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

Сертифицированный Ruby Association Certified Ruby Programmer Gold, версия 2.1 :

Это свидетельство о более глубоком понимании тем, охватываемых сертификатом Silver (синтаксис, объектно-ориентированное программирование, встроенные библиотеки, операционные среды и т. Д.), В дополнение к знанию стандартных библиотек Ruby и знаниям, связанным с классами и объектами, необходимыми для Дизайн приложений на Ruby.

План исследования

Время проверки
90 минут
Метод
Компьютерное тестирование
Кол-во вопросов
50 (множественный выбор)
проходной балл
75%
целевая версия
Рубин 2.1.x
Объем

Синтаксис

  • Комментарий
  • Литерал (например, числа, логические значения, строки, символы, массивы, хэши)
  • Переменные, константы и область видимости
  • Операторы
  • Условное ветвление
  • Петли
  • Обработка исключений
  • Вызов метода
  • Блоки
  • Определение метода
  • Определение класса
  • Определение модуля
  • Многоязычие

Встроенные библиотеки

  • Хорошо используемые встроенные классы и модули
    (например,g., Object, Числовые классы, String, Array, Hash, Kernel, Enumerable, Comparable)

Ориентация объекта

  • Полиморфизм
  • Наследование
  • подмешивание

Стоимость экзамена
150 долларов США (стоимость образования)
Время проверки
90 минут
Метод
Компьютерное тестирование
Кол-во вопросов
50 (множественный выбор)
Проходной балл
75%
целевая версия
Рубин 2.1.x
Объем

Среда выполнения

  • Параметры командной строки
  • Предварительно определенные переменные и константы

Синтаксис

  • Переменные и константы Операторы
  • Блоки
  • Исключения
  • Нелокальный выход
  • Аргументы ключевого слова
  • лямбда

Объектно-ориентированное программирование

  • Подробная информация о методе
  • Контроль доступа
  • Подробная информация о классе
  • Наследование класса
  • Детали модулей
  • Модуль № препенд
  • Уточнения

Встроенные библиотеки

  • Хорошо используемые встроенные классы и модули
    (e.g., Объект, Модуль, Ядро, Перечислимое, Сопоставимое)
  • Цифровой
  • Регулярное выражение
  • Proc
  • Нить / Волокно

Стандартная библиотека

  • Широко используемые стандартные библиотеки (e.г., розетка, дата, строка)
Стоимость экзамена
150 долларов США (стоимость образования)
Банкноты
Кандидат должен сдать и серебряный, и золотой экзамены, чтобы получить сертификат Ruby Association Certified Ruby Programmer Gold

Сертификация

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

Регистрация

Экзамен проводится в испытательных центрах Prometric.

Учебные материалы

Для серебряного экзамена
Для экзамена на золото

История успеха экзамена

Даниэль Париенте

Я не большой поклонник сертификатов, но с некоторого времени я решил инвестировать в себя.У меня была прекрасная возможность получить бесплатный ваучер, и я не стал дважды думать, так как смог продемонстрировать свои навыки владения рубином. Я думала сдать экзамен немедленно, но придерживалась крайнего срока в две недели, чтобы учиться. Для того, чтобы быть разработчиком, который работает над ruby ​​/ rails каждый день, у меня была хорошая база, но я решил не принимать во внимание какие-либо предыдущие знания и начать с нуля, как если бы я просто изучал язык.

Я организовал свое время так, чтобы заниматься по крайней мере один час каждый день. Я сдал подготовительный экзамен и знал, что это будет нелегко.Я составил учебный план и организовал все ресурсы, которые, по моему мнению, были бы полезны для моего обучения, начиная с книги, которая характеризуется обучением путем выполнения под названием «Руби трудный путь», с серией упражнений, затрагивающих разные темы язык.

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

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

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

Таким образом, я создал приложение rails http://danielpariente.com/flashcards, которое имитировало эти карточки, используя методы или все, что я хотел узнать с одной стороны, и фрагмент кода с примером использования с другой. Для изучения модуля Enumerable я применил другой подход, думая о том, как бы я написал различные методы, используя все свои предыдущие знания, а затем просмотрел реализацию в rubinius, чтобы увидеть, как они там это сделали.

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

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

Я пошел в экзаменационный центр, как будто собирался на войну, имея в своем арсенале все, что я изучал в те дни.Оказавшись там, подготовка комнаты заняла не менее 15 минут, которых было достаточно, чтобы у меня возникли негативные мысли, например, что произойдет, если я не смогу сдать экзамен, которые я снял с ума со словами «все будет хорошо».

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

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

.

IDE Ruby on Rails от JetBrains

Работайте быстрее с интеллектуальным редактором

Более эффективное создание высококачественного кода благодаря первоклассной поддержке Ruby и Rails, JavaScript и CoffeeScript, ERB и HAML, CSS, Sass и Less, а также Больше.

Воспользуйтесь преимуществами синтаксиса языка и выделения ошибок, кода форматирование, автозавершение кода и быстрая документация.

Найдите свой путь вокруг

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

Наслаждайтесь сверхбыстрой навигацией в своем проекте Rails с помощью представления проекта на основе MVC и диаграммы зависимостей модели, класса и драгоценного камня.

Обнаружение и устранение запахов кода

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

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

Тестирование и отладка с удовольствием

Используйте мощный отладчик с графическим интерфейсом для Ruby, JavaScript и CoffeeScript. Установите точки останова, запустите свой код шаг за шагом и используйте все доступные информация на кончиками пальцев.

Создание и запуск RSpec, Cucumber, Shoulda, MiniTest & Test :: Unit-тесты с кодированием помощь и средство запуска тестов на основе графического интерфейса.

Наслаждайтесь точным и настроенным рабочим пространством

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

Экономьте время с унифицированным интерфейсом для работы с Git, SVN, Mercurial и другими версиями Системы управления.

Управляйте средой вашего проекта

Наслаждайтесь бесшовной интеграцией с такими инструментами, как Rake Task Runner, Rails Generators, Bundler, RVM / Rbenv, Zeus и другие.Терминал также доступен как инструмент IDE. окно, когда вам это нужно.

Простая настройка автоматического развертывания через FTP или SFTP и управление инфраструктурой с Vagrant, Capistrano, Chef или Puppet.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *