Исследование вопросов преподавания функционального программирования и компьютерной алгебры в университете.
Русский | English   поискrss RSS-лента

Главная  → Книги и компьютерная пресса  → Новосибирская школа программирования. Перекличка времен.  → Исследование вопросов преподавания функционального программирования и компьютерной алгебры в университете

Исследование вопросов преподавания функционального программирования и компьютерной алгебры в университете

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

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

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

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

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

1. ВВЕДЕНИЕ

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

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

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

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

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

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

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

2. ПРОБЛЕМЫ ОБУЧЕНИЯ ИНФОРМАТИКЕ И ПРОГРАММОТЕХНИКЕ

Дефицит технических средств оказал сильное влияние на традиции преподавания алгоритмики и программирования. Успешность решения минимального спектра учебных задач зависела от умения учитывать традиционные схемы реализации информационных систем. Были крайне важны навыки эффективной организации процессов информационной обработки. (Они и сейчас важны в производстве.) Без аккуратного распределения памяти редкий эксперимент давал результат. Все это оправдывало учебное применение стандартных языков программирования.

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

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

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

На сегодняшний день наметилось расширение исследований в области преподавания информатики. Особенно это относится к обучению программотехнике. Важен по-прежнему акцент на наукоемкие аспекты разработки информационных систем. Существенно обострилась проблема производственного программирования для мощных компьютеров. Нерешенность проблем обучения проявляется на каждой стадии процесса разработки программ, таких как разработка требований, спецификаций, документации и создание систем тестов, организация тестирования, конструирование программ по прототипам, измерение качества программ [5,6].

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

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

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

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

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

Все это не укладывается в стандартный учебный регламент. Нужен определенный уровень знаний и зрелости. Они достигаются лишь при столкновении с реальными проблемами. Напрашивается вывод, что полноценное обучение программотехнике в университетском регламенте затруднительно. (Подразумевается при подготовке математика-исследователя.) [8].

Удается лишь помочь наиболее заинтересованным студентам научиться применять научное знание в инженерно-конструкторской деятельности. Такое знание предстает в области информационных технологий как культура систематических изменений. Это пробуждает производственный спрос на обучение разработке градуируемых информационных систем [9].

Естественный метод формирования культуры систематических изменений — практика деловых игр. Попытка проведения деловых игр по разработке программ обладает большим сходством с идеями Новосибирских школ юных программистов [17].

Общее впечатление от результатов игры в целом благоприятное. Хотя не все получили пользу от курса (большинство просто наслаждалось такой формой учебы), многие уяснили сложность развития недокументированного кода. Они поняли, что информационная инженерия — это прежде всего искусство преодоления провалов как в оборудовании, так и в коллективе [10].

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

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

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

Желательно совместить активное обучение с пассивным восприятием.

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

Эксперимент по такой альтернативной схеме обучения программотехнике был проведен с привлечением молодых педагогов, любящих программирование. В каждой группе (около 12 человек) были распределены роли (руководитель, заказчик, технический консультант и т.д.) [12]. Предлагаемая схема близка к системе учебных проектов ВКИ НГУ [21], вводный проект которой можно рассматривать как пассивное восприятие прототипа изготавливаемой программы.

Новый слой трудностей вызывают парадигмы процесса совершенствования программного обеспечения. Некоторые авторы [13] отмечают, что многое здесь базируется на гипотезах вместо фактов. Нет общепринятых методик оценки практичности результата. Во что обойдется улучшение? Как долго оно дает выигрыш? В чем смысл улучшения (лучше качество, выше производительность, короче маршрут управления обработкой, полнее удовлетворение пользователя)?

Подытожим анализ причин затруднений в университетской подготовке по информатике и системному программированию [6]. Наиболее существенными признаются следующие причины.

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

Разработка программ не является малой частью компьютерных наук. Наоборот, части компьютерных наук могут, после определенной доводки, включаться в обязательное основание информационной инженерии [14]. Программотехника сейчас находится на уровне компьютерной науки 60-х годов. Это определяет приоритетные задачи научной деятельности в информатике на современном этапе:

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

3. ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ

С середины 80-х годов во многих университетах развитых стран функциональное программирование доминирует как основа лабораторного практикума. Это обеспечивает стыковку математических и компьютерных наук [18].

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

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

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

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

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

