Билингвальный подход к обучению программированию
Автор: Попов Константин Алексеевич
Журнал: Известия Волгоградского государственного педагогического университета @izvestia-vspu
Рубрика: Лингводидактика и дидактика
Статья в выпуске: 3 (17), 2006 года.
Бесплатный доступ
Дан обзор перспектив организации обучения программированию с параллельным преподаванием двух языков программирования. Приведен краткий сравнительный анализ лексики и синтаксиса языков 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. Данная способность позволит быстро осваивать наиболее сложные методы работы с приложениями самого разного типа.