実用的プログラミングの基礎知識
−次のレベルの考え方−


情報技術者のキャリアパス
「プログラムを書く」と「ソフトウェアを作る」の間のギャップを越えるための、次のレベルの考え方。それは、
  • 部品(コンポーネント)
  • 過程(プロセス)

部品(コンポーネント)
プログラムに機能を付け加えるには二つの方法があります。追加したい機能を自分で作るか、誰かが用意してくれた部品を組み込むかです。
よく考えてみると前者は現実的には無理です。なぜなら、今使っているプログラミング言語やOS自体、貴方が作ったものではなく誰かが作ってくれたモノ(部品)だからです。それに不足している機能を貴方自身が付け加えられるはずが無いのです。
しかし、他人の作った部品を使ってモノを作るというのは恥ずかしい事でもなんでもありません。工業の世界ではこれは常識です。身近にある機械を見て下さい。一つの部品(?)でできた機械がありますか?あるいは、部品全てが自社開発の機械がありますか?どんな機械もいろいろな人が作った沢山の部品の組み合わせで出来ています。
ソフトウェアも機械の場合と全く同じで沢山のソフトウェア部品の組み合わせて出来上がっています。Windows のシステムディレクトリを見ると数えられない程のプログラム・ファイル(モジュール、ライブラリ)が並んでいます。
Internet Explorer や Office 等のアプリケーションだけでなく、Windows 自身がこれらの部品の組み合わせを土台として出来上がっているのです。高機能なソフトウェアほど沢山の部品を必要とし「プログラムを書く」という仕事は、部品をいかに上手に組み合わせて目的の機能を実現するか、ということになってきます。
部品を使いこなすには、それぞれの部品の機能について知っているだけではダメで、部品を組み込むための知識が必要になります。例えば、異なったプログラミング言語で作られた部品を使うこともありますから、プログラムが計算機の中で動いている時の仕組みや性質について理解しておく必要があります。また、部品の中には自分のプログラムに直接組み込むのではなく、別の計算機の上で動いている部品を遠隔で使うようなものもありますから、データのやりとりするためにはネットワークやデータ形式についての理解も必要です。
“プログラムを書くのは部品を使うため”。これが「ソフトウェアを作る」ということなのです。まずは部品を使いこなせるようになりましょう。みんなに使ってもらえるような部品が作れるようになるには、たくさんの修行が必要です。

過程(プロセス)
ソフトウェアは一夜にしてできるものではありません。小さなものでも何日か、大きなものなら何年もかけて作り上げられるものです。この時間の流れの中には色々なことがあります。
初めて書く小さなソフトウェアは機能の追加を繰り返しながら形になって行きます。しかし、ある程度大きくなってくると、次にどの機能を追加したら良いかに悩むようになります。更にもっと混乱してくると一体次に自分は何をしたらよいかすら分からなくなります。
そんな混乱に陥らないため、予めやることの順番を決めておいた方が良いです。しかし、順序を間違えると何事もうまく生きません。順序が自明なこと(コーディング→コンパイル→デバッグ)もありますが、自分で順番を決めなければならないことは沢山あります。
順番を決めるためには、ソフトウェアを作る上で必要な仕事(タスク)を決めなければなりません。どんなタスクをしなければならないか分からないのに順番を考えることなんかできません。
個々のタスクは実際にはもっと小さなタスクから成り立っています(階層構造)。また、それぞれのタスクには、前にやっておかなければならないタスクが決まっているものがあります(依存関係)。
タスクの順番を過程(プロセス)と呼びます。このプロセスを決める事自体もまたタスクの一つですが...
ソフトウェアを作るプロセスを毎回ゼロから考えていたら大変です。実際にはソフトウェアを作る上で必要なタスクやその順番はある程度決まっていますので、それらについての知識を持っていればプロセスを考えることは大分楽になります。
とは言え、作ろうとしているソフトウェアの性質やそれを作る人や使う人の性質によってプロセスは随分と違ったものになります。一度うまく行ったプロセスでも違うソフトウェアを作る時にはそれに合わせて変えて行かなければなりません。
プロセスを考えることの重要さと複雑さはソフトウェアの規模に対して指数的に大きくなって行きます。ですから小さいソフトウェアを作る時からプロセスを考える訓練をしておいた方が良いでしょう。これも修行が必要です。

© 2004 Takaya Sakusabe. All rights reserved. Last updated: May 9, 2004 02:41 JST.