WWW.DISUS.RU

БЕСПЛАТНАЯ НАУЧНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

 

Pages:     | 1 |   ...   | 2 | 3 ||

« Курс «История информатики»

Лекция 1. Введение. ...»

-- [ Страница 4 ] --

От простой сборки кода программы по шаблонам (ассемблирование) методы компиляции выросли в весьма сложную науку, обладающую строгой теорией и обширной экспериментальной базой. Алгоритмы, доказательные построения, верификация, формальный вывод, синтаксически управляемая автоматизация конструирования программ и их глобальная оптимизация, статический анализ, частичные вычисления, эквивалентные преобразования, контроль типов данных, спецификации, тестирование, библиотеки модулей и высококвалифицированных компонент, динамическая оптимизация памяти и компиляция “на лету” – этот ряд интереснейших подходов и методов к обеспечению эффективности и надежности программирования можно продолжать, он пополняется непрерывно с развитием технологий и мощностей, доступных разработчикам программного обеспечения. Появились многоязыковые системы программирования и сетевые сервисы по сопровождению большого числа интересных языков программирования

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

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

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

В языках программирования различают вызовы аргументов функции по значению, по имени и по ссылке. Техника приостановки и возобновления функций в зависимости от контекста и программы, т.е. вызов по необходимости называют “ленивые вычисления” (lazy evaluation). В некоторых языках программирования, таких как язык SAIL и Hope это основная модель вычислений.

Идея смешанных вычислений (А.П. Ершов) с точки зрения реализации близка технике ленивых вычислений, но сложилась концептуально из несколько иных предпосылок, и именно из опыта разработки оптимизирующих трансляторов для языков высокого уровня. Рассматривается пара Программа-Данные при недостаточных данных, отображаемая в так называемую остаточную программу, которая может дать нужный результат, если дать недостающие данные. Для определения такого отображения понадобилась разметка действий программы на исполнимые и задерживаемые. Если такую разметку не связывать с отсутствием данных, то получается модель, практически подобная вычислениям с приостановками и возобновлением.

Первые работы Lombardi от середины 60-х годов в этой области посвящены частичным вычислениям, т.е. обработке частично определенных выражений над числами. Реализация такой обработки на Лиспе осуществляла выполнимые операции и строила из полученных частичных результатов и невыполнимых операций некоторый промежуточный результат - выражение, доопределив которое, можно получить полный результат.

Системы управления базами данных и их приложения

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

Теория и практика разработки программ и информационных систем

Не менее значительные изменения произошли и в области технологии программирования. Произошел не только переход от классических методов управления проектами, унаследованных от докомпьютерной инженерии, но и методы информационного моделирования нашли свое место в традиционных сферах проектирования, повысили их уровень при одновременном снижении трудоемкости. От последовательности фаз постановки решаемой задачи, выбора и реализации ее решений, после экспериментов с CASE-системами и системами управления проектами с разными схемами детализации процесса разработки произошел сдвиг к исследованию полного жизненного цикла информационных систем, приспособленных к решению классов задач и совершенствованию реализованных решений. Эти исследования привели к технологиям с совмещенными фазами разработки программ и обеспечением обратной связи со сферой их применения в условиях технической поддержки версий и документирования процесса разработки – грамотное и экстремальное программирование.

Устойчивость слабо предсказуемых трудностей программирования достаточно высока. Так, Ф.П. Брукс почти 30 лет назад отмечал неизбежность повторного программирования, морального устаревания результата за время его получения и влияния структуры программистской группы на эффективность трудозатрат. Впечатления от трудного опыта разработки OS IBM 360 Ф. Брукса можно характеризовать следующими цитатами из его знаменитой книги:



“Система начинает работать как следует только после создания нескольких вариантов, последовавших за первым”.

“Неполнота и противоречивость новых идей становится ясной только в процессе реализации”.

“На практике оказывается, что все этапы могут начинаться одновременно и проходить параллельно”.

“Вторая система - самая опасная из всех, которые проектирует человек”.

“Диалоговые интерпретаторы обеспечили наиболее фундаментальные преимущества в отладке”.

“Нам не удалось воспитать в программистах походящее отношение к документации”.[9]

При повторном издании (через четверть века!) своей книги Ф. Брукс отметил, что основные трудности практического программирования для сложных систем почти не изменились. Современные подходы к разработке ИС скорее являются методами “уклонения от сложностей”.

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

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

М.М. Леман указывал на возрастание стоимости сопровождения больших программ и объективность эволюции активно используемых программ. Внимание к завершенности фаз жизненного цикла (ЖЦ) программ помогают четко выделить ближайшую цель, концентрировать усилия на ее достижении и тем самым минимизировать перенос трудозатрат с периода разработки на период сопровождения.

А.Л. Фуксман выделил проблему разложения на модули таких программ, как трансляторы, и обеспечения оперативной обратной связи программирования со сферой приложения программ, предложил методику вертикального сложения программ (на основе функциональной структуры) и проверки частичных результатов в реальной обстановке.

По мнению Э. Йодена, истинное предназначение программирования – это трудно выполнимые миссии, т.е. проекты, выполняемые при недостаточных условиях, что активизирует творческий потенциал программистов, заставляет быстро находить эффективные и надежные решения. Эту мысль убедительно подтверждает практика разработки игровых программ. В пользу этого говорит и оценка трудоемкости проектов по классическим схемам ЖЦ программ. Как правило такие оценки завышены во много раз в сравнении с реальными трудозатратами.

