DHH · 2025-07-12 · temy-lex-474-2025 · source ↗
Доктрина Rails: девять принципов
Написаны в 2012-м. Почему записал:
> «If you want a community to endure, you have to record its values and you have to record its practices. If you don't, eventually you're gonna get enough new people come in who have their own ideas… We forget why Chesterton's Fence is there.» — [1:59:04](https://youtu.be/vagyIcmIGOQ?t=7144)
## 1. Оптимизируй счастье программиста
В честь Matz. Иногда это компромисс с производительностью — и всё равно да. Двусмысленность разрешена: `exit` и `quit` делают одно и то же, потому что люди наберут и то, и другое.
## 2. Конвенция вместо конфигурации
Родилась из Java-фреймворков с тысячами строк XML: как называть внешний ключ — `post_id`, `postId`, `PID`? Это не имеет значения. Надо просто выбрать.
> «I'm not just handing you a box of fucking Legos and asking you to build the Millennium Falcon. I'm giving you a finished toy.» — [2:02:43](https://youtu.be/vagyIcmIGOQ?t=7363)
Программисты любят коробку с конструктором — это и делает их программистами. Задача — направить этот инстинкт на решения, которые действительно важны.
## 3. Меню — omakase
Всё, что не так с экосистемой JavaScript: никто не отвечает за меню. Двадцать пять способов сделать контроллер, столько же — работать с базой, и все используют одно и то же не дольше пяти минут. «No retained wisdom. We build up no durable skills».
## 4. Монолит и «не распределяй»
> «When you apply that pattern to a team of 20 programmers working on a code base of half a million lines of code, you're an idiot. You just don't need to turn method invocations into network calls. It is the first rule of distributed programming. Do not distribute your programming.» — [2:06:51](https://youtu.be/vagyIcmIGOQ?t=7611)
Basecamp и HEY — по ~100 000 строк Ruby. Basecamp — примерно 420 экранов. HEY при запуске отправляла в браузер 40 килобайт JavaScript; Gmail — 28 мегабайт несжатого. Та же задача.
Разделение фронтенда и бэкенда он называет «одним из великих преступлений против веб-разработки».
## 5. Ни одной парадигмы
Ruby в ядре объектный, но заимствует функциональное: цепочки блоков, неизменяемые строки. Rails — ремикс: он не придумывал ни ActiveRecord, ни MVC.
## 6. Возвышай красивый код
`class Project < ApplicationRecord; belongs_to:account; has_many:participants` — Лекс прочитал это вслух, ничего не меняя. Хайку.
ActiveRecord — «жемчужина короны». Паттерн из книги Фаулера «Patterns of Enterprise Application Architecture» (2001), одной из немногих, которые он читал много раз. Суть: таблицы становятся классами, строки — объектами. Не прячет SQL, а убирает из него утомительное. SQL знать надо — он пережил десятилетие NoSQL и остался.
## 7. Острые ножи
> «Here's a dull butter knife. Cut your damn steak, right? That's a very frustrating experience. You want a sharp knife even though you might be able to cut yourself.» — [2:19:10](https://youtu.be/vagyIcmIGOQ?t=8350)
Отрежешь виртуальный палец — отрастёт, а компетентность вырастет.
## 8. Ценить интегрированные системы
Rails решает всю проблему веба, а не один кусок.
## 9. Прогресс важнее стабильности — здесь он передумал
> «If there's one that's dated, it's probably that one.» — [2:20:10](https://youtu.be/vagyIcmIGOQ?t=8410)
Писал это до «унижения 2010-х» в JavaScript, где стабильность не просто не ценилась — презиралась. Сегодня написал бы иначе. Rails 8 — почти не апгрейд после 7, 7 — после 6.
Более глубокая мысль: технологии двигаются ледниково. За всю его карьеру изменилось три вещи — интернет в 95-м, iPhone в 2007-м, ИИ сейчас. Всё остальное — инкремент. Код Basecamp 2003 года до сих пор работает и зарабатывает миллионы.
## Мягкий пандус в бесконечность
Миссия Rails — опустить порог входа так, чтобы человек увидел результат в браузере, ничего не понимая. Но это приглашение учиться, а не разрешение не учиться.
> «The path here is competence. I'm trying to teach you things… Active record says like, yeah, yeah. All right, start here and then like next week we'll do a class on SQL.» — [2:18:09](https://youtu.be/vagyIcmIGOQ?t=8289)