こんにちは、Kanotです。最近プログラミング教育の話題が多いように思うが、いま大学生と小学生に同時にプログラミングを教えてて、個人的に思うところを書いてみる。
まず、プログラミングができるとなにが嬉しいかと言う点については、個人的には、論理的な考え方、この一点に尽きると思う。基本的な考え方は、どのプログラミング言語でもそんな変わらないので、一度感覚的に理解できるようになると、新しいプログラミング言語でもスッと理解できるし、論理的な思考力も高まると思う。
で、「あんたの言う論理的思考って何?」という点について、いま私が大学生と小学生の両方に同時にプログラミングをら教えてて感じるのは、「最近の子供向けプログラミングツールは論理的思考を育てるのに超わかりやすい!」ということである。
プログラミングで大事な論理的思考について、繰り返し処理と条件分岐の例をあえて大学生向けと小学生向けに分けて書いてみるので、ぜひ比べて見て欲しい。
1.大学生向け(ざざっと読み流してもらえれば大丈夫です)
さて、1から5までを繰り返し処理を使って出力し、最後にendと出力するロジックを考えてみよう。出力画面としてはこの様なイメージになる。
1
2
3
4
5
end
この例では繰り返し処理を5回して変数xに代入し、毎回一ずつ加算し出力する。そして変数x+1が5という条件が満たされたらendと出力する。
コード(以下の例はPython)で言うと以下のようになる。
for x in range(5):print x+1if x + 1==5:print “end”
さて、感想はどうだろうか?うーん、、私も自分で書いていて、なかなか未経験者はピンとこないだろうな、と思う。
これが子供向けだとこういうことができる。
2.小学生向け(Scratchというツールを使っています)
1から5まで順番に画面に表示して、最後にendと表示されるにはどうしたらよい?
こんなイメージだよ。(以下のURLをクリック)
//scratch.mit.edu/projects/embed/123192098/?autostart=false
この裏で動いてるコードはこんな風になってるんだ。countという箱の値を増やしながら5回クルクル繰り返して、countが5になったら最後にendと出してるのがわかるよね。
このコードがイメージできたら、もう一回さっきのプログラムを動かしてみよう。修正もScratchからドラッグ&ドロップで簡単にできるから色々試してみよう。
さて、どうだろう?こちらだとプログラミング未経験者でも繰り返し処理と条件分岐が、感覚的にイメージできたのではないだろうか?
この感覚さえ理解できれば、例えば4回敵に当たったら死ぬというゲームの仕組みが、「繰り返し処理で敵に当たったらライフを1づつ減らして、条件分岐で0になったらGame overと表示するのか。」とイメージできるようになる。この感覚はどのプログラミング言語にも応用が利くし、論理的思考が育つので、子供にとっても役に立つんじゃないかと思う。
なので、私個人的には、講師がプログラミングの楽しさや利点を理解してるのが前提で、プログラミング教育は良いんじゃないかと思う。
コメント
あらら、Kanotさん、大学でTA(あるいはRA)やってるんですか?
[余談] TAやRAについては、日本国内でも2010年7月1日以降は留学生も資格外活動許可証不要(1週間あたり28時間以内の制約外)になりましたね。
論理的な思考力はそれだけでも重要なものであることには強く同意です。論理的思考に立脚して構築された制度やフローは(広義の)プログラムであり、(狭義の)コンピュータプログラミングとの相性がいいのもアタリマエかな、と。if の条件判定が定量的だったり、ちゃんと then / elseが用意されていたり。
文章最後にある『(プログラミング教育では)講師がプログラミングの楽しさや利点を理解してるのが前提』は、Kanotさんが文章内でやっているように「現実にこんなところで使われている」を提示できることでもあるのでしょう。
ただ、『どのプログラミング言語にも応用が利く』は、思考的・技術的な側面と、技能的な側面があると考えています。「技術と技能」については、いくつかの国で(おそらく製造業・職業訓練系の事業で)JICAの派遣専門家としても活動していた森和夫さんに多くの著作があるみたいですね。
http://ginouken.com/GijutuToGinou.html
人材育成系の国際協力事業では、技術指導を謳いつつ、実態は(時間が足りないので中途半端な)技能伝授に終わる、ってパターンにハマるコトは多いと感じています。そこに「継続性」って言ってもねー(苦笑)。
コメントありがとうございます。TAを2 semesterというのが卒業条件に入ってまして、8年ぶりくらいに忘れかけた記憶を掘り起こして教えてます(笑)。
実は私が思うプログラミング教育について論理的思考と並んで大事な点は、「ハマるきっかけを提供する」ことだと思ってます。国を問わず、ITやプログラミングって(2chもそうですが・・)、ハマると勝手に勉強するじゃないですか。
となると、心配なのは教える人の力量についてで、今の民間ベースで進んでる分には、「プログラミングが好きなプログラマ」または「ハマった体験のあるプログラマ」が教えるので大丈夫だと思うんですが、小学校必修とかになってくると「プログラミングの楽しさは知らないけどルールは一応知ってる」人が教えるわけじゃないですか。これでどれだけ「ハマるきっかけ」を提供できるのかが心配ですね。「ifとかthenとか・・・何の役に立つんだよ、つまんねー」ってならないことを祈ります。
森さんの件も調べてみたいと思います!
TAが卒業条件ですか…。日本でもそろそろそんな感じになるかもしれませんね。
「ハマるきっかけ → ハマると勝手に学んでいく」は、リアルタイムで幼稚園年長の男子を見ていると強く実感します。季節による星座の移り変わりや、月や内惑星の満ち欠けなんかでも、今やWeb媒体でもテレビでも、わかりやすく説明してくれるネタがいっぱいあるんで、ホントにきっかけ勝負ですね。半分くらいは親である私が楽しんでしまってますが、子供からすると、それがスゴくオモシロそうに見えるらしく…。
よくある「んなもん何の役に立つんだよ」からは、消費者的コスパ至上主義や、加齢とともに自身の人生が取り返しのつかない状態になったオトナの自己肯定すら感じてしまうのですが、そういうイチャモンを吹っ飛ばすのが「義務化」なのでしょう。
何か問題に直面したときに、過去の経験(モノの購買などの手段)から解決策を探そうとするあまり、知識に基づいて思考する手間を省くようになってしまうことが「オッサン的な頑固さ」として表出するのだろうな、と深く深く自省しつつ。
私も事情があって、数年ぶりにJavaScriptをゴリゴリ書いてますが、今や(プラットフォーム上とはいえ)数百行のコードで業務システムのロジックまで実装できてしまう。便利さを実感する反面、自分自身や、所属する組織の論理的思考を一方的にベンチマークされてるみたいでゾッとします(笑)。