Проектирование, макетирование и разработка программ также обрели языковую поддержку. Примеры – язык UML и проекты в рамках.Net-технологии.

Организация параллельных процессов и параллельное программирование

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

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

Независимая разработка специализированных языков параллельного программирования и языков управления процессами дала ряд интересных идей по представлению и масштабированию параллельных вычислений, с которыми можно ознакомиться по материалам о языках APL, Symula-67, Sisal, БАРС, Occam, Поляр и др.

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

Появились универсальные языки сверх высокого уровня, такие как SETL, Planner, Eiffel, Haskel, Python, Cw и т.п., абстрагирование данных и процессов в которых нацеливает на активное использование математических и функциональных моделей, приспособленных к гибкому и строгому структурированию, удобному для доказательных построений.

Заметное место среди языков функционального программирования занимают языки параллельного программирования. Довольно известен язык функционального программирования Sisal. Название языка расшифровывется как “Streams and Iterations in a Single Assignment Language”, сам он представляет собой дальнейшее развития языка VAL, известного в середине 70-х годов. Среди целей разработки языка Sisal следует отметить наиболее характерные, связанные с функциональным стилем программирования.

- Создание универсального функционального языка.

- Разработка техники оптимизации для высокоэффективных параллельных программ.

- Достижение эффективности исполнения, сравнимой с императивными языками типа Fortran и C.

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

Функциональная программа является безусловно параллельной, если ее можно писать, освободившись от большинства сложностей параллельного программирования, связанных с выражением частичных отношений порядка между отдельными операциями уровня аппаратуры. Пользователь Sisal-а получает возможность сконцентрироваться на конструировании алгоритмов и разработке программ в терминах крупноблочных и регулярно организованных построений, опираясь на естественный параллелизм уровня постановки задачи.

В конце 70-х годов основные идеи языков параллельного программирования APL и VAL, предшественника языка Sisal, были интересно обогащены в языке БАРС в трех направлениях:

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

Синхросети позволяют независимые описания процессов синхронизовать в терминах разметки. Узлы с одинаковой разметкой срабатывают одновременно.

Телекоммуникации и информационные сервисы

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

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

Ключевое направление развития парадигм программирования связано с тенденцией компонентного подхода к разработке программ, верификации свойств их компонент и межязыковой интеграции программных комплексов. Такой подход интенсивно развивается в проектах типа.Net.

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

Понятие "компонент" имеет глубокие корни и весьма широкое толкование в технологии разработки программ. Это и библиотечные процедуры, и раздельно компилируемые модули, и пользовательские интерфейсы, и макроопределения, и системы файлов, и документация, и шаблоны компиляции кода программ, и элементы структур данных, и наборы данных с методами их обработки, и иерархии классов объектов общего назначения, и комплекты ИС, встраиваемых в информационные комплексы.

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

Средства и методы искусственного интеллекта

Взволнованные дискуссии на тему “может ли машина мыслить?” сменились массовым применением информационных технологий в области гуманитарного знания. Средства и методы искусственного интеллекта привели к достаточно точной постановке вопроса о компьютерном разуме, на которую в середине 60-х годов дал ответ Вейценбаум, и предоставили специалистам разнообразные усилители интеллекта, обеспечившие исследования важнейших особенностей мыслительного процесса и роли интеллекта в коллективной деятельности. Очень интересные результаты получены применением электронных роботов при исследовании поведения животных.





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

Алгоритмы, учебное и любительское программирование

Программирование как искусство начинается с алгоритмов. Многочисленные изобретения структур данных и методов их эффективной обработки выдержали проверку временем и теперь доступны не только их описания в публикациях, но их реализации в виде хорошо отлаженных библиотечных компонент. Тем не менее, успешность применения таких компонент весьма зависит от понимания алгоритмической природы программирования. Учебное программирование позволяет, начиная с небольших задач и тщательно созданных учебных миров, ознакомить с проблемами программирования и дать полезные навыки программирования. Целенаправленная работа в этом направлении началась с языка Паскаль (Вирт - 1970), продолжена в работах на базе языка Лого (Пайперт - 1974), весьма интересно представлена в описании языка Grow (Калифорнийский университет), а в нашей стране получила весьма результативный опыт в виде языков Робик и Рапира (Звенигородский - 1977, 1980), послуживший основанием введения предмета “информатика” в школьный регламент.

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

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

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

  • низкоуровневое программирование;
  • программирование на языках высокого уровня;
  • подготовка программ на базе языков сверх высокого уровня.

Машинно-ориентированное программирование на языке Forth – пример организации вычислений над стеком, в середине 70-х годов обеспечило эффективное освоение микропроцессорной техники. Языки макрообработки текстов, подобные GPM и Trac, теперь используются как подъязыки ассемблерной макротехники, препроцессоров систем программирования, а также текстовых процессоров. Языки управления процессами составляют ядро средств организации функционирования операционных систем.

