プログラミング教育は「コードプログラミング」にしてください。
プログラミング教育の必修化+GIGAスクール構想の進展に伴い、いよいよ全ての学校においてプログラミング教育が展開されつつあります。そこで悩ましいのが、プログラミング言語の選択問題です。学校がどの言語を採択するのかは昔から悩ましい課題です。
現在、多くの学校ではプログラミング教育の為だけに学習指導の時間が確保できない事から、プログラミング言語の文法を学習するよりも、簡単なブロックの組み合わせで論理的思考力を養う方法としてビジュアル言語(象形文字の事かな?)を採用しています。ビジュアル言語にすれば、プログラミング言語の文法的な理解のハードルが低くなり、プログラムを作る行為が遊び感覚になると思います。さて、プログラミング教育必修化の背景として、Society5.0の到来などという意味不明な定義を内閣府がしている様ですが、ブロックを組み立てるゲームが本当に論理的思考力や創造的な問題解決能力を養う事に繋がるのでしょうか?
この事について、はっきり警鐘を鳴らさざるを得ないと私は考えます。ビジュアル言語の採択は「誰基準ですか?」という事です。もしかして「教えやすいから」とか、「理解できない子が多くなりそうだから」という理由で大人がビジュアル言語に逃げているのではないですか?
私の結論は、小・中・高全ての学習段階でプログラミング教育を実施するのであれば、「コードを書くプログラミングをすれば良い。」という事です。というのも、私は子供たちにとってコードを書くプログラミングはそれほど高いハードルではないし、理解できずに苦手意識をもつ子が居れば、それはその子の個性として認めてあげる必要があると思うからです。
具体的に例を挙げてみます。ビジュアル言語で10回繰り返せと言うブロックの中に処理を書くとします。繰り返し用ブロックを配置して、繰り返し回数10をそのブロックのテキストエリアに入力すればOKです。これをSwiftで記述しようとすると、
for i in 0 … 9 {
//処理
}
の様な書き方になります。この記述は、
for i in 0 ..< 10 {
//処理
}
と書くこともできます。他にもかけますが、この2例の答えを知った人とブロックに10回と入力するだけで良かった人と、どちらが論理的思考力が高まるのでしょうか?
この様に同じ処理に記述の違いが発生するのは全てのプログラミング言語に言える事ですが、例示したfor構文だけに着目して2つの良し悪しを説明する事はできませんし、whileやrepeat-whileを含めるとコンピュータ言語には実に様々な記述方法があります。
このような記述違いの発生をプログラミング言語が仕様として許容しているのは何故でしょうか?それは処理対象になるデータの定義方法やコード全体の記述ポリシーを許容する事、時には開発者の哲学や、権利問題、プログラマーの好みに合わせる事など様々な側面で議論されて決められているからです。そして、多様な記述方法を許容すればエレガントで計算効率の良いプログラムコードの誕生も可能にしてくれます。
この様な言語仕様の多彩さが学校でコードプログラミングを教える事ができない原因の一つです。また記述ミスによるエラーも発生し易く、その解決に時間がかかる部分も障壁になってしまうのだと思います。さらに、日本語の場合には見えにくい全角文字との区別といった特殊な事情もあります。しかし、これらは先生方が経験を積みさえすれば解決できます。
つまり、ビジュアル言語で教えている理由は、子供たちにとってプログラミング言語が難しいと言うよりは多様性に富んでいる物事を学校の限られた時間内で教えられる先生が居ないので、より簡単で単純な方法でしか実施できないというのが私の見立てです。
あれれ、多様性の無い分かり易い事をわざわざ授業で時間を割く必要があるのでしょうか?それは、オーブンレンジの使い方を一生懸命時間をかけて学校で教えるのと同じ様な意味しかないのでは・・・・ビジュアル言語と称されるブロックの組み合わせでアプリ開発していたり、製品組み込みをしている例を私は知りません。Society5.0に対応すべく未来を切り開こうとする教育の姿とはとても言い難い。本来は、多様性に富んでいる問題を論理的に解決できたり、さまざまな表現手段を使って想像力を養っていく教育の変革が求められているのではないでしょうか。
「ビジュアル言語でも、プログラミングに興味をもった子が一人でも多くなる事には大いに意味がある」と言うご意見もあるかと思いますが、年齢の低いうちに難しさを知らないまま成長して理解したつもりでいる人がコードプログラミングの障壁に当たってしまったらどうなってしまうのでしょうか?その子にとっても周りにとってもより大きなロスにしかなりません。それならば最初からプログラミングは私苦手だなと理解してもらった方がずっと良いのでは?その逆に幼少の頃からコードを書くプログラミングが得意な子がもし育ってくれたらどれだけ素晴らしく、価値がある事だと思いませんか?
冒頭記述した悩ましい言語の選定について、経験を踏まえた意見を述べさせていただければ、コードの多様性を理解して応用力を持った人を育てる事ができれば、どんなプログラム言語でもOKです。プログラミングと言う作業は職業能力としての側面を強く持っていて、市場原理で成長、進化、衰退するのが当たり前の存在ですから、今学習した内容がそのまま将来に生かせられるかどうかなんて誰にもわかりません。
そして、教えやすい、理解し易いからビジュアル言語と言う教材選定の評価尺度を捨てていただき、教える事は難しいが、多様性があって奥深いコードプログラミングを早い段階で実施する事こそ学校で貴重な時間をとって教える意味があるという理解をしていただきたいと思います。授業時間効率の事を言えば、バッテリーが長持ちし、プログラミング作業を素早く開始でき、すぐに停止したり壊れたりしないデバイスを選定する事が最重要です。また、先生や友達のプログラムコードを共有できたり、その先で学んだコードを使って実際のアプリ開発などに繋げられる様なパースペクティブでカリキュラムに取り入れていただけると、プログラミング教育の状況が一変して未来に向けて大きく開かれていく事になると考えます。