Главная страница
Навигация по странице:

ТиМОИ. Методика преподавания информатики как педагогическая наука Вместе с введением в школу общеобразовательного предмета Основы информатики и вычислительной техники



Скачать 102 Kb.
Название Методика преподавания информатики как педагогическая наука Вместе с введением в школу общеобразовательного предмета Основы информатики и вычислительной техники
Анкор ТиМОИ.doc
Дата 18.12.2017
Размер 102 Kb.
Формат файла doc
Имя файла ТиМОИ.doc
Тип Документы
#13024

Методика преподавания информатики как педагогическая наука

Вместе с введением в школу общеобразовательного предмета «Основы информатики и вычислительной техники» началось формирование новой области педагогической науки – методики преподавания информатики, объектом которой является обучение информатике. Курс методики преподавания информатики появился в вузах страны в 1985 году. В 1986 году начался выпуск методического журнала «Информатика и образование».

Согласно классификации научных специальностей, этот раздел педагогики, исследующий закономерности обучения информатике на современном этапе ее развития в соответствии с целями, поставленными обществом, получил новое название – «Теория и методика обучения и воспитания (информатике; по уровням образования)». В соответствии с Государственным образовательным стандартом высшего профессионального образования специальности 030100 «Информатика» (2000 г.) курс МПИ стал называться «Теория и методика обучения информатике». Однако устоявшееся название «Методика преподавания информатики» продолжает использоваться в названиях учебных курсов, учебников, нормативных документах.

Важную роль в развитии методики преподавания информатики сыграли дидактические исследования целей и содержания общего кибернетического образования, накопленный отечественной школой еще до введения предмета информатики практический опыт преподавания учащимся элементов кибернетики, алгоритмизации и программирования, элементов логики, вычислительной и дискретной математики и т.д.

Учитывая, что первые опыты преподавания кибернетики-информатики велись уже в середине 50-х гг. прошлого века, разработка общеобразовательного подхода к обучению информатике имеет в общей сложности почти полувековую историю.

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

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

В ряде публикаций справедливо отмечалось, что в течение весьма длительного периода содержание методической подготовки будущего учителя информатики – наиболее слабая часть (и наиболее слабо обеспеченная часть) его профессиональной подготовки.

Содержание учебного предмета МПИ определяет его два основных раздела: общая методика, в которой рассматриваются общие теоретические основы методики преподавания информатики, совокупности основных программно-технических средств, и частная (конкретная) методика – методы изучения конкретных тем школьного курса информатики на пропедевтическом, базовом и профильном этапах обучения.

Методика преподавания информатики – молодая наука, но она формируется не на пустом месте. Являясь самостоятельной научной дисциплиной, в процессе формирования она вобрала в себя знания других наук, а в своем развитии опирается на полученные ими результаты. Эти науки – философия, педагогика, психология, возрастная физиология, информатика, а также обобщенный практический опыт методик других общеобразовательных предметов средней школы.

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

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

Учителю информатики необходимо ориентироваться в проблемах философии (мировоззренческий подход к изучению системно-информационной картины мира), филологии и языкознания (системы программирования, текстовые редакторы, системы распознавания текста, средства компьютерного перевода, системы искусственного интеллекта), математики, физики и экономики (компьютерное моделирование), живописи и графики (графические редакторы, дизайн, системы мультимедиа) и т.д. Учитель информатики должен быть широко эрудированным человеком, постоянно повышающим свою квалификацию и уровень знаний.
3.  Программное обеспечение ЭВМ.  

Программное обеспечение ЭВМ подразделяется на прикладные программы и системное обеспечение, в котором основным является операционная система и инструментальные средства.

Прикладные программы - это пакеты программиспользуемыедля решения прикладных задач на ЭВМ - профессиональных, учебных, научных, произ вод ственных, экономических, марке тинговых, информационных и т.д.

Возможности ЭВМ определяются не только их произво дитель но стью, но и наборами доступных пакетов программ и операционных средств и систем, а также возможностью подключения их к компьютерным сетям.

