Урок 2. Краткая история Python
В феврале 1991 года сотрудник центра математики и информатики в Нидерландах, Гвидо ван Россум, опубликовал исходный код нового на тот момент языка программирования — Python.
Создание языка было его личной инициативой. Изначально у проекта не было официального бюджета и все делалось только на энтузиазме.
Поэтому Гвидо Ван Россум стремился экономить время и определил для себя несколько правил, одно из которых — это «заимствовать идеи отовсюду, откуда это имеет смысл».

Так в Питон попали лучшие практики из множества языков, включая Lisp, Fortran, Java и так далее. Наибольшее же влияние на него оказали ABC и С.
ABC создавался для обучения программированию и привнес в Python отступы для группировки операторов, которые упрощают чтение и понимание кода.
Язык C, в свою очередь, «поделился» с Питоном многими синтаксическими конструкциями.
Спустя три года, в январе 1994 вышел Python 1.0, а еще через 6 лет в октябре 2000 Python 2.0. С каждой новой версией Питон обрастал новыми возможностями и функциями.
В декабре 2008 года, после длительного тестирования вышла первая версия Python 3. В Python 3 были устранены многие недостатки архитектуры, однако авторам пришлось пожертвовать обратной совместимостью.
Программы, которые созданы для Python 2, скорее всего будут выдавать ошибки, если их выполнять в среде Python 3. В настоящий момент вторая версия уже практически канула в лету, поэтому мы будем учиться программировать на последней. С указанием на различия между версиями в тех моментах где это важно.
Гвидо ван Россум
Сам же Гвидо ван Россум в 1995 году переехал из Нидерландов в США и начал работать в различных IT компаниях.
С 2005 по 2012 год в Google, где половину времени занимался проектами корпорации, а оставшуюся его часть посвящал развитию Питона.
С января 2013 Гвидо перешел в Dropbox, где также половину времени посвящал Питону.
Разумеется он не в одиночку занимался разработкой такого сложного проекта. Тысячи программистов со всего мира в рамках работы некоммерческой организации Python Software Foundation принимают участие в развитии языка.
При этом Гвидо до 2018 года являлся так называемым «великодушным пожизненным диктатором» проекта и именно за ним оставалось окончательное решение в вопросах развития Python.
Но летом 2018 года он снял с себя эти полномочия и сейчас язык полностью развивается сообществом разработчиков под началом фонда Python Software Foundation, который, в том числе, отвечает за выпуск новых версий языка, следит за интеллектуальными правами, гарантирует открытость исходных кодов и бесплатность Python, включая библиотеки и документацию. Также PSF организовывает профессиональные конференции и предоставляет гранты проектам связанным с Python.
Поэтому даже учитывая, что Гвидо ван Россум уже не принимает активного участия, Python продолжает динамично развиваться и уверенно держит планку одного из самых популярных языков.
Сам же Гвидо в конце октября 2019 года ушел из Dropbox на пенсию, но уже через год, в ноябре 2020, посчитал, что пенсия для него — это скучно и вернулся в ряды разработчиков, но на этот раз в Microsoft, чтобы улучшить работу Python в Windows.
Конечно Питон улучшается не только в Windows, но и в целом. Так в конце 2022 года было выпущено сразу несколько обновлений, которые усилили безопасность python-программ, а также значительно увеличили его скорость работы и улучшили подсказки в случае возникновения ошибок.
Само собой на этом развитие языка не остановилось и в 2023 и 2024 годах мы ожидаем еще больше возможностей, с которыми познакомим и вас.
Но перед этим вам сперва нужно освоить базу и начнем мы с установки Python, но об этом в следующем уроке.
Что такое Python?