Языки высокого уровня разнообразнее – это языки стандартного программирования, такие как Fortran, Pascal, C и Java. В середине 70-х годов Э. Дейкстра развернул яркую полемику относительно структурного программирования, идеи которой значительно повлияли на учебное программирование. Языки функционального программирования дали инструментарий искусственному интеллекту. Программирование наших дней связано с объектно-ориентированным стилем решения задач. Декларативное (логическое) программирование легализовало для программистов недетерминизм. Языки Prolog и Haskell находят признание при решении задач в математическом стиле.

Еще более интересны идеи языков сверхвысокого уровня. Практическую значимость сейчас обретают языки параллельного программирования. Языки Apl, БАРС, Sisal приспособлены к выражению естественного параллелизма на уровне природы решаемых задач, что упрощает выделение совмещаемых процессов для многопроцессорных конфигураций.

Setl – язык сверхвысокого уровня, созданный в начале 70-х годов Дж. Шварцем, представляет собой попытку активного использования теоретико-множественных понятий в практике программирования. Согласно концепции этого языка, понятие “функция” обладает двойственной природой. Функция может быть представлена в алгоритмическом стиле – определением процедуры, выполнение которой сопоставляет результат допустимому аргументу. Но столь же правомерно представление функции в виде графика, отображающего аргументы в результаты. Оба представления могут существовать одновременно – это всего лишь две реализации одной функции. Графическое понимание функции включает в себя и табличную реализацию подобно математическим таблицам Брадиса. Кроме того график функции не обязан быть линией – это может быть фигура произвольных очертаний. Следовательно, аргументу может соответствовать множество результатов, лежащих на пересечении вертикали с этой фигурой – графиком функции. При такой трактовке нет ничего удивительного в постепенном накоплении или построении графика функции. Можно задать небольшое множество точек графика, а потом постепенно его пополнять. По замыслу Дж. Шварца, автора языка SETL, такая методика может выполнять роль оптимизации особо сложных вычислений.

Исторически первая парадигма программирования, появившаяся вслед за ассемблером более пятидесяти лет назад (Бекус), основана на императивном управлении и операторном (автоматном) стиле построения программ. Язык Фортран - лишь в последнее десятилетие стал несколько уступать в этой области Паскалю-Си, а на суперкомпьютерах - языкам параллельного программирования.

Появление в 70-х годах микропроцессорных средств с малым объемом памяти и сравнительно невысоким быстродействием вызвало очевидные трудности в применении привычных языков высокого уровня. Не удивительно, что поиск подходящих средств программирования сменил приоритеты в оценке свойств языков и систем программирования. На передний план вышли машинно-ориентированные языки-оболочки, поддерживающие достижение эффективности и компактности программ при достаточном уровне абстрагирования от конкретики процессоров, сравнимом с абстрагированием в языках высокого уровня. Особо ярким явлением в эти годы стал язык Forth, сохранивший многочисленных приверженцев и в наши дни, когда пресс технических характеристик изрядно помягчал.

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

Программирование на Форте требует вдумчивости и аккуратности. Достижимость лаконичных форм дается ценой нестандартных индивидуальных решений, мало приспособленных к передаче программ в чужие руки. Лозунги “Программируйте все сами!” и “Не бойтесь все переписывать заново!” правильно отражают подход к программированию на Форте. Успех достигается явным максимализмом в тщательной отладке и способностью видеть задачу программирования в развитии. Активный популяризатор Форта Мур отметил: “Форт не уравнитель, а усилитель!”

Язык Форт предложен Чарльзом Маури в 1968 году. К середине 70-х Форт стал третьим по популярности после Бейсика и Паскаля, завоевавшим свои позиции при освоении микропроцессоных средств. По технике программирования Форт весьма похож на макроассемблер, только вместо системы команд над машинными словами в нем используется система операций на стеком.

Система программирования для языка Форт содержит пару интерпретатор-компилятор, причем техника компиляции весьма эффективна. Система использует единый порядок представления данных и команд в программе – все это последовательности слов. Данные располагают перед операциями по их обработке. Операция – это известное системе слово. Данные просто загружаются на стек, из которого операция их берет в соответствии с ее числом параметров.

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

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

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

  • макрос меняет текст программы,
  • подпрограмма меняет данные программы и логику процесса исполнения программы.

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

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

Концептуально макротехника близка продукционному стилю программирования, языкам разметки и системам переписывания текстов, в настоящее время активно развивающимся как языки гипертекстов для разработки сайтов и информационных сервисов. Макротехника обладает родством с методами конструирования регулярных выражений, техникой сопоставления данных с образцом (Snobol, Prolog), системами переписывания и современными языками разметки (xml, TeX и др.).

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

Значительное влияние на современное программирование оказали парадигмы функционального, декларативного и объектно-ориетнтированного программирования.

Функциональное программирование (ФП) сложилось в практике решения задач символьной обработки данных в предположении, что любая информация для компьютерной обработки может быть сведена к символьной. Слово “символ” здесь близко понятию “знак” в знаковых системах. Информация представляется символами, смысл которых может быть восстановлен по заранее известным правилам. Методы функционального программирования основаны на формальном математическом языке представления и преобразования формул, восходящим к идеям А. Чорча. Можно дать точное, достаточно полное описание основ функционального программирования и специфицировать систему программирования для поддержки и разработки разных парадигм программирования, моделируемых с помощью функционального подхода к организации деятельности.

От большинства подходов к программированию ФП отличается тремя важными принципами:

1) Природа данных

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

2) Самоописание обработки символьных выражений

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