Операционная система - пакет программ, хранящийся в долговременной  памяти и используемый для управления устройствами, файлами, папками, паке тами программ и работой ЭВМ в целом.

Работа современных ЭВМ начинается с загрузки опера ционной системы. Все современные операционные системы содержат средства работы с файлами, про грам мами, папками и устройствами ввода-вывода информации.

Для уста новки в ЭВМ новыхпакетов программ и операционных систем необходимо наличие свободной памяти на жестких дисках и устройство для чтения компакт-дисков с дистри­бутивами пакетов программ.

На современных ЭВМ наиболее широко в мире распространены опера ционные  системы Windows и Linuxиспользуемыена персональных компью терах, в локаль ных сетях ЭВМ и на серверах глобальной сети Интернет.

Windows - семействооперационных систем для персональных ЭВМ модели IBM PC, со здан ных, модер ни зируемых и поставляемых на лицен зионной основе амери канской фирмой Microsoft.

Версии Windows - Windows-95Windows-98Windows-2000и Windows XP отличаются внешними интерфейсами и функ цио нальными возмож но стями, но имеют общее ядро и общие принципы работы.

Для сетей ЭВМ фирма Microsoft поставляет сетевую опера ционную систему Windows NT и сетевые версииоперационных систем Windows-2000 и Windows XPотличающиесявозможностями и надежностью.

Linux - семействооперационных систем для персо наль ных компьютеров и серверных ЭВМсозданная финским программистом Линусом Торвальдом и распро страняемая на основе генеральной публичной лицензии (GPL).

Версии Linux  можно свободно устанавливать на любых ком пьютерах (дома, в школе, вузе или на работе). Исполь зование Linux не требует ни ка кого лицензирования ни для персональных, ни для серверных ЭВМ.

Операционная система Linux - наиболее надежная и безопасная операционная система с большим числом пакетов системных, игровых, учебных, офисных и инстру ментальных программ, распространяемых через Интернет.

Высокая надежности Linux обеспечила широкое распространение этой операционной системы в Европе и Азии и на серверах сети Интернет.  Фирма IBM исполь зует Linux как опера­ционную систему на всех своих ЭВМ.

Для персональных ЭВМ широко используются офисные пакеты программ, позволяющие вести электронный документооборот - письма, документы, счета, сметы, отчеты, архивы  и тому подобное.

В операционной системе Windows основным является офисный пакет Microsoft Office, включающийтекстовый процессор Word, электронные таблицы Excel, программу презентацийPower Point и браузер Internet Explorer.

В операционной системе Linux основным считается офисный пакет Open Office, включающийтекстовый процессор Writer, электронные таблицы Calc, программупрезентаций Impress  и браузер Mozila.

Офисный пакет Open Office можетиспользоваться не только в Linux, но и в Windows. Все электронные документы, подготовленные в Microsoft Office могутсчитываться и редактироваться в Open Office.

Рождение языка PASCAL.

Считается, что юбилей Паскаля пришелся на ноябрь 2000 г., когда исполнилось 30 лет с момента первой официальной публикации описания языка. Но тогда это был первый, еще недоступный широкой аудитории, технический отчет Швейцарского федерального технологического института ETH (Eidgenoessische Technische Hochschule). В самом начале 1971 г. отчет был представлен в журнале Acta Informatica, так что время жизни нового языка логичней было бы отсчитывать именно с этого момента.

Его автор, швейцарский профессор Никлаус Вирт, во многом стал известен именно благодаря появлению Паскаля. Однако и последующие его проекты стали не менее знамениты и убедительно доказали миру, что залог успешного использования компьютеров — в гармонии математики, инженерии и программирования. И если грамотно подойти к делу, то можно создать языки, операционные системы и даже компьютеры, превосходящие промышленные образцы, силами обычных студентов!

