さて、前回はすみませんでした。深夜テンション怖いですね(現在02:00)。
前回の補足ですが、アンプラグドな授業ってのが話題によく上ります。それはそれで全然ありです。むしろ大好きです。でもプラグも使ってください。謎の縛りプレイ(PC使用不可)とかいりません。限られた時間で可能な限り効果的・効率的に指導するのが理想だと思ってます。特に情報科ですから。我々・・・。
さて、いよいよプログラミング的思考ですね。次の資料を見てみましょう。
//なお、小学校段階における話で進めます。そのうち中学校と高校の範囲もやりたいんですが、またいずれ。
日本の役所って本当に・・・非効率的なのが分かってるのに「慣習」に負ける。そりゃあ、この合理的が至上主義となりつつある国際社会じゃ生き残れないよね。
・プログラミング教育とは
子供たちに、コンピュータに意図した処理を行うように指示することができるということを体験させながら、将来どのような職業に就くとしても、時代を超えて普遍的に求められる力としての「プログラミング的思考」などを育成するもの。コーディングを覚えることが目的ではない
さて、問題のプログラミング教育です。ここら辺について私も理解を深め、他の先生方にお伝えしなければならないとは思っているんですが、なかなか能力が足りてない。(時間が無い部活動至上主義を本当に何とかしてくれ。)
要は人間がすべき事って何だ?が話の中心だと思うんですよね。仕事量の削減というか。自動化できる作業は自動化して、その時間を使ってより生産性の高い・もしくは娯楽性の高い、などの体験をして、有限な時間を効率的に使っていこうよ。という話だと思っています。
例えば、日本に住んでる誰かが、ブラジルの写真を欲していたとする。ブラジルってこんな国だよ!って説明したいから。
それ、それわざわざ地球半周して撮りに行くの・・・?行かないよね・・・?
「インターネットで落とせばいいじゃん!」 ← 違います
要は、物理的な移動時間がもったいない、費用対効果で採算が取れないので。代わりに「ブラジルにいる人」に「写真を撮ってもらい」、「通信ネットワークとコンピュータの活用」によって「瞬時(!)に届けてもらう」わけです。現代人であれば、すごく簡単な話だと思います。
ちなみに、「インターネットで落とす!」とお答えになった場合。そいつの構造(ブラジルから~瞬時に届けて~)をきちんと把握する能力が、「プログラミング教育」の醍醐味なんだと思って頂きたい。感覚的な理解を、構造的にきちんと把握させるための教育。それがプログラミング教育なのかなって。そりゃあコーディングなんてどうでもいいわ。C言語だろうとJAVAだろうとVBだろうと以下略。構造化できればそれでいい。//構造化とオブジェクト化の違いは高等学校もしくは大学の範囲とさせて頂きたい。小学校段階でそこまで突っ込むのは鬼すぎる
・プログラミング的思考とは
自分が意図する一連の活動を実現するために、どのような動きの組合
せが必要であり、一つ一つの動きに対応した記号を、どのように組み合
わせたらいいのか、記号の組合せをどのように改善していけば、より意
図した活動に近づくのか、といったことを論理的に考えていく力
さて、様々な場所で様々な解釈をさせるプログラミング的思考ですが、おおよその内容を上で述べてしまいました。要は、「ブラジル写真を得る手段」を段階分けして考えるための力だと思っています。これ、「コンピュータに命令を出す」作業と相性がいいんですよね。
たとえ話。
今あなたは家の椅子に座って仕事をしています。
3メートル先にある資料は欲しい。そこで家族に言うんです。
「そこの資料取って」
高度な理解力をもつ人間は、その一言で見事欲しい資料をあなたの手元に持ってきてくれるでしょう。でも、コンピュータ相手だとそうはいかない。
仮に音声で命令できるロボットがいて、そいつに言ってみます。
「そこの資料取って」
ロボットは言います。
「そこ とはどこですか?」
「資料 とは本ですか?」
「どんな内容の本ですか?」
仮に資料が分かっても、取得した時点でこう言います。
「資料を取得しました」 //持ってきてはくれない
機械相手には厳密に、正確に命令しないといけない。
「3メートル先にある青い本を、私の手元においてほしい。」
「タイトルは「プログラミング教育について」だ」
AIやセンサーを搭載していなければこのようになる。
「座標x,y,zにある物体を掴んでくれ」
「そのまま座標をy軸方向に持ち上げて固定」
「次に3メートル移動」
「座標x,y,zに達したら固定を解除し起動地点に戻ってくれ」
とまあ、随分と面倒くさいですが、これが段階分けとか構造理解に役立つ力なんだと思っています。よく、プログラミング的思考はコンピュテーショナル・シンキングと混同されるというか同一視されると思うんですけど、私の中ではちょっと違う解釈なんですよね。
コンピュテーショナル・シンキングってのは、計算機用の思考、計算機の特性を理解していかに効率よく使うかって話。
プログラミング的思考ってのは、プログラマ的思考というか、物事の構造を理解して活用する力。
まあどっちも活用してるって面では同じなんですが、なんていえばいいんでしょう。私の感覚ではコンピュテーショナル・シンキングまで行くとそれは高等学校もしくは大学レベルの話になってくると思うんですよね。アルゴリズムや処理能力の領域が強いイメージです。それよりは、論理的に考える力に重きを置くのがプログラミング的思考なのかな、なんて。別に計算機じゃなくてもいいよってことですかね。
//プログラミング的思考って名前が良くないですよね。いや的を得ている名だとは思いますが。
さて、やはり長くなりました。(現在0248)
Next:プログラミング教育を通じて目指す育成すべき資質・能力
参考資料:小学校プログラミング教育に関する概要資料 (PDF:508KB)
http://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1375607.htm