Главная страница проекта ИНФОРМАТИКА-21

Наука — Школе

Обращение к учителям информатики

Уважаемые коллеги, учителя информатики!

В преддверии нового учебного года (2006/7) хотим предложить вам Компонентный Паскаль и систему Блэкбокс как учебную среду для изучения алгоритмизации и программирования в школьном курсе информатики.

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

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

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

Однако в школьном образовании наблюдается иной уклон - не к сложным профессиональным языкам, а к такому печальному явлению информатики, как Бейсик, в реализации Visual Basic от Microsoft. Конечно, за десятилетия развития Бейсик претерпел значительные изменения, впитал в себя все необходимые возможности для разработки приложений. Однако есть еще такое понятие, как методология и стиль программирования. На протяжении всего периода своего существования Бейсик признавался крайне неудачным языком, непригодным для обучения программированию. Прекрасно известно, что те, кто первым языком изучают Бейсик, приобретают дурной стиль программирования, и переучить их потом крайне сложно. Некогда основной проблемой являлось постоянное использование неструктурного оператора GOTO (исключенного из всех современных языков программирования). Сегодня в Бейсик включены процедурные и объектно-ориентированные конструкции, но общая идеология языка и среды Visual Basic осталась прежней - она поощряет разработку программ "методом тыка" вместо доказательного, системного подхода к составлению правильного кода. Поэтому, обращаясь от имени преподавателей университетов, просим школьных учителей информатики: не тратьте зря свое время и время ваших учеников, изучая то, что через два-три года придется искоренять нам, преподавателям, говоря первокурсникам: "Если хотите научиться программировать, забудьте тот язык и те подходы, которым вас учили в школе". Кроме того, нужно учитывать то обстоятельство, что Visual Basic является коммерческим продуктом зарубежной корпорации и продвигается ею в образование в рамках масштабной пиар-компании. В интересах России - использование альтернативного программного обеспечения, которое не является коммерческим и имеет открытые исходные коды. Без сомнения, вопрос о том, какое программное обеспечение использовать в образовании, также является стратегическим.

К сожалению, не имеет больше перспектив и популярная среда Borland Delphi. Хотя в целом она является достойным представителем Паскаль-систем, но для использования в школе представляется чрезмерно громоздкой и сложной. Для создания графических приложений школьникам требуется иметь представление об объектно-ориентированном и событийном программировании. Попытка начинать осваивать программирование с "прыжка" в ООП и разработку графических интерфейсов в принятом в Delphi и Visual Basic стиле не приводит ни к чему хорошему, кроме как к тому же самому "клепанию" кусков кода в обработчиках событий элементов управления и т.п.

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

Многого ли можно ожидать от учебных пособий, в которых большинство места отведено репликами, подобным следующей: "Бросьте на форму компонент TButton, дважды щелкните по нему и впишите в обработчик OnButton1Click такие строчки...". Нам надо, наконец, решить, для чего использовать уроки информатики в школе: чтобы готовить "чайников", умеющих кидать кнопки и картинки на форму, или прививать ученикам азы технического, конструкторского мышления, способность проектировать и создавать пусть небольшие, но качественные программы? К сожалению, в обществе распространился миф, что "программирование - это очень просто, не сложнее, чем двигать мышкой и набирать тексты". Следствием этого мифа явилась лавина ненадежного, медленного, просто корявого программного обеспечения, которое каждый день приносит множество проблем своим пользователям. Стоит на мгновение представить себе, что автомобили или самолеты делались бы так же, как пишутся сегодня программы, чтобы понять ненормальность сложившейся ситуации. Если вспомнить ту огромную роль, которую сегодня уже играют информационные системы в жизни общества, к качеству подготовки ИТ-специалистов и к обучению программированию в школе как первому этапу такой подготовки мы должны подходить со всей возможной тщательностью.

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