3) Подобие машинным языкам

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

Многие реализационные находки ФП, такие как ссылочная организация памяти, “сборка мусора” для повторного использования памяти, частичная компиляция программ с интерпретацией промежуточного кода, полиморфизм, длительное хранение атрибутов объектов в период их использования и т.д. перекочевали из области исследований и экспериментов на базе Лиспа в практику реализации операционных систем и систем программирования.

В нашей стране программирование мало соприкоснулось функциональным программированием, хотя знакомство с Лиспом состоялось из первых рук. Джон Мак-Карти в конце 1968 года познакомил Москву и Новосибирск с Лиспом, что побудило к реализации отечественных версий языка.

К середине семидесятых годов именно на Лиспе решались наиболее сложные в практике программирования задачи из области дискретной и вычислительной математики, системного, экспериментального и теоретического программирования, лингвистики, химии, биологии, медицины и инженерного проектирования. Пример - AutoCAD - система автоматизации инженерных расчетов, дизайна и комплектации изделий из доступного конструктива.

Функциональные языки программирования достаточно разнообразны. Существует и активно применяется более трехсот диалектов Лиспа и родственных ему языков.

Примеры:

CMUCL - свободно-распространяемая реализация стандарта common lisp с эффективной компиляцией, осуществляемой как в объектный код, так и в байт-код.

Рефал. В отличие от ЛИСПа, основу РЕФАЛа составляет сопоставление с образцом. Благодаря этому типовая программа на РЕФАЛе вдвое-втрое короче по объему, чем аналогичная программа на языке ЛИСП, и более удобочитаема. От ПРОЛОГа РЕФАЛ отличает концептуальная простота. Его сопоставление с образцом работает в прямом направлении (в ПРОЛОГе в обратном - начиная от цели).

ML (Meta Language, изначальное предназначение - метаязык для представления систем автоматизации доказательств) имеет важную особенность: полиморфную систему типов данных, разработанную Робином Милнером. Подобная система была раньше предложена Роджером Хиндли и сейчас часто называется системой типов Хиндли-Милнера. Наличие механизма вывода типов позволило избавить программиста от необходимости явно описывать типы функций и в то же время производить строгий контроль типов. ML не чисто функциональный язык, он включает и императивные инструкции. ML развивался и включил в себя многие особенности других функциональных языков. Появилось несколько диалектов, наиболее известные из которых StandardML, CAML и чисто функциональный LazyML.

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

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

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

В рамках проекта.Net выполнено большое число реализаций весьма различных функциональных языков программирования, в их числе Haskell, Sml, Scheme, Mondrian, Mercury, Perl, Oberon, Component Pascal, разрабатывается F# - новый язык функционального программирования. Еще большее разнообразие предлагает проект DotGNU, пытающийся отстоять приоритет в области разработки переносимого ПО. Развиваются линии учебного и любительского программирования и методично осваивается техника выстраивания иерархии абстрактных машин при определении языков программирования.

Декларативное программирование

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

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

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

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

Более сложно обеспечить равновероятность выбора вариантов. Наиболее серьезно возможность такой реализации рассматривалась Дж. Шварцем в проекте языка SETL. Похожие механизмы используются в языках, ориентированных на конструирование игр, таких как Grow, в которых можно в качестве условия срабатывания команды указать вероятность.

В задачах искусственного интеллекта работа с семантическими сетями, используемыми в базах знаний и экспертных системах, часто формулируется в терминах фреймов-слотов (рамка-щель), что конструктивно очень похоже на работу со списками свойств. Каждый объект характеризуется набором поименованных свойств, которые, в свою очередь, могут быть любыми объектами. Анализ понятийной системы, представленной таким образом, обычно описывается в недетерминированном стиле.

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

Объектно-ориентированное программирование (ООП) объединяет в рамках единой методики организации программ классификацию на базе таких понятий как класс объектов, структура данных и тип значений. Тип значений обычно отражает спектр низкоуровневых реализационных средств, учет которых обеспечивает эффективность кода программы, получаемого при компиляции. Структура данных обеспечивает конструктивность построений, гарантирует доступ к частям, из которых выстроено данное любой сложности. Класс объектов характеризуется понятным контекстом, в котором предполагается их корректная обработка. Обычно контекст содержит определения, структуру объектов и их свойства.

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

Типичная гипотеза при программировании работы с объектами:

Объект не изменен, если на него не было воздействий из программы.

Но реальность часто требует понимания и учета более сложных обстоятельств, что может существенно продлить время жизни программы или ее компонентов. В таком случае удобно предоставлять объектам большую свободу, сближающую их с понятием субъекта, описание которого содержит все, что он может делать. Программа может давать ему команды-сообщения и получать ответы-результаты.

Связь методов с классами объектов позволяет вводить одноименные методы над разными классами объектов (полиморфизм), что упрощает представление логики управления: на уровне текста программы можно не выражать распознавание принадлежности объекта классу, это сделает система программирования. Таким образом обычно реализовано сложение, одинаково изображаемое для чисел, строк, векторов, множеств и т.п. Фактически субъектом является суперкласс, объединяющий классы объектов, обрабатываемые одноименными методами, т.е. функциями одного семейства. Так, при организации сложения можно считать, что существует суперкласс “слагаемые”, которое умеют складываться с другими слагаемыми. При этом они используют семейство функций, реализующих сложение. В зависимости от полноты семейства результат может быть получен или не получен. Семейство легко пополняется добавлением одноименных функций с новыми комбинациями типов параметров.

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

