Что было в голове у Гвидо, когда он создавал Python
Источник: сайт Гвидо https://gvanrossum.github.io/
На Хабре уже описывали историю создания Python. Но мы решили не просто пересказать события ещё раз, а увидеть их глазами Гвидо ван Россума: что он сам думал обо всём происходящем? Поэтому нашли и перевели ранние высказывания, которые помогают лучше понять, почему Python стал именно таким и что определило его популярность.
Начало
Все началось с того, что в декабре 1989 года голландец Гвидо (Guido van Rossum) — будущий создатель одного из самых популярных языков программирования — искал хобби-проект, которому можно было бы посвятить рождественские каникулы… Сам Гвидо вспоминает это время так:
Впереди были двухнедельные рождественские каникулы, и мне было нечего делать. Мне нужен был проект, который я мог бы реализовать на своем Mac, не заходя на компьютеры CWI.
(«I had a two-week Christmas holiday with nothing to do, and needed a project that I could do on my Mac without having to log into CWI’s computers.»)
К этому моменту за плечами у него был Университет Амстердама (University of Amsterdam), степень магистра по математике и компьютерным наукам и среди прочего, работа в National Research Institute for Mathematics and Computer Science в Нидерландах (по-голландски заведение также называют Centrum Wiskunde & Informatica, CWI).
До 1987 года Гвидо состоял в команде, которая разрабатывала новый язык ABC. Любопытно, что ABC был одним из первых шагов к тому, что мы сейчас называем консьюмеризацией технологий, но язык так и не получил признания. Зато Python впоследствии продолжил его идеи. Об этом Гвидо отзывался так:
ABC задумывался как язык программирования, которому можно было бы научить интеллектуальных пользователей компьютеров, которые не были программистами или разработчиками ПО. В конце 1970-х основные создатели ABC обучали такую аудиторию традиционным языкам программирования. Среди их учеников были разные ученые — от физиков до социологов и лингвистов — которым требовалась помощь в использовании их очень больших компьютеров.
Хотя эти студенты сами по себе были умными людьми, они удивлялись определенным ограничениям и правилам, традиционно устанавливаемым языками программирования. Создатели ABC попытались разработать другой язык, опираясь на отзывы этих пользователей.
(«ABC was intended to be a programming language that could be taught to intelligent computer users who were not computer programmers or software developers in any sense. During the late 1970s, ABC’s main designers taught traditional programming languages to such an audience. Their students included various scientists—from physicists to social scientists to linguists—who needed help using their very large computers.
Although intelligent people in their own right, these students were surprised at certain limitations, restrictions, and arbitrary rules that programming languages had traditionally set out. Based on this user feedback, ABC’s designers tried to develop a different language.»)
Идею нельзя назвать уникальной. В то время подобную позицию пытался занимать Basic. Но с ним были проблемы:
Версии Basic, доступные в то время, были ужасны. Почти любая интересная программа на Basic была полна низкоуровневых хаков, где нужно было ткнуть в 714-й байт памяти, чтобы изменить цвет фона экрана на жёлтый.
(«The Basic versions available at the time were horrible. Almost any interesting Basic program was full of low-level hacks, where one had to poke memory byte 714 to change the screen background color to yellow.»)
В 1986 Гвидо покинул команду ABC и перешел в проект по созданию распределенной ОС Amoeba.
Со временем там возникла потребность в разработке простого языка сценариев на подобии ABC, при этом уже существовавший на тот момент Perl портировать на Amoeba было нельзя. Возможно, этому ограничению мы и должны сказать «спасибо» за появление Python.
О том, как выглядела задача изначально:
Каждое приложение, которое мы должны были писать для Amoeba, представляло собой либо shell-скрипт, либо программу на C. И я обнаружил, что у обоих вариантов были недостатки. Мне захотелось, чтобы существовал третий язык, который был бы посередине: ощущался как настоящий язык программирования (возможно, интерпретируемый), был попроще в использовании, кратким и выразительным как shell-скрипты, но чтобы с читаемостью всё было не так ужасно, как у этих скриптов.
(«Every application we have to write in for Amoeba is basically a shell script or a C program. And I found that there were downsides either of those and I wish there was a third language that was in the middle, that felt more like a genuine programing language, perhaps interpreted, easier to use, more concise of expression like shell scripts, but without terrible properties in terms of readability of shell scripts.»)
Тут-то Гвидо и применил наработки из старого проекта — взял от ABC преимущества, но убрал недостатки. Обладая достаточной свободой в рамках проекта, он начал создавать собственный язык. На упомянутых выше рождественских каникулах были написаны первые строки его интерпретатора. Так что миф о том, что Python начинался исключительно как хобби, проект верен лишь отчасти: да, он стартовал в свободное время, но не без конкретной задачи в рамках команды.
Базовые принципы нового языка
Некоторые особенности Python, которые и сегодня отличают его от остальных, были заложены на самом ранних этапах. Многие из них Гвидо почерпнул из существовавших на тот момент языков с самыми разными парадигмами. Конечной целью при этом было повышение продуктивности команды.
Например, Гвидо придумал не использовать фигурные скобки или специальные блоки для группировки операторов, а применять отступы. Эта идея пришла из ABC.
Гвидо о своих первых шагах:
Я создал простую виртуальную машину, простой парсер и простую среду выполнения. Сделал свою собственную версию различных деталей ABC, которые мне понравились. Создал базовый синтаксис, использовал отступы для группировки операторов вместо фигурных скобок или начальных и конечных блоков и разработал небольшое количество мощных типов данных: hash-таблицу (или dictionary, как мы ее называем), list, string и numbers.
(«I created a simple virtual machine, a simple parser, and a simple runtime. I made my own version of the various ABC parts that I liked. I created a basic syntax, used indentation for statement grouping instead of curly braces or begin-end blocks, and developed a small number of powerful data types: a hash table (or dictionary, as we call it), a list, strings, and numbers.»)
Помня о недостатках ABC, Гвидо проектировал свой язык как расширяемый, чтобы каждый мог внести вклад в его код. Это была одна из болей в ABC — у языка была группа разработчиков, без которых невозможно было внести в язык нечто новое. Python построен принципиально иначе — каждый может создать для него свою библиотеку. По сути, он строился на принципах опенсорса до того, как сам этот термин появился в обиходе.
На Python оказал влияние не только исчезнувший сегодня ABC. Приоритеты операторов, ключевые слова пришли из C. А обработка исключений и именованные параметры — из системных языков Modula-2 и Modula-3. Кстати, обработка исключений, а заодно классы, функции и модули были реализованы в самой первой публичной версии Python.
Одной из базовых идей нового языка было то, что его код должен быть понятен, как простой английский, чтобы не только писать программы, но и передавать с его помощью идеи между разработчиками. При этом язык должен был быть таким же мощным, как основные конкуренты, и подходить для решения повседневных задач.
Как это видел Гвидо:
На самом деле, моя первоначальная цель при создании Python состояла в том, чтобы предоставить второй язык программистам на C или C++ для решения задач, для которых написание программы на C было просто неэффективным.
(«Actually, my initial goal for Python was to serve as a second language for people who were C or C++ programmers, but who had work where writing a C program was just not effective.»)
А еще во главе угла была скорость разработки. Кстати, поэтому же Python позволяет писать код снизу вверх и тестировать его частями.
Барри Уорсо (соратник Гвидо, известный сообществу как Friendly Language Uncle For Life — «Пожизненный дружелюбный дядя языка») вспоминает свое первое знакомство с языком:
Очевидно, что Python предоставляет какие-то новые возможности, делающие процесс написания кода простым, удобным. Впервые увидев Python, я понял, что он особенный. Он улучшает читаемость. Писать код на Python — очень приятный процесс.
(«Obviously, at that Python provides some new features, make the process of writing code simple, convenient. For the first time Python when, I knew it was special. It improves the readability of the code, write Python Code is a very pleasant process.»)
За прошедшие годы Python не изменился кардинально. Безусловно, там появилось много новых конструкций и идей, но общая идея осталась та же.
Опенсорс и влияние сообщества
В течение 1990 года Python развивался за закрытыми дверями: внутри CWI руками Гвидо. А первую публичная версия языка (0.9.0) появилась в начале 1991 года. Хотя по факту это был опенсорс, такого термина все еще не существовало. Код распространялся через Usenet.
Кстати, свое название язык получил в честь любимого комедийного сериала Гвидо «Monty Python’s Flying Circus», который в Великобритании транслировался по каналу BBC в 70-е годы прошлого века.
Доступность кода и мнение сообщества в значительной степени повлияли на Python. Пользователи начали обсуждать новый язык и путь его развития. Предлагали свои изменения и критиковали идеи других. Выход в сообщество очень сильно повлиял на процесс работы Гвидо:
Как только исходный код стал доступен для скачивания, мне пришлось упростить процесс установки, чтобы не отвечать на одни и те же вопросы снова и снова. Это также заставило меня лучше писать документацию.
(«Once the source code was made available for downloading, it forced me to make the installation process very easy, just to save myself from answering the same questions over and over. It also forced me to write better documentation.»)
Первая версия
Первая «официальная» версия языка увидела свет в 1994 году, когда Гвидо еще работал в CWI. Среди прочего в первой версии появились инструменты функционального программирования и поддержка комплексных чисел. Но самое главное, что следующий шаг сделал не только проект, но и его сообщество.
В том же 1994 году состоялась первая рабочая версия пользователей Python. Встреча прошла в государственном бюро стандартов США (NBS, сегодня это государственный институт стандартов и технологий — NIST).
Барри Уорсо о первом семинаре:
Я понятия не имел, насколько это изменит мою жизнь — как на личном, так и на профессиональном уровне, — когда мы с Роджером Массе встретили Гвидо из Национального института стандартов и технологий на первом семинаре по Python в ноябре 1994 года. Песня гласит: «what a long strange trip it’s been». И это точно.
(«I had no idea how life changing it would be — on both a personal and professional level — when Roger Masse and I met Guido at NIST at the first Python workshop back in November 1994. The lyric goes: what a long strange trip it’s been, and that’s for sure.»)
Несмотря на различие мнений в сообществе, в самом начале Python развивался стремительными темпами.
Барри Уорсо вспоминает:
Например, в одном раннем релизе Гвидо просто изменил оператор равенства. Раньше присваивание и равенство были одним знаком равенства. И в одном релизе Гвидо просто сказал «я меняю его на двойное равенство», не учитывая обратную совместимость. И не было никаких проблем с тем, что людям нужно было изменить свой код.
(For example, there was one release early on where Guido just change the equality operator. It used to be that assignment and equality were both a single equal sign. And in one release, Guido just said, I’m changing it to double equals, and there was no consideration of backwards compatibility. There was no problem with like people just having to change their code.)
Многие вещи, которые сегодня кажутся привычной и неотъемлемой частью языка — те же ключевые аргументы — когда-то так и появились.
Начиная с выхода первой версии, благодаря поддержке NIST, Гвидо начал выступать на конференциях и семинарах, популяризируя проект. Так сообщество расширялось еще активнее. А его участники начали корректировать дизайн языка в целом.
Сам Гвидо высоко ценил влияние сообщества:
Некоторые из первых пользователей языка, такие как Тим Питерс и Стив Маевски, сосредоточились на очень тонких деталях дизайна и помогли прояснить, как должны работать различные функции; например они убедили меня поддержать смешанную арифметику. Большая часть текущего (и все еще растущего) набора модулей, связанных с Интернетом, была предоставлена или предложена пользователями.
(«Some of the early adopters of the language, such as Tim Peters and Steve Majewski, focused on very subtle design details and helped immensely by clarifying the way various features should work; e.g. they convinced me to support mixed arithmetic. Much of the current (and still growing) set of Internet-related modules was contributed or suggested by users.»)
Еще один хороший пример влияния — лямбда-функции, появившиеся в первой версии. Хотя сам Гвидо в одном интервью отмечал, что их реализацией он недоволен: слишком быстро принял это предложение.
По мере того, как сообщество росло, развитие пошло медленнее, но зато Python вышел далеко за рамки возможностей своего создателя и даже небольшой группы его соратников, присоединившихся к проекту на первых порах.
И это правильно, поскольку именно проекту Python мир обязан рождению такой забавной формулировки, как «фактор автобуса» (bus factor). В 1994 году Майкл Маклей (Michael McLay), работодатель Гвидо на момент первой пользовательской встречи, в рассылке публично задал вопрос:, а что будет с проектом, если Гвидо попадет под автобус?
Майкл Маклей:
Я только что вернулся с собрания, на котором основным возражением против использования Python, было зависимость от Гвидо. Они хотели знать, выживет ли Python, если Гвидо исчезнет. Это важный вопрос для компаний, которые рассматривают возможность использования Python в продукте.
(«I just returned from a meeting in which the major objection to using Python was its dependence on Guido. They wanted to know if Python would survive if Guido disappeared. This is an important issue for businesses that may be considering the use of Python in a product.»)
Кстати, вопрос собственности на разработки так однозначно и не решился до выхода второй версии. Новая GPL-лицензия появилась ближе к выходу версии 2.
А в 1995-м у Гвидо появился титул «Benevolent Dictator for Life» («великодушный пожизненный диктатор»), подчёркивающий эту единоличную власть над проектом.
Python 2
Версия 2.0 была выпущена осенью 2000 года. Принципиально новым моментом был сборщик мусора и некоторые функции, заимствованные из таких языков, как Haskell и SETL. В Python появилось понятие списка, поддержка Unicode. С версии 2.2 Python стал полностью объектно-ориентированным, так как там появились базовые типы и пользовательские классы в одной иерархии.
Разработка версии 2.0 переехала в SourceForge, что ускорило внесение изменений за счет использования его механизмов работы с исправлениями. На этом же этапе прошла некоторая формализация процесса — появился термин PEP. Так называется проект изменений, улучшающих Python, который может быть одобрен или отклонен сообществом. Сколько копий потом было сломано о PEP-ы с определенными номерами!
В ходе развития второй версии изменился процесс создания языка. На месте группы энтузиастов в 2001 году была создана организация Python Software Foundation (PSF), которой с этого момента принадлежат спецификация и документация Python. Но Гвидо все еще оставался «у руля».
Версия 2 много значила для развития языка, но сегодня она снимается с поддержки. Переход был болезненным и наверняка еще не закончился, хотя об «официальном завершении миграции» объявили еще в 2020 году. Как говорит Гвидо, ведь и Windows XP еще жив!
Python 3 или Python 3000
Версия Python 3 появилась в конце 2008 года и была несовместима с старыми версиями (2.х). Вместе с добавлением новых функций из языка были выпилены устаревшие способы решения проблем, для которых существуют более свежие подходы. Главным девизом релиза стало то, что должен быть только один очевидный способ решить задачу.
Вот, что в итоге говорил Гвидо о том, почему идея «освежить» язык вызвала много негатива, особенно у тех, кто использует его со сторонними библиотеками:
Язык — это самая фундаментальную часть программного обеспечения, которая объединяет приложения. Обычно язык меняется медленнее всего. И изменения в языке нужно рассматривать невероятно тщательно, иначе следующая версия приложения может не заработать. Это общий принцип.
Но рано или поздно появляются функции, которые вам больше не нравятся, и нет простого пути идти дальше, даже несмотря на то, что мы изначально пытались разрабатывать все с учетом будущей совместимости. Мы поняли, что некоторые вещи мы просто не можем исправить без обратной несовместимости. Это было нелегкое решение. Было много дискуссий. И мы пытались применить методы риск-менеджмента, стараясь не попасть в ловушку «второй системы». Мы решили привлечь общественность.
Оглядываясь назад, я действительно считаю, что ошиблись мы только в том, что недооценили, сколько людей используют Python и действительно зависят от него. Мы не понимали, что многие создают программное обеспечение с зависимостями от сотен различных сторонних модулей. Большинство из них были полностью несовместимы с Python 3.
(«The language is like the most fundamental part of the software that together builds all applications. And a language is typically the thing that changes the slowest. The change in a language has to be considered incredibly carefully, because you don’t want the next version of an app to break because you change the language. That’s a general principle.
But sooner or later you end up with some features that you no longer like and there’s not an easy way forward even though we try to design features in a way that is sort of future compatible. We realized a few things we just could not fix without backwards incompatibility. It was not an overnight decision. A lot of discussion went into this. We tried to engage in some risk management practices like we didn’t want to fall in the trap of second system syndrome. And we decided to involve the community.
Looking back really i believe what went wrong was that we just weren’t aware how many people were using python and were really depending on it. We didn’t realize that the way most people and a lot of companies built software with dependencies on a hundred different third-party modules. Most of them were also totally not compatible with Python 3.»)
Чтобы облегчить переход, последние версии 2.х и ветка 3.х развивались параллельно — в основном для поддержки старой функциональности. Но начиная с 2008 года все релизы 2.х содержали предупреждение о том, что его поддержка скоро будет прекращена. Эту практику остановили на релизе 3.2.
Последнее мажорное обновление (версия 3.10) вышло в октябре 2021 года.
По мере развития третьей версии и дальнейшего роста сообщества изменился процесс принятия решений о развитии языка. Гвидо ушел с позиции BDFL (несмотря на то, что FL в этой аббревиатуре означает «for life», т.е. пожизненно) и передал эти функции управляющему совету, члены которого переизбираются каждый год. Теперь никакой автобус уже не остановит развитие.
Наше время
Хотя Гвидо сложил свои полномочия, популярность языка от этого не снизилась. Напротив, в 2022-м он возглавляет рейтинг популярности TIOBE и входит в топ-5 большинства других рейтингов. Могли ли 20 энтузиастов, собравшиеся когда-то на первой встрече по Python и поверившие в него, вообразить сегодняшние перспективы?
Сегодня для многих Python первый и единственный язык разработки. Гвидо бы удивился, расскажи ему об этом кто-то 30 лет назад:
Я никогда не задумывал Python как основной язык для программистов, однако для многих его пользователей он стал основным языком.
(«I never intended Python to be the primary language for programmers, although it has become the primary language for many Python users.»)
И кто знает, что ждет Python в будущем?
Барри Уорсо:
Одна из вещей, которые, на мой взгляд, выделяют Python, — это своего рода язык-хамелеон. Сначала с его помощью люди писали сценарии для системного администрирования или маленькие-маленькие приложения, инструменты и тому подобное, чтобы решать свои повседневные проблемы. По мере того, как Интернет становился большим, мы видели как Python адаптировался под различные веб-технологии, такие как сканирование сети, CGI-скрипты и т.п, а теперь он играет важную роль в науках о данных. Поэтому я думаю, что по мере того, как технологии меняются, Python в значительной степени может адаптироваться к ним. И кто знает, что будет дальше.
(«One of the things I think Python has done really well is it’s sort of been a kind of a chameleon language. So what I mean by that is, you know, in the early days, you know, people were writing scripts to do system administration or little, little applications and tools and things like that to solve their, their problems of the day. And as the web got very big, you saw things like Python, adapt and grow into various web technologies, both crawling the web and providing, you know, back in the day, CGI bin scripts and building sort of the back into the web and adapting to, to the, to the web is that as that’s come up, and you know, now it’s its role is is hugely important in the data sciences. So I think as technology changes, Python is able in large part to adapt to that and who knows what the next big thing is going to be.»)
Напоследок: если вы пишете на Python
В октябре мы проведём конференцию PiterPy — для всех, кто активно пользуется Python. 18–19 октября будет онлайн-часть, а 28 октября хотим собрать всех в Санкт-Петербурге (но если не готовы добраться, можете и вторую часть посмотреть удалённо).
Даты, билеты и описания некоторых докладов уже есть на сайте. Будем рады видеть!