Бьёрн Страуструп однажды сформулировал простую закономерность: для новых фич программистам нужен громкий и явный синтаксис, а для привычных — краткая нотация. Это назвали Stroustrup's Rule.
Пример — обработка ошибок в Rust. Когда option types только появились, разворачивать File::open("file.txt") приходилось через громоздкий match с ветками Ok и Err, возвращая ошибку через return. Люди привыкли — появился макрос try!. Ещё привыкли — появился оператор ?. Синтаксис сжался, потому что у сообщества сформировалась мысленная модель: лишние детали стали визуальным шумом.
Автор замечает, что это одни и те же люди меняют предпочтения. Новичку нужна явность, эксперту — лаконичность. И то же самое происходит с целым языком: пока комьюнити молодое, все новички, и синтаксис тяготеет к многословию. С годами доля экспертов растёт, и в язык протаскивают «экспертные» фичи вроде кратких операторов.
Яркий пример — «моржовый» оператор присваивания := в Python. С ним можно написать if val := dict.get(key):, вместо трёх строк. Эксперты радовались элегантности. Учителя и начинающие взбесились — язык стал сложнее для изучения. Опять та же борьба явного и краткого.
Автор честно признаётся: когда он ведёт воркшопы, ему приходится активно бороться с собственными привычками. То, что удобно читать ему, плохо для новичков. Конкретный пример — инварианты типов в TLA+. Можно элегантно написать counter \in [Workers -> Nat] — это функция, отображающая всех работников в натуральные числа. А можно по-простому: \A w \in Workers: counter[w] >= 0. Эксперты предпочтут второй вариант более красивым, но автор учит «плохому» первому, потому что новички его понимают.