Читать книгу Код. Культура, скомпилированная в байты - - Страница 7
ЧАСТЬ I: ФИЛОСОФИИ
Глава 1. Манифесты
1.2. Ruby Way: счастье программиста
ОглавлениеВ 1993 году Юкихиро Мацумото, известный в сообществе как Matz, начал работу над языком, который должен был сделать его счастливым. Это не метафора и не преувеличение – Мацумото буквально ставил такую цель.
«I wanted to have fun programming. I wanted to minimize my frustration. I wanted to maximize my joy» – «Я хотел получать удовольствие от программирования. Я хотел минимизировать разочарование. Я хотел максимизировать радость», – объяснял он много лет спустя.
Ruby появился в Японии и долгое время оставался почти неизвестным за её пределами. Первая книга на английском вышла только в 2000 году, через пять лет после публичного релиза. Но когда западный мир наконец открыл Ruby, он обнаружил язык с необычной философией: язык, спроектированный вокруг эмоций программиста.
«Ruby is designed to make programmers happy» – «Ruby создан, чтобы делать программистов счастливыми».
Мацумото повторял эту фразу в сотнях интервью, и с каждым повторением она становилась чем-то большим, чем личное предпочтение, – она становилась манифестом. Что значит «счастье» в контексте языка программирования? Для Мацумото это означало несколько вещей: выразительность, позволяющую записать мысль так, как она приходит в голову; гибкость, не заставляющую бороться с языком; элегантность, приносящую эстетическое удовольствие.
Ruby наследует идеи из множества источников: Perl дал ему выразительность и работу с текстом, Smalltalk – объектную модель, Lisp – метапрограммирование. Но сочетание этих элементов уникально. В Ruby всё является объектом – даже числа, даже nil, даже классы. Это не просто техническое решение, это философское: мир программы однороден, в нём нет «особых случаев».
«I believe people want to express themselves when they program. They don’t want to fight with the language» – «Я верю, что люди хотят выражать себя, когда программируют. Они не хотят сражаться с языком», – говорил Мацумото.
В Ruby можно написать одно и то же многими способами. Это прямая противоположность Python с его принципом «один очевидный способ». Где ван Россум видел хаос и непоследовательность, Мацумото видел свободу и уважение к программисту. Почему язык должен диктовать единственный правильный путь? Пусть каждый выберет тот способ, который кажется ему красивым.
Этот выбор имеет глубокие последствия. Код на Ruby, написанный разными программистами, может выглядеть очень по-разному. Один напишет традиционный цикл, другой использует итератор с блоком, третий – метод из стандартной библиотеки. Всё это будет работать, всё это будет идиоматичным Ruby. Но читать чужой код становится сложнее: нужно понимать не только язык, но и стиль конкретного автора.
«Matz is nice and so we are nice» – «Матц добрый, и мы тоже добрые».
MINASWAN – акроним, ставший неофициальным девизом Ruby-сообщества. Это не просто декларация доброжелательности. Это признание того, что культура языка определяется не только синтаксисом, но и людьми, которые его используют. Мацумото создал атмосферу, в которой вежливость и взаимопомощь стали нормой. Сообщество унаследовало эту атмосферу.
Принцип наименьшего удивления – ещё один столп философии Ruby. POLA, или Principle of Least Astonishment, означает, что язык должен вести себя так, как программист интуитивно ожидает. Если программист думает, что определённый код должен работать определённым образом, – он должен работать именно так.
«I designed Ruby to minimize the surprise for me. Not for everyone – for me. But I believe that most programmers think similarly» – «Я проектировал Ruby так, чтобы минимизировать удивление для меня. Не для всех – для меня. Но я верю, что большинство программистов думают похоже», – уточнял Мацумото.
Это важное уточнение. Принцип наименьшего удивления субъективен: то, что удивляет одного программиста, может казаться естественным другому. Мацумото признавал эту субъективность, но утверждал, что существует достаточно общего в том, как программисты думают, чтобы делать обоснованные предположения.
Контраст с Python здесь особенно заметен. Python и Ruby возникли почти одновременно, оба – скриптовые языки с динамической типизацией, оба стремятся к читаемости и удобству. Но их философии различаются в фундаментальном вопросе: что важнее – единообразие или выразительность?
Python говорит: единообразие. Когда весь код выглядит одинаково, его легче читать, легче поддерживать, легче передавать между командами. Цена – ограничение творческой свободы программиста.
Ruby говорит: выразительность. Когда программист может выбрать способ, который кажется ему красивым, он пишет с удовольствием. Цена – код может быть менее предсказуемым, требовать больше усилий для понимания.
Ни одна из позиций не «правильнее» другой. Это разные ответы на один вопрос: как должны выглядеть отношения между языком и программистом? Python ставит язык в позицию строгого наставника, который знает, как правильно. Ruby ставит язык в позицию услужливого инструмента, который подстраивается под мастера.
Ruby on Rails – фреймворк, сделавший Ruby знаменитым за пределами Японии, – воплотил эту философию в практике веб-разработки. «Convention over configuration» – «соглашение важнее конфигурации» – ещё один манифест: не заставляй программиста принимать решения там, где есть разумный вариант по умолчанию. Rails был самоуверенным – он предлагал один правильный способ строить веб-приложения, но этот способ был спроектирован так, чтобы приносить удовольствие.
Парадокс Rails в том, что его принцип «соглашение важнее конфигурации» ближе к философии Python, чем к философии Ruby. Rails ограничивает свободу программиста ради последовательности. Но он делает это в рамках Ruby, который эту свободу даёт. Результат – фреймворк, который одновременно опинионирован и гибок, строг в структуре и выразителен в деталях.
Сам Мацумото никогда не претендовал на универсальность своих идей. «Ruby is not perfect. It’s just one way of thinking about programming. But I believe it’s a good way» – «Ruby не идеален. Это лишь один способ думать о программировании. Но я верю, что это хороший способ», – признавал он.