Язык Паскаль практически с самого его рождения противопоставляют другому языку — Си. Это ярко выраженное идейное противостояние вошло в историю наряду с двумя другими: в 60-е годы – Алгол-60 и Фортран, в 90-е годы – Си++ и Java. Вот что по этому поводу сказал Деннис Ритчи, автор Си (1993): «Я утверждаю, что Паскаль очень близок языку Си. Одни, быть может, этому удивятся, другие — нет... Даже интересно, насколько они близки друг другу. Эти языки больше расходятся в деталях, но в основе своей одинаковы. Если вы взглянете на используемые типы данных, а также на операции над типами, то обнаружите очень большую степень совпадения... И это несмотря на то, что намерения Вирта при создании Паскаля весьма отличались от наших в языке Си. Он создавал язык для обучения, а потому преследовал дидактические цели. И, как я заметил это по Паскалю и по его более поздним языкам, Вирт был во власти своего стремления ограничить выразительные средства как можно сильнее...»

Да, Паскаль, в отличие от Си, не создавался как язык системного программирования. Во имя простоты и эффективности на том уровне понимания программирования Вирт сознательно пошел на заведомое ограничение возможностей языка, прежде всего в отношении общения с внешним миром (ввод-вывод и системно-зависимые средства). И все же думать, что Паскаль — язык исключительно для преподавания, было бы неверно. Послушаем на этот счет мнение самого Вирта (1984): «Утверждалось, что Паскаль был разработан в качестве языка для обучения. Хотя это утверждение справедливо, но его использование при обучении не являлось единственной целью. На самом деле я не верю в успешность применения во время обучения таких инструментов и методик, которые нельзя использовать при решении каких-то практических задач. По сегодняшним меркам Паскаль обладал явными недостатками при программировании больших систем, но 15 лет назад он представлял собой разумный компромисс между тем, что было желательно, и тем, что было эффективно».

Появление ETH Pascal и P-кода.

Первый компилятор Паскаля (ETH Pascal) был написан в 1970 г. Первое официальное описание Паскаля с изложением синтаксиса и семантики было опубликовано Виртом в конце 1970 г. Новая версия языка вышла в свет в 1972 г. Тогда же Вирт и его английский коллега Чарльз Энтони Хоар (Charles Anthony Richard Hoare) выпустили аксиоматическое описание Паскаля.

«Наш первый компилятор Паскаля был реализован на семействе компьютеров CDC-6000 и написан на самом Паскале. Никакого PL6000 не потребовалось, и я рассматривал это как существенный шаг вперед», — вспоминает Вирт. Несуществующий язык PL6000 Вирт упомянул в связи с тем, что несколькими годами раньше для эффективной реализации компилятора языка Algol-W на компьютере IBM/360 ему понадобилось разработать низкоуровневый язык PL360. Теперь же в этом необходимости не было.

Почему был выбран именно компьютер фирмы Control Data Corporation? Ответ прост: к тому моменту в ETH активно использовались именно эти машины, а выбор языков на них был более чем скромным: ассемблер или Фортран. Конкурировать с Фортраном в эффективности на этой платформе было непросто, ведь набор команд CDC-6000 создавался с прицелом именно на реализацию Фортрана.

Написание компилятора в 1969 г. Вирт поручил одному своему студенту (Э. Мармье). В тот момент Мармье владел лишь Фортраном и писал компилятор на этом языке с последующей трансляцией его в Паскаль. Затем компилятор Паскаля должен был подвергнуться процессу раскрутки (переписан на самом Паскале). Как отмечает Вирт, выбор Фортрана был серьезной ошибкой. Он не мог адекватно выражать сложные структуры данных компилятора, что все больше запутывало программу.

Вторая попытка создать компилятор началась с того, что он сразу формулировался на самом Паскале (в соответствии с описанием 1970 г.). Синтаксический анализ нового однопроходного компилятора осуществлялся методом рекурсивного спуска. Теперь в команду разработчиков вошли У. Амман, Э. Мармье и Р. Шилд. После того как компилятор был написан на еще не существующем языке, Шилд был отправлен к себе домой на две недели, где все это время он вручную транслировал программу во вспомогательный низкоуровневый язык, доступный на CDC-6000. Итак, в середине 1970 г. компилятор ETH Pascal был готов.

