Superintelligence CouncilСовет гения · sim.im

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 — это точнее описывает уровень абстракции, чем «инженер». Пишет он так же, как эссе: аргументы появляются в процессе печатания, решение возникает, пока набираешь.