投稿
大学においてプログラミングを学ぶ科目は、コンピュータの機能を利用するための知識・技術の習得や論理的思考力の育成という目的で、コンピュータ科学関連学科はもちろん、理系文系を問わず、幅広い学科で開講されている。メディアデザインやメディアアートを学ぶ学科では、プログラムを表現に使う手法を学ぶことをめざして、カリキュラムに取り入れられている。そこには、コンピュータ科学をはじめとした他の学科とは異なる目標があり、それに応じた教材が求められる。
プログラムをデザインやアートの表現の道具として使う際に、期待されることの一つは、コンピュータと人とのインタラクションを仲介することである。キーボードやマウスを介したインタラクションに加えて、物理的/身体的な入力装置を使うことで、表現手法を拡大する可能性が高まる。この点で、文系一般のためのプログラミング教育とも異なる教育内容が求められる。
本稿では、メディアデザイン・アート系学科の学生を対象としたプログラミング教育の内容を整理した後、情報メディア学科で担当するJava言語プログラム科目(履修対象者:2〜4年生、25名〜40名、通年1週180分)において取り上げる教材について報告する。
プログラムを学習する科目に共通な教育内容を、Conceptual PhaseとPractical Phaseと呼ぶ二つのフェーズに分ける[1]。
【Conceptual Phase】
プログラミングの基本概念を学ぶ。
【Practical Phase】
グラフィカルユーザインタフェース(GUI)、イベント処理、ファイルIO、ネットワーク等に関連する事項を学ぶ。
前者はプログラム言語に依存しないプログラミングの基本概念で、後者は実用的なプログラムに必要な技術で、言語環境に依存する部分である。
この一般的プログラミング教育の二つのフェーズに加えて、人とインタラクションを取るメディアデザイン作品を制作する基礎的なトレーニングのため、Exploring
Phaseと呼ぶ三つめのフェーズを置いた。
【Exploring Phase】
マウスやキーボード以外の入力装置から得たデータを使ったプログラムを学ぶ。
Conceptual PhaseとPractical Phaseにおいても、他の学科と異なる部分がある。学生たちはコンピュータを道具として使う技術を身につけたいとは思っているが、プログラミングスキルを専門的に習得したいのではない。プログラミングの重要概念を押さえつつ、学生の制作に刺激となるような内容を選別した。表1は理工系学科を対照として、その学習内容を整理したものである[2]。Conceptual Phaseでは、整列、ソートなどのアルゴリズム、キューやスタックといったデータ構造はとりあげない。また、Practical Phaseの内容では、イベント処理、GUIに加え、基本グラフィックスに学習の時間を割き、数理が生み出す造形(例えば、フラクタル)を作り出すプログラムを学習する。
表1 学習項目の比較
Phase 理工系 デザイン・メディアアート系 Conceptual
Phase基本概念 変数,データ型,演算,制御構造,配列 変数,データ型,演算,制御構造,配列 オブジェクト指向 クラス,継承,ポリモルフィズム クラス、継承 並列処理 スレッド,同期 スレッド アルゴリズム 整列,探索,文字照合,再帰 再帰 データ構造 リスト,スタック,キュー,二分木 Practical Phase GUI,イベント処理,ファイルIO,ネットワーク GUI,イベント処理, 基本グラフィックス
プログラムの概念を学習するための環境として、LOGOのTurtle Graphics、Design By Numbers[3]、Processing[4]などがある。LOGOやDesign
By Numbersは、プログラミングの本質を理解し、計算による描画表現の可能性を知ることができる素晴らしい道具である。しかし、汎用的な言語環境ではなく、基本概念は学べるが、実用的なプログラムの作成には十分ではない。また、Processingはインタラクティブなグラフィックスを簡単に作成できるだけでなく、高度なメディアアートプログラムを制作するに十分な機能をもつが、Java言語の文法上の複雑さを隠すことで、デザイナーやアーティストが使いやすい道具にしているため、プログラミングの基本概念を学習しにくい。
そこで、Java言語でTurtle Graphicsを実装した環境を教材として使う[5]。プログラムの基本概念を視覚的に学ぶというTurtle Graphicsの機能に加え、Java言語のクラスとして動くことでTurtleを扱いながら配列やオブジェクト指向の概念を学べる。オブジェクト指向の概念を学習することは、プログラム学習を進める土台としてだけでなく、マルチメディア制作によく使われるオーサリングツールのもつスクリプト言語(例えば、FlashのActionScript)を理解する上で有効である。
Practical Phaseでは、Java言語の標準パッケージを使って、基本グラフィックス、イベント処理、再帰処理を学ぶ。線画によるフラクタル図形や錯視の感覚を与えるインタラクティブなアニメーションを作成する(図1)。
図1 マウスに応答するインタラクティブなアニメーションプログラム
センサやアクチュエータを使った独自のインタラクションを作り出す前段階として、USB接続のバーコードリーダを使用する。電子工作が不要で、プログラム的にはキーボード入力と同様に扱える。入力に応じてグラフィックスや音声が変化するプログラムを作成するのだが、プログラムを含むコンピュータとバーコードリーダを一つの装置としてみることができる。
例えば、サンプルとして紹介するプログラムは、幼児を対象にした「動物にえさを与える」装置で、馬、カエル、猿が動く短いアニメーションが再生されており、ニンジンの絵を描いたカード(バーコードも合わせて印刷されている)を装置へ差し出すと、馬がニンジンを食べ、カエルと猿は拒絶のしぐさをする。
図2 バーコードリーダを使ったインタラクティブなアニメーションプログラム
サンプルでは、バーコードを読ませる行為が、「えさを与える」という意味に変換される。この他にも、ユーザの行為を「見せる」「差し出す」「捨てる」などさまざまに解釈する装置を発想できる。ユーザの動作のとらえ方によって全く違う文脈で意味をもつプログラム、つまりユーザの行為に新しい意味を与える「装置」を作成するのが課題である。
問題解決型の演習では、仕様が与えられ、それを実現するプログラムを作成する。理工学系の科目での課題はこのスタイルが多い。例えば「床の黒線に沿って走るロボットを制御するプログラムを作れ」のような演習である。一方「バーコードリーダを入力装置として、新しいインタラクションの意味をもつプログラムを作れ」の演習では、入力(人の行為)にどんな意味をもたせるかのアイディアを考え出し、それを実装する。問題解決型に対して、問題創造型の課題といえよう。
Javaタートルグラフィックスにより、基本概念とオブジェクト指向のパラダイムを学習(Conceptual Phase)後、Java標準パッケージを使って、イベント処理やGUI、基本グラフィックスを学ぶ(Practical Phase)。その後、外部入力デバイスを使ったインタラクティブなプログラムを作成し、問題創造型の演習を行う(Exploring Phase)。このような教材を授業で展開することで、理工系ともまた多くの文系のプログラミング教育とも異なる視点をもったプログラミング授業を実施している。
本稿で紹介した教材の研究開発には、同志社女子大学研究助成金の支援を受けた。
参考文献および関連URL | |
[1] | H. Tsuiki, T. Ariga: Programming for Students of Information Design. SIGCSE Bulletin, Vol.33 No.4, pp59-63, 2001. |
[2] | 有賀妙子:デザイン・メディアアート関連学科におけるプログラミング教育. デザイン学研究, 第52回研究発表大会概要集, pp198-199,2005. |
[3] | 前田ジョン: Design By Numbers―デジタル・メディアのデザイン技法. ソフトバンククリエイティブ, 2001. |
[4] | B. Fry, C. Reas http://processing.org/ |
[5] | 立木秀樹, 有賀妙子: すべての人のためのJavaプログラミング. 共立出版, 2000. |