前回は scratch というプログラミング環境がどういうものかを簡単に話しました.そこではイベントという考えを使ってプログラムが動きます.今回はこの環境でキャラクターを動かした10歳の生徒の話です.
この Scratch というプログラミング環境では,キーイベントというイベントの一種が提供されています.たとえば,「右の矢印キーを押す」というイベントがあります.このイベントが起こると,x を 10 増やすというようなプログラムを書きます.すると,右の矢印キーを押すたびに猫を右に動かすことができます.これを上下左右のキーでそれぞれ行うことで,キーを使って猫を移動させることができます.
今日の生徒はドラゴンを登場させて,同じことをしました.するとなんと,猫もドラゴンも全く同じ動きをしてしまいます.まあ,そのようにプログラムしたので当然です.コンピュータはとても速く計算し,とても正確で,そしてとても愚かなものです.書いたとおりのことしかしません.その生徒はドラゴンを速く動かしたいと言いました.私は動く量を変えましょうと答えました.今は1回のキーを押すと,動く量が 10 です.速さとは一定時間に動く距離のことですから,これを増やせば速度は思いのままに変えられます.しばらくしてどうしたかなと思って見たら,この生徒はなんと,同じキーイベントをもう1つ作っていました.
つまり,右矢印のイベントが発生すると,2つのプログラムが起動するのです.1つのプログラムは10右へ移動であり,2つのプログラムでは合わせて20の移動になります.この環境では並列に動く部分でもちゃんと考慮されているようにできているらしく,これで正しく2倍の速度で動くのです.3倍速く動かすためには,もう1つプログラムを起動すればできます.なんという発想! 私はジョジョという漫画の1シーンを突然思い出しました.主人公がスタンドで浮くという場面です.(知らない人はすみません) 仗助がスタンドに押されて移動する場合,私の発想はスタンドの押す速度を変えることでしたが,この生徒の発想はスタンドの数を増やすことだったのです.
しかし,この生徒の方法では基本的に整数倍にしか速くできません.もちろん1つのプログラムがキャラクターを10押して,もう1つが同じキャラクターを5押すとすれば 15 押すことになり.1.5 倍の速度にすることもできます.しかしそれでは1つのプログラムが 15 押すのとあまり変わりません.むしろ難しいだけです.この生徒の発想はプログラムを完全にコピーすることで2倍になるということなのです.数学における一般化を学ぶと,どちらの問題を解くことがより大きな範囲の問題を解くことができるのかがわかります.この場合には1つのプログラムで速度を変換する方法の方が優れています.なぜなら速度を変える方法では整数倍だけでなく,小数倍にも,止めることも,逆方向に移動することもできるからです.また,計算機科学を学べば,スレッドが計算機で消費する資源,同期の問題などを考えて,やはり1つのプログラムの方が優れていることがわかります.そして保守の問題を学ぶと,コードが何倍にもふくれあがってしまう彼の方法よりも1ヶ所の変更で全てができる1つのプログラムの方がやはり優れています.しかしそれでもこの自由な発想はすばらしいと思いました.
4方向を5倍にするために,20 個のキーイベントがあるのを見て(図2),私は発想のすばらしさに驚きました.そして同時にやっぱり基礎を学ぶことも大切だなとも思いました.そしてこの生徒が今後多くを学んでいき,しかも今日の発想の素晴しさを忘れないでいて欲しいと思いました.
この Scratch というプログラミング環境では,キーイベントというイベントの一種が提供されています.たとえば,「右の矢印キーを押す」というイベントがあります.このイベントが起こると,x を 10 増やすというようなプログラムを書きます.すると,右の矢印キーを押すたびに猫を右に動かすことができます.これを上下左右のキーでそれぞれ行うことで,キーを使って猫を移動させることができます.
今日の生徒はドラゴンを登場させて,同じことをしました.するとなんと,猫もドラゴンも全く同じ動きをしてしまいます.まあ,そのようにプログラムしたので当然です.コンピュータはとても速く計算し,とても正確で,そしてとても愚かなものです.書いたとおりのことしかしません.その生徒はドラゴンを速く動かしたいと言いました.私は動く量を変えましょうと答えました.今は1回のキーを押すと,動く量が 10 です.速さとは一定時間に動く距離のことですから,これを増やせば速度は思いのままに変えられます.しばらくしてどうしたかなと思って見たら,この生徒はなんと,同じキーイベントをもう1つ作っていました.
つまり,右矢印のイベントが発生すると,2つのプログラムが起動するのです.1つのプログラムは10右へ移動であり,2つのプログラムでは合わせて20の移動になります.この環境では並列に動く部分でもちゃんと考慮されているようにできているらしく,これで正しく2倍の速度で動くのです.3倍速く動かすためには,もう1つプログラムを起動すればできます.なんという発想! 私はジョジョという漫画の1シーンを突然思い出しました.主人公がスタンドで浮くという場面です.(知らない人はすみません) 仗助がスタンドに押されて移動する場合,私の発想はスタンドの押す速度を変えることでしたが,この生徒の発想はスタンドの数を増やすことだったのです.
しかし,この生徒の方法では基本的に整数倍にしか速くできません.もちろん1つのプログラムがキャラクターを10押して,もう1つが同じキャラクターを5押すとすれば 15 押すことになり.1.5 倍の速度にすることもできます.しかしそれでは1つのプログラムが 15 押すのとあまり変わりません.むしろ難しいだけです.この生徒の発想はプログラムを完全にコピーすることで2倍になるということなのです.数学における一般化を学ぶと,どちらの問題を解くことがより大きな範囲の問題を解くことができるのかがわかります.この場合には1つのプログラムで速度を変換する方法の方が優れています.なぜなら速度を変える方法では整数倍だけでなく,小数倍にも,止めることも,逆方向に移動することもできるからです.また,計算機科学を学べば,スレッドが計算機で消費する資源,同期の問題などを考えて,やはり1つのプログラムの方が優れていることがわかります.そして保守の問題を学ぶと,コードが何倍にもふくれあがってしまう彼の方法よりも1ヶ所の変更で全てができる1つのプログラムの方がやはり優れています.しかしそれでもこの自由な発想はすばらしいと思いました.
4方向を5倍にするために,20 個のキーイベントがあるのを見て(図2),私は発想のすばらしさに驚きました.そして同時にやっぱり基礎を学ぶことも大切だなとも思いました.そしてこの生徒が今後多くを学んでいき,しかも今日の発想の素晴しさを忘れないでいて欲しいと思いました.
Figure 2. Using multiple same key events |
Comments
Post a Comment