プログラミングシンポジウムでの情報教育の議論について
http://d.hatena.ne.jp/nishiohirokazu/20160111/1452478442
が話題らしいので、ちょっと便乗してみる・・・
プログラミング「教育」も教育の一種なので、当然、
認知心理学とか、そういうものの影響を受け、カリキュラムが
くまれる。
つまり、プログラミング教育は、3段階ある
プログラミングを体験する
プログラミングできる
プログラミングがわかる
■はじめの、「プログラミング体験」が、上記の議論の
「プログラミング行為の楽しさの伝道」
で、ここでは、「たのしい!」って言うことを経験することが大事
で、ここで楽しくなくても、適性がないとか、そういうことではない。
・・・というか、「楽しい」という気持ちがあったほうがよいが、
無くても、あんまり問題ない。日本語みんな使っているけど、
日本語、楽しい?
■次の「プログラミングできる」っていうのは、何かの目的があったとき、
プログラムが「書ける」ということ。
これは、上記の議論のプログラミングのやり方の教育」の問題。
プログラミング環境とか、プログラミング言語などが重要になってくる。
プログラマーさんが重要なのはここ。
・・・なんだけど、プログラマ以外でもプログラミングが必要ならば、
書けたほうがいい。ただし、体系的に学ぶとは限らず、写経やコピペ
から入っていくかんじ・・
■最後に「プログラミングがわかる」。
これは、上記の議論のコンピュータ科学教育の一部となる。
コンピューターサイエンス的には、
・プログラミング
・アルゴリズム
・モデリング
が重要。その中の一つ。だからプログラムは分かる必要があるが、
これだけわかればいいってもんじゃない。
これは、体系的に、つまり定数・変数から入って、それらを演算子で
組み合わせる式、式をいろいろ使って文・・・と組み合わせていき、
言語とは何か(=チューリング完全)とかいう議論に入っていくもの。
これは、みんながわかる必要はない。
研究者+一部の実務家が教養として知っていれば良い
ピアジェ云々の
プログラミングの適性がないといわれて可能性をつぶすのは、もったいない
http://d.hatena.ne.jp/nishiohirokazu/20160111/1452478442
は、
「プログラミングがわかる」レベルは論理性を用いるので、中高生以上で無いと無理
という話。それ以前の体験はやって楽しいならどんどんやるべきだけど、楽しくないなら
やらなくていい。小学生のときは楽しくなくても、大人になると楽しいものは在る。
で、「プログラミング体験」と他のもの(「分かる」と「出来る」)との差は明確
体験は自分がやって、楽しければよい。たいけんしただけでOK
その結果、動かなくても、たいしたものでなくてもOK!
「分かる」と「出来る」というのは、プログラム書いて動かなきゃいけない
成果が出なかったらX
では、「プログラミングが分かる」と「プログラミングが出来る」という差は?
分かりやすい事例を見つけたので、以下に紹介する
みずほ銀行次期システム開発を見守るスレ19◆ [無断転載禁止]©2ch.net
http://hanabi.2ch.net/test/read.cgi/infosys/1450272235/
の639番目(闇プログラマさんの発言)
ラファエロ・ダンドリーア: クアッドコプターの驚くべき運動能力
https://www.youtube.com/watch?v=w2itwFJCgFQ
クアッドコプター(4つプロペラを持ったヘリコプター)をいろいろ
動かしていて、それを闇プログラマさんは「制御プログラミングがすごい」
見たいな子といっているけど、そのTEDで発言している人はそんなこと、
一言も言っていない。
この人が言っていることは、
大事なのはアルゴリズムで
モデルベースデザインで、数理モデル作っているといっている(2分あたり)
3:20ごろ、棒のバランスとる方法についても、同じように言っている
グラスに水を入れてぐるぐるまわしているときも、
ヘリコプターの羽を切っても動かすときも・・・大事なのは、数理モデル
ボール打ち返すとき、20msでストラテジー選んでるとか(9分~10分)
どうやって動いているか説明してるけど、数理モデルを変えているのかな?
数理モデルでコースもかえてるみたいね
ってことで、この制御で重要なことは、数理モデル。
そのモデルをアルゴリズム化すれば、仕様書が書ける。
(わざわざ仕様書作ってるかどうかわかんないけど)
実務では、プログラミングは、仕様書にもとづいてやるから、
この段階では、そんなに難しいものでもない。
(数理モデルの微分方程式を立てるところよりは)
ここで、「プログラムが出来る」という人は、
仕様書が出来ていれば、プログラムが組めるという人。
仕様書がなければ、作れない。
でも、実際には仕様書が初めからあるわけではない。
このクアッドコプターを実装するためには、
そのために、数理モデルを作り出し、
そのモデルをアルゴリズムに落として、
プログラミングにまでもっていく。
そのとき、プログラムでは何が出来て、どういうアルゴリズムにすれば
実装可能かまでが知っていることが、「プログラムが分かる」ということ。
だから、モノを作るのには、「プログラムが分かる」だけではだめで、
実世界をどうモデリング(数理モデル、ここでは微分方程式)するか、
そのモデルをどうアルゴリズム化するか(微分方程式をデジタル制御に持っていくか)
ができないと、作れない。
640の発言で、「道具を適材適所に用いる事が出来ないだけ」と
書かれているが、たしかにどこまで数理モデル、どこまでアルゴリズムで
やるかがわからないと、実装まで持っていけないと思う。
ということで、実務では
プログラミング以上に、アルゴリズム、
アルゴリズムより、モデリングが重要となる。
そして、モデリングに重要なのは、プログラミング言語ではなく、
自然言語である国語と、数学、物理学の世界の言語である数学が
重要になってくる。これができないと、プログラミング能力は
活きてこない。
これらを使いこなして、プログラムは何をすべきかがわかるのが、
「プログラムが分かる」ということ。
仕様書になっていれば、プログラムが作れるというのが
「プログラムが出来る」ということ。
クアッドコプターを数理モデルから作れるか、
それとも仕様書がないとつくれないか・・
それが、分かると出来るの差。