プログラミング教育は「プログラミング言語を学ぶものでなく、プログラミング的思考(論理的思考)力を学ぶもので、思考を整理したり手順を考えたり・・・」とある小学校の校長先生の話を「学校だより」で知ったのがこの記事のキッカケです。
個人的にはプログラミングやシステム開発などIT関連の実務とマネージメントに何十年も関わった。その経験がプログラミング教育に少しでも参考になればという思いで自分なりに題材を考えてみました。
ただ、私自身が文部科学省の意図を正しく理解していないかも知れないので的外れの題材であるならばご容赦願いたい。
文部科学省のプログラミング的思考力の定義
自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考えていく力。
プログラミング教育の狙い
コトバンク(出典:朝日新聞掲載「キーワード」)より引用
2020年度から実施される新しい学習指導要領に盛り込まれ、小学校で必修化される。コンピュータ・プログラムを意図通りに動かす体験を通じ、論理的な思考力を育むとともに、幼いころからプログラムの世界に触れ、ITに強い人材を育成する狙いがある。
新学習指導要領解説編総則のプログラミング教育より引用
小学校段階において学習活動としてプログラミングに取り組むねらいは,プログラミング言語を覚えたり,プログラミングの技能を習得したりといったことではなく,論理的思考力を育むとともに,プログラムの働きやよさ,情報社会がコンピュータをはじめとする情報技術によって支えられていることなどに気付き,身近な問題の解決に主体的に取り組む態度やコンピュータ等を上手に活用してよりよい社会を築いていこうとする態度などを育むこと,さらに,教科等で学ぶ知識及び技能等をより確実に身に付けさせることにある。
今日、情報リテラシー(情報活用能力)は必須
もう数十年の前の話だが、「プログラマー不足」が非常に心配された時代があった。しかし、実際にはそれほど深刻な問題にはならなかった。その理由を考えるとプログラマーが不足する以上にIT技術が進歩したからだと言えよう。
ただ、当時もITを使いこなす能力、「情報リテラシー」(情報活用能力)の必要性・重要性は叫ばれていたが、今日、当時と比べて情報リテラシーの必要性・重要性は格段に増した。何故なら、
- 情報量が膨大
- デジタル機器だらけ
- インターネットの利用、など
こうしたことで仕事や日常生活に欠かせない能力になったからである。
因みに、フィリピンでは小学校の1年生から「コンピュータ」という科目があり、家庭内外で普通にパソコンやスマホを使っている。東南アジア諸国と比べても日本はこの分野の教育ではかなり遅れている。
コンピュータ・システム開発手法
コンピュータ・システムを開発する上で「自分(会社)が意図する一連の活動を実現する」手法は確立されている。ビジネスで使うコンピュータ・システムを構築する際は、極めて大まかではあるが次のプロセスを踏む。なお、カッコ内は成果物です。
- 実現可能性調査(ニーズ・課題・工程・前提・費用対効果・予算・リスク・マンパワーを含む必要なリソースなど)
- 提案・承認(提案書)
- プロジェクトチーム編成(チームの組織とメンバーの役割)
- 概要設計・詳細設計(仕様書)
- プログラミング(プログラム)
- 単体・統合テスト(テストデータと結果)
- 教育・移行・システム運用(教育マニュアル・移行計画書など)
- 評価(提案内容との比較やユーザー評価)
簡単に言えば、運動会のプログラムを作る手法と同じと考えていただきたい。
プログラミング教育例:掃除を効率化して早く帰宅しよう
「コンピュータで自分が意図する一連の活動を実現する」、その例として前記の手法を応用し、コンピュータを使わないプログラミング教育を考えてみましょう。
例題として学校生活に身近な例を取りあげます。題して「掃除活動を効率化して5分早く帰宅できるようにしましょう」。
改善余地のない学校やお昼休みに掃除している学校もあるかと思いますが、ここではあくまでプログラミング教育の題材例として紹介。
「掃除を効率化して早く帰宅しよう」の実現プロセス
1.掃除を早く終えられるかどうか調べる(実現可能性調査)
- 一般的にFeasibility Studyと言うが、誰が、どこを、何を使って、どのように、どれくらいの時間を掛けて掃除活動をしているか、その実態調査を実施し調査結果をまとめる
- 掃除活動をプロセス毎にリストアップし2~3の課題を見つける(ほうき不足でもよい)
- 具体的な目標設定(ここでは5分)をする
- 最後に解決案(複数でもよい)を考える
2.クラスに提案し了解を得る(提案・承認)
3.生徒をグループ分けする(チーム編成)
3.生徒をグループ分けする(チーム編成)
- それぞれのグループが解決案に取り組む
4.新たな掃除活動プロセス・役割分担など考える(概要・詳細設計)
- 掃除活動(特に課題の部分)を合理的な単位に分けてより効率的な方法・障害の除去・手順などを考える
- 個々の単位を組み合わせて最も効率的な掃除活動全体プロセス(流れ)を考える
5.新たな掃除手順や役割分担を記述する(プログラミング)
- 新たな掃除活動の方法や手順などをまとめる
- グループ発表の資料作りでもよい
6.新規の手順に従って掃除活動の実験をしてみる(単体・統合テスト)
- 実際に大掛かりに試すのは難しいと思うのでグループでの実験に留める
- なお、この時点で問題があれば代替策を含めて解決策を考え直す
7.周知徹底し新たな掃除活動を開始する(教育・移行・システム運用)
- それぞれのグループに発表してもらう
- クラス全員で新たな掃除活動を始める
8.どのくらい早く帰宅できるようになったか確認する(評価)
プログラミング的(論理的)思考が最も必要なプロセス
プログラミング的思考が最も必要なプロセスは、1番の「調査」と4番の「新たな掃除活動プロセスを考える」である(ただ、この題材ではプログラミング部分の「新たな掃除手順や役割分担を記述する」もかなり必要となる)。
意外と思うかも知れませんが、5番のプログラミングはコンピュータ言語を使って実際にプログラを書く仕事。具体的には詳細設計書の内容をコンピュータが理解できる言葉に翻訳する作業です。プログラミング言語のスキルは不可欠だがプログラミング的思考力はあまり必要としません。
完成したコンピュータ・システムの良し悪しは詳細設計で決まります。又、その詳細設計の良し悪しは個人的能力や調査次第です。余談ですが、コンピュータ・システムに携わっている人を報酬の多い順にリストすると、
- プロジェクト・マネージャー
- システム・アナリスト
- プログラマー
- オペレーター
プログラミング的思考をより必要とされる仕事ほど収入が多いと言えます。
おわりに
正直、小学校におけるプログラミング教育にマッチしている題材・内容かどうか分かりません。ただ、これから先、情報リテラシーの必要性と重要性が増すにつれて、情報活用能力の高い人とそうでない人に大きな格差が生じることになるでしょう。
「ITに強い人材を育成する」狙いはほんの小さなこと。より大切なのは一人一人の情報リテラシーを向上し格差を少なくすることと考えます。その意味でプログラミング教育に大いに期待しています。頑張って下さい!