Как преподаватель, исследователь и автор книг, я очень рад видеть эту книгу завершенной. Python — увлекательный и чрезвычайно простой в использовании язык программирования, который неуклонно завоевывает популярность на протяжении последних лет. Разработанный более 10 лет назад Гвидо ван Россумом (Guido van Rossum), Python во многом обязан своим простым синтаксисом и общим впечатлением, производимым на пользователей, языку ABC (англ.: азбука) — языку для обучения, разработанному в 1980-х годах. Python, однако, был создан для решения реальных задач и многое позаимствовал из таких языков программирования, как C++, Java, Modula-3 и Scheme. Отсюда одна из замечательных особенностей языка Python — его огромная привлекательность для профессиональных программистов, ученых, исследователей, для людей из сферы искусства и сферы образования.
Несмотря на притягательность Python для людей из разных сообществ, вы все же можете спросить: почему Python? Или: почему стоит изучать программирование именно на языке Python? Ответить на эти вопросы — непростая задача, особенно с учетом того, что общественное мнение находится на стороне более мазохистских альтернатив, таких, как C++ и Java. Я думаю, что наиболее прямой ответ на этот вопрос такой: просто потому, что программирование на Python — это удовольствие, и еще потому, что программирование на Python более производительно.
Когда я преподаю курс информатики (computer science), моя задача не только в том, чтобы сделать материал интересным и захватывающим для студентов, но и в том, чтобы рассказать о важных концепциях. К сожалению, во вводных курсах по программированию есть тенденция слишком сильно фокусироваться на математических абстракциях, а студенты слишком часто охладевают к программированию из-за раздражающих низкоуровневых деталей, связанных с синтаксисом, компиляцией, необходимостью следовать правилам, назначение которых непонятно. Хотя математические абстракции и формальный подход важны для профессиональных программистов и студентов, планирующих продолжить изучение программирования, такой подход к преподаванию вводных курсов делает программирование скучным для обучаемых. Когда я веду учебный курс, мне не хочется видеть перед собой студентов, которых не вдохновляет то, что они изучают. Я хотел бы видеть студентов, которые пытаются решать интересные задачи, пробуют разные идеи, нетрадиционные подходы, нарушают правила и извлекают уроки из собственных ошибок. Я не хочу тратить половину семестра, решая проблемы, возникающие у студентов в связи с замысловатым синтаксисом, невнятными сообщениями об ошибках компиляции или сотнями способов, которыми программа может вызвать ошибку общей защиты.
Одна из причин, по которым я люблю Python, — то, что этот язык предлагает хороший баланс между практическим и концептуальным. Поскольку Python интерпретируемый язык, начинающие могут быстро овладеть основами и начать программировать, не погрязнув в задачах компилирования и сборки. Более того, Python предлагает большую библиотеку модулей на все случаи жизни, от веб-программирования до работы с графикой. Такая практическая направленность увлекает студентов, и позволяет им выполнять серьезные проекты. Однако, Python также отлично подходит для изучения основных понятий программирования. Поскольку Python полностью поддерживает функции и классы, студенты могут постепенно осваивать такие темы, как процедурные абстракции, структуры данных, объектно-ориентированное программирование. Все эти темы получат свое продолжение в более поздних курсах по Java или C++. Python даже заимствует ряд возможностей из языков функционального программирования, и может использоваться для знакомства с понятиями, которые раскрываются более глубоко в курсах по Scheme и Lisp.
Читая предисловие Джеффри, я был поражен его замечанием о том, что Python позволил ему повысить успеваемость учеников и уменьшить число разочарований, и что обучение программированию стало продвигаться быстрее и с лучшими результатами. Хотя его замечания относятся к курсу по введению в программирование, именно по этим причинам я иногда использую Python в продвинутых курсах для аспирантов чикагского университета. На этих курсах я постоянно сталкиваюсь с обескураживающей меня задачей уместить много сложного материала в стремительно пролетающие девять недель. Хотя я, конечно, заставлял студентов помучиться, выбрав язык, подобный C++, такой подход часто оказывался контрпродуктивным — особенно в тех случаях, когда курс был посвящен не исключительно программированию. Я обнаружил, что использование Python позволяет мне лучше фокусироваться на преподаваемом предмете, а студенты получают возможность выполнить серьезные учебные проекты.
Хотя Python все еще молодой и развивающийся язык, я верю, что у него блестящее будущее в сфере образования. Данная книга — важный шаг в этом направлении.