見出し画像

高等学校「情報」のプログラミングを考察する(4)

ここまで書いたものは次の通り。

高等学校「情報」のプログラミングを考察する(1):新学習指導要領を読む
高等学校「情報」のプログラミングを考察する(2):学習指導要領解説を読む
高等学校「情報」のプログラミングを考察する(3):中学校の状況

今回はフローチャートの話。

 高等学校学習指導要領解説情報編の32ページに次のような記述がある。

ア(イ) アルゴリズムを表現する手段,プログラミングによってコンピュータや情報通信 ネットワークを活用する方法について理解し技能を身に付けることでは,コンピュータを 効率よく活用するために,アルゴリズムを文章,フローチャート,アクティビティ図など によって表現する方法,〜 以下略 〜

 ここでフローチャートとアクティビティ図は同じようなものだ。処理の流れを図にしたもの。
 何気なく見逃していたのだが,「高等学校情報科「情報Ⅰ」教員研修用教材」にもちゃんと載っていた。つまり,教員研修でフローチャートを扱うということだ。

 フローチャートについては賛否両論がある。筆者は否の方で,もう30年以上前にフローチャートをやめている。GOTO文とともに捨て去ったのである。
 まず,その経緯について説明しよう。

 1980年代,業務でソフトウェアを開発する人のプログラミング言語は FORTRAN,COBOL,Cのいずれかであったと思う。アセンブラも使われてはいただろうが,ちょっと特殊。商業高校ではCOBOLを教えていた。C言語は高校では扱っていなかった。これに対して,パソコンユーザーはまずBASICから入った。パソコンに搭載されていたのがBASICでだったからだ。日本で一番よく売れたNECのPC8001に搭載されていたのがNBASIC。パソコンはPC8801からからPC9801へ移行し,開発環境はDOSに移行したがここでもN88BASICが使われていた。N88BASICからはアセンブラも使えたので,マウスコントロールなどはアセンブラ(機械語)のコードを書いてN88BASICから呼びだしていた。スキャナへのアクセスなどもたしかそのようにしていた。

 そのころ,学校でもパソコンが使われるようになり,「NEW教育とコンピュータ」という雑誌が学研から出た(1985年)。教育用のプログラムが多数掲載されたが,その頃使われていたのがフローチャートであり,GOTO文による分岐であった。GOTO文による分岐は,少し複雑なプログラムになると流れを追うのが大変になり,ぐちゃぐちゃに絡んでいることからスパゲティプログラムと揶揄されるようになった。
 そこに現れたのが「構造化」という概念である。月刊「マイコン」で,塚越一雄氏が示したものだ。GOTOは使わず,GOSUBだけで記述する。今でいうと関数化である。(当時のBASICに関数という概念はなかった)
まずメインプログラムを記述する。たとえば

 GOSUB MENU
 IF MN=1 THEN GOSUB SHORI1
 IF MN=2 THEN GOSUB SHORI2
 ・・・・
 END

という感じである。GOSUBはサブルーチン(副プログラム)を実行するコマンド。それぞれのサブルーチン SHORI1,・・・の中でも,さらに GOSUB を使う。
これにより,プログラムの可読性は一気に高まる。
そのあと,開発環境がDOSになったことで,C言語も使われるようになり,筆者もC言語に移行したが,GOTOは使わなかった。かなり大きな画像処理ソフトを作ったが,構造は前述のものと同じだ。ここではサブルーチンが関数になる。
 プログラミングの手法は,その後構造化からオブジェクト指向へと推移していく。
 GOTOが必要なければ,フローチャートもほとんど必要がない。流れを図にする必要がないからだ。
 具体例を示そう。
 まず,現行の情報の教科書で「発展 アルゴリズムとプログラム」に載っているもの。

画像1


 次は高等学校情報科「情報I」教員研修用教材に掲載のものだ。

画像2

左がフローチャートで,右がコード。
フローチャートとコードのどちらが簡素か。いうまでもなく右のコードだ。フローチャートで表している構造は,そのままコードを読めばわかる。
もう一つ示そう。同じく教員研修用教材に掲載のものだ。

画像3

左がフローチャートで,右がコード。
これもコードを読めばどういう流れかがわかる。しかもフローチャートよりもわかりやすい。 # でコメント文を書けば説明の助けになる。

なお,上のコードは Python のものであるが,CindyScriptだとつぎのようになる。

x = 0;
repeat(5,i,
    x = x+10;
    if(mod(i ,2)==1,print("x="+x));
);

repeat は「繰り返す」だからわかりやすい。

 現行の教科書に載っているものも,教員研修用教材に載っているものも,わざわざ図にすることはないものである。コードがその形をしているからだ。

 では,一般的にはどうだろうか。
情報処理技術者試験のひとつ,基本情報技術者試験では今でも扱っているが,フローチャートを書くのではなく読み取る問題がほとんどだ。
 一方,プログラミングの入門書にはフローチャートはほとんど載っていない。
 大学入試センター試験の情報関係基礎でも,プログラミングの問題はあるがフローチャートはない。
 すなわち,国家試験の基本情報技術者試験を受けるのでなければフローチャートは不要だといってもよい。

 いま,情報の授業でプログラミングも扱っているが,フローチャートは一切教えていない。プログラミングといっても,システム全体をゼロから構築させることはなく,処理手順とコードの一部を示して完成させるくらいである。そうでないと,高校生には難しいからだ。
 つまり,生徒にフローチャートを書かせる場面はないし,フローチャートを示す場面もないのである。なまじフローチャートを教えたら,その書き方で時間を費やすことになってしまうが,書いたからといってさほどメリットはない。直接コードを書いていく方がいい。可読性の高いコードを書く方がフローチャートを書くよりずっと重要なのだ。


 何度か書いているが,現在高等学校で情報の授業を担当している教員でプログラミングができる人がどのくらいいるかというと,1割もいないだろう。その9割以上の教員が,この教員研修用教材で研修して,フローチャートを学び,それを生徒にもやらせるとしたら,きわめて非効率なことを教えることになってしまう。別にプログラマを養成するわけではないという反論が来そうだが,それなら尚のこと,フローチャートは教えるべきではないだろう。