連載
» 2005年11月12日 12時00分 公開

オブジェクト指向を超えてThe Rational Edge(2/3 ページ)

[Gary Pollice(ワーチェスター工芸研究所業務学教授),@IT]

◆ 教育と学習に対するオブジェクト・ファーストのアプローチ

 1980年代後半、筆者は業界に入ってくる新しいプログラマーを興味深く観察するようになった。筆者にはすでに、さまざまなシステムを開発してきた20年もの経験があったが、オブジェクト指向言語を使った作業になると、筆者よりこれらの若者の方が格段に優れていたのだ。筆者はまた、LISPなどの関数型言語を使いこなせる人が、筆者よりはるかに容易にOO言語やその手法になじめることにも気付いた。このまま業界にとどまるには、ソフトウェア開発に対する筆者のアプローチには補うべき何かが明らかに欠けていたのだ。

 筆者の足を引っ張っていたのは、プログラミングに関する過去の知識だったと思う。筆者は、関数でシステムを分解するための新しい手法としてオブジェクトを見ていた。筆者が使っていたSmalltalkの本は筆者をオブジェクトの世界に引き込んでくれたが、自分が学習していることと、ほかの言語のシンタックス、環境、クラスライブラリに関する自分の知識を結び付けようとすると、筆者は頭痛に襲われるのだった。例えば、筆者には以下のようなコードを解明することが全くできなかった。

 そこで、筆者は10年かけてコツコツと勉強を続け、オブジェクトに関してできる限りのことを学び、結果が出ることに期待した。実のところ、その間、オブジェクト指向プログラミング特有のことは1つも「頭に入らなかった」。それは、筆者が目を通した本が、どれも以下のような「hello world」のプログラムから入っていたことが原因かもしれない[注3]。


[注3] 「Big C++」(Cay HorstmannおよびTim Budd共著、2005年John Wiley刊)より抜粋。


 ネーム空間とiostreamを含んでいる部分を除き、Cの関連書に出てくる「hello world」プログラムと、この小さいプログラムには違いがほとんどなかった。では、この例は、どのようにしてオブジェクト指向の特長を筆者に示しているのだろうか? 後から考えると、C++やオブジェクト指向プログラミングを学ぶことは、ほかの言語を学習するのと大きく違わないから、これまでの知識を基盤にして学んでいけばよいのだということを、これらの書籍は何げなく伝えようとしていたのだと思う。しかし、筆者にはそれが当てはまらなかった。「hello world」の例から始めるのは、見当違いに思えたのだ[注4]。


[注4] 公正のために記すと、これらの書籍の大部分は「hello world」の例の直後から、オブジェクト指向の例を大量に示している。


 筆者がその力を深く理解できるようになったのは、一歩下がってオブジェクトを新しい目で見たときからだった。筆者は、自分が優秀なプログラマーであることを忘れ、何も知らないつもりでオブジェクト指向を見ることにした。複数の角度から問題を調べることを学んで、最初に要件を検討し、オブジェクトを特定してから、これらを抽出して整理した。設計についてはGrady Boochの著書が大いに役立った[注5]。そこには、「重要なのは言語ではない。その背景にある概念である」と書かれていた。そして、オブジェクト指向の考え方は、筆者が慣れ親しんだものとは大きく異なっていたのだ。