Он был интересен не только тем, что стал одной из первых реализаций языков высокого уровня на самом себе, примерно на два года опередив компилятор Си. В ходе работ над ним в 1973 г. была придумана абстрактная Pascal-машина (P-машина), исполняющая специальный P-код. Чтобы решить проблему переноса компилятора Паскаля на разные платформы, Вирт решил воспользоваться испытанными временем методами интерпретации. Из наиболее известных решений, предшествовавших P-коду, можно назвать реализацию языка Snobol-4 (Р. Грисуолд, 1967), где в качестве кода абстрактной машины использовался язык SIL (System Implementation Language).
Как известно, введение виртуальной (абстрактной) машины Java преподносилось ее разработчиками из Sun Labs едва ли как не фундаментальное открытие в практике языков программирования. Один из учеников Вирта, Михаэль Франц, заметил по этому поводу следующее: «Переносимость Java основана на наличии виртуальной машины, позволяющей легко имитировать большое число архитектур. Идея виртуальной машины была очень популярна уже более двадцати лет назад, хотя впоследствии о ней забыли. Тогда речь шла о Pascal-P — созданной в ETH реализации Паскаля, которая сыграла решающую роль в распространении этого языка. Интересно, что виртуальные машины для Паскаля и Java весьма схожи по архитектуре: в обеих используются однобайтовые инструкции без адресов (операнды помещаются в стек)».

Идеи P-кода нашли применение не только в платформах Java и NET, не только в других языках и машинах баз данных, но и в реализации аппаратных средств. Например, для непосредственного исполнения P-кода в Western Digital в 1979 г. был разработан специальный набор WD9000 P-Engine. В Стэнфордском университете в 1980 г. был создан экспериментальный процессор POMP. Появившаяся в 1978 г. коммерческая реализация Паскаля — UCSD Pascal стала еще более известной, и многие забыли, где же впервые возникли P-код и P-машина. Вот что говорит об этом Вирт: «После того как стало известно о существовании Паскаля, несколько человек попросили нас помочь в его реализации на различных машинах, подчеркивая, что они намерены использовать его для обучения и что быстродействие для них не имеет первостепенного значения. После этого мы решили создать версию компилятора, которая генерировала бы код для машины нашей собственной конструкции. Позднее этот код стал известен как P-код... Pascal-P оказался исключительно удачным языком для распространения среди большого числа пользователей. И если бы у нас хватило мудрости предвидеть масштабы такого развития событий, то мы приложили бы больше усилий и тщательности при разработке и документировании P-кода».

Для удобства использования в ETH создали P-инструментарий, в который вошли компилятор в P-код и его интерпретатор, причем все это в виде исходных текстов. Одним из получивших такой набор стал Университет Калифорнии в Сан-Диего.

Третья попытка реализации в ETH компилятора Паскаля, ставшего впоследствии известным под названием P2, была предпринята учеником Вирта Урсом Амманом; в 1974 г. она завершилась успехом. Благодаря высокому качеству Р2 получил широкое распространение в университетах и компаниях.

Начало коммерческого распространения. UCSD Pascal. Turbo Pascal.

В 1975 г. профессор Кеннет Боулес, работавший в Университете Калифорнии в Сан-Диего (University of California at San Diego — UCSD), получил из Цюриха P-инструментарий, который вместе с компилятором P2 и был положен в основу UCSD Pascal. В Институте изучения информации калифорнийского университета Боулес вместе со Стефеном Франклином и Альфредом Борком занялись созданием системы программирования и операционной системы на базе Паскаля для микрокомпьютерных архитектур. В UCSD Pascal были внесены изменения как на уровне языка (в плане расширения и использования низкоуровневых вставок кода, в том числе и P-кода), так и на уровне P-машины. Она была переделана. Для эффективности использования Паскаля на разных компьютерах была включена дополнительная возможность генерирования машинного кода для нужной архитектуры сразу после получения P-кода. Весьма значительным усовершенствованием языка в UCSD Pascal стало введение unit-блоков, необходимых для поддержки раздельной компиляции. Впоследствии они были унаследованы в языке Turbo Pascal.

