ここはクソみたいなインターネッツですね

逆にクソじゃないインターネッツってどこ

プログラミング教育についての雑感

 初等教育にプログラミングを組み込むなどの風潮を受けて、一エンジニア及び一プログラミング講師として思うところを綴っておきたい。

私がプログラミングから学んだ最も大切なこと

バグのないプログラムなど存在しない

 エンジニア界隈でこの言葉はあまりにも有名である。昨今のテスト界隈の技術発展、とくにテスト自動化(E2Eも含む)やJenkinsやCircleCIその他 CIツールの標準化に鑑みても、未だ多くのエンジニアはバグのないプログラムを実現するために様々な努力と発明を日々進めている。しかし結局まだ、銀の弾丸は完成していない。

 私が受けた初等中等教育では、間違えることは恥ずかしいことであるという風潮があった。必ずしも明言されたわけではないけれど、授業中に挙手をして誤った回答をすると周囲からの嘲笑は確実にあり、また教員もそういった生徒に対し上手くフォローをできていたわけでもない。

 しかし現実問題、どう防ごうとしても人間はどこかでミスをする生き物だ。そのことについて強く印象の残っていることがある。社会人一年目、先輩や上司から耳にタコができるほど聞かされた言葉だ。

チャレンジしてミスをするのは別にいい。そのミスを繰り返さないよう、次から具体的な取り組みを実施しなさい。

 この言葉を聞いて、社会というものは学校とは真逆の性質を持った環境なのだと知った。例えば1000行のプログラムを空で書けば、ズバ抜けて優秀とまでは言えない平凡なエンジニアならば、一つか二つのミスを必ず犯すだろう。私の知る限り、エンジニア界隈ではそれは別に恥ずかしいことではない。むしろ「そんなのしょうがないに決まってるじゃん」という反応が返ってくるのが普通だ。エンジニアリングは、間違えるのが恥だという私の思い込みを消し去ってくれた。私はこの思い込みを私が受けた教育のせいにして「刷り込まれた」と騒ぎ立てるつもりはない。けれど、エンジニアをやっていたことで私が最も人間として成長出来た点はこの点であると今は確信している。

 このお陰で、人のミスを責めるのではなく共に改善策を考えることが自然と行えるようになった。誰のせいだとか、自分だったらもっと上手くできるとか、そういった個人のレイヤーの話をすることが学生の頃に比べると圧倒的に減った。そんな話をするエネルギーがあるのならば、ミスが再発しにくい開発フローや体制、ツールを模索する方が明らかに建設的なのだ。

プログラミング的思考力

 初等教育においてプログラミングを組み込む大目的として、物事を論理的に考え解決策を見つけ出すプログラミング的思考力を育むというものがあるらしい。教育庁だとか文部科学省かなんかが出している要綱に目を通したが、それ自体は素晴らしいことだと思う。生徒が生徒なりの論理を破綻なく組み立てられるようになれば、さらなる成長を期待できるだろうというのが私の意見だ。

 しかしながら、先述した「間違えることは恥ずかしいことである」という風潮が解決されなければその実現は難しいように思う。大学時代、なんとなくプログラミングの講義を受けてみたことがある。理系ではない学生が理系の教授に教えられていたその空間では、学生間にも学生と教授の間にも明らかに温度差が存在していた。それなりに前提知識のある学生はスラスラと問題を解き、全く知識のない学生は何がわからないかさえわからない状態に陥った。教授はそれらの生徒に無差別かつ無慈悲に「動くプログラムを提出せよ」という課題を与える。殆どの学生が一部の出来る学生の課題をコピーして提出したという顛末は、決して私の出た大学のレベルが低いこととは関連はないと思う。

 間違えることは恥ずかしい、出来ないことは恥ずかしい、悲しいけれど、この風潮は一部の社会人の間では未だ続いている。共通言語もない中で難しい言葉や知識で圧倒してマウントを取ろうとする人や、人にものを教えて自分を超えられるのを恐れる人。(特に低俗な)感情的思考で物事を動かそうとする人。

 平凡で優しい人々がこういった威力のある人々と共生する為には、自らの中に「正しさ」の軸を持つことが必要であると私は強く思う。注意しなければならないのは、正しさとは誤らないことでも謝らないことでもない。件の論理的思考、というやつで自身の中でスクラッチしていく条件分岐パターンのようなものである。こういう時はどうするか、こういう人はこういう時どんなことを考えるか、相手のことを知る為には何をすべきか、自らの中でそうした社会的生存方程式を組み立てていくしかない。

私がプログラミング教育に期待すること

 一つに、間違えることを恥とする風潮を軽減させてほしい。プログラミングはそれに対し非常に有効な手段であると私は考えている。どれだけ頭が良くてどれだけ運動が出来る子が居たとしても、完璧なプログラムなどいきなりは組めない。それを良い機会として、子供らの精神的成長を促してもらいたい。謂わば道徳教育として、教室というあの独特な雰囲気を持つ場所をより平和にするために、プログラミングを用いてほしい。

 一つに、子供らに与える成功体験としてプログラム及びプログラミングを利用して欲しい。運動も勉強もうまく出来ない子はいる。しかし私はプログラミングを数年間やってきて、何かこれはそれらの資質とは別のものが関係しているのではないかと思うようになってきた。他の分野で輝けなく心が折れてしまう子供をキャッチする一つの機会として、プログラミングを利用してほしい。

 一つに、ある程度の規格は用意するにせよ画一的かつ一方的な教育制度を作らないでほしい。プログラミングとは協調性と独創性、先見性など様々な才能を発揮できる稀有な作業である。業務でない以上、全ての子が同じコードや処理を書く必要はない。例えば入力した整数値 が10より大きいか小さいか判定するプログラムがあったとして、判定基準を10未満とするか10より大きいか、はたまた9以下か11以上とするかはその子なりの論理によって違って良いと私は思う。与えられた課題が解決されているのであれば、それは解答例として他の生徒に共有してあげてほしい。また、なぜその子がそのようにしたのか、例えば次の問題が少数を許容して9.9というような数値を入力しても正しく判定しろ、という問題であるとその子が知っていて判定を書いたのであれば、それはその子の先見性の高さの証明になる。このように、多くの課題解決方法があるプログラムという領域においてはその解法ではなくその解法に至る論理までも大切に教え、本人らに考えさせてほしい。

追伸、私はこうした話ができる方を欲しています

 私はボランティア団体においてプログラミングを大学生や新社会人に向けて教えています。今回の初等教育への組み込みや諸々の動きについては未だ浅学な為、お話の中で学び合いの出来る方がいらっしゃると非常に嬉しいのです。私は気になることであれば5時間でも40時間でも議論し続けられますが、少ない時間でも構いませんのでお話しを伺わせて頂ける方がいればご連絡お待ちしております。