Python — это язык программирования, который широко используется в интернет-приложениях, разработке программного обеспечения, науке о данных и машинном обучении (ML). Разработчики используют Python, потому что он эффективен, прост в изучении и работает на разных платформах. Программы на языке Python можно скачать бесплатно, они совместимы со всеми типами систем и повышают скорость разработки.
В чем заключаются преимущества языка Python?
Язык Python имеет следующие преимущества:
- Разработчики могут легко читать и понимать программы на Python, поскольку язык имеет базовый синтаксис, похожий на синтаксис английского.
- Python помогает разработчикам быть более продуктивными, поскольку они могут писать программы на Python, используя меньше строк кода, чем в других языках.
- Python имеет большую стандартную библиотеку, содержащую многократно используемые коды практически для любой задачи. В результате разработчикам не требуется писать код с нуля.
- Разработчики могут легко сочетать Python с другими популярными языками программирования: Java, C и C++.
- Активное сообщество Python состоит из миллионов поддерживающих разработчиков со всего мира. При возникновении проблем сообщество поможет в их решении.
- Кроме того, в Интернете доступно множество полезных ресурсов для изучения Python. Например, вы можете легко найти видеоролики, учебные пособия, документацию и руководства для разработчиков.
- Python можно переносить на различные операционные системы: Windows, macOS, Linux и Unix.
Где применяется Python?
Язык Python имеет несколько стандартных примеров использования при разработке приложений, в числе которых:
Веб-разработка на стороне сервера
Веб-разработка на стороне сервера включает в себя сложные серверные функции, с помощью которых веб-сайты отображают информацию для пользователя. Например, веб-сайты должны взаимодействовать с базами данных и другими веб-сайтами, а также защищать данные при их отправке по сети.
Python полезен при написании серверного кода, поскольку он предлагает множество библиотек, состоящих из предварительно написанного кода для сложных серверных функций. Также разработчики используют широкий спектр платформ Python, которые предоставляют все необходимые инструменты для более быстрого и простого создания интернет-приложений. Например, разработчики могут создать «скелет» интернет-приложения за считанные секунды, потому что им не нужно писать код с нуля. Затем его можно протестировать с помощью инструментов тестирования платформы независимо от внешних инструментов тестирования.
Автоматизация с помощью скриптов Python
Язык скриптов — это язык программирования, который автоматизирует задачи, обычно выполняемые людьми. Программисты широко используют скрипты Python для автоматизации многих повседневных задач, среди которых:
- Одновременное переименование большого количества файлов
- Преобразование файла в другой тип файла
- Удаление повторяющихся слов в текстовом файле
- Выполнение базовых математических операций
- Отправка сообщений электронной почты
- Загрузка контента
- Выполнение базового анализа журналов
- Поиск ошибок в нескольких файлах
Наука о данных и машинное обучение
Наука о данных извлекает ценную информацию из данных, а машинное обучение (ML) позволяет компьютерам автоматически учиться на данных и делать точные прогнозы. Специалисты по работе с данными используют Python для решения следующих задач:
- Исправление и удаление неверных данных (очистка данных)
- Извлечение и выбор различных характеристик данных
- Разметка данных добавляет данным значимые имена
- Поиск статистической информации в данных
- Визуализация данных с помощью диаграмм и графиков: линейных диаграмм, столбчатых диаграмм, гистограмм и круговых диаграмм
Специалисты по работе с данными используют библиотеки Python ML для моделей машинного обучения и создания классификаторов, которые точно классифицируют данные. Классификаторы на основе Python используются в различных областях и применяются для выполнения таких задач, как классификация изображений, текста и сетевого трафика, распознавание речи и распознавание лиц. Специалисты по работе с данными также используют Python для глубокого обучения — передовой техники машинного обучения.
Разработка программного обеспечения
Разработчики программного обеспечения часто используют Python для различных задач разработки и программных приложений, среди которых:
- Отслеживание ошибок в программном коде
- Автоматическая сборка программного обеспечения
- Управление программными проектами
- Разработка прототипов программного обеспечения
- Разработка настольных приложений с использованием библиотек графического пользовательского интерфейса (ГПИ)
- Разработка игр: от простых текстовых игр до сложных видеоигр
Автоматизация тестирования программного обеспечения
Тестирование программного обеспечения — это процесс проверки соответствия фактических результатов программного обеспечения ожидаемым результатам, который позволяет убедиться, что программное обеспечение не содержит ошибок.
- Разработчики используют среды модульного тестирования Python (Unittest, Robot и PyUnit) для тестирования написанных функций.
- Тестировщики программного обеспечения используют Python для написания тестовых примеров для различных сценариев. Например, язык применяется для тестирования пользовательского интерфейса интернет-приложения, нескольких программных компонентов и новых функций.
Разработчики могут использовать несколько инструментов для автоматического запуска тестовых скриптов. Эти инструменты известны как инструменты непрерывной интеграции / непрерывного развертывания (CI/CD). Тестировщики и разработчики программного обеспечения используют инструменты CI/CD (Travis CI и Jenkins) для автоматизации процесса тестирования. Инструмент CI/CD автоматически запускает тестовые скрипты Python и сообщает о результатах тестирования всякий раз, когда разработчики вносят новые изменения в код.
Как развивался Python?
Python разработан Гвидо Ван Россумом (Guido Van Rossum), программистом из Нидерландов. Он начал работу над языком в 1989 году в центре Centrum Wiskunde & Informatica (CWI). Изначально язык был полностью любительским проектом: Ван Россум просто хотел чем-то занять себя на рождественских каникулах. Название языка было взято из телешоу BBC «Летающий цирк Монти Пайтона», большим поклонником которого являлся программист.
История версий Python
- Гвидо Ван Россум опубликовал первую версию кода Python (версия 0.9.0) в 1991 году. Он уже включал в себя ряд полезных возможностей. Например, различные типы данных и функции для обработки ошибок.
- В версии Python 1.0, выпущенной в 1994 году, были реализованы новые функции для простой обработки списка данных: сопоставление, фильтрация и сокращение.
- Python 2.0 был выпущен 16 октября 2000 года с новыми полезными функциями для программистов, такими как поддержка символов Unicode и упрощенный способ циклического просмотра списка.
- 3 декабря 2008 года вышел Python 3.0. Эта версия включала функцию печати и дополнительную поддержку деления чисел и обработки ошибок.
Каковы особенности Python?
Язык Python уникален благодаря следующим особенностям:
Интерпретируемый язык
Python является интерпретируемым языком, то есть он выполняет код построчно. Если в коде программы присутствуют ошибки, она перестает работать. Это позволяет программистам быстро найти ошибки в коде.
Простой в использовании язык
Python использует слова, подобные словам английского языка. В отличие от других языков программирования, в Python не используются фигурные скобки. Вместо них применяется отступ.
Язык с динамической типизацией
Программистам не нужно объявлять типы переменных при написании кода, потому что Python определяет их во время выполнения. Эта функция позволяет писать программы на Python значительно быстрее.
Язык высокого уровня
Python ближе к естественным языкам, чем ряд других языков программирования. Благодаря этому программистам не нужно беспокоиться о его базовой функциональности, например об архитектуре и управлении памятью.
Объектно-ориентированный язык
Python рассматривает все элементы как объекты, но также поддерживает другие типы программирования (например, структурное и функциональное программирование).
Что такое библиотеки Python?
Библиотека — это набор часто используемых кодов, которые разработчики могут включать в свои программы Python, чтобы не писать код с нуля. По умолчанию в Python доступна стандартная библиотека, которая содержит большое количество многократно используемых функций. Кроме того, доступно более 137 000 библиотек Python для различных задач, в числе которых интернет-разработка, наука о данных и машинное обучение (ML).
Какие библиотеки Python наиболее популярны?
Matplotlib
Разработчики используют Matplotlib для отображения данных в высококачественной двух- и трехмерной (2D и 3D) графике. Данная библиотека распространена при решении научных задач. С помощью Matplotlib данные можно визуализировать в виде различных диаграмм (например, столбчатых и линейных). Также можно строить несколько диаграмм сразу, а графику — переносить на любые платформы.
Pandas
Pandas содержит оптимизированные и гибкие структуры данных, которые можно использовать для управления данными временных рядов и структурированными данными, такими как таблицы и массивы. Например, Pandas можно использовать для чтения, записи, объединения, фильтрации и группировки данных. Также данная библиотека широко применяется в науке о данных, анализе данных и задачах машинного обучения.
NumPy
NumPy — это популярная библиотека, используемая разработчиками для простого создания массивов и управления ими, а также управления логическими фигурами и выполнения операций линейной алгебры. NumPy поддерживает интеграцию со многими языками. Например, C и C++.
Requests
Библиотека Requests содержит полезные функции, необходимые для веб-разработки. Их можно использовать для отправки HTTP-запросов, добавления заголовков, добавления параметров URL, добавления данных и выполнения многих других задач, связанных с интернет-приложениями.
OpenCV-Python
OpenCV-Python — это библиотека, используемая для обработки изображений при работе с машинным зрением. Она содержит множество функций обработки изображений, таких как одновременное чтение и запись изображений, преобразование двухмерной среды в трехмерную, а также захват и анализ изображений из видео.
Keras
Keras – это библиотека глубокой нейронной сети Python с отличными функциями обработки данных, визуализации и многого другого. Keras поддерживает множество нейронных сетей. Библиотека имеет модульную структуру, обеспечивающую гибкость при написании инновационных приложений.
Что такое платформы Python?
Платформы Python — это наборы пакетов и модулей. Модуль — это набор связанного кода, а пакет — это набор модулей. Разработчики могут использовать платформы Python для более быстрого создания приложений Python, поскольку им не нужно беспокоиться о низкоуровневых деталях (например, скорости обмена данных в веб-приложении) или том, как Python ускоряет работу программы. Python имеет два типа платформ:
- Платформа с полным стеком включает почти все, что требуется для создания крупного приложения.
- Микроплатформа – это базовая платформа, предоставляющая минимальные функциональные возможности для создания простых приложений Python. Также она предоставляет расширения, если приложениям требуются более сложные функции.
Какие платформы Python наиболее популярны?
Чтобы сделать свою разработку более эффективной, можно использовать несколько платформ Python сразу. В их числе:
Django
Django — одна из наиболее популярных платформ с полным стеком Python, которая используется для разработки крупных интернет-приложений. Она содержит несколько полезных функций, в числе которых веб-сервер для разработки и тестирования, движок шаблонов для frontend-разработки и различные механизмы безопасности.
Flask
Flask – это микроплатформа для разработки небольших интернет-приложений. К ее особенностям относятся сильная поддержка со стороны сообщества, качественно составленная документация, движок шаблонов, модульное тестирование и встроенный веб-сервер. Также платформа содержит расширения для поддержки валидации, уровни отображения базы данных и веб-безопасность.
TurboGears
TurboGears – это платформа, предназначенная для более быстрого и простого создания интернет-приложений. Ниже представлены ее основные возможности:
- Определенная структура таблиц базы данных
- Инструменты для создания и управления проектами
- Движок шаблонов для создания баз данных
- Движок шаблонов для frontend-разработки
- Механизмы обеспечения веб-безопасности
Apache MXNet
Apache MXNet – это быстрая, гибкая и масштабируемая платформа глубокого обучения для создания исследовательских прототипов и приложений глубокого обучения. Она поддерживает несколько языков программирования, включая Java, C++, R и Perl. Платформа содержит богатый набор инструментов и библиотек для разработчиков. Например, на ней можно найти книгу по интерактивному машинному обучению (ML), наборы инструментов машинного зрения и модели глубокого обучения для обработки естественного языка (NLP), в том числе текста и речи.
PyTorch
PyTorch – это платформа для машинного обучения, созданная на основе библиотеки Torch, еще одной библиотеки машинного обучения с открытым исходным кодом. Разработчики используют ее в NLP, робототехнике и машинном зрении для поиска важной информации в изображениях и видео. Также платформа используется для запуска этих приложений на процессорах и графических процессорах.
Что такое Python IDE?
Интегрированная среда разработки (IDE) — это программное обеспечение, которое предоставляет разработчикам инструменты для написания, редактирования, тестирования и отладки кода.
Какие Python IDE наиболее популярны?
PyCharm
PyCharm – результат трудов JetBrains, чешской компании по разработке программных инструментов. У программы имеется как бесплатная версия для небольших приложений, так и платная профессиональная версия, подходящая для создания крупных приложений Python со следующим набором функций:
- Автоматическое завершение и проверка кода
- Обработка и быстрое устранение ошибок
- Чистка кода без изменения функциональных возможностей
- Поддержка платформ интернет-приложений, таких как Django и Flask
- Поддержка других языков программирования, таких как JavaScript, CoffeeScript, TypeScript, AngularJS и Node
- Научные инструменты и библиотеки, такие как Matplotlib и NumPy
- Возможность запуска, отладки, тестирования и развертывания приложений на удаленных виртуальных машинах
- Отладчик для поиска ошибок в коде, профилировщик для выявления проблем с производительностью и средство запуска модульных тестов
- Поддержка баз данных
IDLE
Интегрированная среда разработки и обучения (IDLE) – это интегрированная среда разработки Python, установленная по умолчанию. Среда разработана только на Python с использованием набора инструментов Tkinter GUI и имеет следующие особенности:
- Совместимость со множеством операционных систем, таких как Windows, Unix и macOS
- Командное окно для запуска команд и отображения вывода
- Многооконный текстовый редактор с подсветкой синтаксиса кода и автозавершением
- Встроенный отладчик
Spyder
Spyder – это IDE с открытым исходным кодом, которую используют многие специалисты и аналитики данных. Она применяется для всесторонней разработки с использованием функций расширенного анализа данных, визуализации и отладки. Среда имеет следующие особенности:
- Редактор кода, поддерживающий несколько языков
- Интерактивная консоль IPython
- Базовый отладчик
- Научные библиотеки, такие как Matplotlib, SciPy и NumPy
- Возможность исследования переменных в коде
- Возможность просмотра документации в режиме реального времени
Atom
Atom – это бесплатный редактор, разработанный GitHub, который поддерживает кодирование на многих языках программирования, в том числе Python. Atom позволяет напрямую работать с GitHub — веб-сайтом, на котором можно централизованно хранить свой код. Atom имеет следующие особенности:
- Совместимость со многими операционными системами
- Простая установка или создание новых пакетов
- Ускоренное автозавершение кода
- Возможность поиска файлов и проектов
- Простая настройка интерфейса
Что такое Python SDK?
Пакет средств разработки ПО (SDK) — это набор программных инструментов, который позволяет создавать программные приложения на определенном языке. Большинство SDK предназначены для разных аппаратных платформ и операционных систем. Python SDK включает в себя множество инструментов, таких как библиотеки, примеры кода и руководства для разработчиков, которые помогают при написании приложений.
Что такое AWS PyCharm?
Набор инструментов AWS для PyCharm – это подключаемый модуль для PyCharm IDE, упрощающий создание, отладку и развертывание приложений Python на AWS. AWS Toolkit for PyCharm значительно упрощает начало разработки на Python. Он имеет ряд полезных особенностей для разработчиков, в числе которых руководства по началу работы, пошаговая отладка и развертывание IDE.
Что такое Boto3 в Python?
Boto3 — это SDK AWS для Python. Его можно использовать для создания, и настройки сервисов AWS –Amazon Elastic Compute Cloud (EC2), Amazon Simple Storage Service (S3) и Amazon DynamoDB – а также управления ими. Boto3 имеет два типа API-интерфейсов: низкоуровневые API-интерфейсы и API-интерфейсы ресурсов для разработчиков.
Истоки Python
Привет, Хабр! Вашему вниманию представляется перевод статьи «The Origins of Python» за авторством Ламберта Меертенса — соавтора языка ABC и коллеги Гвидо ван Россума.
В своей статье Меертенс вспоминает как зарождалось программирование, своё участие в разработке языка ABC, знакомство с молодым Гвидо ван Россумом и зарождение языка Python.
Перевод предоставил Макс, авторов YouTube-канала PyLounge. Поехали!