Например, по нашему мнению, резко возрастает актуальность организации безопасной разработки программ. Безопасность требует доказательного конструирования и трансформационной техники модификации программ. Эксперимент по обучению такой технике работы может быть поддержан системой Френд [20]. Эта система обеспечивает применение базовых систем преобразований программ, представленных в виде Лисповских списков. В ней обеспечено построение своих специализированных преобразований. Возможно управление областями действия преобразований. Применение преобразований сопровождается протоколированием. Возможен откат на любую глубину.

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

Обращаем внимание на свободно распространяемое программное обеспечение, доступное через Интернет. Оно содержит много систем семантической и визуальной обработки информации. Реализованы системы конструирования гипертекстов. Появились реализации, генерирующие код, совместимый с кодом Си-компиляторов. Реализация Common Lisp-а (GNU Clisp) ведет себя идентично на MS - DOS , Windows и UNIX , так как соответствующие версии продуцируются из одного программного кода. Существенно, что операции языка Лисп обладают машинно-независимой семантикой. Поэтому для Лисп-программ проблема переноса программ намного мягче, чем для стандартных языков, таких как Си, Паскаль, Фортран. Это делает функциональные языки программирования перспективными для образовательных применений. Особенно — на уровне средней школы. Успех Logo на этом поприще не случаен.

Студенты, изучавшие функциональное программирование на 4-м курсе ММФ НГУ, выражали сожаление, что их знакомство с функциональным программированием не состоялось раньше, когда была возможность попрактиковаться. Некоторые аспекты функционального программирования включены в программу курса «Парадигмы программирования» ВКИ НГУ [20]. Курс сопровождается учебными проектами и реферативными работами. Это позволяет развивать кругозор учащихся. Они получают возможность оценить исторический путь формирования идей информатики. Но этого не достаточно для формирования устойчивых навыков разработки и выработки стиля мышления. В сложившихся обстоятельствах от студентов требуется изрядная любознательность, активность, самостоятельность и заинтересованность.

4. ИСПОЛЬЗОВАНИЕ СИСТЕМ КОМПЬЮТЕРНОЙ АЛГЕБРЫ
В УЧЕБНОМ ПРОЦЕССЕ

Сегодня аналитические вычисления на ЭВМ становятся современным инструментом многих исследователей. Параллельно с термином «аналитические вычисления на ЭВМ» более широко применяются эквивалентные ему термины «машинная алгебра» или «компьютерная алгебра». На сегодняшний день программы для аналитических вычислений от скромных программ, которые вначале выполняли только полиномиальные операции, превратились в сложные комплексы и системы [2]. Существует значительное число применений, использующих СКА, оказавшихся успешными только из-за того, что для решения поставленных задач в них использовались как аналитические, так и численные методы.

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

В первом случае важно рассматривать использование СКА с учетом определенных предпосылок, позволяющих выработать внутреннюю готовность преподавателя ответить на группу таких вопросов, а именно: смогут ли компьютеры помочь студентам понимать математику; не будут ли механизмы вычисления, представляемые СКА, затушевывать математическое понимание предмета; может ли быть, что использование СКА будет ослаблять способность студента вычислять вручную; улучшает ли применение СКА обучение математике?

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

Мы полагаем, что использование систем поддержки математических исследований, в широкий круг которых входят СКА, весьма желательно как при изучении общих математических курсов, так и при подготовке студентов, специализирующихся по информатике. В НГУ первая линия использования СКА поддерживается изучением базовых возможностей MAPLE в общем вводном курсе «Основы работы на ЭВМ». Данная линия применения стремится упрочить использование СКА как естественную среду жизни математика, предоставляющую ему возможности проведения аналитических, численных и графических вычислений. Такой подход поддерживается заметным числом преподавателей НГУ как в основных, так и в специальных курсах.

Опыт Новосибирского государственного университета охватывает собой как использование СКА в качестве инструмента обучения для профессиональной подготовки программистов, так и использование СКА в общих математических курсах. На кафедре программирования несколько лет читается спецкурс «Системы и языки компьютерной алгебры». Он включает в себя рассмотрение архитектуры системы, организацию внутренних структур данных и базовых алгебраических алгоритмов СКА. В спецкурсе рассматривается опыт построения первых СКА, включая отечественные разработки, такие как АНАЛИТИК, АУМ [4] и другие, и наиболее значимые зарубежные системы компьютерной алгебры, такие как REDUCE, MAPLE и MATHEMATICA. Кроме того, в этом курсе рассматриваются методы применения, реализации и определения языков и систем компьютерной алгебры как ранние, так и сложившиеся в практике развития таких систем. Изучаются типовые конструкции языков компьютерной алгебры и особенности их реализационной семантики. Рассматриваются языки и структуры данных развитых систем компьютерной алгебры, таких как REDUCE, MAPLE, MACSYMA и ряда других. От студентов требуется общее представление о средствах и методах определения языков программирования, например, из курса методов трансляции или дискретной математики, а также знание более чем двух языков программирования.

