プログラミング,何をどう教えているか : Processing によるプログラミング教育
3
0
0
全文
(2) 連載. プログラミング,何をどう教えているか. ョンのフレームワークが用意されていることを除く と,簡単であるという以上には特徴があるわけでは ない.しかし,サウンドやビデオなど,機能を拡張 するさまざまなライブラリが作られていて,画像と 音を組み合わせたインタラクティブなプログラムも 手軽に書くことができる.また,Arduino や Gainer などのフィジカルプログラミング用ライブラリもあり, 実際,筆者が Processing を知ったのは,Gainer のた. 図 -1. めのプログラミング・ツールとしてだった.. ✔✔ Processing によるプログラミング入門. も楽しんでやれるようだ. では,変数や配列などの抽象的な概念やループ・. プログラミング学習の初歩は往々にして抽象的に. 分岐といった実行制御はどう教えるか.これらも最. なりがちである.わけも分からずやみくもにサンプル・. 初はすべて図形やアニメーションの操作と関連させ. プログラムを入力してみると,謎の数字が 1 個だけ. る.たとえば,同じ図形をさまざまな位置に描こう. 出力される,というのが典型的な姿だろうか.この. とすれば変数を使うのが便利だし,格子を描いたり. 授業では,その最初の段階を 「図形」 という具体的な. 同じ図形を規則的に並べたりするためにはループを. 対象の操作に対応づけることで,理解しやすくしよ. 使うという具合である.. うと考えた.たとえば,かの K&R 以来,最初のプ. 配列は,まずは碁盤のような升目を表現する方法. ログラムは "Hello, world" と相場が決まっているが,. として導入する.升目に色をつけて絵や文字を描き,. この授業での最初のプログラムは. それを 1 ステップにつき 1 マス分だけずらしてゆく. line(0,0,100,100);. アニメーションを作れば,電光掲示板もどきが作れ る.これを 2 次元配列の操作で実現するわけである. である.この 1 行のプログラムでウィンドウが開き, (図 -1 および付録参照).また,これはその後に学ぶ キャンバスに斜線が描かれる.ヘッダーや main(). セル・オートマトンの簡単な例にもなっている.. などの準備は不要で,いきなり実行文を書けばよい.. このようにして,まずは目に見える対象の操作と. 続いて,簡単な図形を描くプログラムを作る.た. して,プログラムのさまざまな概念を教え,それか. とえば. ら数値の操作など目に見えない対象の操作へと進め. fill(100,0,0); rect(0,0,50,50); fill(0,200,100); rect(30,30,50,50);. てゆくというのが,この授業のポイントである.なお, 授業ではシミュレーションに必要な最低限のプログ ラミングしか扱わないので省略しているが,オブジ ェクトやクラスも図形という具体的なオブジェクト. という 4 行のプログラムは,それぞれ (1) 色を決める. と関連づけて導入すれば,初学者が概念を把握しや. (2) 正方形を描く (3) 色を変える (4) 別の位置に正方. すいだろう.. 形を描く,という 4 つの操作と 1 対 1 に対応している. #include<stdio.h> や main() といった「おまじ. ✔✔ 授業の効果. ない」 を必要としないのが,初心者に優しい点である.. 毎回の授業では,最初に 15 分ほど解説をし,あ. さらに,図形を組み合わせて,各自,好きな絵を描. とは各自に実習してもらう.もちろん,プログラミ. いてみる.座標をすべて数値で表すのは大変に思え. ング経験も適性もばらばらな学生たちなので,全. るが,結果が即座に絵として確認できるので,学生. 員が同じ進度では進まない.解説は標準的な進度. 214 情報処理 Vol.52 No.2 Feb. 2011.
(3) Processing によるプログラミング教育. の目安を与える程度のものと位置づけ,実際には. 付録. e-learning システムで与えられる教材に基づいて,. 参考までに,実行例として図 -1 に示したプログラ. 各自が自分なりの進度で学習を進めるようにしてい. ムを掲載する.これは,2 次元配列の練習のために. る.それを筆者と 3 名の TA とで指導してゆく.. 用意した「電光掲示板もどき」である.. Processing の学習がひととおり終わると,次は乱 数やセル・オートマトンを使ったシミュレーション・ プログラムに移るのだが,詳細は割愛する. では,1 セメスターでどの程度のプログラミング ができるようになるのか.学生には,最低限の到達 目標として,アニメーションのプログラムが書ける ようになることを求めている.残念ながら,セルオ ートマトンまで進めるのは全体の半分程度だが,乱 数を用いて偶然性をアニメーションに導入する(た とえば,花びらがひらひらと舞う様子を乱数で表現 するなど)程度までは,ほぼ全員が到達できる(TA の努力のおかげで,ついていけずに諦める学生は稀 である) .学期の最後には自由制作を提出してもらう. 課題は,各自の到達度に応じて,アニメーションま たはシミュレーションのプログラムとしており,毎 年独創的な力作が揃う.簡単なものでは数 10 行程 度で,100 行を超えるプログラムも少なくない.ス タート時点ではプログラム未経験者がほとんどだっ たことを思えば,悪くないのではないだろうか. 興味のあるかたは,筆者の Web サイトに講義資 料を公開しているので,ご覧いただきたい (http:// www.cp.cmc.osaka-u.ac.jp/~kikuchi/kougi). (平成 22 年 8 月 31 日受付). 菊池 誠 [email protected] 1986 年東北大学大学院理学研究科物理学専攻修了(理学博士).大 阪大学理学部助手,助教授を経て,2000 年より大阪大学サイバーメ ディアセンター教授.専門は計算物理学・統計物理学・生物物理学.. int[][] s=new int[25][25]; int[][] s2=new int[25][25]; int[] x = {8,9,10,11,12,13,14,15,15,15,15, 15,14,13,12,11}; int[] y = {8,9,10,11,12,13,14,15,14,13,12, 11,15,15,15,15}; int edge=20,n=16; void setup(){ size(504,504); stroke(0); frameRate(20); for(int i=0; i<25; ++i){ for(int j=0;j<25;++j){ s[i][j] = 0; }} for(int i=0; i<n; ++i){ s[x[i]][y[i]] = 1; } } void draw(){ for(int i=0; i<25; ++i){ s2[i][0] = s[i][24]; for(int j=1;j<25;++j){ s2[i][j] = s[i][j-1]; }} for(int i=0; i<25; ++i){ for(int j=0;j<25;++j){ s[i][j] = s2[i][j]; }} for(int i=0; i<25; ++i){ for(int j=0;j<25;++j){ if(s[i][j] == 0){ fill(255);} else{ fill(0,0,255);} rect(i*edge,j*edge,edge,edge); }} }. 情報処理 Vol.52 No.2 Feb. 2011. 215.
(4)
関連したドキュメント
目標を、子どもと教師のオリエンテーションでいくつかの文節に分け」、学習課題としている。例
わかりやすい解説により、今言われているデジタル化の変革と
信号を時々無視するとしている。宗教別では,仏教徒がたいてい信号を守 ると答える傾向にあった
今日のセミナーは、人生の最終ステージまで芸術の力 でイキイキと生き抜くことができる社会をどのようにつ
• 教員の専門性や教え方の技術が高いと感じる生徒は 66 %、保護者は 70 %、互いに学び合う環境があると 感じる教員は 65 %とどちらも控えめな評価になった。 Both ratings
自分ではおかしいと思って も、「自分の体は汚れてい るのではないか」「ひどい ことを周りの人にしたので
その1つは,本来中等教育で終わるべき教養教育が終わらないで,大学の中