DHH · 2025-07-12 · temy-lex-474-2025 · source ↗
Ruby и красивый код
Это ядро разговора: почти час про то, почему код может и должен быть красивым.
## Где точки с запятой?
Первое, что его поразило в Ruby, — отсутствие точек с запятой. Они нужны интерпретатору, а не человеку.
> «Oh, someone is looking out for the human here, not for the machine.» — [0:44:04](https://youtu.be/vagyIcmIGOQ?t=2644)
Три примера, которые он разбирает на пальцах:
- `5.times { … }` — число само объект, метод вызывается прямо на нём. «There's literally no other programming language that I know of that has managed to boil away the line noise… to that extent».
- `user.downgrade unless user.admin?` — вопросительный знак ничего не значит для машины, только для человека; `unless` убирает уродливое `if!`. Все варианты компилируются в один и тот же код — Ruby просто разрешает выбрать тот, который читается.
- `5.days` — не Matz это придумал, а DHH добавил в ActiveSupport, потому что ему нужно было задавать срок кэша. Читатель не отличит его код от кода автора языка.
> «He trusted me as a complete stranger from Denmark who had never met to mess with his beautiful story. That level of trust is essentially unheard of.» — [0:58:27](https://youtu.be/vagyIcmIGOQ?t=3507)
## Matz против Гослинга: два взгляда на человека
Гослинг (Java) прямо говорил: средний программист глуп, ему нельзя давать острые инструменты — он отстрелит себе ногу. Matz пошёл в противоположную сторону.
> «He believes in humanity. He believes in the unlimited capacity of programmers to learn and become better. So much so that he's willing to put the stranger at his own level.» — [0:56:23](https://youtu.be/vagyIcmIGOQ?t=3383)
Первый черновик Ruby 1993 года — это 90% того, что используют сегодня. «Almost a sense of divine inspiration». Никто так и не скопировал суть, хотя все брали элементы.
## Python — некрасивый (и он об этом честно)
`def __init__(self, …)` — самый важный метод любого класса записан одним из самых уродливых способов, какие он видел. Ruby: `def initialize` — без подчёркиваний, без `self`, без скобок, если аргументов нет. И без сокращений: `initialize` длиннее `init`, но пишешь его редко, а смотришь часто.
Второй контраст — интерактивная оболочка. В Ruby выходят и `exit`, и `quit`: люди наберут то или другое. Python на `exit` читает лекцию: «use exit() or Ctrl-D».
> «One is very human and another is very engineer.» — [2:00:40](https://youtu.be/vagyIcmIGOQ?t=7240)
## Динамическая типизация — «буду защищать до смерти»
Аргументы против статической типизации в его мире:
- Повторы. `User user = new User()` — слово три раза. «I don't have time for this».
- Метапрограммирование становится мучением; из-за этого TypeScript выкинули из Turbo.
- Инструменты порождают шаблонный код. Языки с хорошим автодополнением терпят гораздо больше boilerplate — «ты же его не печатаешь». Он печатает: «I chisel them out of the screen with my bare hands».
- Баги ловятся тестами, не компилятором.
И главная оговорка: система на 10 миллионов строк и сто тысяч программистов — другой мир, там нужны другие методы. Ошибка — считать, что то же самое нужно одному человеку в спальне.
> «You don't use your Pagani to go pick up groceries at Costco.» — [1:11:47](https://youtu.be/vagyIcmIGOQ?t=4307)
Про своё раннее евангелие Rails признаётся: вёл его как крестовый поход. Понял позже, что мозги у людей настроены по-разному, и кому-то нужна страховка IDE.
## Ruby — язык-люкс
> «Ruby is a luxury language… It is the Coco Chanel of programming languages. Something that not everyone can afford. And I mean this in the best possible way.» — [1:23:01](https://youtu.be/vagyIcmIGOQ?t=4981)
Считал сам: ~15% операционного бюджета уходило на серверы приложений. Чтобы улучшить экономику на 7 пунктов, нужен язык вдвое быстрее. А если Ruby делает программиста на 10% продуктивнее — это двигает стрелку куда сильнее. Ровно та же логика, по которой все теперь сходят с ума по ИИ.
Масштаб: Shopify — миллион динамических запросов в секунду в чёрную пятницу, ~30% всей электронной коммерции, монолит на 5 миллионов строк Ruby. Твиттер ушёл с Rails — «и десять лет ничего не происходило» — лучшая реклама.
## Software writer, не engineer
> «I'm not an engineer… the vast majority of the time, I'm a software writer. I write software for human consumption and for my own delight.» — [5:26:37](https://youtu.be/vagyIcmIGOQ?t=19597)
Он предлагает различать software writers и software mathematicians — это точнее описывает уровень абстракции, чем «инженер». Пишет он так же, как эссе: аргументы появляются в процессе печатания, решение возникает, пока набираешь.