Билингвальный подход к обучению программированию

К. А. ПОПОВ

БИЛИНГВАЛЬНЫЙ ПОДХОД К ОБУЧЕНИЮ ПРОГРАММИРОВАНИЮ

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

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

повысить общую информационную культуру учащихся.

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

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

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

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

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

Так, в демонстрационной версии теста мы встречаем вопрос (Материалы сайта ege. есіи. ги):

А7. Определите значение целочисленных переменных а и Ь после выполнения фрагмента программы (ниже представлена одна и та же программа, записанная на разных языках программирования):

Бейсик Паскаль Алгоритмический

a=42 b=14 a=a\b b=a*b a=b\a a:=42; b:=14; a:=a div b; b:=a*b; a:=b div a a:=42 b:=14 a:= div

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

Задумаемся над вопросами: насколько отличаются друг от друга два языка программирования высокого уровня? Что может помешать человеку, успешно освоившему основы программирования на одном языка, адаптироваться к работе на другом? Чтобы ответить на них, сравним два языка, которые уже много лет используются в качестве учебных в вузах, TurboPascal и TurboC от фирмы Borland. Безус-

Попов К. А., 2006

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

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

ющий список (Белецкий ello e T 4; 9 9 1991):

asm auto break case catch

char class const continue delete

default do double else enum

extern float for friend goto

if inline int long new

operator private protected public register

return short signed sizeof static

struct switch template this typedef

union unsigned virtual void while

Аналогичный список зарезервированных слов Паскаля выглядит следующим образом (Фаронов 1997):

and packed array begin case

const constructor destructor div do

downto else end file for

function goto if in xor

inline interface label mod nil

not object of or asm

procedure program record repeat set

shl shr string then to

type unit until uses var

while with implementations

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

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

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

Паскаль Си

Цикл с предусловием

for to do for

тело цикла {

while do тело цикла

тело цикла }

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

repeat do {

тело цикла тело цикла

until } while

Оператор безусловного перехода

goto goto

Оператор условия

if then if

else else

Оператор сложного ветвления

case of switch { case break;

else case break; default

end }

По данной таблице можно сказать, что, имея хорошие знания одного языка, можно без особого труда транслировать программы учебного уровня с одного языка на другой. Это, безусловно, довод в пользу билингвального обучения, которое можно построить на основе аналогий. Кроме того, можно сделать вывод о наличии межъязыковых синонимов и омонимов. Так, ключевым словам Паскаля case и else соответствуют синонимы в Си switch и default, а слово case в Паскале имеет омоним в Си, т. к. эти слова имеют разную служебную нагрузку, хотя и используются в одном операторе.

9B

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

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

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

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

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

На обобщенном языке оба приведенных листинга могут быть интерпретированы следующим образом:

1) определить значение переменной а;

2) инициализировать графический режим;

3) установить алый (%Ыг^) цвет линий;

4) присвоить значения переменным х, у,г, имеющим целый тип;

5) нарисовать окружность с центром в точке (х, у) и радиусом г;

6) перевести курсор в точку с координатами (х, у);

7) вывести на экран надпись «№!»;

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

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

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

Паскаль program grafika; uses graph, crt; var

a, b, x, y, r : integer; begin a:=detect;

initgraph (a, b, ' ');

setcolor(12); x:=320; y:=240; r:=100;

circle(x, y, r); moveto(x, y); outtext('Hi!'); readkey; closegraph; end.

Си

#include <graphics.h> #include <conio.h> main

{

int a = detect; int b;

initgraph(&a, &b, " ");

setcolor(12);

int x = 320; int y = 240;

int r = 100;

circle(x, y, r);

moveto(x, y);

outtext("Hi!");

getch();

closegraph();

}

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

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

Однако следует заметить, что аналогичные результаты дал бы нам анализ пар Pascal-Basic или Pascal-Java, или Basic-C и т.д. Поэтому пара к основному языку может быть подобрана очень легко.

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

мых к интерпретируемым, от полных языков к скриптам и языкам приложений, таким как Visual Basic for Applications, Action Script, 3ds max-script. Данная способность позволит быстро осваивать наиболее сложные методы работы с приложениями самого разного типа.

Литература

Программно-методические материалы: Информатика. 7 11 кл. / сост. Л. Е. Само-

вольнова. М.: Дрофа, 2001.

Материалы сайта ege.edu.ru.

Белецкий, Я. Турбо Си++: Новая разработка: учеб. пособие для студ. высш. учеб. заведений / Я. Белецкий. М.: Машиностроение, 1994.

Tello, Ernest R. Object-Oriented Programming for Windows / Covers Windows 3.x. John Wiley & Sons, Inc. USA, 1991.

Фаронов, В.В. Турбо Паскаль 7.0. Начальный курс: учеб. пособие / В.В. Фаронов. М.: Нолидж, 1997.

Голуб, А. И. Веревка достаточной длины, чтобы выстрелить себе в ногу. Правила программирования на Си и Си++ / А.И. Голуб. М.: McGraw-Hill, 2001.