Интересно, что взята эта идея была из спецификаций языка Ада, которые к тому моменту подходили к своему завершению. В то же время сам Вирт из языка Mesa позаимствовал куда более совершенную конструкцию, ввел ее в Модулу-2 и назвал «модулем» (module). Собственно, она и дала название новому языку Вирта Modula-2 (MODUlar LAnguage).

За три года команда Боулеса разработала законченную систему, в которую вошли текстовый редактор, файловая система, а также отладчик. По сравнению с тем режимом работы, к которому уже привыкли пользователи больших машин (ввод программ и данных с перфолент и перфокарт, а также упрощенный терминальный ввод-вывод), это был огромный шаг вперед. Появился прообраз того, что сегодня называют IDE-средой (интегрированной средой разработки). UCSD Pascal стала прародительницей системы Turbo Pascal, добившейся небывалой популярности.

Что касается UCSD Pascal, то эта реализация для Паскаля означала серьезный прорыв: благодаря Боулесу сфера применения языка значительно расширилась, что, в свою очередь, дало заметный импульс развитию микрокомпьютерной революции.

Разработкой UCSD Pascal, сумевшей стать законченным коммерческим продуктом, заинтересовались многие компании. Причем их внимание привлекла и перспективная P-машина, на которую UCSD продал немало лицензий. В качестве одного из примеров можно привести процессор ITS, созданный в Nippon Electric (1980) и предназначенный для исполнения P-кода UCSD Pascal. Но и сейчас, в эпоху Java, интерес к UCSD-реализации не остыл. Так, в частности, английская компания Cabot International продает новые версии P-машины по лицензии UCSD. Это предлагается в качестве альтернативы для Java в области ТВ-приставок и бытовой электроники (интерактивное цифровое ТВ).

Огромную роль в массовом распространении Паскаля сыграла компания Borland International. На основе идей UCSD Pascal она сумела создать знаменитую Turbo-среду разработки. Это был значительный шаг вперед в облегчении процесса программирования. Удобство визуальных средств в сочетании с тесной интеграцией инструментария стали для сотен тысяч программистов большим подспорьем.

Правда, язык в исполнении Borland теперь уже отдаленно напоминает то, что когда-то носило имя Паскаль. Безжалостные законы рынка раздавили оригинал и родили на свет Turbo-Borland-Object Pascal. В результате не язык стал определять реализацию, а наоборот. Как только все было повернуто с ног на голову, как только деликатные вопросы изменения языка оказались уделом узкого круга лиц внутри одной компании, стало ясно, что рассчитывать на поддержку промышленностью не переносимого на другие платформы языка просто бессмысленно. И это в то время, когда давным-давно существовали новые языки Вирта — Модула-2 и Оберон-2.

Что касается Модулы-2, добившейся утверждения своего ISO-стандарта, то компилятор для этого языка (Turbo Modula-2) не только был создан в компании Borland (для CP/M), что весьма тщательно скрывается, но и поступил в продажу (в Северной Америке и Европе). Однако руководство компании (Филипп Кан) отказалось порождать собственного конкурента крайне успешному Turbo Pascal. Возмущенный вице-президент Borland Нильс Йенсен (один из основателей компании) вместе со своей командой разработчиков в 1987 г. ушел из Borland, выкупил права на Turbo Modula-2 и создал компанию JPI (Jensen & Partners International). В Англии ею под маркой TopSpeed была выпущена одна из лучших линеек компиляторов для процессоров семейства x86: Assembler, Modula-2, Pascal, C/C++, Ada.

