Читать книгу Код. Культура, скомпилированная в байты - - Страница 6

ЧАСТЬ I: ФИЛОСОФИИ
Глава 1. Манифесты
1.1. Zen of Python: ясность как ценность

Оглавление

В 1999 году Тим Питерс отправил в рассылку comp.lang.python письмо, которое изменило способ разговора о Python. Он назвал его «The Zen of Python», и письмо содержало девятнадцать коротких утверждений о том, каким должен быть хороший код. Двадцатое место Питерс оставил пустым. Он никогда не объяснил почему, но само это молчание стало частью философии: иногда лучший ответ – отсутствие ответа.

Текст был включён в Python Enhancement Proposal под номером 20 и получил особый статус. В отличие от других PEP, которые предлагают конкретные изменения в язык, PEP 20 не предлагает ничего – он описывает. Это не план действий, а система координат. И в знак признания этого статуса разработчики встроили Zen of Python в сам интерпретатор: достаточно написать «import this», чтобы прочитать его.

«Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated.» – «Красивое лучше уродливого. Явное лучше неявного. Простое лучше сложного. Сложное лучше запутанного.»

Первые строки задают тон. Красота здесь не эстетическая категория – это свойство кода, который легко понять. Явность противопоставлена магии: если что-то происходит, читатель кода должен видеть, что именно. Различие между простым и сложным, сложным и запутанным – не игра слов. Простое решение лучше сложного при прочих равных, но сложное решение сложной проблемы лучше, чем запутанное решение, которое притворяется простым.

«Readability counts» – «Читаемость имеет значение».

Эта короткая фраза – возможно, самая важная в документе. Код пишется один раз, читается многократно. Программист, который напишет нечитаемый код ради экономии нескольких символов, украдёт время у всех, кто будет этот код поддерживать, – включая себя через полгода.

«There should be one – and preferably only one – obvious way to do it» – «Должен существовать один – и желательно только один – очевидный способ сделать это».

Эта строка – сознательный контраст с девизом Perl: «There’s more than one way to do it» – «Есть больше одного способа сделать это». Perl гордился тем, что давал программисту свободу выбора. Python занял противоположную позицию: если существует много способов сделать одно и то же, каждый программист выберет свой, и чтение чужого кода превратится в разгадывание головоломки. Один очевидный способ – это не ограничение, а освобождение. Не нужно выбирать, не нужно спорить о стиле, не нужно переучиваться при переходе в новую команду.

Чтобы понять Zen of Python, нужно знать контекст его создания. Гвидо ван Россум начал работу над Python в декабре 1989 года в Центре математики и информатики в Амстердаме. Он искал занятие на рождественские каникулы, и этим занятием стало создание языка.

Но Python не возник из пустоты. Ван Россум участвовал в разработке ABC – образовательного языка, созданного в том же центре. ABC был спроектирован, чтобы научить людей программировать, не отпугивая их. Многие черты Python – значимые отступы, простой синтаксис, интерактивный режим – пришли из ABC. Но ABC никогда не вышел за пределы академии. Ван Россум хотел создать язык с той же философией доступности, но пригодный для реальной работы.

«I had this idea that Python should be easy to learn and easy to read» – «У меня была идея, что Python должен быть лёгким для изучения и лёгким для чтения», – говорил ван Россум в интервью. Лёгкость обучения и лёгкость чтения – не одно и то же, но он стремился к обоим. Лёгкость обучения означала минималистичный синтаксис: меньше специальных символов, меньше исключений из правил, меньше «магии». Лёгкость чтения означала, что код должен выглядеть почти как псевдокод – понятный человеку, который никогда не видел Python.

«I was aiming for a language that would be useful for people who didn’t want to be computer scientists» – «Я стремился к языку, который был бы полезен людям, не желающим становиться учёными-информатиками», – объяснял он в другом интервью. Python задумывался не для профессиональных программистов, а для учёных, системных администраторов, всех, кому нужно автоматизировать рутину, но кто не готов тратить годы на изучение сложных языков.

Эта философия определила множество конкретных решений. Почему в Python нет объявления переменных? Потому что это лишний шаг, который отпугивает новичков. Почему нет фигурных скобок для блоков кода? Потому что отступы и так используются для читаемости – почему бы не сделать их обязательными? Почему нет перегрузки операторов в стиле C++? Потому что это усложняет понимание кода: «a + b» должно означать сложение, а не что-то неожиданное.

«Special cases aren’t special enough to break the rules. Although practicality beats purity» – «Особые случаи не настолько особые, чтобы нарушать правила. Хотя практичность побеждает чистоту».

Вот суть Python в двух строках. С одной стороны – последовательность: не делай исключений из правил ради удобства отдельных случаев. С другой – прагматизм: если правило мешает делу, нарушай его. Это не противоречие, а баланс. Питерс описывает не догму, а инженерное суждение.

Python никогда не был чистым языком. В нём есть множественное наследование, хотя это усложняет понимание кода. В нём есть lambda, хотя Гвидо ван Россум неоднократно сожалел о её синтаксисе. В нём есть глобальная блокировка интерпретатора (GIL), которая мешает параллельному выполнению, – компромисс, принятый ради простоты реализации в эпоху, когда многоядерные процессоры были экзотикой.

Каждое из этих решений можно критиковать. Но в совокупности они создали язык, который стал вторым по популярности в мире. Не потому, что он идеален – потому, что он последователен в своих компромиссах. Python предпочитает читаемость выразительности, простоту мощности, прагматизм чистоте. Zen of Python – это не описание языка. Это описание выборов, которые были сделаны при его создании.

Код. Культура, скомпилированная в байты

Подняться наверх