Удобный подход к организации программ:

Отдельная работа отдельно программируется и отдельно выполняется.

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

Отдельная работа программируется отдельно, а выполняется взаимосвязано с другими работами.

Это требует совмещения декомпозиции программ с методами сборки - комплексации или интеграции программ из компонентов. Рассматривая комплексацию как еще одну “отдельную” работу, описываемую, например, в терминах управления процессами, можно констатировать, что эта работа больше сказывается на требованиях к уровню квалификации программиста, чем на объеме программирования. При достаточно объективной типизации данных и процессов, возникающих при декомпозиции и сборке программ определенного класса, строят библиотеки типовых компонентов и разрабатывают компонентные технологии разработки программных продуктов - Corba, COM/DCOM, UML и т.п.. Одна из проблем применения таких компонентов – их обширность.

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

Механизмы ООП обеспечивают наследование свойств по иерархии классов объектов и так называемый “дружественный” доступ к произвольным классам. Расширение программ при объектно-ориентированном подходе к программированию выглядит как простое дописывание новых определений. Библиотеки типов данных и методов их обработки легко вписываются в более общие системы. Спецификация интерфейсов в принципе может быть сопровождена верификацией реализации компонент. Возможна факторизация программ на компоненты и рефакторизация программных компонент в стиле экстремального программирования.

Система CLOS (Common Lisp Object System) использует похожую модель обобщенных функций, но мы написали независимую модель, используя более старые представления, тем самым показав, что концептуально ООР – не более чем перефразировка идей функционального программирования с привкусом декларативного стиля. ООП - это одна из вещей, к которой Лисп изначально приспособлен. Для функционального стиля программирования в переходе к ООП нет ничего неожиданного. Это просто небольшая конкретизация механизмов представления и перебора ветвей функциональных объектов.