К сожалению, в России долгое время было мало известно о языках, которыми Никлаус Вирт продолжил линейку Паскаля. Использовались различные усовершенствованные модификации классического Паскаля, в то время как сам автор языка дважды перерабатывал его с учетом всех недостатков исходного языка и дал начало целому семейству передовых сред программирования. В 1980 году Н.Вирт создал язык Модула-2, в который, кроме переработанного и отточенного синтаксиса, были добавлены модули и средства инкапсуляции данных в модулях. Язык Модула-2 долгие годы использовался профессионалами для решения задач системного программирования и позволял создавать гораздо лучшие по архитектуре и надежности системы, чем язык Си. Можно было бы ожидать, что более мощный язык будет иметь более сложный синтаксис - однако произошло обратное. Талант Вирта позволил ему пойти по пути упрощения синтаксиса с одновременным увеличением возможностей языка. Мы столь часто видим обратное, когда с каждой новой версией программы не становятся лучше, но загромождаются ненужными, излишними, второстепенными возможностям, что для многих из нас сложно представить, как такое стало возможным. Однако Вирт в совершенствовании Паскаля пошел еще дальше. В 1989 году им был создан язык Оберон - все ненужные и неудачные средства Паскаля/Модулы были из него исключены, а необходимый минимум добавленных сделал язык объектно-ориентированным и позволил реализовать на нем передовую операционную систему Oberon OS, идеи которой легли в основу такой известной сегодня технологии, как Java. Язык Оберон очень компактен и строен - его описание занимает всего 16 страниц.

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

Условный оператор

IF условное_выражение THEN 
    последовательность_операторов 
ELSE 
    последовательность_операторов 
END 
если условное_выражение то 
    последовательность_операторов 
иначе 
    последовательность_операторов 
все 

Цикл с условием

WHILE условное_выражение DO 
    последовательность_операторов 
END 
нц пока условное_выражение 
    последовательность_операторов 
кц 

В Обероне нет ключевого слова BEGIN в управляющих операторах. И условие, и цикл всегда должны заканчиваться ключевым словом END. Это исключает ряд ошибок-опечаток - потерянный BEGIN, "повисшее" ELSE и т.п., делает код легко читаемым и лаконичным. Кроме того, ключевые слова в Обероне пишутся заглавными буквами (это не представляет проблем в соответствующих редакторах). Это также повышает читаемость кода. В средах программирования не используется раскраска синтаксиса. Вместо этого программист может выделять по своему усмотрению жирным шрифтом/курсивом/цветом те места кода, на которые он хочет обратить внимание, поставить смысловой акцент. В Обероне имена регистрозависимы, т.е. Х и x - это два разных идентификатора.

Утверждение

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

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

ASSERT(условное_выражение, номер_ошибки) 
утв условное_выражение 

Из остальных базовых операторов Оберона назовем CASE, REPEAT-UNTIL и FOR-TO-BY-DO.

Массивы

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

Указатели и динамическая память

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

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

 

До сих пор мы говорили об Обероне как о языке программирования, но не коснулись среды разработки. Наиболее доступной и подходящей реализацией Оберона под Windows является среда BlackBox. В ней используется несколько расширенный вариант Оберона, который получил название Компонентный Паскаль. В целом BlackBox является профессиональной промышленной средой разработки, по концепциям более современной, чем та же Delphi. BlackBox (Блэкбокс) и Компонентный Паскаль относятся к одному поколению с Java и .NET, поддерживая концепции так называемого компонентного программирования. Однако BlackBox верен традициям Оберона - соблюдать крайнюю простоту, и поэтому для новичка оказывается даже более простым и удобным, нежели Turbo Pascal. Среда распространяется бесплатно, что немаловажно для учреждений образования.

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

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

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

Вот пример работы с ООП в Компонентном Паскале:

   TYPE 
      Фигура = EXTENSIBLE RECORD (* расширяемая запись *) 
         цвет: INTEGER 
      END; 
      Треугольник = RECORD (Фигура) (* наследуются поля записи Фигура *)
         x0, y0, x1, y1, x2, y2: REAL 
      END; 
      Окружность = RECORD (Фигура) 
         x, y, r: REAL 
      END; 

   PROCEDURE Площадь (IN f: Фигура): REAL; (* Слова FUNCTION в Обероне больше нет *) 
   (* параметр передается по ссылке. IN - аналог VAR "только для чтения" *) 
      VAR a, b, c, p: REAL; 
   BEGIN 

      WITH f: Треугольник DO (* проверяем фактический тип параметра f и выполняем приведение типа *) 
         a := Math.Sqrt(Math.Sqrt(f.x0 - f.x1) + Math.Sqrt(f.y0 - f.y1)); 
         b := Math.Sqrt(Math.Sqrt(f.x1 - f.x2) + Math.Sqrt(f.y1 - f.y2)); 
         c := Math.Sqrt(Math.Sqrt(f.x0 - f.x2) + Math.Sqrt(f.y0 - f.y2)); 
         p := (a + b + c) / 2; 
         RETURN Math.Sqrt(p*(p-a)*(p-b)*(p-c)) (* так выполняется возврат значения из процедуры *) 
      | f: Окружность DO 
         RETURN Math.Pi() * f.r * f.r 
      END 

   END Площадь; 

