コラム

【コラム】現役エンジニアが文科省の「小学生のプログラミング教育の在り方について」を読んで思うこと

文部科学省が公開している資料に、「小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ)」という文書があります。
この資料には、2020年に小学校向けにプログラミング教育が導入されるに当たって、有識者によって議論された内容がまとめられています。(資料リンク

冒頭の概要資料と本文19ページからなる資料ですが、現役のエンジニアから見た感想を率直に書いてみたいと思います。

初めに全文を見て感じた結論から話します。

基本的な考えや教育方針は概ね同意しますが、手段については異論があります

理想論やあるべき姿として、この資料に書いてある内容はとても良いものだと思います。
既存の教科をどう変えればプログラミング的な要素を入れられるか、というアプローチには疑問を持っています。
既存の教科はこれまで通りの授業をすることで、プログラミング学習にもなる要素が含まれていることをお伝えしたいです。

以下、この資料の要点を紹介し、記事本文の気になった内容についても私の考えをお話しします。

要点について

この資料で述べられていることをまとめると以下の3つに集約されると思います。

  • 小さいうちからコンピュータに慣れさせよう
  • 周りのものにコンピュータが使われていることを意識させよう
  • 授業の中で論理的思考力を高めていこう

資料の中では、コーディングを覚えることが目的ではないと繰り返し述べられています。
この点は同意したいことの一つで、プログラミング言語ごとの細かい決まりごとや文法ルールを覚えるのはもう少し大きくなってからで良いと思っています。

プログラミングに必要な論理的思考能力の訓練には、算数・数学が重要であると個人的に思っていましたが、
この資料では更に一歩踏み込んで、身の回りにあるコンピュータを意識させることが重要であるという点にも触れられていました。
私自身は自然にコンピュータ(パソコン)が好きになったのであまり気にしたことはありませんでしたが、まずはコンピュータに意識を持たせるという教育方針も一理あるかなと思いました。

私も小学3年生の子を持つ親の一人ですが、通っている学校では一人一台 iPad を貸し出しており、授業の中で簡単なプログラミングをやることがあるそうです。(スクラッチ・ジュニアというアプリを使用しています)
所謂ビジュアルプログラミングと言われるプログラミング言語ですが、上記の教育方針から見るとやや実装(プログラムを書くことの意)に寄っている感じはします。
ただ、子どもが興味を持ってアプリで遊んでいるのを見る限り、楽しくコンピュータに触れられるという意味では問題ない範囲なのかなと思います。

プログラミング教育とは

以下の画像の内容について、個人的な意見を述べます。

プログラミング教育の必要性の背景

・近年、飛躍的に進化した人工知能は、所与の目的の中で処理を行う一方、人間は、みずみずしい感性を働かせながら、どのように社会や人生をよりよいものにしていくのかなどの目的を考え出すことができ、その目的に応じた創造的な問題解決を行うことができるなどの強みを持っている。こうした人間の強みを伸ばしていくことは、学校教育が長年目指してきたことでもあり、社会や産業の構造が変化し成熟社会に向かう中で、社会が求める人材像とも合致するものとなっている。

まず最初に、人工知能(AI)について言及している。

AIがこれまで以上に人々の世界に入ってくることを念頭に、そのAIをどのような分野に応用していくかは人間が決めていくものだという前提があるものと思われる。

現時点(2022年)でも、AIが発展し生活に取り入れられていくということは間違いない事実という共通認識ではありますが、20年後にそのような世界になっているかは誰にも分からない
AIに変わる何かが出てくれば、ここで述べられている内容は変わり得ると思います。

そういう意味では、あまり普遍性のないこじつけの様な説明であるように思えます。

・自動販売機やロボット掃除機など、身近な生活の中でもコンピュータとプログラミングの働きの恩恵を受けており、これらの便利な機械が「魔法の箱」ではなく、プログラミングを通じて人間の意図した処理を行わせることができるものであることを理解できるようにすることは、時代の要請として受け止めていく必要がある。

急に現実的な内容になりました。

今現在、日本中でプログラマ、ソフトウェアエンジニアが足りていないと言われ続けている以上、時代の要請ではあるのでしょう。
GAFAを見ても、今はソフトウェアを制する者が大きな利益を得る時代に成っているようです。

しかしこの話は、本来であれば20年前にして欲しかった事です。
日本がソフトウェアをないがしろにし続けてきた結果が、今の状況を生んでしまっていると思います。
政治家に先見の明が無かったですね。

・小学校段階におけるプログラミング教育については、コーディング(プログラミング言語を用いた記述方法)を覚えることがプログラミング教育の目的であるとの誤解が広がりつつあるのではないかとの指摘もある。

小学校の先生はコーディングについての専門家でもありませんし、先生方にとってこの点は安心する内容なのではないかと思います。

そもそもプログラミング言語とは未来永劫不変のものではなく、まだまだ進化の余地があって言語の仕様は今後も変わっていくものです。
そういう意味で、小さいうちから、PythonやJava、Swiftなどの細かい言語仕様を覚えていくことに対した意味はないでしょう。
コーディングは抽象的思考力と論理的思考力、基本的な国語力があれば、いつでも獲得できるものだと思っています。

特に小さなうちはコーディングより先に育てるべき能力があると思うので、もっと大きな基礎を作る気持ちで教育をして頂きたいと思っています。

プログラミング教育とは

子供たちに、コンピュータに意図した処理を行うように指示することができるということを体験させながら、将来どのような職業に就くとしても、時代を超えて普遍的に求められる力としての「プログラミング的思考」などを育成するもの

プログラミング的思考が普遍的に求められる力という表現は違和感を感じます。

将来どのような職業に就いても求められる能力とは全く思ってないですし、そもそもプログラマという職業が10年後、20年後も変わらず存在するかは分からないと思います。
私達の職業はAIが自然言語を理解してプログラミングを出来るようになったらその瞬間無くなる職業です。

そのような時代はまだしばらく来ないとは思いますが、10年、20年後はどうなるか分かりません。少なくとも危機感は持っています。

プログラミング的思考とは

自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考えていく力

プログラミング的に言えば、フローチャートを書けるようになる能力ということでしょうか。
一般的には、論理的思考力のことを指していると思います。

優れたプログラマに必要な能力を挙げるとすれば、私なら抽象力と論理的思考力と答えます。
そして、それらを鍛えるのに最も有効なのは、算数・数学を一生懸命やることだと思っています。

日常生活で使うことがない算数・数学の知識は勉強しても意味がないのではないかという意見をよく目にしますが、全く反対です。
たとえ日常生活の中で一度も使うことがなかったとしても、物事を論理立てて考え、それらを組み合わせて答えを導き出すプロセスそのものがプログラミングの訓練になっていることを伝えたいです。
日常生活で役に立つか立たないかということは正直どうでもよくて、論理的に考える訓練ができることが算数・数学の魅力だと思います。

そういう意味で、プログラマに向いている人は算数・数学が得意な人であると思いますし、
逆にすべての教科を全部記憶力で対処しようとする人には向いてない職業だと思っています。

ちなみに、私の周りにいる優秀なプログラマは総じて国語が苦手の様です。(私も含め 笑)
文章もコミュニケーションも得意でプログラムも完璧という人はほとんど居なくて、反比例してるのかと思う程です。
しかし最低限の理解力は必要でしょう。

学習科目の考察

小学校段階におけるプログラミング教育の実施例として以下の画像の内容が示されている。

各科目の中にどうやってプログラミングの要素を含めるかについて議論されたようだが、全く賛同できません

今までの学習要綱にもプログラミングに役立つものは既に含まれているし、無理やりこじつけて新しい要素を導入する必要は全くないように思われる。

総合や特別活動の中にプログラミング学習を入れることは否定しないが、既存の教科に対して何か変えるのは違うのではないかと思います。

先にも述べたように、プログラミングの素養として重要なのは、抽象力と論理的思考力であると考えます。

算数とは正に論理的思考の訓練を究極にまで単純化した教科であると思うし、数学になれば抽象的思考も鍛えられる。

理科、音楽、図工なども主に抽象化思考を鍛えるのに寄与していると思います。

理科は、星座や微生物などグループ分けして考えるものは抽象化の一種だと思いますし、目に見えない電気回路の仕組みなどは抽象的思考がなければ上手く理解できないものなのではないかと思います。

音楽にも、楽器のグループ(木管楽器、金管楽器、打楽器など)を抽象化して考える要素があったり、長調や短調など曲の傾向を抽象化して捉えることが出来ると思います。

図工についても、抽象画について教えたり、絵を上手く描くコツなどは具体的に説明し辛い抽象的なものであると思います。

結論

既存の教科の在り方を変えて、無理やりプログラミング的な要素を入れる必要は無いと思われる。
今まで通りの学校教育で十分プログラミングの学習になると思います。
総合などの学習で少しコンピュータやプログラミングに触れていくのは良いことだと思います。

最後に

拙い文章ですが最後まで読んで頂きありがとうございました。
ご意見、ご感想あればコメント欄や問い合わせフォーム、Twitterなどにご連絡頂ければと思います。

この記事は役に立ちましたか?

  • この記事を書いた人
アバター画像

ゴイチ

ソフトウェアエンジニア歴20年。 C/C++、Java、C#、Kotlinが得意で、組込系からAndroidアプリ、大規模なWebサービスなど幅広いプログラミング経験があります。 現在は某SNSの会社でWebエンジニアをしています。

-コラム
-