皆さんこんにちは。今日もご来訪感謝です。
今日は久しぶりに教育系のネタをお話しさせていただきます。
元々教育の話をしたいという事もあり、ブログを作ったのもあります。
しかし、なかなか本命の記事を書くとなると、なかなかまとめるというのに
こだわりが出て、投稿するハードルが高くなってしまいますね。
今日は頑張ってまとめてみました。
今日はプログラミング教育についてお話しさせていただきます。
プログラミングは教育において注目されている科目になっております。
2020年からプログラミング教育が必修化され、順次拡大
近年、新しい教育手法として、STEAM教育(ステム、スティーム)が注目されています。
STEAM教育とは、
- Science(科学)
- Techology(技術)
- Engineering(工学)
- Arts(リベラルアーツや芸術)
- Mathmetics(数学)
の頭文字をとった造語です。
AI技術やIoT、ロボットなどを扱い、新たな変化を生み出せる力を身に着けるために
重要とされている分野を身に着けるための教育の考え方です。
今やAIを始めとする最新テクノロジーを使いこなさないと社会は発展しませんし、
テクノロジーを利用・共存しないと、生きていくことも難易度が上がってしまいます。
AIなどの紹介については、以下の記事もご参照ください。
正直、STEAM教育に関しては、日本は遅れていると言わざるをえません。
エンジニアやデータサイエンスに特化した大学や学部がまだまだ少ないですしね・・・
日本の教育は、総合的な教育水準は世界に比べ高いとは言えますが、
STEAMの観点でのスキル定着は
まだまだ開発ニーズがあると言えるでしょう。
教える方がSTEAMの能力が発展途上なので仕方がないかもしれませんが・・・
そんな中、日本でも小学校が2020年度からプログラミング教育が必修化されました。
また、2021年度には中学校でプログラミング教育が必修になります。
高等学校でも情報科目の大学受験科目に入っていくようになると言われています。
平成29年に告示されている新学習指導要領において、小学校では2020年から、中学校では2021年からプログラミング教育が必修化されることが公表されています(中学校ではすでに「技術・家庭」の技術分野の授業でプログラミングが導入されていますが、2021年以降の新学習指導要領では「計測・制御システムの仕組みを理解し,安全・適切なプログラムの制作,動作の確認及びデバッグ等ができる」ことなど、従来よりも踏み込んだ内容が記載されています)。
りたりこ より引用
プログラミング教育の環境を整えるために、タブレットや無線LANなど
IT機器の導入も急がれ、ICTを扱う環境の整備も急ピッチで進めています。
ICT機器・無線LAN環境を整えないとプログラミング教育できない、というわけではないと思っていますが、あるに越したことはないですね。
お子様がおられる家庭でも、プログラミングの必修化に伴い、プログラミング教室に
子供を通わせたり、ロボットプログラミングの大会に出場させたりするのが
多くなりました。今ではロボットプログラミングの大会が多く開催され、
大会の結果が、推薦入学の基準になるところもあります。
「プログラミング」という科目を作るのではなく、扱い方は学校の裁量
それだけ注目されているプログラミング教育ですが、重要なのは科目として
「算数」・「国語」のような独立するとは限らず、
どのようにプログラミングを教育に取り込むかは、各学校の裁量にゆだねられます。
しかし、誤解されがちなことですが、小学校・中学校のいずれにおいても「プログラミング」という科目が新設されるわけではありません。そして、新学習指導要領やその他の資料に、何年生でどのようなプログラミングを学ぶのかという具体的な内容が明記されているわけでもありません。
りたりこ より引用
何年生から教えるかということも指定されておらず、プログラミングをどう教えるかも
フリーな状態です。
小学校の先生は、おそらくプログラミングに関して詳しい方がおられるとは限らないと思いますので、
どのように教えるのか、という事は気になるところです。
企業と提携してロボットカーなどを操作するカリキュラムを考えるかと思いますし、
算数のカリキュラムの最後の方で、ちょろっとIT知識についてペーパーテストを実施して
終わるという事もありえます。
教えられる人がいるのか?プログラミング教育は何を教えればいいのか?
ということだけで教育の現場は大混乱だと思われます。
教える方も、ある程度の素養と知識が無いとなかなか教えるのが大変です。
コードを書くだけがプログラミングスキルではない

では、プログラミング教育は何を教えればいいのでしょうか?
プログラミング教育で学ぶべき、身に着けるべきはプログラミング思考、
プログラミングスキルです。
ロボットカーを動かせるようにプログラミング言語を学び、ロボットに命令させる
コードを書く、というのが分かりやすいイメージだと思いますが、それも重要な
プログラミングの能力です。ICT機器をふんだんに準備して、教える方にもそれなりの
スキルが必要になってきますが。
しかし私はそれだけがプログラミング思考・スキルではないと思います。
コードを使ってプログラミングする以外にも重要なスキルがありますので、
今日はそのスキルを紹介させていただきます。
Input→Outputのプロセスを見える化する力