[注5] 「Object-Oriented Analysis and Design with Applications, Second Edition」(Grady Booch著、1993年Addison-Wesley刊)


 筆者はまた、若い開発者がかなりの短時間でオブジェクトに対応できた理由も分かった。その答えは簡単だった。彼らは最初からオブジェクトを学んでいたのだ。それか、彼らは筆者の学んだ手続き型の方法論よりも範囲の広い、関数型のような方法論から勉強を始めていたのだ。

 学会関係者の多くも、その利点を認識しており、コンピュータサイエンス教育へのアプローチでは、オブジェクト・ファーストの概念も確立されつつある。2001年には、Association for Computing Machinery(ACM)がコンピューティング関連授業に関する調査結果を発表し、高等教育機関では「プログラミング・ファースト」のアプローチで授業が広く行われていることが明らかになった。このアプローチの目標を達成するには、命令ファースト、関数ファースト、あるいはオブジェクト・ファーストの3つの方法があった。最初の2つの方法は何年もの間使われてきたものだが、オブジェクト・ファーストは比較的新しかった。

 オブジェクト・ファーストを教えるときは、コンピュータサイエンスの最初の講義でオブジェクト指向の分析/デザイン(OOAD)の原理から教え、その後も講義の中でこれらを力説し続ける。筆者が称賛した若い開発者の大部分は、オブジェクト・ファーストもしくは関数ファーストのいずれかの教授法の出身者だった。彼らは、システムの動作を結合性のある小さなパーツに分割し、それぞれのパーツを連携させることで最終的なソリューションを組み立てるという重要なスキルを持っていた。筆者がとにかく悪戦苦闘したこのスキルを、彼らは自然に受け入れるのだ。その後から、コードをうまく文書化する方法、意味のある名前を使うこと、効率的なアルゴリズムの設計と使用など、これらを基本的かつ手続き的なスキルで補完して知識を完成させることは、これらの学生にとって比較的容易なことだった。

 現在、コンピュータサイエンスの教育現場では、オブジェクト・ファーストのアプローチの有効性に対する認識が高まりつつある。2003年には、「Teaching Objects-First in Introductory Computer Science(コンピュータサイエンス入門コースでオブジェクト・ファーストを教える)」というタイトルの論文を3人の教授がSIGCSEカンファレンスで発表した[注6]。アプローチの有効性に関する彼らの意見は筆者と同じだった。彼らは、学生たちが以下のすべてのスキルを身に付けていたことに気付いた。


[注6] SIGCSEはコンピュータサイエンスの教育に特化した特殊利益団体。この論文は、それぞれ別の大学で教鞭を執るS. Cooper、W. Dann、およびR. Pauschの共著によるもので、SIGCSE '03の議事録に登場する。


  • デザインに対する強い感覚
  • オブジェクト、クラス、オブジェクト指向プログラミングの背景認識
  • 新しいことに挑戦することを恐れず、試行錯誤を繰り返して段階的にプログラムを開発する力
  • カプセル化、継承、コラボレーション、および手法に対する直感力

 しかし彼らは、このアプローチの短所もいくつか指摘している。学生たちには、オブジェクト・ファースト・アプローチを促進するツールを使用するときなどは特に、シンタックスやデバッグ機能に対する強い感覚が身に付いていなかった。この論文の著者たちが学生に対して用意したAlice環境では、こうなった理由を理解するのは難しくない。カーネギーメロン大学の講義用に開発されたAliceは、環境との対話により自分独自の仮想世界を構築するという3Dアニメーションプログラミング環境だ[注7]。オブジェクトに対してビジュアルなアプローチを取っているため、学生がシンタックスを正当に評価できなくても当然だ。


[注7] Aliceはhttp://www.alice.org/から無償でダウンロード可能。


 オブジェクト・ファースト・アプローチをサポートするツールとしてはほかにも、Java用のシンプルなIDEを提供する筆者の好きなBlueJ環境などがある。筆者は、ワーチェスター工芸研究所で初めて教えたOOADのクラスでBlueJを使ったことがある。これは簡単に学ぶことができ、学生は、Unified Modeling Language(UML)や単体テストを徐々に理解するようになる。BlueJは、学生にOOの良い習慣を身に付けさせる教科書でもサポートされている[注8]。しかし、BlueJの初期のリリースにはバグが多く、大規模プロジェクトではインターフェイスが決して実用的でない。そのため、筆者はEclipseを採用したうえで、BlueJの一部の機能をEclipseに追加する作業を自分の学生に手伝ってもらった。われわれは現在までのところ、完成したプログラムがなくてもユーザーがオブジェクトとやりとりできるようにするオブジェクトベンチを追加している。


[注8] 「Objects First with Java」(David J. BarnesおよびMichael Kolling共著、2004年Prentice Hall刊)


 短所はあるが、自動化されたツールを使ってオブジェクト・ファースト・アプローチでプログラミングを教えた方が、従来の教授方法で教えるより優れたオブジェクト指向のソフトウェア開発者が誕生することは筆者にとっては明らかだ。オブジェクト・ファーストプログラムで学んだ学生は、ソフトウェア開発の難しい面を学んだのだ。彼らは、デザインの原理と、複雑性を管理する方法を理解している。昨年、卒業制作のプロジェクトでEclipseプラグインを開発した筆者の2人の学生は、ごく短時間でアーキテクチャを理解し、プラグインのインプリメントを開始して筆者を驚かせた。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