В воскресенье, 21 июня 1970 года, в офисном здании на Грейт-Портланд-стрит в Лондоне ожил телетайп. Под заголовком «Счастливые семьи» печатная машинка выдала последовательность английских предложений, таких как «Собака сидит на ребенке» и «Дядя Тед играет с сестрой». Программа «Счастливые семьи», которая выдала такой результат, была написана в те же выходные человеком без опыта программирования, участником семинара, организованного Обществом компьютерных искусств и предлагавшего курс «non-numerical programming».
Почти пятьдесят лет спустя, 26 октября 2019 года, в Стамбуле, глаза молодой женщины загорелись, когда ей удалось запустить свою самую первую программу. Она участвовала в семинаре, организованном Django Girls, международной некоммерческой организацией, целью которой является расширение прав и возможностей женщин посредством бесплатных однодневных воркшопов по программированию.
На семинаре в Лондоне в 1970 году использовался язык программирования TELCOMP, простой неструктурированный язык, похожий на BASIC — не BASIC, как сейчас, а неструктурированный BASIC, как тогда. Языком программирования на воркшопе в Стамбуле в 2019 году был Python, язык программирования, разработанный Гвидо ван Россумом, который стал дико популярным, неуклонно набирая популярность с момента незаметного релиза в 1991 году. Как бы ни были далеки друг от друга эти события, как во времени, так и в географии, их связывает дуга истории.
Давным-давно
Обычным методом выполнения программ в те дни была пакетная обработка (batch processing). Программисты сдавали свои программы в виде пачки перфокарт или рулона перфоленты на стойку вычислительного центра и — при условии, что в программе не было фатальной ошибки — могли рассчитывать получить результат работы своего кода через пару часов или на следующий день. Такая схема не подошла бы для курсов, рассчитанных на два дня. Но TELCOMP был тем, что в те дни называли «разговорным языком»; в сегодняшней терминологии мы бы сказали, что «выполнение было интерактивным». Телетайп служил терминалом, подключенным к мэйнфрейму с операционной системой разделения времени, от компании Time Sharing, Ltd. Набрав программу в виде пронумерованной последовательности шагов, пользователь мог подать команду DO, чтобы запустить программу и получить результат выполнения немедленно.
Изучение языка было простым. В репертуаре TELCOMP было всего пятнадцать команд и два типа данных: числа и массивы чисел. Но его использование для преобразования задумки в код стало узким местом при разработке. Все команды и типы были реализованы на очень низком уровне, что отличалось от идеи той простоты, которую они хотели воплотить в жизнь. Они не предлагали подходящих средств для правильного структурирования и организации кода. Даже самые простые проекты быстро превращались в так называемый «спагетти-код”.
Конечно, мы знали, что существуют гораздо лучшие языки, такие как ALGOL 60. Полноценный ALGOL 60 был, возможно, более сложным, чем это было необходимо для данной конкретной цели, но мы могли бы преподавать его упрощенный диалект. Мы не использовали ALGOL 60, потому что он не был разработан как подходящий для общего использования.
Дизайн и простота языка программирования
За исключением нескольких языков программирования, которые были намеренно созданы в качестве шутки, например, INTERCAL, разработчик языка не будет делать язык трудным для изучения или использования. Простота изучения и простота использования являются очень желательными атрибутами любого языка программирования. Тем не менее, я часто чувствовал, что этому аспекту проектирования языка не всегда уделяется должное внимание. И то, что может показаться легким для разработчика языка, не обязательно будет легким для изучающего этот язык.
Прежде всего, язык программирования — это инструмент для выражения алгоритмических идей в форме, понятной для выполнения автоматической машиной. Проектирование функционального инструмента — это не наука; оно включает в себя поиск баланса между потенциально противоречивыми конструкторскими задачами. Язык программирования общего назначения — это тоже набор инструментов, состоящий из частей, которые должны плавно сочетаться друг с другом, чтобы работать вместе разнообразными способами, подобно тому, как можно бесконечно комбинировать части набора Meccano. Для всех языков, кроме самых простых, разработчику языка необходимо принять сотни решений. Разумный выбор из всех возможностей требует осознания проектируемого дизайна и готовности исследовать его, а также способности определять компромиссы и рассматривать альтернативы. Здесь философия дизайна может стать руководством для дизайнера. Она может быть изложена в виде ряда правил проектирования, которые не могут быть жесткими и незыблемыми, но все же должны отражать цели разработчика.
Простота инструмента имеет два различных аспекта: простота изучения его функций и простота его использования после осознания этих функций. Задача программиста — воплотить идею в код. Этот процесс будет значительно проще, если элементы языка программирования ориентированы на задачу и соответствуют концепциям, которые программист держит в голове. На первый взгляд может показаться, что эти два аспекта противоречат друг другу. Действительно, минималистский язык, хотя и прост в изучении, может усложнить задачу программиста. Мало того, что требуется больше строк кода, так еще и написание корректного кода становится все сложнее по мере увеличения размера программы. И наоборот, если попытаться сделать что-то похожее на швейцарский нож и включить в него все мыслимые и немыслимые функции, получится сложный язык, который будет трудно изучить, но, несомненно, легко использовать. Или не будет? Возможно, не будет.
Программисту приходится декомпозировать исходную задачу на подзадачи, которые, в свою очередь, декомпозируются на подзадачи, и так далее, пока не будет достигнут уровень, на котором рассматриваемая задача может быть решена непосредственно с помощью набора инструментов языка программирования. Если язык очень богат возможностями, то способов сделать это будет много, и выбор из всех вариантов может стать серьезным умственным бременем. Такое обогащение языка дает убывающую отдачу — пока в конечном итоге не будут потеряны все преимущества, какими бы мизерными они ни были. Вместо того чтобы впихивать в набор инструментов всевозможные потенциально полезные функции, гораздо лучше выбрать меньшее количество мощных функций, которые ориентированы на конкретные задачи и хорошо работают в сочетании друг с другом.
Проект ABC
В течение нескольких лет, проведенных на семинарах по программированию для художников, в основном в Великобритании и Нидерландах, мы с Геуртсом все больше разочаровывались в недостатках доступных нам языков. «Почему нет языка, — задавались мы вопросом, — который сочетал бы в себе лучшее из двух миров: мощь и простую элегантность ALGOL 60 со скромным размером и пригодностью для повседневного использования BASIC и TELCOMP?». Наше разочарование послужило толчком к старту проекта по разработке такого языка в 1975. Я наблюдал за процессом разработки ALGOL 68, задуманного как амбициозный преемник ALGOL 60, а также был свидетелем его ревизии между 1970 и 1974 годами. В обоих случаях очевидные улучшения не были включены, потому что они были предложены «слишком поздно», поэтому я знал, что будет разумно предусмотреть несколько итераций в процессе разработки. Мы также решили не выбирать название для нового языка до того, как будем довольны результатом. Для обозначения языка мы выбрали имя переменной B для неинициализированной строковой переменной, которая служила в качестве временной, пока процесс проектирования не был завершен. Буква «B» была выбрана потому, что это первая буква слова «новичок» (biginner), и потому, что проект должен был стать языком для обучения программированию абсолютных новичков. В соответствии с математической традицией для имен переменных, мы выделили ее курсивом. В первом приближении, версии B0, мы еще не задумывались; это был скорее эксперимент, чтобы посмотреть, что нам нравится, а что нет. В конце концов, эта версия была закончена и опубликована в течение года. Несмотря на то, что конечные результаты сильно отличаются, некоторые вещи оставались неизменными на протяжении всех итераций. Команда PUT 1, 2 IN A, B присваивала значение 1 переменной с именем A и значение 2 переменной с именем B. Команда PUT A, B IN B, A меняет местами содержимое этих двух переменных. В большинстве других языков такая замена требует трех шагов с использованием третьей, вспомогательной переменной: (1) PUT A IN X; (2) PUT B IN A; и (3) PUT X IN B. В более поздних итерациях, когда устройства ввода-вывода стали допускать смешанное использование верхнего и нижнего регистра, команда превратилась в PUT a, b IN b, a, но сама структура команды для присвоения и сопутствующего присвоения нескольких значений осталась неизменной. Еще более поразительным является использование отступов. Хотя в программах, написанных на АЛГОЛ 60 или его потомках, таких как Паскаль, было принято использовать отступы в качестве типографской особенности оформления для уточнения группировки команд, это был совершенно необязательный выбор внешнего вида, сделанный исключительно для удобства читателя. В статье П. Дж. Плаугера под названием «Сигнал и шум в языках программирования» мы нашли радикальную (тогда) идею: «Пусть компилятор читает тот же сигнал, что и мы, люди, и пусть отступы управляют группировкой» — предложение, которому мы последовали с энтузиазмом. Отступы, указывающие на принадлежность набора команд друг другу, впоследствии стали обязательными в программах B0, и этот выбор в дизайне языка сохранялся на протяжении всех итераций.
У нас не было четкой философии проектирования; она естественным образом выросла из ведущих принципов в процессе разработки. Чтобы помочь нашим предполагаемым пользователям, абсолютным новичкам, мы стремились скрыть низкоуровневые детали реализации и вместо этого предоставить мощные высокоуровневые функции, ориентированные на выполнение задач. Одной из вещей, которые мы ценили больше всего, была согласованность, как единообразие в представлении конструкций языка — «синтаксис» — так и отсутствие причуд в их значениях — «семантика«. Большинство программистов не понимают всех аспектов своего любимого языка, и нельзя обоснованно ожидать, что новичок быстро освоит новый язык. В некотором смысле изучение нового языка программирования похоже на изучение нового естественного языка; неровности и исключения являются камнем преткновения на пути к мастерству. Естественный способ обучения — учиться на примерах, а затем экстраполировать эти примеры на общие правила. Малыш может сказать, например, «Собака укусила его«, неправильно применив обычное правило образования прошедшего времени к неправильному глаголу. Хотя такая последовательность и может показаться возможной для созданного языка, на практике это будет встречается редко.
(здесь имеется ввиду особенность построения фразы “The dog bited him”, что неправильно, но в целом приемлемо, хотя встретить такое построение можно очень редко)
Большинство языков или их реализаций страдали от ограничений и исключений, которые были неудобными и произвольными по своей природе. Это делает язык более трудным для изучения и более сложным для использования. По мере того, как мы продвигались в разработке нашего нового языка, мы увидели закономерности в принятых нами проектных решениях. Мы попытались уловить каждую закономерность и сформулировать ее в виде правила проектирования — такой подход поможет улучшить согласованность. Некоторые из этих правил были определены ранее другими людьми, например, в статье Плаугера.
Требование синтаксического единообразия было закреплено в правиле единообразия, выраженном Плаугером в виде сентенции: «Похожие вещи должны быть сказаны похожим образом». Смежное, более семантическое правило дизайна, было названо Правилом справедливых ожиданий. Существует свойство человеческого зрительного восприятия, известное как «Принцип Хорошего продолжения» (закон прегнантности), которое отражает один из принципов гештальт-психологии. Когда объект виден лишь частично, человеческая зрительная система экстраполирует форму видимой части, чтобы сформировать представление о том, что скрыто. Чтобы сделать форму целостной, невидимая часть выводится из контекста. Например, когда непрозрачный диск закрывает угол прямоугольника, человек склонен предполагать, что стороны прямоугольника продолжаются под ним, и что прямоугольник является целым. Когда объект, закрывающий обзор, удаляется, наблюдатель может обнаружить, что его обманули: на самом деле другой объект не был целым. Но это уже сюрприз, которым пользуются фокусники. Мы хотели избавить наших учеников от подобных сюрпризов. Правило «Справедливых ожиданий» гласило, что если справедливо, основываясь на экстраполяции аналогичных конструкций, ожидать от пользователя, что некоторая мыслимая конструкция будет действительной и иметь определенное значение, то конструкция будет действительной и иметь это значение. Чем более точно конструкция следует этому правилу, тем справедливее становится ожидание пользователя, что это правило будет соблюдено и в следующем случае. По сути, такой подход оказывает самоподдерживающую силу на развитие языка. Еще одним требованием дизайна является правило «Экономии инструментов» (Economy-of-Tools Rule): разные инструменты должны выполнять действительно разные функции. Если оказывается, что отдельные функции концептуально пересекаются, эти инструменты должны быть объединены. Применение этого правила привело к заполнению большего количества пробелов в общей функциональности языка, чтобы соответствовать правилу «Cправедливых ожиданий».
В 1981 году, после двух итераций, мы почувствовали себя достаточно уверенно, чтобы опубликовать проект в виде проекта-предложения (Draft Proposal), после чего я быстро написал полноценную реализацию, которая должна была стать бросовым продуктом, чтобы мы могли собрать отзывы о преподавании языка начинающим.
В следующем году я принял одногодичный контракт в качестве приглашенного доцента на кафедре компьютерных наук в Курантовском институте математических наук , где Роберт Дьюар был активным участником, поддерживающим работу над языком B, и курировал некоторые студенческие проекты, в рамках которых была создана реализация B1. МЦ пригласил Стивена Пембертона — предполагалось, что он будет назначен на один год в качестве приглашенного научного сотрудника — стать руководителем разработки в этот промежуточный период. Пока я был в Нью-Йорке, команда разработки в Амстердаме была усилена новым сотрудником, Гвидо ван Россумом.
SETL и типы данных высоко уровня
Во время своего предыдущего визита в Нью-Йоркский университет я познакомился с SETL, языком программирования очень высокого уровня, который был разработан дальновидным эрудитом и автором нескольких фундаментальных книг по математике Джеком Шварцем. В некотором смысле SETL был почти полной противоположностью B, который тогда был в своей первой итерации B1. Основываясь на концепциях из математической теории множеств, целевой аудиторией SETL были математики. В отличие от этого, при разработке B мы не предполагали никаких знаний математики, кроме самых элементарных по арифметике и алгебре. Тем не менее, у этих двух языков было нечто общее на более глубоком уровне: философия проектирования, сосредоточенная на предоставлении программистам всего нескольких, но очень мощных инструментов. SETL воплотил в себе радикальный отход от настроений, которые до тех пор витали над разработкой языков высокого уровня, включая АЛГОЛ 68. Разработчики этих языков и их коллеги пришли из эпохи, когда инструкции процессора выполнялись не в микросекундах, а в миллисекундах. Вычисления, которые в начале 1980-х годов занимали час, в начале 1950-х годов заняли бы много недель. На протяжении десятилетий компьютерное время считалось несравненно более ценным, чем время программиста, и это наложило отпечаток на мышление целого поколения программистов и языки, которые они разрабатывали. Таким образом, конструкции языков программирования были разработаны так, чтобы иметь довольно простое отображение на аппаратные наборы инструкций компьютеров. Но, конечно, это отображение не было идеальным; некоторая потеря в скорости выполнения по сравнению с тщательно составленными программами, написанными непосредственно в машинном коде, была неизбежной. Диатрибы против пагубного влияния языков высокого уровня, отнимающих время компьютеров, были не редкостью даже в 1960-х годах. В основе разработки SETL лежала философия, согласно которой, по мере того как компьютеры становятся все быстрее и быстрее, человеческое время будет более ценным, чем компьютерное, и что эффективность набора инструментов, предоставляемых SETL, должна измеряться не скоростью вычислений, а их концептуальной мощью.
Написав несколько алгоритмов на SETL, я воочию убедился в его силе — силе, которая полностью проистекала из его высокоуровневых встроенных типов данных. Особенно мощными были множества (set) и карты (map), также известные как «ассоциативные массивы», содержащие данные, которые можно индексировать не только последовательными целыми числами, но и произвольными значениями. Программист мог ввести простую базу данных цитат с именем whosaid, в которой значение «Декарт» могло храниться в whosaid[«cogito ergo sum»]. Эти высокоуровневые типы позволили выразить алгоритмы, требующие много шагов в B1, с помощью всего нескольких шагов в SETL. Явным нарушением правила справедливых ожиданий стало то, что в B1 в качестве индексов массивов допускались только целые числа. Это решение было продиктовано страхом: мы опасались, что слишком высокие требования сделают наш язык нереализуемым на небольших персональных компьютерах, которые только начинали появляться на рынке. Но Дьюар, в частности, убедил меня, что это означает, что мы проектируем для прошлого, а не для будущего. Это заставило нас заново разработать систему типов данных для нашего языка для начинающих. На этот раз мы использовали только критерии легкости обучения и простоты использования для отбора систем-кандидатов. Победитель оказался удивительно похож на систему типов данных SETL. Набор возможных систем типов данных для выбора был очень велик, и чтобы сделать процесс более управляемым, я написал программу для выбора конкурентоспособных (Парето-оптимальных) систем-кандидатов. Интересно, но совершенно случайно, что сама программа выбора была написана на SETL. Победителем стала система типов B2, которая осталась неизменной в финальной итерации, выпущенной в 1985 году под названием «ABC». Выражаясь символически, мы выполнили команду PUT «ABC» IN B. С момента начала проекта B прошло десять лет.
Конец и начало
В сентябре 1983 года я вернулся в Амстердам, в МЦ, который за время моего отсутствия был переименован и теперь стал CWI. Компьютерные науки, информатика по-голландски, играли важную роль в исследованиях, проводимых в МЦ на протяжении всего его существования; смена названия сделала это очевидным. Пембертон остался в команде в качестве третьего главного дизайнера языка ABC. На последней итерации разработки, ведущей от B2 к ABC, мы заново рассмотрели почти каждый аспект языка, чтобы понять, возможны ли дальнейшие улучшения, какими бы незначительными они ни были. Мы проводили еженедельные собрания команды, в которых участвовали все ее члены. Ван Россум регулярно предлагал изменения. Некоторые из его предложений были приняты, многие — нет, но все они были серьезно рассмотрены. При разработке языка программирования редко бывает так, что предлагаемое изменение имеет только преимущества; почти всегда оно имеет и преимущества, и недостатки. Взвешивание этих факторов друг с другом для вынесения вердикта может быть тонким делом. Во многих случаях предложение нарушало одно из правил проектирования, которые были несовершенной кодификацией общей философии проектирования.
В 1984 году проект получил в свои руки IBM PC, и менее чем через год мы сделали ABC, работающий на этой машине и готовый к распространению по всему миру.
Простой пример может дать представление об огромной разнице между TELCOMP и ABC. Пузырьковая сортировка — хорошо известный, но довольно неэффективный алгоритм сортировки, особенно для больших наборов данных. Тем не менее, из-за своей простоты он часто используется для иллюстрации элементарных алгоритмических концепций и для наглядного сравнения языков программирования. Следующие примеры кода показывают, как пузырьковая сортировка выглядит в TELCOMP и в ABC.
TELCOMP:
1.01 DO PART 2 FOR I = 1:1:N-1 2.01 DO PART 3 FOR J = 1:1:N-1 3.01 DO PART 4 IF A[J] > A[J+1] 4.01 SET X = A[J] 4.02 SET A[J] = A[J+1] 4.03 SET A[J+1] = X
ABC:
FOR i IN : FOR j IN : IF a[j] > a[j+1]: PUT a[j+1], a[j] IN a[j], a[j+1]
Нумерация, предшествующая каждой команде TELCOMP, незаменима; она служит меткой для указания продолжения вычислений. В программе ABC ничего подобного не требуется. Программа TELCOMP состоит из четырех пронумерованных «частей», которые подобны подпрограммам, названным по номерам. Каждая часть состоит из одного или нескольких пронумерованных шагов. После завершения шагов каждой части, управление возвращается к продолжению шага, с которого была вызвана часть с помощью команды DO PART. Версия TELCOMP требует, чтобы значение переменной N было заранее равным длине массива A. После ввода этих команд пользователь все еще должен дать прямую команду DO PART 1, чтобы начать процесс сортировки, тогда как команда ABC может быть использована напрямую.
ABC не стал тем успехом, на который мы рассчитывали. Когда мы начинали проект, мы наивно полагали, что изучение первых принципов программирования станет лишь вопросом времени и войдет в стандартную школьную программу, для которой ABC будет идеально подходить. В некоторых школах учителя действительно проводили экспериментальные занятия по программированию с использованием ABC. Но когда в конце 1980-х годов «информатика» наконец-то вошла в программу голландских средних школ, оказалось, что она стала не более чем курс по использованию текстового процессора (WordPerfect) и электронных таблиц (Lotus 1-2-3), оба продукта теперь лишь воспоминание. Серьезным препятствием, с которым мы столкнулись, был поиск способа сообщить оставшейся целевой группе пользователей — непрофессиональных компьютерных любителей — о существовании языка. Интернета в том виде, в котором мы его знаем, еще не существовало. Его предшественник, ARPANET, был предназначен для академических и военных нужд. По какой-то причине директора CWI не одобрили идею разместить объявление в журнале Dr. Dobb’s Journal, который в то время был ведущим журналом для компьютерных любителей. Единственное, что мы могли сделать, это разослать копии программного обеспечения на дискетах тем немногим счастливчикам, которые слышали о нашем проекте и связались с нами — всего несколько сотен человек. По своей мудрости и вопреки нашим желаниям, директора института настояли на том, чтобы на начальном экране отображалось сообщение «Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985», активно отбивая у пользователей охоту давать копии своим друзьям. Кстати, это был тот самый год, когда Ричард Столлман опубликовал «Манифест GNU» в журнале Dr. Dobb’s Journal, который стал призывом к движению за свободное программное обеспечение.
В 1988 году Гвидо ван Россум был назначен на проект Amoeba, совместный проект Свободного университета (Free university) и CWI, целью которого была разработка распределенной операционной системы. Однажды утром в январе 1990 года он пригласил меня на демонстрацию своего нового детища — языка под названием «Python», который он разработал в перерыве между Рождеством и Новым годом. Не помню, чтобы я сначала был в восторге; смысл этого нового языка в то время от меня ускользал. Только после того, как я заметил, что программисты, участвовавшие в проекте, стали восторженными пользователями Python, в частности Джек Янсен, ставший первым в мире программистом на Python после ван Россума, я начал обращать на него более пристальное внимание.
Python и секрет успеха
Иногда дизайнеры пытаются извлечь выгоду из успеха других продуктов, подражая им. Хотя эта формула может работать в течение ограниченного времени с модными изделиями или фильмами, она не имеет никакого смысла для языков программирования. Успешный язык порождает значительную коллекцию программного обеспечения, написанного на этом языке, и штат программистов, владеющих этим языком. Переход на другой язык означает, что кодовая база организации должна быть переписана, а программисты должны пройти переподготовку. Этот процесс влечет за собой вполне реальные затраты и будет выгоден только в том случае, если новый язык будет значительно лучше в каком-то важном отношении. Он не может быть просто копией.
Имеет смысл рассматривать сферу языков программирования как экосистему, в которой языки занимают свои собственные ниши. Ниша FORTRAN — высокопроизводительное научное программирование, включающее тяжелые численные вычисления; ниша COBOL — администрирование, основанное на файлах записей данных. Язык C предназначен для системного программирования, первоначально он был разработан специально для операционной системы Unix. Как не существует транспортного средства общего назначения, так не существует и универсального языка программирования общего назначения; для конкретной узкоспециализированной области применения всегда можно разработать язык, приспособленный и лучше отвечающий специфическим потребностям этой области.
В рамках проекта Amoeba возникла необходимость соединить независимо разработанные части программного обеспечения. В то время операционные системы, такие как Unix, поставлялись с программой, называемой «оболочкой» (shell), для выдачи прямых инструкций операционной системе. Они включали в себя инструкции, необходимые для связи приложений, например, передачу вывода одного из них на вход другого. Последовательность shell-команд, известная как «скрипт» (сценарий), могла быть сохранена в файле, имя которого затем могло быть использовано в качестве новой shell-команды. Это была отдельный вид программирования, но shell-языки, какими они были в то время, не были предназначены для программирования, и их использование для этой цели могло быть крайне неудобным. Хуже того, не было прямого способа взаимодействия с процессами Amoeba; заглушки кода приходилось писать на C. Хотя переход на C мог показаться лучшим выходом, он также заставил бы программиста ввязаться в неудобный цикл «редактирования-сохранения-компиляции-исполнения-отладки». Возникла явная потребность в хорошо продуманном «языке сценариев», который позволял бы взаимодействовать с внешними процессами. Python был первоначально разработан как высокоуровневый язык сценариев для проекта Amoeba. ABC был совершенно непригоден для этой цели; он жил в собственном мире, ограждая своих пользователей от внешнего мира. Python был специально разработан для взаимодействия с этим внешним миром. Единственным другим претендентом в нише скриптовых языков высокого уровня в то время была ранняя версия Perl, но она не была должным образом документирована, и дальнейшая поддержка языка не могла быть гарантирована. Кроме того, хотя Perl и делал то, что должен был делать, он представлял собой эклектичную смесь функций, взятых из других языков, которые были интегрированы без особого внимания к целостности и соглаосванию.
Несмотря на радикально иную область применения, Гвидо ван Россума вдохновила философия проектирования и правила разработки проекта ABC. Позднее философия дизайна Python будет несколько поэтично описана Тимом Питерсом, одним из его первых евангелистов, в тексте, известном сегодня как «Дзен Python». Многие из его афоризмов перекликаются с философией дизайна ABC: «Ошибки никогда не должны проходить молча» и «Перед лицом двусмысленности откажитесь от искушения угадать» соответствуют правилу проектирования, которое мы назвали правилом «Логических ошибок». Аналогично, правило «Справедливых ожиданий» отражено в утверждении: «Особые случаи не настолько особенны, чтобы нарушать правила»; а «Должен быть один — и желательно только один — очевидный способ сделать это» воплощает дух правила «Экономии инструментов». Как и в случае с ABC, пользователи Python могли набрать некоторый код и сразу же запустить его; язык имел лаконичный и понятный синтаксис, высокоуровневые типы данных, а объявления переменных не требовались. Это настолько упростило рабочий процесс, что первые его пользователи, системные программисты, также начали использовать язык для решения многих задач, выходящих за рамки его первоначального предназначения. Несколько усовершенствованная версия с соответствующей документацией, описывающей, как установить систему под Unix, была выложена в Usenet в начале 1991 года как релиз с открытым исходным кодом, и ее подхватили программисты по всему миру.
Способность развиваться и адаптироваться к изменяющимся потребностям — это важный атрибут для долгосрочного выживания любого языка программирования. FORTRAN, впервые появившийся в 1957 году, и COBOL, датируемый 1960 годом, живы и сегодня, но претерпели значительную эволюцию. Точно так же и Python, который сейчас доступен в версии 3, уже не является Python 1990 года, но все же сумел сохранить свои сильные стороны, включая согласованность, отсутствие ненужных ограничений и экономичность инструментов. Мощные типы данных играют центральную роль в Python, как и в ABC, а до этого в SETL.
Следующие примеры кода показывают две версии алгоритма пузырьковой сортировки, на этот раз выраженные на языках ABC и Python.
ABC:
FOR i IN : FOR j IN : IF a[j] > a[j+1]: PUT a[j+1], a[j] IN a[j], a[j+1]
Python:
for i in range(len(a)-1): for j in range(len(a)-1): if a[j] > a[j+1]: a[j], a[j+1] = a[j+1], a[j]
Синтаксическое сходство между этими языками очевидно. Другое сходство заключается в том, что ни в одном из языков нет требования включать объявления переменных, используемых в программе — это бремя снимается, но ценой безопасности типов. Почти во всех языках программирования код для алгоритма пузырьковой сортировки будет работать только для одного типа элементов, например, чисел. Если, например, строки текста тоже нужно отсортировать, придется написать еще один кусок кода. В Python, как и в ABC, приведенный выше код можно использовать для любых типов элементов, для которых определен оператор сравнения >, например, для строк. В то время как многие языки программирования не вмещают десятизначные целые числа, ни ABC, ни Python не накладывают верхнюю границу на размер целого числа. Значение выражения (10^999 + 1) – 10^999 в точности равно 1, но пошаговая оценка требует вычитания двух чисел, которые, если записать их в десятичной системе счисления, содержат по тысяче цифр. В большинстве языков программа выйдет из строя или выдаст 0 вместо 1. И Python, и ABC выдают правильное значение. Это не просто свойство реализаций; оно предписано спецификацией языка.
Никакой краткий обзор возможностей Python, какими бы привлекательными они ни были, не может дать оценку общему дизайну языка — его нельзя оценивать, рассматривая его компоненты по отдельности. Лучшим показателем качества Python является разумный выбор, который был сделан в отношении того, какие функции включать, а какие не включать. Его реальная сила может быть измерена тем, насколько хорошо эти компоненты могут быть объединены для решения задач программистов.
Рост популярности Python, начиная с его появления тридцать лет назад в качестве усилия одного человека, пролетевшего под радаром, был феноменальным, но не метеоритным. Напротив, это был долгий, медленный и неуклонный рост. Простота изучения Python дала ему конкурентное преимущество в период, когда постоянно требовалось больше программистов. Его чистый синтаксис и семантика позволяют легче поддерживать кодовую базу, написанную на Python, чем на других языках — важный момент, учитывая, что стоимость поддержки программного обеспечения превосходит стоимость создания новых программ. Его растущая популярность также обусловлена наличием обширных библиотек — коллекций модулей, предлагающих функциональность, специфичную для конкретной области, разработанных и поддерживаемых сообществом Python в духе открытого и свободного программного обеспечения и легко доступных через поисковый Python Package Index (PyPI). Независимо от того, хочет ли начинающая компания быстро разработать веб-сайт или приложение для искусственного интеллекта, библиотеки Python могут дать хороший задел для старта. Существуют модули для астрономии, криптографии, науки о данных, финансовых услуг, геномики, мультимедиа и многих других областей. Дизайн Python делает использование библиотек и модулей простым — область, в которой дизайн ABC был недостатком. Python также упрощает создание новых библиотек и тем самым побуждает пользователей вносить новые разработанные библиотеки приложений в общий репозиторий.
Почти по любому показателю Python входит в тройку самых популярных языков программирования во всем мире, а часто и возглавляет этот список. Какими бы ни были внутренние качества Python, феноменальный успех языка невозможно объяснить без учета роли, которую сыграл его непритязательный создатель и ведущий дизайнер Гвидо ван Россум. Действуя при поддержке и согласии сообщества Python, ван Россум должен был лично «подписывать» все изменения в языке, что привело к присвоению ему шутливого титула «пожизненного доброжелательного диктатора». На протяжении всего развития Python твердая направляющая рука ван Россума помогала сохранять целостность его дизайна.
Приквел и эпилог
Я впервые встретился с Гвидо ван Россумом в начале 1980-х годов, когда мы оба работали в группе по проектированию и разработке системы автоматизации управления членством в Pacifistisch Socialistische Partij, голландской политической партии, которая позже объединилась с несколькими другими небольшими партиями и образовала партию GroenLinks (Зеленые левые). За предыдущие несколько лет число членов партии удвоилось, и трое сотрудников, которые до этого момента выполняли всю административную работу вручную, были перегружены. К счастью, цены на мини-компьютеры стремительно падали, и партия решила приобрести один из них. Бюджет партии не позволял коммерческой компании по разработке программного обеспечения создать необходимую систему; вместо этого небольшая группа добровольцев начала разработку системы своими силами, используя COBOL в качестве языка реализации. Серьезным препятствием для разработки было неудобство редактора, поставляемого с мини-компьютером; он позволял пользователям видеть только одну строку кода за раз. Поскольку компьютер не мог работать в многозадачном режиме, компиляция, которая была невероятно медленной, и тестирование должны были ждать окончания сеанса редактирования. В результате прогресс мог быть достигнут лишь со скоростью улитки. Ван Россум, в то время студент университета, удивил остальных членов команды, неожиданно создав новый редактор, который был не только намного проще в использовании, но и эффективно использовал большую часть доступного пространства экрана. Он написал редактор на COBOL, языке, с которым познакомился только благодаря этому проекту. В то время проект ABC стремился расширить команду разработчиков, и, признавая его талант к программированию, я посоветовал ван Россуму подать заявление о приеме на работу. После окончания университета он начал свою профессиональную карьеру 1 ноября 1982 года в качестве члена команды языка B, которую он также удивил неожиданным появлением нового редактора — структурного редактора для ABC, полностью учитывающего его синтаксис.
Воркшоп в Стамбуле в 2019 году, упомянутый в начале этого очерка, был не единственным в своем роде. На самом деле, он был восьмым в продолжающейся серии таких воркшопов, которые были приостановлены пандемией COVID-19. В ходе этих однодневных семинаров участницы начинают с тривиальной однострочной программы, такой как print(‘Hello, Django Girls!’), и к концу дня учатся программировать свой собственный веб-сайт. Эти семинары Django Girls проводятся не только в Стамбуле, они проходят по всему миру. И Python преподается не только как первый язык на этих семинарах; он стал языком для вводных курсов по программированию. Сейчас Python занимает ту нишу, для которой был разработан ABC. Действительно, сейчас Python занимает множество ниш. Он стал действительно многопрофильным языком.
Успех любого начинания редко можно приписать какому-то одному фактору. Помимо вышеперечисленных факторов, свою роль играет и удача. Если ABC, возможно, слишком опередил свое время, то Python появился как раз в нужное время. Как бы там ни было, я считаю, что философия проектирования, которую мы разработали в процессе создания ABC, в той мере, в какой ей следовали и в Python, оказала, по крайней мере, некоторое положительное влияние.
Ламберт Меертенс научный сотрудник в институте Кестрела — некоммерческом исследовательском центре компьютерных наук при Стэнфордском исследовательском парке в Пало-Алто. В то время как его основная работа была выполнена в CWI, Амстердам, и в Институте Кестрел, он занимал профессорские должности в Нью-Йоркском университете, Делфтском технологическом университете и Утрехтском университете, а также был председателем рабочей группы IFIP 2.1 по алгоритмическим языкам и вычислениям с 1999 по 2009 год.
Если будут замечены ошибки или неточности в переводе, буду благодарен за указание на них в лс или комментариях.
Язык программирования Python

