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

Бесплатный доступ

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

Короткий адрес: https://sciup.org/148162867

IDR: 148162867

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

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

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

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

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

Попов К. А., 2006

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

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

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

Бейсик

Паскаль

Алгоритмический

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(a, b) b:= a*b

a:= div(b, a)

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

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

Для сравнения базовой лексики достаточно сравнить наборы зарезервированных (ключевых) слов Паскаля и Си, т. е. слов, которые не могут быть использованы в качестве имен переменных. Набор ключевых слов языка Си представляет собой следующий список (Белецкий 1994; Tello 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 в Паскале имеет омоним в Си, т. к. эти слова имеют разную служебную нагрузку, хотя и используются в одном операторе.

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

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

Паскаль

Си

program grafika;

# include

uses graph, crt;

# include

var

main ()

a, b, x, y, r : integer;

{

begin

int a = detect;

a:=detect;

int b;

initgraph (a, b, ' ');

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

setcolor(12);

setcolor(12);

x:=320; y:=240; r:=100;

int x = 320; int y = 240;

int r = 100;

circle(x, y, r);

circle(x, y, r);

moveto(x, y);

moveto(x, y);

outtext('Hi!');

outtext("Hi!");

readkey;

getch();

closegraph;

closegraph();

end .

}

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

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

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

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

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

  • 3)    установить алый (lightred) цвет линий;

  • 4)    присвоить значения переменным x, y,r, имеющим целый тип;

  • 5)    нарисовать окружность с центром в точке (x, y) и радиусом r;

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

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

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

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

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

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

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

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

Статья научная