Особый интерес представляет разработка систем компьютерной алгебры как метод обучения. Освоение методов СКА идет успешнее, если студент приобретает опыт участия в разработке СКА. Таким испытательным полигоном для студентов явилась разработка системы FABULA.

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

5. ЗАКЛЮЧЕНИЕ

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

Литература

  1. Карпов В.Я., Карягин Д.А.,Самарский А.А. Принципы разработки пакетов прикладных программ для задач математической физики // ЖВТ и МФ. — 1978. — Т. 18, Вып. 2. — С.458–467.
  2. Давенпорт Дж., Сирэ И., Турнье Э. Компьютерная алгебра. Системы и алгоритмы алгебраических вычислений. — М.: Мир, 1991. — 350 с.
  3. Scott D.S. Symbolic Computation and Teaching // Lect. Notes in Comput. Sci. — 1996. — Vol. 1138. — P.1–20.
  4. Калинина Н.А., Поттосин И.В., Семенов А.Л. Универсальная система проведения аналитических преобразований Аум. // Тр. совещ. по системам и методам аналитических вычислений на ЭВМ и их применению в теоретической физике. — Дубна: ОИЯИ, 1983. — Д11-83-511. — С.7–18.
  5. Software Engineering Education Newsletter. — Software Engineering Technical Council, 1996. — Vol.14, No 5. — http://www.tcse.org, http://www.computer.org
  6. Third International Workshop on Software Engineering Education. — Berlin , March, 1996.
  7. Macaulay L., Mylopoulos J. Requirements Engineering: An Educational Dilemma // Software Engineering Education Newsletter. — Software Engineering Technical Council, 1996. — Vol.14, No 5. — P.21–22.
  8. Mellor P. Software Engineering Education Workshop // Ibid. — P. 22–24.
  9. Mead N. Preliminary Program: 1996 Conference on Software Engineering Education // Ibid. — P. 25–26.
  10. Easterbrook S.M., Arvanitis Th. N. Preparing Students for Software Engineering // 3-d Intern. Workshop on Software Engineering Education. — Berlin , 1996. — P. 28 – 31 .
  11. Glinz M. The Teacher: Consepts! The Students: Tools! // Ibid. — P. 32-34.
  12. Gorski J., Jurkowlaniec M. Experience with Introducing a New Method of Training in SE // Ibid. — P. 35–40.
  13. Cappers J. The Pragmatics of Software Procass Improvements // Software Engineering Education Newsletter. — Software Engineering Technical Council, 1996. — Vol.14, No 5. — P. 13–16.
  14. van Amstel J.J. We Do It Ourself // 3-d Intern. Workshop on Software Engineering Education. — Berlin , 1996. — P. 6–10.
  15. Gibbs N.E. Software Engineering and Computer Science: the Impending Split ? // Educatin&Computing. —1991. — N 7. — P. 111–117.
  16. Rumbaugh J., Blaha M., Premerlani W., et al. Object-Oriented Modelling and Design. — Prentice-Hall, 1991.
  17. Поттосин И.В. Программные системы информатики и работы Г.А.Звенигородского // Программные системы. — Новосибирск, 1995. — с . 9–16.
  18. Functional Programming Languages in Education / Ed. by P. H. Hartel, M. J. Plasmeijer. — Springer-Verlag, 1995. — (Lect. Notes Comput . Sci . ; 1022).
  19. Сеппанен Й., Хьвенен Э. Мир Лиспа. — М.: Мир, 1990.
  20. Городняя Л.В. Парадигмы программирования в профессиональной подготовке информатиков // Проблемы специализированного образования. — Новосибирск, 1998. — с . 115–124.
  21. Городняя Л.В., В.Н.Касьянов. Подход к специализации по информатике и программированию в рамках системы непрерывного образования. — Новосибирск, 1995. — 59 с. — ( п репр. / РАН. Сиб. отд-ние; № 23).

Следующая статья сборника

Из сборника "Новосибирская школа программирования. Перекличка времен". Новосибирск, 2004 г.
Перепечатываются с разрешения редакции.

Проект Эдуарда Пройдакова
© Совет Виртуального компьютерного музея, 1997 — 2019