А что же Turbo Pascal? Язык видоизменялся едва ли не с каждой версией среды разработки! В версии 3.0 появилась встроенная графика, в версии 4.0 — модули, в версии 5.5 — средства объектно-ориентированного программирования. Начиная с версии 7.0, Turbo Pascal был переименован в Borland Pascal, а с появлением Delphi — в Object Pascal.

В отношении языка Turbo Pascal Никлаус Вирт высказывается довольно дипломатично (1993): «Фактический стандарт для Паскаля был определен компанией Borland просто потому, что ими был создан компилятор, который распространялся широко и дешево. Borland расширяла Паскаль на протяжении ряда лет, и некоторые из этих нововведений были не столь хорошо интегрированы в язык, как мне бы того хотелось. Я был менее компромиссным в отношении собственных расширений и потому дал новому проекту иное имя (речь идет о языке Модула-2). Например, то, что Borland назвала UNIT, мы называли MODULE. Однако UNIT — это вставки в виде исходного текста, тогда как MODULE является отдельной единицей компиляции, которая допускает полный контроль типов и компоновку на этапе загрузки». На вопрос о том, какую бы оценку Вирт поставил Модуле-2, если исходить из того, что Фортран заслужил «2», а Паскаль — «5», он ответил: «6». (В школах Швейцарии это наивысший балл.)

В тени марки Borland оказалось имя автора Turbo Pascal датчанина Андерса Хейльсберга. В 1983 г. Borland выкупила лицензию на компилятор Хейльсберга и приняла автора на работу. В ноябре того же года на рынке появился Turbo Pascal 1.0 для CP/M и компьютеров 8086. История сохранила даже данные о компактности той реализации: размер исполняемого .COM-файла компилятора составлял 33 Кбайт, а все файлы занимали 130 Кбайт. В январе 1989 г. Microsoft выпустила Quick Pascal, позиционировавшийся как конкурент Borland Pascal. Но он продержался недолго. Microsoft с Borland поделили рынок, разведя ветви Си и Паскаля еще дальше друг от друга.

Что касается Хейльсберга, то он 13 лет проработал в компании и стал руководителем проекта Delphi. В октябре 1996 г. Андерса Хейльсберга за 3 млн. долл. приобрела корпорация Microsoft, и теперь он ведущий архитектор языков .NET, а также автор языка C#. (При разработке C#, по словам Хейльсберга, рассматривались Си++, Java, Модула-2, Smalltalk.)

Его прежняя компания, вернув себе имя Borland после нескольких лет работы под вывеской Inprise, предпринимает теперь активные шаги по укреплению позиций своего Паскаля в бурно развивающейся ОС Linux. Обеспечивая простоту миграции программ, созданных для Windows на Visual Basic и Object Pascal, в среду Linux под единым инструментарием Kylix, Borland Software намерена нанести серьезный удар по, казалось, незыблемым позициям Microsoft.

Особенности языка Pascal и его преемники.

Язык Паскаль создавался Виртом под воздействием идей Чарльза Энтони Хоара, опубликованных впоследствии в работе «Заметки по структуризации данных» (Hoare C.A.R. Notes on Data Structuring Academic Press, 1972). Вклад английского ученого в разработку языка был столь значителен, что его смело можно назвать крестным отцом Паскаля.