Ряд материалов по истории программирования размещен на сайте ИСИ СО РАН (http://www.iis.nsk.su), причем этот ряд пополняется.

Вопросы

  1. Каковы основные направления, влияющие на историю программирования?
  2. Какие архитектуры обрели стабильность к нашему времени?
  3. В какой объем памяти удавалось вместить операционную систему в середине 70-х годов?
  4. Каков порядок числа различных языков программирования – 10, 100, 1000, 10000?
  5. Чем отличается ассемблер от компилятора?
  6. В каких областях проявились успехи систем управления базами данных?
  7. Чем по существу отличается обычная инженерная технология проектирования от современных технологий программирования?
  8. Какое важное понятие необходимо учитывать при организации параллельных процессов по сравнению с последовательными?
  9. Назовите среди электронных приборов новинки, выглядевшие лет двадцать назад просто фантастикой?
  10. Расскажите, чему можно научиться в компьютерных играх?
  11. С чего начинается искусство программирования?
  12. Какие учебные языки программирования вам знакомы?
  13. Разработка какой системы показала миру преимущества свободно распространяемого программного обеспечения?
  14. Приведите примеры низкоуровневых языков программирования.
  15. Кто в середине 70-х годов привлек внимание программистов к кризису технологии и предложил идеи структурного программирования?
  16. Сколько языков высокого уровня доступно на вашем компьютере?
  17. Какие бывают языки сверхвысокого уровня?

Лекция 10.

А.П. Ершов и школьная информатика

Благодаря уникальной способности научного предвидения, А.П. Ершов одним из первых в нашей стране осознал ключевую роль вычислительной техники в прогрессе науки и общества. А.П. Ершов начал эксперименты по преподаванию программирования в средней школе, которые привели к введению курса информатики и вычислительной техники в средние школы страны и обогатили общество тезисом “программирование – вторая грамотность”.

А.П. Ершов добился личной встречи по проблеме школьной информатики даже с Генеральным секретарем ЦК КПСС М.С. Горбачевым, и Академгородок по праву стал на много лет методическим центром школьного, а затем и высшего образования по информатике.

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

Принятые двадцать лет назад правительственные решения о включении в школьную программу новой дисциплины “информатика” подготовили молодежь нашей страны к радикальным изменениям в сфере применения вычислительной техники.

Андрей Петрович Ершов – главный идеолог реализации этих решений – к тому времени обладал высочайшим авторитетом как лидер отечественной школы программирования, а также как неутомимый организатор программистского сообщества и активный популяризатор программирования как науки.

Объем работы, выполненной за 1985–88 гг., потребовал от академика А.П. Ершова невероятно интенсивного ритма жизни. Работа шла почти без выходных, без передышек между очень частыми (чаще раза в неделю) командировок, без скидок на болезнь, на недостаточность кадровой и финансовой поддержки. Андрей Петрович называл себя тогда “генералом без армии”.

Становление предмета “информатика” в масштабе нашей страны проходило при очень сложных обстоятельствах. Документы этой интригующей истории можно увидеть в электронном архиве А.П. Ершова http://ershov.iis.nsk.su созданном сотрудниками ИСИ СО РАН при поддержке Microsoft Research.

В конце 1984 г. А.П. Ершов сконцентрировал свои силы и интересы на деятельности по компьютеризации средних учебных заведений в СССР. Были подготовлены и приняты на самом высоком уровне решения о введении новой школьной дисциплины “Основы информатики и вычислительной техники” (ОИВТ). Для ее внедрения было создано специальное Управление при Министерстве образования. Научно-конструкторские работы по программной поддержке курса ОИВТ были организованы как ВНТК “Школа1” с Московским и Новосибирским отделениями.

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

В кратчайшие сроки, одновременно с методическим пособием для школьного учителя по информатике, был разработан школьный учебник. Благодаря высокой научной достоверности, материал этих книг и теперь является основным источником, рекомендованным школьникам при подготовке ответов на экзаменационные вопросым по курсу “информатика”: (http://inf.1september.ru/eremin/emc/default.htm ).

А.П. Ершов стоял у истоков конференции “Школьная информатика и проблемы устойчивого развития”, которая проводилась в Ленинграде и проводится в Санкт-Петербурге вот уже более 20 лет. Эта конференция сыграла важную роль в распространении знаний по информатике, вычислительной технике и автоматизации различных видов человеческой деятельности и была инициатором государственного постановления 1985 года по широкому внедрению средств вычислительной техники и информатизации в образовании.

В 1985 году А.П. Ершов принимал участие в создании телевизионного варианта школьного курса “Основы информатики”. Ряд передач был отснят в новосибирском Академгородке.

Вклад академика А.П. Ершова в начальный этап информатизации среднего образования стал организующим звеном для мобилизации и объединения научного и педагогического потенциала в области применения компьютеров в образовательной сфере. Новые экономические и технические условия практически не повлияли на общие положения и не снизили актуальности стратегической составляющей Концепции, с учетом разработанных и опубликованных рекомендаций международных организаций ИФИП и ЮНЕСКО в области информатизации образования и преподавания информатики, а также решений Коллегии Министерства просвещения РФ.

Более поздние отечественные варианты школьных курсов информатики не устояли перед соблазном мировоззренческих обобщений и общей тенденции к поверхностному применению информационных технологий. Начальный этап компьютеризации образования давал надежду на решение проблемы обеспечения прав ребенка на проявление его способностей к алгоритмическому мышлению, на признание достоинств его способа мышления и мастерства программирования и на поощрение его индивидуальности при самостоятельном решении учебно-игровых задач, связанных с организацией совместной деятельности по разработке учебных проектов. Эта надежда меркнет перед ярмаркой открывшихся технологических возможностей. Давлению ИТ противостоит лишь олимпиадное движение по программированию, значение которого растет в связи с ростом требований к уровню квалификации профессиональных информатиков. Реально изучение основ программирования как средств и методов решения задач сосредоточилось лишь в профильных школах и системе олимпиадной подготовки для наиболее заинтересованных и талантливых учащихся.

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

А.П. Ершов был председателем программного комитета первой всесоюзной олимпиады по информатике среди школьников. Эта линия продолжена как Всесесибирская олимпиада им. И.В.Поттосина

Во многих городах начали работать летние и зимние компьютерные школы (Прибалтика, Переславль-Залесский, Дубна, Симферополь, Красноярск и т. д). Они успешно работают и в наши дни, и их организаторы признают, что именно Новосибирские летние школы наиболее удачно сочетают дух ФМШ с энтузиазмом программирования.

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

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

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

Главное дело профессионального программиста – это системное программирование.

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

Проблема систематической подготовки специалистов по информатике и системному программированию до сих пор далека от полного решения. Это сохраняет актуальность образовательных новаций, развернутых А.П. Ершовым, и показывает объективные трудности в решении проблем образовательной информатики.

Примечателен опыт 70-х годов использования учебных языков в системе раннего обучения программированию. В Новосибирске была разработана специальная методика и поддерживающая ее программная среда “Школьница”.

“Школьница” — это интегрированная программная среда учебно-производственного назначения, созданная для поддержки преподавания в средней школе новой учебной дисциплины “Основы информатики и вычислительной техники”, теперь называемой просто “Информатика”. Эта среда сочетала в себе возможности и свойства интегрированной многоязыковой системы программирования с управляемой структурой, комплекта пакетов прикладных программ учебного назначения, инструментальной системы для реализации таких пакетов и диалоговой архивно-сервисной системы. Система использовала русскую лексику языков программирования, разрабатывались национальные версии языков (эстонская, грузинская, молдавская, армянская).

Входными языками системы “Школьница” являлись языки Робик и Рапира, дополненные встроенным межъязыковым модулем — графической системой Шпага. Язык Робик был предназначен для обучения младших школьников (8–12 лет) основным понятиям и навыкам программирования. Специализированный учебно-производственный язык предпроизводственного программирования Рапира — основной входной язык ППП “Школьница”, достаточно близкий к алгоритмической нотации учебника для 9-го класса, кратко описанный в учебнике для 10-го класса.

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

Основу экспериментальной системы МО учебного процесса составлял язык начального обучения Робик и адаптированное подмножество универсального языка высокого уровня Сетл[10]

. Язык Робик был разработан на основе учебных языков Лого и Школьник с учетом отдельных черт языков Кобол, Бейсик и Паскаль. Первый интерпретатор для языка Робик был написан на языке Сетл. Основные блоки интерпретатора были разработаны и отлажены учащимися Новосибирской школы юных программистов (ШЮП), работавшей при ВЦ СО АН СССР. Сложные структуры данных (множества, кортежи, файлы, записи и т.д.) не были предусмотрены в Робике, но при необходимости их можно было использовать на уровне Сетла. В отличие от Рапиры большинство предписаний Робика имело несколько синтаксических форм, развернутых и кратких, которые можно было использовать при освоении семантики основных конструкций.

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

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

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

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

Главным звеном обучения был обширный, тематически разнообразный, выполняемый с привлечением специалистов-энтузиастов, тщательно продуманный в социально-психологическом плане, практикум. Именно для его нужд был разработан еще один специализированный учебно-производственный язык Рапира. Его роль — обучение основным способам и приемам решения задач на ЭВМ учащихся, уже знакомых с важнейшими понятиями и конструкциями программирования на примере языка начального обучения. В структуре этого языка была сохранена определенная преемственность с языком Робик: форма записи большинства операторов рассматривалась как сокращенная запись соответствующих операторов Робика, диалог с оператором и взаимодействие с внешней памятью было организовано так же, как в Робике. Существовала и некоторая преемственность в общей структуре системы: в Рапире выделен сравнительно небольшой набор базовых средств, к которым могли подключаться те или иные пакеты программ и процедур для расширения возможностей языка.

Экспериментальная реализация Рапиры была осуществлена при помощи макросредств языка Поплан в 1979 г. Основные блоки соответствующего процессора разработали учащиеся ШЮП. Ко всем перечисленным учебно-производственным языкам была подключена система машинной графики Шпага. Система позволяла школьникам любого возраста использовать в своих программах разнообразные средства графического вывода информации: графо - и фотопостроители, устройства микрофильмирования и т.д.

В середине 70-х годов А.П. Ершов приступил к систематическому исследованию проблем обучения программированию и, более конкретно, информатики в школе. В его лаборатории появились Н.А. Садовская, Ю.А. Первин, Г.А. Звенигородский, Н.А. Юнерман, стажеры и аспиранты, занимавшиеся этими проблемами и создавшие систему Школ юных программистов (ШЮП). Ежегодные Летние ШЮП, имели статус “Всесоюзные с международным участием”.

ШЮП, ЛШ, ЗШ, ШИ – этими аббревиатурами Андрей Петрович Ершов обозначал части механизма, продвигавшего информатику и компьютеры в советские школы: с 1975 года ЛШЮП или ЛШ (летняя школа юных программистов), с 1977 года ШЮП (школа юных программистов), с 1978 года ЗШ (заочная школа юных программистов), с 1982 года ШИ (школьная информатика). ЛШ были одним из самых эффективных звеньев запущенного А.П. Ершовым механизма распространения и популяризации информатики. На ЛШ съезжались школьники, чтобы впервые увидеть ЭВМ и поработать на ней; педагоги, чтобы нащупать методику учебного применения ЭВМ, программисты, чтобы вместе со школьниками опробовать свои замыслы; конструкторы, чтобы испытать новую технику; учёные, чтобы популярно изложить свои идеи благодарной аудитории. Каждой ЛШ её научный руководитель А.П. Ершов посвящал хотя бы один день, а в 1987 году в работе ЛШ принял участие Дж. Маккарти. Бывали и другие знаменитости. Всё это создавало атмосферу энтузиазма, творческого накала, жажды знаний и доброжелательной инициативы. ЗШ занималась поиском наиболее способных и заинтересованных учеников для ЛШ (почти без возрастных ограничений, включая отдельных школьных педагогов). Новосибирская ШЮП в течение учебного года формировала команду консультантов-подмастерьев, бравших на себя значительную нагрузку по организации и проведению ЛШ. Благодаря географии участников (Харьков, Красноярск, Ленинград, Горький, Москва, Иркутск, Абакан, Братск, Томск, Петропавловск, Ульяновск, Махачкала, Владивосток, Фрунзе, Ташкент, Алма-Ата и другие города СССР, Болгария, Чехословакия, Венгрия, Германия, Польша, Голландия), постепенно ЛШ превратилась в международный клуб любителей детского программирования. Новосибирская система ЛШ+ЗШ+ШЮП+ШИ доказала способность готовить программистские кадры мирового уровня.

Под руководством Г.А. Звенигородского группой студентов и старшеклассников на первом советском персональном компьютере Агат была создана система “Школьница”, в которую вошли системы компьютерной графики и языки начального обучения программированию Робик и Рапира, использовавшиеся при разработке первых демонстрационных образцов программных средств обучения по школьной тематике.

Группой студентов и старшеклассников, прошедших обучение в ШЮП, была создана по проекту Г.А. Звенигородского система программирования “Школьница”, в которую вошли язык начального обучения программированию Робик и более мощный учебно-производственный язык Рапира. Все это использовалось при разработке демонстрационных вариантов систем школьной информатики для первого школьного компьютера Агат, разработанного Министерством радиопромышленности по заказу военного ведомства. (Учителя, полюбившие систему “Школьница” и язык программирования Рапира, до сих пор вспоминают их как единственное методически продуманное средство для работы со школьниками. Немаловажно соответствие этой системы традиции разработки русифицированных версий диалога с пользователем, заложенной А.П. Ершовым еще с первых программистских проектов, начиная с АЛЬФА.)

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

Работы А.П. Ершова в этой области нашли общественный резонанс и косвенное мировое признание. Если в середине 80-х годов специалисты в развитых странах не видели необходимости в школьном преподавании информатики, то теперь существует стандарт ЮНЕСКО на изучение информатики и программирования в средних учебных заведениях.

Многочисленные сайты Интернета содержат имя А.П. Ершова, а расположенные там материалы цитируют его труды и отмечают его вклад и заслуги в области школьной информатики.

Институт систем информатики им. А.П. Ершова СО РАН продолжает инициированную Андреем Петровичем работу по отработке методики преподавания информатики и системного программирования. Восстановление и развитие Летних школ юных программистов (http://shcool.iis.nsk.su ) и успехи студентов НГУ на чемпионатах по программированию (http://olimpic.nsu.su ), немыслимы без участия сотрудников ИСИ СО РАН, их профессиональной квалификации и инициативы.

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

Вопросы

  1. Каковы мотивы введения школьного курса информатики и вычислительной техники?
  2. Какие языки были специально разработаны Г.А. Звенигородским для обучения школьников программированию?
  3. Как была названа первая система поддержки школьной информатики?
  4. Назовите журналы, редактором или членом редколлегии которых был А.П. Ершов?
  5. Что, по мнению Андрея Петровича Ершова, – главное дело профессионального программиста?
  6. В какие годы А.П. Ершов приступил к систематическому исследованию проблем обучения программированию и, более конкретно, информатики в школе?
  7. Какая информационная система была создана группой студентов и старшеклассников, прошедших обучение в ШЮП, по проекту Г.А. Звенигородского?
  8. В каком возрасте язык начального обучения программированию Робик изучали школьники в ШЮП?
  9. Какого объема программы разрабатывали юные программисты, используя мощный учебно-производственный язык Рапира?
  10. Назовите журналы, выполнившие огромную работу по массовому инструктажу российского населения в применении отечественных и зарубежных компьютеров.

1 Серия “Научно-биографическая литература” основана в 1959 году. На сегодняшний день в этой серии издано более 600 биографий ученых.

2 David Jerison and Daniel W  Stroock. Norbert Wiener / Proc. of Simposia in Pure Mathematics, Vol. 60, 1997.

3 MIT – Massachusetts Institute of Technology (Массачусетский Технологический Институт).

4 А. Хичкок (1899–1980) – американский кинорежиссер и продюсер. Мастер сложных психологических фильмов, Хичкок умело использовал различные приемы киновыразительности для создания особой, зловещей и напряженной “хичкоковской” атмосферы.

5. Wiener N. Ex-Prodigy, My Childhood and Youth. New York: Simon & Schuster, 1953. (Русский перевод: Н. Винер. Бывший вундеркинд. Детство и юность. МРХД, 2001).

6 Wiener N. I Am a Mathematician. The Later Life of a Prodigy. Garden City, N.Y.: Doubleday, 1956. (Русские переводы: Н. Винер. Я – математик. М.: Наука, 1964. / Н. Винер. Я – математик. МРХД, 2001).

7. Wiener N. The Human Use of Human Beings. Boston: Mifflin, 1950. (Русские переводы: Н. Винер. Кибернетика и общество. М.: ИЛ, 1958. / Н. Винер. Кибернетика и общество. Тайдекс Ко ООО, 2002).

8 Wiener N. God and Golem, Inc. Cambridge, Mass.: MIT Press, 1963. (Русские переводы: Н. Винер. Творец и робот. М.: Прогресс, 1966. / Н. Винер. Творец и будущее. М.: АСТ, 2003).

9 Wiener N. The Tempter (“Искуситель”). New York: Random House, 1959. Современный вариант истории Фауста и Мефистофеля. Герой романа, талантливый ученый, становится жертвой дельцов. (На русском языке роман “Искуситель” не издавался).

10 В 1993 году MIT Press – издательство Массачусетского Технологического Института, alma mater Норберта Винера опубликовало одно из его ранее неизвестных сочинений “Invention: The Care and Feeding of Ideas” (“Изобретение: забота и поддержка идей”). Этот роман о судьбе изобретателя в современном жестоком обществе имеет посвящение: “Массачусетскому Технологическому Институту – сокровищнице творческого интеллекта”.

6 Полный текст этих воспоминаний опубликован в сборнике: Очерки истории информатики в России / Новосибирск, 1998, с. 121–130.

7 Сохранилась копия бумаги от 6 апреля 1961 г. за подписью замдекана мехмата А.А. Зыкова, адресованной “В охрану Московского университета” и содержащей просьбу пропустить на доклад А.Н. Колмогорова лиц по приложенному списку. Список насчитывал 442 человека, и все они не были сотрудниками МГУ.

8 Печатается по изданию: А.Н. Колмогоров. Автоматы и жизнь (Очерки истории информатики в России / Новосибирск, 1998, с. 621–632).

9 Логическая ясность идей грамотного программирования Д. Кнута не помогла преодолеть неприязнь программистов к документации.

10 Язык сверхвысокого уровня Setl был разработан Дж. Шварцем в США в 1972 г., а его русская версия разработана и впервые в СССР реализована Д.Я. Левиным в ВЦ СО АН СССР в 1975 году.



Pages:     | 1 |   ...   | 2 | 3 ||
 





<
 
2013 www.disus.ru - «Бесплатная научная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.