プログラミングというのは、つまるところ、
「何かを与え(Input)、それを指定した手順で処理し、指定したものを出力させる(Output)」
です。それがロボットカーだったり、何かしらのシステムだったり、何かを計算させるソフト
だったりするのですが、それ自身だけでなく、プログラミングをしたいものについて、
上の図のようにInput→処理→Outputをステップに分けることも重要なプログラミングスキルです。
これを「プロセスの見える化」と私は言っています。
※多くの方が言っているかと思いますが・・・
このパーツ一つ一つそれぞれがプログラミングで置き換えられるイメージです。
これを元にプログラミングのパーツを作るわけですから、プログラミングのための必要な
能力です。
例えば、台に10円玉を置くと、それを取りに行き、箱に入れてくれる貯金箱ロボ
みたいなものを作る場合は、
10円玉がInputになって、箱にいれるが、アウトプット(この場合は結果とも言えますね)ということで
10円玉を置く→置いた台に向かう→10円玉をつかむ→そのまま移動する→箱に入れる(Output)
というプロセスに分けられます。
具体的な処理のイメージをリアルに想像できる、想像に慣れることが重要ですね。
Outputの条件を漏れなく考える力

プロセスを見える化できる力に加えて、
条件ごとに処理を分けるプロセスを考える力も重要なプログラミングスキルです。
「条件分岐」と言いますが、条件分岐が考えられると、より幅広い処理ができる
プログラミングができます。
例えば、先ほどの貯金箱ロボも、上の図のように分岐を考えられるのであれば
貨幣(1円、5円、10円、100円、500円)ごとに入れる箱を分けられる貯金箱ロボ
ということで処理の幅を広げることができます。
ここではあくまでも例なので、どうやって硬貨を判断するかという解説は割愛しますね。実際にはセンサーを使って色や重さなどで判断すると思います。
重要なのは、考えられる条件を漏れなく洗い出すことです。
条件が漏れてしまうと望んだ処理ができず、
いわゆる「不具合・障害」という事になってしまいます。
このあたりは、ロジカルシンキングに似るところがありますね。
一つ一つのステップを細かく分けて、作業量を見積もる力
プロセスを分け、分岐する力以外にも、ある程度の経験が必要になりますが、
計画する力も重要になります。
一つ一つのプロセスを実装するとなれば、どれくらいの作業が必要なのか、
どれくらいかかるのか、作業量を見積もる力も重要なプログラミングスキルです。
プログラミングについてある程度理解していないと見積もれないですしね。
どれくらいの時間がかかり、期間を要するか考えるのは、
プログラミング的な面だけではなく、生活力・計画力にもつながります。
エンジニアの世界では、要件定義や開発工数見積もり、開発範囲の影響調査で
必要な能力になります。
先ほどの貯金ロボでいうと、
- 10円玉に向かって取りに行く処理はどれくらいかかるか
- つかむ処理はどれくらいの作業量が必要か・・・
- 全体作った後、バグを確認するテストはどれくらいの期間が必要か・・・
などなど考えられると、夏休みの宿題としても計画が立てられますね。
まとめ:ICTを使わなくても、プログラミングスキルは高められる
以上、コードを書く以外のプログラミング思考・スキルの紹介でした。
今回紹介したプロセスの見える化や条件の洗い出し、作業見積もり能力は
プログラミングスキルの重要な力ですが、これらはIT機器が無くても、
紙とペンがあればできます。
高価で時間がかかるICT機器を入れなくても、プログラミング思考を身に着けることができます。
プロセスや作業量を見える化できれば、あとはそれをどのプログラミング言語でコードを書くか、
というだけです。
グループ単位で学習するということで、
例えば一人一人に丁寧にプロセスを書き出してもらって、プログラミング言語は
共通のPCで計画でき次第プログラミングする、
というようにすればそこまで費用をかけずにできますし、
プログラミング能力を総合的に身に着けることができます。
プログラミング言語はあくまでもツールの一つであり、
コードを作るコーディング力も、プログラミングスキルの一面なので、
総合的にプログラミングを学べるように、学習のカリキュラムを考えられると
良いですね。
作ったプロセスなんかをグループで共有したり、改善点をディスカッションできると
プレゼンテーション力も身に付きますし、
プログラムのコードを書く、という以外の面も見て、これからのプログラミング教育が
総合的な子どもたちの考える力を身に着けられるカリキュラムになれば良いなと思います。