Большинство языков программирования включают библиотеки, необходимые большинству программистов, но совсем немного специальных инструментов. Здесь на помощь приходит среда разработки. Вместо того чтобы программировать все с нуля, что займет много времени, вы задействуете среду разработки, которая позволит импортировать и использовать проверенные и надежные библиотеки для решения специальных задач, и сосредоточиваетесь на своем приложении, а не создаете Вселенную.
Среда разработки может иметь разный объем. Некоторые среды включают множество функций и команд в попытке сэкономить программистам время, другие же обходятся минимумом, охватывая лишь несколько основных функций.
В настоящее время у языка Ruby имеется несколько основных сред разработки интернет-приложений. Самые популярные из них — это Ruby on Rails [9] и Sinatra [10].
Ruby on Rails (ее часто называют просто Ruby) была одной из первых больших сред разработки интернет-приложений, предназначенных для Ruby. Созданная в 2004 году Давидом Хейнемейером Ханссоном, Rails использовалась для создания нескольких популярных приложений компании 37signals [11], одним из владельцев которой был Ханссон. В настоящее время тысячи компаний разработали серьезные интернет-приложения для бизнеса на основе Rails.
Программный каркас Rails основан на «генераторах», встроенных программах, которые в ответ на одну команду генерируют большой объем стандартного кода. Затем стандартный код модифицируется в соответствии с конкретными требованиями программиста. Rails помогает разработчику сэкономить время и создать работоспособное приложение без необходимости писать программу с нуля — при условии, если он знает, что ему нужно.
Среда разработки Sinatra, наоборот, является минимальной. Sinatra не использует генераторы, а предоставляет в распоряжение разработчика несколько простых функций, необходимых практически в каждом интернет-приложении, а затем самоустраняется.
Приложения Sinatra выглядят простыми по сравнению с приложениями Rails. Одна-единственная команда в Rails может сгенерировать больше десяти папок и больше 20 файлов. Приложение Sinatra во многих случаях состоит всего лишь из одного файла. Sinatra не генерирует большой массив кода, который затем может быть удален, а поддерживает простоту проекта, добавляя ровно столько кода, сколько нужно для работы.
Подобно выбору языка программирования, выбор среды разработки определяется в основном личными предпочтениями и характером задачи. Rails больше подходит для крупных проектов, над которыми работают несколько программистов, а Sinatra — для небольших. У этих двух сред разработки много общего, и недавнее исследование на RubySource.com показало, что выбор между ними по большей части определяется субъективными причинами [12].
GitHub — это источник программ с открытым кодом, который используют многие программисты для разработки и поддержки своих проектов. Там легко найти примеры приложений, написанных в Rails и Sinatra, чтобы получить представление о каждой среде разработки, и я потратил еще один час на изучение открытых проектов.
Тут существует нетривиальный риск: чтобы изучить программирование, требуется сделать выбор. После того как вы отдали предпочтение определенному языку программирования и среде разработки, гораздо легче приступить к изучению всего, что необходимо знать для написания программы. Однако, не сделав этого выбора, можно потратить годы на поиски «идеальных» средств программирования.
Лучше выбрать язык и среду программирования, которые кажутся вам привлекательными, потратить какое-то время на знакомство с ними и согласиться на неизбежные компромиссы, чем годами заниматься «исследованиями», не продвинувшись ни на шаг. Целый день просидеть в Stack Overflow и Hacker News — это не программирование.
В конечном итоге я решил начать со среды Sinatra. Генераторы Rails могут сэкономить уйму времени, если знать, что ты делаешь, — но я этого не знаю.
Интуиция подсказывает мне, что в такой ситуации лучше выбрать Sinatra. В этой среде программирования ясный, простой и понятный синтаксис. Единственный код, который существует в приложении Sinatra, — это код, созданный разработчиком. Среда разработки хорошо задокументирована, примеры рабочих приложений можно без труда найти на GitHub, а за помощью обратиться к Stack Overflow.
Когда-нибудь я, возможно, поэкспериментирую с Rails. Но теперь лучше начать со среды разработки Sinatra.
Анализ конечного результата
Потратив около пяти часов на предварительные исследования, я сделал все, что требуется для начала работы: разбил интернет-программирование на элементы, выбрал язык, среду разработки и конкретный проект. Пора приступать к делу.
«Разработать приложение в среде Sinatra, которое обслуживает сайт Jekyll» — так выглядит целевой уровень мастерства, однако мне нужно проанализировать это заявление, чтобы спланировать следующий шаг. Чему я должен научиться?
Еще час исследований, и я получаю вот какой результат.
1. Jekyll создает рабочий сайт из локальных статических файлов. Мне нужно сделать шаблон HTML для сайта при помощи специальных форматирующих тегов и экспортировать архив публикаций с сайта PersonalMBA.com, как описывается в инструкции, написанной Полом Стаматиу[13].
2. Приложение, созданное в среде Sinatra, обрабатывает запросы от посетителей сайта, предоставляя им запрошенные файлы. Это приложение я должен написать с нуля.
3. Готовый сайт Jekyll и серверное приложение Sinatra требуется загрузить на сетевой хост.
4. Для решения всех этих задач мне нужно понять, как установить на мой компьютер последнюю версию языка Ruby, а также среду Sinatra и другие необходимые программы.
Последнее требование может служить превосходным примером подготовки необходимых условий для занятий. Если я не смогу понять, как установить Ruby на свой компьютер, то буду не в состоянии перейти к следующим этапам. Так что начинать нужно с этого.
Важно отметить, что интернет-технологии меняются ежедневно. Вполне вероятно, что какие-то последовательности команд, приведенные в данном разделе, уже устареют к тому времени, когда вы будете читать книгу. Не переживайте: важен метод, а не команды.
Аналогичным образом, у вас возникнет искушение лишь бегло просмотреть приведенные фрагменты программы. Это естественное желание: строки кода выглядят слишком сложными, и вы, скорее всего, не сразу поймете, что они означают.
Я бы советовал вам не поддаваться искушению. Эти имена, команды и символы казались мне такими же чужими, как сейчас кажутся вам. Эта глава посвящена процессу, с помощью которого вы разберетесь в том, что они значат и как их использовать. Если вы попытаетесь прочесть строки программы, то извлечете гораздо больше пользы из этой главы.
Вперед!
Обновление Ruby
Компьютер у меня уже есть, и это хорошее начало: без него писать программу невозможно.
В настоящее время я пользуюсь Apple MacBook Air с операционной системой Mac OS X 10.6. Недолгий поиск в Google позволяет выяснить, что операционная система поставляется с уже установленной программой Ruby версии 1.8.7. И это тоже хорошо: я могу запускать написанные на языке Ruby программы без дополнительных усилий.
Но проблема в том, что Ruby 1.8.7 не самая последняя версия программы. Когда я пытаюсь установить Jekyll, система сообщает, что программа требует версию Ruby не ниже 1.9.1, и это значит, что мне нужно выяснить, как обновить программу. Придется вновь прибегнуть к помощи Google.
Поиск выявил две программы, предназначенные для облегчения установки Ruby: rbenv и ruby-build. Обе программы поддерживаются Сэмом Стефенсоном, разработчиком Ruby из компании 37signals. Вместе они помогают устанавливать новые версии Ruby и указывать компьютеру, какую версию использовать.
Инструкция на странице документации [14] rbenv показывает, как установить программы на компьютер. Вот что представляют собой команды установки:
$ cd ~
$ git clone git://github.com/sstephenson/ruby-build.git
$ cd ruby-build
$ sudo./install.sh
$ cd..
$ git clone git://github.com/sstephenson/rbenv.git.rbenv
$ mkdir — p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashprofile
$ echo 'eval "$ (rbenv init — )"' >> ~/.bashprofile
$ exec $SHELL
$ rbenv install 1.9.3-p125
$ rbenv rehash
$ rbenv global 1.9.3-p125
Выглядит устрашающе, но это всего лишь список команд. Давайте проанализируем его.
Эти команды водятся в программе Terminal, которая предустановлена на компьютерах Apple. В кинофильмах часто показывают хакеров, которые лихорадочно набирают длинные строчки команд, отображающиеся на экране. Так вот — их компьютеры работают в программе Terminal [15].
Я открываю программу и ввожу первую команду:
$ cd ~
Эту команду понять нетрудно. Символ $ программа Terminal выводит на экран, когда готова к приему новой команды. cd — это сокращение от «сменить каталог» (change directory). Не составляет труда выяснить, что символ ~ обозначает «корневой каталог пользователя», то есть папку на моем компьютере, где хранится мой профиль пользователя.