Язык программирования Python как базовый ЯП при обучении специалистов

Язык программирования Python обладает рядом уникальных или просто полезных достоинств, позволяющих использовать его в качестве базового ЯП при обучении специалистов весьма широкого диапазона — от профессиональных программистов и инженеров до научных работников в области естественных и гуманитарных наук. Достоинства эти отчасти вполне объективного, а отчасти и весьма субъективного толка. Как следствие, наш обзор не будет претендовать на сугубую объективность, опираясь, с одной стороны на личный опыт преподавания в различной аудитории, а с другой — на знания о возможностях самого языка. Цель обзора — показать поразительную универсальность среды Python в качестве возможной базы для программистской части ИТ-образования. Не является рекламой. Имеются противопоказания, проконсультируйтесь со специалистом.

Общие слова

Python до сих пор принято считать «молодым» языком программирования, хотя он слегка старше Java (официальный «год рождения» — 1989). Дело в том, что Python — очень динамично развивающийся язык, в котором непрерывно идёт процесс обновления и расширения как самого ЯП, так и инструментальной среды, входящей в стандартную поставку.

Это, кстати, сразу обращает наше внимание на первые три достоинства Python в качестве именно языка обучения.

(1) Bleedng edge. Во-первых, разработчики стараются удержаться на «передовом крае науки», видоизменять язык в соответствие с новшествами в области программирования (разумеется, дозированно и после тщательного обсуждения). Следовательно, в какой-то мере решён вопрос «устаревания инструмента», довольно остро стоящий в отношении, например, учебных программ, основанных на ЯП Pascal. Правда, возникает вопрос устаревания самой учебной программы… Впрочем, если по какой-то причине изменения программы надо подтормозить, в нынешней ситуации можно остановиться на Python2, развитие которого заморожено в пользу Python3.

(2) Batteries included. Во-вторых, Python — это не только язык программирования, но и довольно полная инструментальная среда общего назначения, насчитывающая более двух сотен модулей на все случаи жизни (связь с ОС, шаблоны и алгоритмы программирования, эффективные и сложные типы данных, работа с различными форматами данных, сеть, вычислительная математика и т. д.). Список не входящих в поставку, дно зарегистрированны на сайте «Python Package Index» и доступных к использованию модулей в сто раз больше. Это позволяет расширить круг учебных задач за счёт предметных областей, затрагиваемых в модулях, и не привлекать при этом сторонние, не совместимые с базовым, инструментарии.

(3) Good choice. В-третьих, Python — очень востребованный язык программирования. Некоторые организации (RedHat, NASA. Google) прямо заявляют, что ведут разработку или часть разработки на Python, а количество написанного на Python прикладного программного обеспечения любой сложности, вообще вряд ли поддаётся исчислению. Стало быть, на одном только Python ученик без куска хлеба не останется. Хотя о том, что бы был не один только Python, да и масло на хлебе, стоит тоже позаботиться.

Python как первый язык программирования

Гвидо ван Россум, автор языка программирования и «бессменный великодушный диктатор» сообщества Python, в своём «Пособии к Python» замечает, что пособие это — для тех, кто уже умеет программировать. В самом деле, изложение в нём плотное, с постоянной отсылкой на различные программистские реалии. Но структура «Пособия» довольно прозрачно намекает на то, каким может быть вариант учебной программы «с нуля».

(4) Последовательность вхождения. Пользуясь тем, что Python — это интерпретатор со встроенной системой помощи, «Пособие» предлагает неожиданно традиционалистский подход к обучению программированию. Поначалу можно использовать Python как калькулятор всевозможных математических (а также и строковых) выражений. При решении, скажем, квадратного уравнения естественно возникает вопрос о промежуточном хранении вычисленных объектов — так возникает идея имён (переменных в строгом смысле в языке нет), а заодно возникает идея условного выполнения действий. Сами объекты обладают массой полезных свойства — методами. Полезную последовательность действий можно записать в функцию. Для прохода по последовательностям предусмотрены циклы… Клубочек можно ещё глубоко разматывать, добраться до классов, наследования, функциональных элементов и многого другого. Не забыть только научиться записывать программу в файл.

(5) Компактность. Из опыта работы со школьниками (и не только) известно, что для эффективности обучения очень важно соблюсти баланс между размером контекста и его плотностью. Говоря проще, реализация алгоритма должна умещаться на одном экране, но всё, что на этом экране находится, должно быть — при известном умственном усилии — понятно до конца. Одну и ту же программу на Python можно написать и «под Pascal» (длинно), и «под Lisp» (в две-три немыслимые строки), и «под Python» (с использованием подходящих высокоуровневых конструкций и модулей). Отсутствие описаний и операторных скобок, множественное присваивание, выражения-конструкторы, лаконичные составные типы данных и операции над ними и многое другое позволяют писать программы коротко, но разборчиво. И — да, отступы как обязательный элемент синтаксиса здесь тоже к месту.

(6) Первый и последний язык. Не менее успешен был опыт «блиц-обучения» нескольких студентов факультета Психологии МГУ — не с целью подготовки программистов, а с целью дать в руки инструмент, достаточный для ввода-вывода и обработки данных. Здесь помогает то, что для многих простых подзадач в Python имеется готовая реализация в виде конструкции ЯП или модуля. Так, подавляющее большинство структур экспериментальных данных вписываются в питоновские списки или словари, интерфейс организуется из готовых интерфейсных блоков, а собственно анализ данных программировать и не надо, для этого есть специализированные инструменты. Кроссплатформенность инструментальной среды освобождает человека не-программиста от необходимости осваивать их несколько.

В «удобстве» Python кроется часто обсуждаемый недостаток. Считают, что, изучив «удобный» Python, человек не захочет переходить на «неудобный» низкоуровневый Си или многословный Java. Вот так же и автора этих строк учили сначала программировать на Фортране, а затем уже — на Си именно из соображений «не захочет потому Фортран учить». Это возможно, да.

Python как «продвинутый» язык программирования

(7) Сахар и простота. Первое, чем завлекает Python опытного программиста — это обилие «синтаксического сахара» и вообще всяческих конструкций, сводящих синтаксический шум к минимуму и повышающих плотность программного текста. Большую роль играет и принцип «сведения к простому»: например, в Python нет отдельной перегрузки операций, потому что операции — это и есть соответствующие методы объекта. Ещё более показательный пример — использование «утиной типизации» (суть которой в следующем: если для работы с уткой используется всего два метода — .крякать() и .плавать(), то любой объект с такими методами — это утка, независимо от того, что ещё может объект (например, .летать() или .тарахтеть()). Отдельное удовольствие доставляют доведённые до логического завершения идеи языка Си о неполном вычислении и интерпретации логических выражений.

(8) Мультипарадигмальность.

Технологии

== Приложения в других областях ===

Примерыложение

(Брудно, Каплан) Ввести N и число, вывести все N-значные числа, сумма цифр которых равна заданному числу.

   1 N,S = input()
   2 def su(n,s):
   3     for i in xrange(max(0,2-n,s-(n-1)*9),min(9,s)+1):
   4         for a in n>1 and su(n-1,s-i) or [s-i]:
   5             yield i+a*10
   6 for num in su(N,S):
   7     print num