Это простейший пример, мы не будем здесь показывать объявление методов и т.п.

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

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

И последнее, что мы хотим осветить здесь, - это российский опыт использования среды в образовании. С 2001 года начал свое существование проект Информатика-21 (его сайт - www.inr.ac.ru/~info21), целью которого является "координация усилий реальных специалистов науки, образования, аэрокосмической промышленности и ИТ-индустрии на постсоветском пространстве по созданию единой современной системы преподавания фундаментальных основ программирования, опирающейся на наши уникальные образовательные и математические традиции". Координатором проекта является в.н.с. ИЯИ РАН, преподаватель МГУ д.ф.-м.н. Ф.В. Ткачев. Исходя из необходимости подготовки компетентных кадров BlackBox был опробован на физическом факультете МГУ и оказался очень удачным выбором. С этого момента начинается распространение среды в российском образовании. В настоящий момент официальными участниками проекта Информатика-21 являются следующие вузы и школы:

- физический ф-т МГУ, спецкурс "Введение в современное программирование" (Ф.В. Ткачев);

- лицей Научного центра РАН в г. Троицк, эксперимент по преподаванию программирования в формате обычного школьного курса информатики (Н.П. Кучер);

- межшкольная группа «Лидер» для одаренных детей при ГорУО г.Стрежевого Томской области (А.И. Попков);

- лицей №1 им. М.В. Ломоносова г.Орла, спецкурс «Программирование и дискретная математика»;

- широкомасштабный эксперимент по внедрению Компонентного Паскаля в средних школах Витебской области (Республика Беларусь). Руководитель проекта А.Б. Кондратович, нач. отдела Витебского областного института повышения квалификации учителей.

- Ошский технологический университет (г.Ош, Кыргызская Республика), новаторская программа систематического обучения программированию на основе ETH Oberon под ОС Linux с использованием проектов open source (Кубанычбек Тажмамат уулу);

- Орловский государственный университет, экспериментальный курс "Элементы абстрактной и компьютерной алгебры" для студентов учительских специальностей ОГУ (Б.В Рюмшин);

- Московский авиационный институт (МАИ), факультет прикладной математики и физики. В рамках курса "Системное и прикладное обеспечение", в теме "Методы компиляции" изучаются Оберон, Компонентный Паскаль и среда BlackBox как образец системы программирования.

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

Важным событием стал недавний выход электронного сборника задач на Компонентном Паскале, подготовленного А.И Попковым. Сборник включает в себя около 350 задач с решениями в виде модулей для BlackBox. Сборник можно скачать на сайте OberonCore.ru, в разделе Образование - Учебные материалы.

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

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


Ткачев Ф.В., д.ф.-м.н., ведущий научный сотрудник ИЯИ РАН, Москва;

Попков А.И., к.ф.-м.н., нач.отдела ООО СИБИНТЕК, Стрежевой;

Ермаков И.Е., зам. директора ООО ОЦПИ "Метасистемы",
преподаватель спецкурса "Программирование и дискретная математика" в лицее No 1 г. Орла;

Рюмшин Б.В., преподаватель кафедры информатики ОГУ, Орел;

Темиргалеев Е.Э., преподаватель кафедры информатики ОГУ, Орел.

26 августа 2006 г.

Ссылки

1. Центр поддержки BlackBox в России - http://OberonCore.ru

2. Сайт проекта Информатика-21 - http://informatika-21.su/

3. Форум пользователей BlackBox и официальный форум Информатики-21 - http://forum.OberonCore.ru

Главная страница проекта ИНФОРМАТИКА-21

Наука — Школе