От языка Паскаль принято отсчитывать эпоху структурного программирования. А все началось с того, что известный голландский специалист Эдсгер Дейкстра опубликовал статью «Структурное программирование» (Dijkstra E.W. Structured Programming // NATO Science Committee, 1969). В ней он предложил ограничить логику управления программы всего тремя формами: следованием (sequence), ветвлением (selection) и циклом (iteration). Из этого вытекало, что в языках Алгол и ПЛ/1 оператор безусловного перехода (goto) был уже попросту не нужен. Вирт, правда, не рискнул изъять его из Паскаля. Но главное было в другом: структурное программирование задавало нисходящий принцип разработки (пошаговая декомпозиция), предусматривало структурирование логики и данных, за счет простоты и математической основы повышало надежность ПО. Все это органично вписывалось в возможности лаконичного Паскаля.

«Почти все в программном обеспечении может быть реализовано, продано и даже использовано, если проявить достаточную настойчивость... Но существует одно качество, которое нельзя купить таким образом, — это надежность. Цена надежности — это погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить» — так Энтони Хоар определил для себя главный критерий, ставший доминантой и для Вирта.

Взвешенный подход, простота и лаконичность — вот залог надежности. Вирт отмечает: «Поддержание языка максимально простым и регулярным всегда было приоритетом в моей работе: описание Паскаля занимало около 50 страниц, Модулы-2 — около 40, а Оберона — и вовсе 16. И я рассматриваю эту тенденцию как прогрессивную. Истинная ценность языков программирования зависит от качества и практичности их абстракций».
Характеризуя замысел своего языка, Вирт пишет: «Главной инновацией Паскаля было введение вариативности структур и типов данных подобно тому, как Алгол ввел вариативность управляющих структур. Алгол предлагал только три базовых типа данных: целые и вещественные числа, значения истинности, массивы; Паскаль ввел дополнительные базовые типы и дал возможность определять новые базовые типы (перечисление, диапазоны), а также новые виды структурирования: запись, множество, файл (последовательность), часть которых была представлена в Коболе. Наиболее важной стала, конечно, рекурсивность структурных описаний и вытекающая из нее возможность осуществлять комбинирование и вложение структур».

Рекурсия – это такой способ организации вычислительного процесса, при котором процедура или функция в ходе выполнения составляющих ее операторов обращается сама к себе. Сам механизм действия рекурсии достаточно прост и математически выверен: чтобы утверждать правильность работы рекурсивной программы, нужно доказать только два пункта. Во-первых, заканчивает ли программа работу – для этого обычно проверяют, что с каждым рекурсивным вызовом значение какого-то параметра уменьшается, и это не может продолжаться бесконечно. Во-вторых, работает ли она правильно, если заканчивает работу – для этого достаточно проверить, что программа, содержащая рекурсивный вызов, работает правильно, предполагая, что вызываемая ею одноименная программа работает правильно (в самом деле, в этом случае в цепочке рекурсивно вызываемых программ все программы работают правильно). Классическим примером рекурсивного спуска является программа вычисления факториала (приведена в книге Шеня «Программирование: теоремы и задачи»):

procedure factorial (n: integer; var fact: integer);

Begin

if n=1 then

begin fact:=1; end

else begin factorial (n-1, fact); fact:= fact*n; end;

end;
Оговариваясь, нужно заметить, что вычисление факториала не является подлинно наглядным примером использования всех преимуществ рекурсии, поскольку хотя программа в данном случае и выглядит изящнее и компактнее итерационной, но при выполнении обычно медленнее и оставляет опасность аварийного завершения при переполнении стека.

Дополнительной особенностью рекурсии в Паскале является возможность совершать косвенный вызов. В этом случае блок (подпрограмма) обращается к себе опосредованно, путем вызова другого блока, в котором содержится обращение к первому. Правда, здесь уже организация программы в целом будет сложнее, поскольку, следуя правилу, что каждый идентификатор перед употреблением должен быть описан, необходимо вводить специальное опережающее описание (эта проблема напоминает вопрос о том, что появилось раньше: курица или яйцо).
Рассматривая другие отмеченные Виртом особенности Паскаля, как языка структурного программирования, отметим тип «запись». Запись – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличие от массива, поля записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются. Интересно, что сами компоненты записи могут быть описаны типом «запись» - это делает запись похожей на дерево ветвлений, а обращение к какому-либо его компоненту становится сродни указанию пути файла. Кроме того, в типе «запись» может быть указана вариантная часть, задаваемая ключевыми словами «case…of». В стандартном Паскале в качестве ключа выбора необходимо указывать некоторую переменную порядкового типа, причем в исполняемой части программы можно присваивать значение этой переменной и таким образом влиять на выбор полей.

Из других нововведений в области структурирования данных можно было бы отметить множества, но они уже не так замечательны, поскольку моделируют математические множества.

Гораздо интереснее узнать, что же говорили по поводу Паскаля противники этого языка? Из всех критических работ по Паскалю, пожалуй, наибольшую известность получила статья Брайана Кернигана «Почему Паскаль не является моим любимым языком программирования». В 1981 г. она появилась на свет в виде препринта AT&T Bell Laboratories. Поскольку ряд авторитетных журналов отказались ее публиковать, она стала расходиться «нелегальными» путями. В широкой печати ей довелось выйти лишь в 1984 г. в сборнике «Comparing and Assessing Programming Languages» (Prentice-Hall, 1984).

Как известно, Керниган вместе с Ритчи готовил подробное описание языка Си, а потому его мнение особенно интересно. Началось все с того, что Керниган решил адаптировать исходные тексты своей книги «Software Tools» с Си для Паскаля. К работе над примерами из книги, как пишет Керниган, он приступил весной 1980 г. и завершил ее лишь в январе 1981 г.

Среди достоинств языка Керниган отметил следующие: рассмотренные выше механизм рекурсии и тип «запись», тип «перечисление», булевы переменные. Из серьезных недостатков он выделил отсутствие поддержки массивов с открытыми границами, неудобство работы со строками, отсутствие статических переменных (по отношению к процедурам и функциям), настоятельную потребность в раздельной компиляции, ограниченные средства ввода-вывода.

Керниган пишет: «Паскаль может быть превосходным языком для обучения новичков тому, как писать программы... Он определенно оказал воздействие на проектирование новых языков, из которых Ада, пожалуй, является наиболее важным. Но в своем стандартном виде (как нынешнем, так и предлагаемом) Паскаль не подходит для написания реальных программ».

Многие конкретные претензии сделаны по существу. Действительно, массивы с «плавающими» границами являются одной из главных проблем языка Паскаль. Конечно, во многих случаях этой проблемы не видно, поскольку «лишняя» (не использующаяся) часть массива никому не мешает, но когда требуется точность размера массива (например, при использовании его в качестве аргумента функции или процедуры), то тогда приходится использовать специальные приемы, сводящиеся к работе с указателями и использованию адресной арифметики (что очень похоже на Assembler’овскую работу с ячейками памяти). Эта же проблема касается и строковых переменных, которые, по сути, являются символьными массивами.

Однако, возвращаясь к высказываниям Кернигана, заметим, что последний немного лукавил, говоря о недостатках Паскаля и умалчивая о работах Вирта, направленных на их устранение. А ведь к весне 1980 г. Вирт и его коллеги не только уже завершили работы по языку Модула-2 и ориентированному на него компьютеру Лилит (Lilith), но и опубликовали их результаты. К тому же в 1977 г. в известном журнале Software — Practice & Experience вышла статья Хоара, Уэлша и Снирингера с анализом проблем Паскаля.

Просчеты при создании Паскаля были устранены в последующих языках швейцарской школы (Вирта и его коллег). Все они четко следовали основным тенденциям развития технологии программирования. Программирование структурное (Паскаль), модульное (Модула-2), объектно-ориентированное (Оберон-2), компонентное (Component Pascal) — все это значительные шаги в индустрии ПО.

«Наша конечная цель, — пишет Вирт, — расширяемое программирование (extensible programming). Под этим я понимаю возможность конструирования таких иерархий модулей, когда каждый модуль добавляет новую функциональность в систему. Расширяемое программирование подразумевает, что добавление модуля возможно без необходимости вносить какие-либо изменения в существующие модули — не должно быть необходимости даже их перекомпилировать. Новые модули не только добавляют новые процедуры, но, что более важно, добавляют также новые (расширенные) типы данных. Мы продемонстрировали практичность и экономичность этого подхода при проектировании Oberon System».




написать администратору сайта