ビジネス WinDbg入門 すぐ落ちるWinDbgコードを書きましょう!


プログラミングの意味

 「C++プログラミング言語の歴史と特徴」連載第14回目の今回も前回に引き続き次の公開論文を精読していきます。

第1回連載資料論文

 今回は、「3.3 Compile, Link, and Execute」節の意味を考えます。この節のタイトルには語学的にこれといった難しいところはないと思います。ただ、本文を実際にお読みになると分かりますが、取り上げられている内容は、"分割コンパイル"という、技術的にはかなり専門的なものです。プログラミング学習を開始されて間もない方や経験の浅い開発者は、"分割コンパイル"といわれても、おそらく、理解できないと思います。あまり気にしないでよいですよ、と申し上げたいところなのですが、筆者はそのような断定はできない状態にいます。分割コンパイルは確かに大規模開発プロジェクト用の必須開発技法の一つという側面はあります。この意味では、プログラミング初心者などは覚える必要はありませんし、到底マスタできるようなものではありません。ところが、"プログラミングを自己表現の道具"、あるいは、"プログラミングは物作り"、と考えた場合、分割コンパイルは優れた表現手法の一つなのです。また、ビジネス的には、ソフトウェアの開発生産性とサポート効率を向上させる優れた手段の一つでもあります。こうした意味では、プログラミング初心者でも覚えるべき基本技術の一つといってよいと思います。

 私たちは小学生時代、夏休みなどに絵日記という課題を与えられたと思います。その日の経験内容を自由に絵に描き、自分の意図をより明確にするために絵と絵の間に言葉を挿入したりしました。ここには、2つの異なる技術が使われています。絵を描く技術と作文技術です。これは一種のSeparate Compile(分割コンパイル、分割編集)といってよいものです。このように、異なる技術や発想を組み合わせると、表現力がぐんと増します。また、表現過程における"ものを作る"楽しみも増します。絵を描き、それにコメントをつける作業は結構楽しいものでした。絵を描くだけ、あるいは、作文するだけでは、あのような楽しみを味わうことは不可能だったでしょう。2つの技術を併用したからこそ、"自分を表現する楽しみ"(創作過程)を味わえたはずです。

 それではここで、3.3節の末尾に紹介されている図を見てください。図内には、main.c(VS.NETではmain.cppという具合に、拡張子は.CPPとなります)、fact.h、fact.cという3つのファイルがあり、これら3つのファイルで一つのプログラムが構成されています。プログラムを単に作るだけしたら、main.cだけで十分なはずです()。しかしわざわざ、fact.hとfact.cを"別途"用意しています。この場合の、"別途"とは、分割コンパイルという別の技術を使用することを意味します。絵日記の例で言えば、絵だけではなく、文章も追加するのと同じです。2つの技術が使われているということです。2つの技術を併用すれば、表現力と楽しみが同時に増します。

 2つの技術を併用すれば、確かに、"表現力と楽しみ"は増します。ところで皆さん、プログラミングにおける"表現力と楽しみ"とは何でしょうか。main.c、fact.h、fact.cというファイル構成で言えば、"余分に用意した"fact.hとfact.cが"表現力と楽しみ"を増す役割を果たしています。fact.hは一般にはヘッダーファイルと呼ばれいます。筆者はこの表現が好きではありません。ヘッダーファイルの存在理由をきちんと説明できる人は、おそらく、いないと思われます。

 筆者は、fact.hは、技術者向けには、"インターフェイス記述ファイル"と説明することにしています。つまり、自分の考えた内容(実装ロジック)の概要をユーザに説明する情報を含むファイルというわけです。プログラミング初心者の方には、絵日記に例え、fact.hは"絵"に相当しますと説明することにしています。

 絵を書くのは楽しいものです。自分の経験内容を絵で表現する作業は時を忘れさせてくれました。これでfact.hファイルの意味をなんとなくご理解いただけたでしょうか。fact.hファイルは、fact.cの内容(夏休みのある日の経験内容)を分かりやすく説明する道具なのです。Stroustrup氏が用意しているfact.hファイルの内容は、次のようになっています。

long fact(long);

 ご覧のように、含まれているのはたったの一行文の情報にすぎません。しかし、"factという関数が用意されている"という事実はきちんと表現されています。現実のプログラムではより多くの関数が用意されているはずですから、fact.hファイルの内容を見るだけで、fact.hファイルを用意した人の関心内容や開発プロジェクトにおける役割が理解できてしまいます。技術的には、fact.hファイルを読むだけで、用意されている関数の使い方が分かってしまいます。これで、"プログラミングは自己表現である"、"ソフトウェア開発の生産性が向上する"、ということがお分かりいただけたのではないでしょうか。

 2つの異なる技術を併用すると、"表現力と楽しみ"が確かに増します。fact.cファイル内に100個の関数を定義していて、その中のいくつかは使用してほしくないとしましょう。この場合、使用してほしくない関数の情報はfact.hファイル内に記述しなければよいのです。これも一種の自己表現(公開情報の制限)です。絵日記に夏祭りの風景を描く場合、ほとんどの子供は、強烈な印象を受けた一部だけを描いているはずです。残りは描かないと思います。これは一種の"情報隠ぺい"であり、表現の一手法です。

 プログラミングは自己表現であることはお分かりになったと思います。それでは、実際の開発現場におけるプログラミングの意味とは何でしょうか。それはなんといっても利益の追求です。ビジネスですから、「効率」というものが要求されます。これは何かとても大変なことのように思えますが、効率を求めるといっても、表現力が優れていれば、効率は自然に改善されるものです。たとえば、fact.hファイル内容が分かりやすく表現されていれば、同一プロジェクト内の同僚開発者はfact.cファイル内容(つまり、詳しい実装コード)を一切見ることなく、既存プログラムコードを理解し、再利用できることになります。

 複数の技術を併用することは"表現力と楽しみ"を増すことです。しかし、プログラミングを習い始めたばかりの頃は、覚えることが増えるだけ、と後ろ向きに考えてしまうものです。筆者は、本「IT談話館」では、"なぜ覚える必要があるのか?"ということを可能な限り説明したいと思います。もちろん、"覚える必要はない理由"も明確にしたいと思います。

前へ | 次へ



 WinDbgスクリプティング講座  ホーム


Copyright©豊田孝 2004- 2008
本日は2008-12-04です。