Различия между версиями 5 и 6
Версия 5 от 2013-01-19 16:48:09
Размер: 18961
Редактор: FrBrGeorge
Комментарий:
Версия 6 от 2013-01-19 18:34:56
Размер: 18960
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 12: Строка 12:
'''(2) Батарейки внутри.''' Во-вторых, Python — это не только язык программирования, но и довольно полная инструментальная среда общего назначения, насчитывающая более полутора сотен модулей на все случаи жизни (связь с ОС, шаблоны и алгоритмы программирования, эффективные и сложные типы данных, работа с различными форматами данных, сеть, вычислительная математика и т. д.)<<FootNote(http://docs.python.org/3.4/py-modindex.html)>>. Список не входящих в поставку, но зарегистрированных на сайте «Python Package Index» и доступных к использованию модулей в полтораста раз больше><<FootNote(http://pypi.python.org/pypi)>>. Это позволяет расширить круг учебных задач за счёт предметных областей, затрагиваемых в модулях, и не привлекать при этом сторонние, не совместимые с базовым, инструментарии. '''(2) Батарейки внутри.''' Во-вторых, Python — это не только язык программирования, но и довольно полная инструментальная среда общего назначения, насчитывающая более полутора сотен модулей на все случаи жизни (связь с ОС, шаблоны и алгоритмы программирования, эффективные и сложные типы данных, работа с различными форматами данных, сеть, вычислительная математика и т. д.)<<FootNote(http://docs.python.org/3.4/py-modindex.html)>>. Список не входящих в поставку, но зарегистрированных на сайте «Python Package Index» и доступных к использованию модулей в полтораста раз больше<<FootNote(http://pypi.python.org/pypi)>>. Это позволяет расширить круг учебных задач за счёт предметных областей, затрагиваемых в модулях, и не привлекать при этом сторонние, не совместимые с базовым, инструментарии.

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

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

Общие слова

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

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

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

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

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

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

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

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

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

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

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

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

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

(8) Мультипарадигмальность. Традиционный императивный язык программирования (как, собственно, и любой другой) не может претендовать на полный охват различных парадигм программирования в рамках единого синтаксиса. К тому же философия Python требует, чтобы всякое расширение процедурной по сути парадигмы Python естественно следовало из имеющихся возможностей языка. Это не мешает «выводить» из свойств объектов весьма современную и гибкую объектную модель (см. п. (4)). Не менее естественно выглядят элементы функционального программирования10, особенно в сочетании со списками, генераторами, функционалами и прочими стандартными средствами языка. Декларативная парадигма подразумевает несколько иную организацию данных и диалога с пользователем, здесь на помощь приходит Python-интерпретатор командной строки. Реализация логического программирования упаковывается при этом в модуль, а диалог ведётся стандартными средствами (таких модулей в сети немало, но на не доводилось анализировать их на предмет пригодности для учебного процесса). Наконец, событийное программирование явной поддержки в языке не имеет, зато, в силу специфики области применения (моделирование систем, сеть, GUI), представлено весьма мощными и многочисленными модулями в традиционном стиле «объекты + обратные вызовы + главный цикл + параллельность» с упором на эту самую специфику.

Нелишне заметить: когда учебная программа требует глубокого знакомства с парадигмами программирования и располагает соответствующим временем в сетке, разумнее изучать различные среды программирования, ориентированные на ту или иную парадигму. Но и здесь современное пространство языков программирования предлагает известную свободу маневрирования. Например, весьма примечательным представляется функциональный язык программирования Pure (многими полезными свойствами он похож на Python).

(9) По-взрослому. Будучи не только языком, но и средой программирования, Python обладает всеми признаками инструмента разработки сложных систем. Многоуровневая модульность, динамическое документирование кода (это когда строка документации является частью объекта), поддержка модульного тестирования и технического документирования (как обычно, сразу несколькими сторонними модулями), собственная система пакетирования и развёртывания программных компонентов

Технологии

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

Вывод: организация процесса

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

Ввести 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

FrBrGeorge/PythonAsBasicLanguage (последним исправлял пользователь FrBrGeorge 2015-06-03 22:17:08)