— мощный и простой для изучения язык программирования. В нём предоставлены удобные высокоуровневые структуры данных и простой, но эффективный подход к объектно-ориентированному программированию. Python интерпретируемый язык. Для запуска написанных программ требуется наличие интерпретатора CPython. Интерпретатор python и большая стандартная библиотека находятся в свободном доступе в виде исходных и бинарных файлов для всех основных платформ на официальном сайте Python http://www.python.org и могут распространяться без ограничений. Кроме этого на сайте содержатся дистрибутивы и ссылки на многочисленные модули третьих сторон и подробная документация.
Язык обладает чётким и последовательным синтаксисом, продуманной модульностью и масштабируемостью, благодаря чему исходный код написанных на Python программ легко читаем. Разработчики языка Python придерживаются определённой философии программирования, называемой «The Zen of Python».
Её текст выдаётся интерпретатором по команде import this:
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested. Sparse is better than dense.
Readability counts. Special cases aren’t special enough to break the rules.
Although practicality beats purity. Errors should never pass silently.
Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess.
There should be one— and preferably only one —obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never. Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea — let’s do more of those!
В переводе это звучит так:
Красивое лучше, чем уродливое.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем запутанное.
Плоское лучше, чем вложенное.
Разреженное лучше, чем плотное.
Читаемость имеет значение.
Особые случаи не настолько особые, чтобы нарушать правила.
При этом практичность важнее безупречности.
Ошибки никогда не должны замалчиваться.
Если не замалчиваются явно.
Встретив двусмысленность, отбрось искушение угадать.
Должен существовать один — и, желательно, только один — очевидный способ сделать это.
Хотя он поначалу может быть и не очевиден, если вы не голландец.
Сейчас лучше, чем никогда.
Хотя никогда зачастую лучше, чем прямо сейчас.
Если реализацию сложно объяснить — идея плоха.
Если реализацию легко объяснить — идея, возможно, хороша.
Пространства имён — отличная штука! Будем делать их побольше!
Python — активно развивающийся язык программирования, новые версии выходят примерно раз в два с половиной года. Вследствие этого и некоторых других причин на Python отсутствуют стандарт ANSI, ISO или другие официальные стандарты, их роль выполняет CPython.
История создания языка
Разработка языка Python была начата в конце 1980-х годов сотрудником голландского института CWI Гвидо ван Россумом. Распределённой ОС Amoeba требовался расширяемый скриптовый язык для которой Гвидо ван Россум и создал Python. Новый язык позаимствовал некоторые наработки для языка ABC, который был ориентирован на обучение программированию. В феврале 1991 года Гвидо опубликовал исходный текст в ньюсгруппе alt.sources. Название языка произошло не от вида пресмыкающихся. Автор назвал язык в честь популярного британского комедийного телешоу 1970-х «Летающий цирк Монти Пайтона». Тем не менее эмблему языка изображают змеиные головы. После длительного тестирования, вышла первая версия Python 3.0. На сегодня поддерживаются обе ветви развития (Python 3.x и 2.x).
Python создавался под влиянием множества языков программирования: Modula-3, С, C++, Smalltalk, Lisp, Fortran, Java, Miranda, Icon. Несмотря на то, что Python обладает достаточно самобытным синтаксисом, одним из принципов дизайна этого языка является принцип наименьшего удивления.
Python и подавляющее большинство библиотек к нему бесплатны и поставляются в исходных кодах. Более того, в отличие от многих открытых систем, лицензия никак не ограничивает использование Python в коммерческих разработках и не налагает никаких обязательств кроме указания авторских прав.
Сферы применения
Python — стабильный и распространённый язык. Он используется во многих проектах и в различных качествах: как основной язык программирования или для создания расширений и интеграции приложений. На Python реализовано большое количество проектов, также он активно используется для создания прототипов будущих программ. Python используется во многих крупных компаниях.
Python с пакетами NumPy, SciPy и MatPlotLib активно используется как универсальная среда для научных расчётов в качестве замены распространенным специализированным коммерческим пакетам Matlab, IDL и др.
В профессиональных программах трехмерной графики, таких как Houdini и Nuke, Python используется для расширения стандартных возможностей программ.