「Bjarne Stroustrup インタビュー」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(ページの作成:「'''Bjarne Stroustrup インタビュー'''とは、C++およびオブジェクト指向プログラミングを皮肉った世界的に有名な怪文書・ジ...」)
 
 
(5人の利用者による、間の8版が非表示)
8行目: 8行目:
  
 
== 翻訳 ==
 
== 翻訳 ==
この怪文書の日本語訳は様々な人々により行われ公開されているが、長村洋文氏による翻訳が個人的に一番読みやすかったので、それを用語解説のために引用し掲載する<ref>http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html<ref>。
+
この怪文書の日本語訳は様々な人々により行われ公開されているが、長村洋文氏による翻訳が個人的に一番読みやすかったので、それを用語解説のために引用し掲載する<ref>http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html</ref>。
  
  
'''インタビューア(以下「I」)''':  あなたがソフトウェアデザインの世界を一変させてから何年にもなる。振り返ってみて、感想は。
+
'''インタビューア(以下「I」)''':  あなたが[[ソフトウェアデザイン]]の世界を一変させてから何年にもなる。振り返ってみて、感想は。
  
 
'''Stroustrup(以下「S」)''':  実はあなたがここへ来る直前、当時のことを思い出していたんだ。おぼえているかな。誰もが [[C 言語]]を使っていたけど、問題はみんな結構うまく[[コーディング]]していたことだった。大学も [[C 言語]]を教えるのがうまくなっていたしね。驚異的な割合で有能な――「有能」という言葉は強調しておきたい――卒業生を量産していた。それが問題の原因だったんだ。
 
'''Stroustrup(以下「S」)''':  実はあなたがここへ来る直前、当時のことを思い出していたんだ。おぼえているかな。誰もが [[C 言語]]を使っていたけど、問題はみんな結構うまく[[コーディング]]していたことだった。大学も [[C 言語]]を教えるのがうまくなっていたしね。驚異的な割合で有能な――「有能」という言葉は強調しておきたい――卒業生を量産していた。それが問題の原因だったんだ。
25行目: 25行目:
 
'''I''':  いい時代だったなあ。
 
'''I''':  いい時代だったなあ。
  
'''S''':  うん。で、どうなった? 嫌気がさした [[IBM]] が何百万ドルもつぎ込んで[[プログラマ]]を養成したものだから、COBOL プログラマは「一盛り十円」になってしまった。
+
'''S''':  うん。で、どうなった? 嫌気がさした [[IBM]] が何百万ドルもつぎ込んで[[プログラマ]]を養成したものだから、[[COBOL プログラマ]]は「一盛り十円」になってしまった。
  
 
'''I''':  だから僕は辞めたんだ。たった1年の間に給料が急落して、とうとうジャーナリストの方が給料がよくなったんだ。
 
'''I''':  だから僕は辞めたんだ。たった1年の間に給料が急落して、とうとうジャーナリストの方が給料がよくなったんだ。
  
'''S''':  そのとおりだ。で、当時は C プログラマにも同じことが起こっていたんだ。
+
'''S''':  そのとおりだ。で、当時は [[C プログラマ]]にも同じことが起こっていたんだ。
  
 
'''I''':  なるほど。でも、要するに何が言いたいのかな。
 
'''I''':  なるほど。でも、要するに何が言いたいのかな。
  
'''S''':  ある日、オフィスにいたときに、ある策略を思いついたんだ。バランスを少し回復させる策略をね。「プログラマが余るなんてことが絶対にありえないくらい、複雑でおぼえにくい言語があったらどうなるかな」ってね。実は、この考えの一部は X10――例の X Window の――から頂いたんだ。あれはひどいグラフィックシステムでね、Sun 3/60とかでないと動かなかった。ばかばかしいくらい複雑な構文規則とか、わかりにくい関数とか、疑似オブジェクト指向的な構造とか、僕がほしいと思う要素は全部揃っていたんだよね。今でさえ、生の [[X Window]] コードを書く人間なんていない。正気を保つには [[Motif]] を使うしかないんだ。
+
'''S''':  ある日、オフィスにいたときに、ある策略を思いついたんだ。バランスを少し回復させる策略をね。「[[プログラマ]]が余るなんてことが絶対にありえないくらい、複雑でおぼえにくい[[言語]]があったらどうなるかな」ってね。実は、この考えの一部は [[X10]]――例の [[X Window]] の――から頂いたんだ。あれはひどいグラフィックシステムでね、[[Sun 3/60]]とかでないと動かなかった。ばかばかしいくらい複雑な[[構文規則]]とか、わかりにくい[[関数]]とか、[[疑似オブジェクト指向]]的な構造とか、僕がほしいと思う要素は全部揃っていたんだよね。今でさえ、生の [[X Window]] [[コード]]を書く人間なんていない。正気を保つには [[Motif]] を使うしかないんだ。
  
 
'''I''':  冗談でしょ…。
 
'''I''':  冗談でしょ…。
65行目: 65行目:
 
'''I''':  本当に? じゃあ、それが証拠だ、[[オブジェクト指向]]は使えるわけでしょ。
 
'''I''':  本当に? じゃあ、それが証拠だ、[[オブジェクト指向]]は使えるわけでしょ。
  
'''S''':  使えそうなんだけどね。実行ファイルがあまりに巨大だったんで、128MB の [[RAM]] を積んだ [[HP]] の[[ワークステーション]]で読み込みに5分かかったんだ。読み込んだら、今度は死ぬほど遅い。実を言うと、これで策略は失敗するんじゃないか、1週間で化けの皮がはがれるんじゃないかと心配したんだけど、誰もそんなことを気にしなかったんだね。びっくりするほど強力なマシンを [[Sun]] や [[HP]] が喜んで売ってくれて、その莫大な[[リソース]]を使って大したこともないような[[プログラム]]を実行する、というわけだ。[[AT&T]] で [[C++]] [[コンパイラ]]を初めて作ったとき、[[Hello World]] を[[コンパイル]]してみたんだけど、[[実行ファイル]]は信じられないようなサイズだった。2.1MB だよ。
+
'''S''':  使えそうなんだけどね。実行ファイルがあまりに巨大だったんで、128MB の [[RAM]] を積んだ [[HP]] の[[ワークステーション]]で読み込みに5分かかったんだ。読み込んだら、今度は死ぬほど遅い。実を言うと、これで策略は失敗するんじゃないか、1週間で化けの皮がはがれるんじゃないかと心配したんだけど、誰もそんなことを気にしなかったんだね。びっくりするほど強力な[[マシン]]を [[Sun]] や [[HP]] が喜んで売ってくれて、その莫大な[[リソース]]を使って大したこともないような[[プログラム]]を実行する、というわけだ。[[AT&T]] で [[C++]] [[コンパイラ]]を初めて作ったとき、[[Hello World]] を[[コンパイル]]してみたんだけど、[[実行ファイル]]は信じられないようなサイズだった。2.1MB だよ。
  
 
'''I''':  え? でもまあ、その頃からすれば[[コンパイラ]]も随分進歩してるよね。
 
'''I''':  え? でもまあ、その頃からすれば[[コンパイラ]]も随分進歩してるよね。
  
'''S''':  してるかな。最新バージョンの [[g++]] で試してごらん。0.5MB 程度じゃ何もできない。それに、もっと最近の例も世界中にある。British Telecom はもう少しで大災害にあうところだったんだけど、幸運なことに全部スクラップしてはじめからやり直すことができた。Australian Telecom はそれほど幸運じゃなかった。今だと、Siemens が恐竜のような代物を作っているらしいね。[[実行ファイル]]に合わせて[[ハードウェア]]がどんどん巨大化していくので心配しているらしい。[[多重継承]]って素晴らしいね。
+
'''S''':  してるかな。最新バージョンの [[g++]] で試してごらん。0.5MB 程度じゃ何もできない。それに、もっと最近の例も世界中にある。[[British Telecom]] はもう少しで大災害にあうところだったんだけど、幸運なことに全部スクラップしてはじめからやり直すことができた。[[Australian Telecom]] はそれほど幸運じゃなかった。今だと、[[Siemens]] が恐竜のような代物を作っているらしいね。[[実行ファイル]]に合わせて[[ハードウェア]]がどんどん巨大化していくので心配しているらしい。[[多重継承]]って素晴らしいね。
  
 
'''I''':  うん、でも [[C++]] は基本的にはしっかりした[[言語]]だと思う。
 
'''I''':  うん、でも [[C++]] は基本的にはしっかりした[[言語]]だと思う。
  
'''S''':  それ、本気で信じてるね。実際の [[C++]] プロジェクトの経験はある? どうなるかって言うとね、まず第一に、いろいろワナを仕掛けてあるから、よほど小規模なプロジェクト以外は一発では動かないようになっているんだ。たとえば[[演算子のオーバーロード]]がそうだ。たいていの場合、[[プロジェクト]]の終わり頃にはほとんどの[[モジュール]]で[[演算子をオーバーロード]]している。[[プログラマ]]の連中が、トレーニングコースで教わったとおりにやらなくちゃいけないと思うからだ。つまり、1つの[[演算子]]の持つ意味が、[[モジュール]]によってまったく異なることになる。[[モジュール]]の数が100かそこらあるときに、これをまとめあげようとしたらどうなると思う? [[データ隠蔽]]もあるね。[[モジュール]]間の連繋にどこかの会社が苦労しているなんて話を聞くと、笑いを抑えられないときがあるよ。「[[Synergistic]]」という言葉は、[[プロジェクト管理者]]の胸に刺さったナイフをグリグリ回すためだけに発明されたんじゃないかと思うな。
+
'''S''':  それ、本気で信じてるね。実際の [[C++]] プロジェクトの経験はある? どうなるかって言うとね、まず第一に、いろいろワナを仕掛けてあるから、よほど小規模な[[プロジェクト]]以外は一発では動かないようになっているんだ。たとえば[[演算子のオーバーロード]]がそうだ。たいていの場合、[[プロジェクト]]の終わり頃にはほとんどの[[モジュール]]で[[演算子をオーバーロード]]している。[[プログラマ]]の連中が、トレーニングコースで教わったとおりにやらなくちゃいけないと思うからだ。つまり、1つの[[演算子]]の持つ意味が、[[モジュール]]によってまったく異なることになる。[[モジュール]]の数が100かそこらあるときに、これをまとめあげようとしたらどうなると思う? [[データ隠蔽]]もあるね。[[モジュール]]間の連繋にどこかの会社が苦労しているなんて話を聞くと、笑いを抑えられないときがあるよ。「[[Synergistic]]」という言葉は、[[プロジェクト管理者]]の胸に刺さったナイフをグリグリ回すためだけに発明されたんじゃないかと思うな。
  
 
'''I''':  だんだん呆れてきたと言わざるを得ないな。[[プログラマ]]の給料を上げるためにやったって言ったね? それはひどい話ではないのかな。
 
'''I''':  だんだん呆れてきたと言わざるを得ないな。[[プログラマ]]の給料を上げるためにやったって言ったね? それはひどい話ではないのかな。
85行目: 85行目:
 
'''I''':  うん、もちろん。
 
'''I''':  うん、もちろん。
  
'''S''':  RoofRaised って何だと思って、長い時間をかけて[[ヘッダーファイル]]を調べてみたら、ただの double だった、なんてことがよくあったでしょ。大規模なプロジェクトのすべての[[クラス]]で暗黙の typedef を見つけ出すのにどれくらい時間がかかると思う?
+
'''S''':  RoofRaised って何だと思って、長い時間をかけて[[ヘッダーファイル]]を調べてみたら、ただの [[double]] だった、なんてことがよくあったでしょ。大規模なプロジェクトのすべての[[クラス]]で暗黙の [[typedef]] を見つけ出すのにどれくらい時間がかかると思う?
  
 
'''I''':  策略が成功したと判断する根拠は何かな。
 
'''I''':  策略が成功したと判断する根拠は何かな。
  
'''S''':  平均的な C プロジェクトの長さをおぼえているかな。だいたい6ヵ月だ。家族を抱えた人間がまともな水準の暮らしを維持するには短すぎる。で、同じプロジェクトを C++ でやったらどうなる? 教えてあげよう。1~2年だ。素晴らしいね。たった1つの判断ミスで、安定した仕事が確保されるんだよ。それともう一つ。大学が C を教えなくなってからずいぶんたったから、最近ではまともな C プログラマが不足しているんだ。特に、Unix のシステムプログラミングのわかる人間がね。もうずっと new を使っているものだから、malloc をどう使っていいかわからないし、戻り値もチェックしないんだ。ほとんどの C++ プログラマは戻り値を捨ててしまうんだよ。昔懐かしい -1はどこへ行ったんだろうね。少なくともエラーが発生したことはわかったし、throw だの catch だの try だのに悩むこともなかったんだ。
+
'''S''':  平均的な C プロジェクトの長さをおぼえているかな。だいたい6ヵ月だ。家族を抱えた人間がまともな水準の暮らしを維持するには短すぎる。で、同じプロジェクトを [[C++]] でやったらどうなる? 教えてあげよう。1~2年だ。素晴らしいね。たった1つの判断ミスで、安定した仕事が確保されるんだよ。それともう一つ。大学が [[C]] を教えなくなってからずいぶんたったから、最近ではまともな [[C プログラマ]]が不足しているんだ。特に、[[Unix]] の[[システムプログラミング]]のわかる人間がね。もうずっと [[new]] を使っているものだから、[[malloc]] をどう使っていいかわからないし、[[戻り値]]もチェックしないんだ。ほとんどの [[C++ プログラマ]]は[[戻り値]]を捨ててしまうんだよ。昔懐かしい -1はどこへ行ったんだろうね。少なくとも[[エラー]]が発生したことはわかったし、[[throw]] だの [[catch]] だの [[try]] だのに悩むこともなかったんだ。
  
'''I''':  でも、継承が時間の節約になるのは確かでしょ。
+
'''I''':  でも、[[継承]]が時間の節約になるのは確かでしょ。
  
'''S''':  そうかな。C プロジェクトと C++ プロジェクトの計画立案の違いに気がついたことはある? C++ プロジェクトの方が、計画に3倍時間がかかるんだ。継承するべきものはして、そうでないものは継承しないようにするために、それだけの時間をかけて調べる必要があるんだ。それでも間違う。C プログラムで[[メモリリーク]]なんて聞いたことがあるだろうか。今では、[[メモリリーク]]の発見が大産業になってしまった。全部見つけるのは費用がかかりすぎるから、たいていの会社はあきらめて、山ほど[[リーク]]のある[[プログラム]]を出荷してしまう。
+
'''S''':  そうかな。C プロジェクトと C++ プロジェクトの計画立案の違いに気がついたことはある? C++ プロジェクトの方が、計画に3倍時間がかかるんだ。[[継承]]するべきものはして、そうでないものは継承しないようにするために、それだけの時間をかけて調べる必要があるんだ。それでも間違う。C プログラムで[[メモリリーク]]なんて聞いたことがあるだろうか。今では、[[メモリリーク]]の発見が大産業になってしまった。全部見つけるのは費用がかかりすぎるから、たいていの会社はあきらめて、山ほど[[リーク]]のある[[プログラム]]を出荷してしまう。
  
 
'''I''':  [[ツール]]はあるけど…。
 
'''I''':  [[ツール]]はあるけど…。
101行目: 101行目:
 
'''I''':  このインタビューを公表したら、あなたは多分リンチにあう。それはわかってるね?
 
'''I''':  このインタビューを公表したら、あなたは多分リンチにあう。それはわかってるね?
  
'''S''':  どうかな。さっき言ったように、[[C++]] は既にピークを過ぎているし、まともな会社ならテストプロジェクトもなしで C++ プロジェクトを開始したりはしない。テストをすれば、ひどい目にあいそうだということはわかるはずだ。わからないなら、ひどい目にあって然るべきなんだよ。実はね、昔 [[Dennis Ritchie]] に [[C++]] で [[Unix]] を書き直さないかって持ちかけたことがあるんだ。
+
'''S''':  どうかな。さっき言ったように、[[C++]] は既にピークを過ぎているし、まともな会社なら[[テストプロジェクト]]もなしで C++ プロジェクトを開始したりはしない。[[テスト]]をすれば、ひどい目にあいそうだということはわかるはずだ。わからないなら、ひどい目にあって然るべきなんだよ。実はね、昔 [[Dennis Ritchie]] に [[C++]] で [[Unix]] を書き直さないかって持ちかけたことがあるんだ。
  
 
'''I''':  Oh my God。で、返事は?
 
'''I''':  Oh my God。で、返事は?
109行目: 109行目:
 
'''I''':  興味はあった?
 
'''I''':  興味はあった?
  
'''S''':  [[C++]] バージョンの [[DOS]] は実際に作ったんだ。終わったらデモをあげるよ。コンピュータ室の [[SPARC 20]]で動いてるよ。4 [[CPU]] だとウソみたいに速いし、[[ディスク]]も70MB しか食わないんだ。
+
'''S''':  [[C++]] バージョンの [[DOS]] は実際に作ったんだ。終わったらデモをあげるよ。[[コンピュータ室]]の [[SPARC 20]]で動いてるよ。4 [[CPU]] だとウソみたいに速いし、[[ディスク]]も70MB しか食わないんだ。
  
 
'''I''':  [[PC]] だとどうなのかな。
 
'''I''':  [[PC]] だとどうなのかな。
115行目: 115行目:
 
'''S''':  それは冗談でしょ。[[Windows 95]]を見たことがないの? あれは僕の最大の成功だと思っている。もう少しでバレるかと思ったけどね。
 
'''S''':  それは冗談でしょ。[[Windows 95]]を見たことがないの? あれは僕の最大の成功だと思っている。もう少しでバレるかと思ったけどね。
  
'''I''':  さっき聞いた Unix++ の話が気になるんだ。どこかの誰かが絶対にやろうとするよ。
+
'''I''':  さっき聞いた [[Unix++]] の話が気になるんだ。どこかの誰かが絶対にやろうとするよ。
  
 
'''S''':  このインタビューを読んだらあきらめるさ。
 
'''S''':  このインタビューを読んだらあきらめるさ。
121行目: 121行目:
 
'''I''':  悪いけど、これはとても掲載できないと思う。
 
'''I''':  悪いけど、これはとても掲載できないと思う。
  
'''S''':  でもこれは世紀の大スクープだよ。僕はただ、ほかの[[プログラマ]]に忘れられたくないんだ。彼らのために僕がしたことをね。C++ プログラマの最近の給料は知ってる?
+
'''S''':  でもこれは世紀の大スクープだよ。僕はただ、ほかの[[プログラマ]]に忘れられたくないんだ。彼らのために僕がしたことをね。[[C++ プログラマ]]の最近の給料は知ってる?
  
 
'''I''':  最後に聞いたところでは、本当に有能な人間の場合、1時間あたり70~80ドルだ。
 
'''I''':  最後に聞いたところでは、本当に有能な人間の場合、1時間あたり70~80ドルだ。
  
'''S''':  ほらね。で、給料分の仕事はしているはずなんだ。僕が [[C++]] に仕掛けたワナを全部おぼえておくのは並大抵のことではないんだよ。それに、さっきも言ったように、C++ プログラマというものはね、どういうわけか、どんなプロジェクトであろうと C++ のあらゆる要素を片っ端から使わなきゃいけないと信じ込んでいるんだ。実を言うと、時々頭に来ることもあるくらいだ――僕の本来の目的にはかなうことなんだけれどね。これだけ長くやってきたから、C++ を好きになりかけているんだ。
+
'''S''':  ほらね。で、給料分の仕事はしているはずなんだ。僕が [[C++]] に仕掛けたワナを全部おぼえておくのは並大抵のことではないんだよ。それに、さっきも言ったように、[[C++ プログラマ]]というものはね、どういうわけか、どんな[[プロジェクト]]であろうと [[C++]] のあらゆる要素を片っ端から使わなきゃいけないと信じ込んでいるんだ。実を言うと、時々頭に来ることもあるくらいだ――僕の本来の目的にはかなうことなんだけれどね。これだけ長くやってきたから、[[C++]] を好きになりかけているんだ。
  
 
'''I''':  以前は違った?
 
'''I''':  以前は違った?
  
'''S''':  嫌いだった。見た目すら悪いでしょ? でも、本の印税が入り出してからは…。まあ、言いたいことはわかるよね。
+
'''S''':  嫌いだった。見た目すら悪いでしょ? でも、本の[[印税]]が入り出してからは…。まあ、言いたいことはわかるよね。
  
'''I''':  ちょっと待った。[[参照]]は? C の[[ポインタ]]よりは優れていると認めるでしょ。
+
'''I''':  ちょっと待った。[[参照]]は? [[C]] の[[ポインタ]]よりは優れていると認めるでしょ。
  
'''S''':  うーん。それについてはね、どうなのかなとずっと思っていたんだ。最初は C より優れていると思ったんだ。でもね、その後、[[C++]] で[[プログラミング]]を始めたという人間と、このことについて話す機会があった。彼が言うには、[[変数]]を参照しているのか[[逆参照]]しているのかがいつもわからなくなる、だから必ず[[ポインタ]]を使う。アスタリスクが思い出させてくれるから、と言うんだ。
+
'''S''':  うーん。それについてはね、どうなのかなとずっと思っていたんだ。最初は [[C]] より優れていると思ったんだ。でもね、その後、[[C++]] で[[プログラミング]]を始めたという人間と、このことについて話す機会があった。彼が言うには、[[変数]]を参照しているのか[[逆参照]]しているのかがいつもわからなくなる、だから必ず[[ポインタ]]を使う。[[アスタリスク]]が思い出させてくれるから、と言うんだ。
  
 
'''I''':  やれやれ、普段ならここで「どうもありがとうございました」なんだけど、今回はちょっと当てはまらないな。
 
'''I''':  やれやれ、普段ならここで「どうもありがとうございました」なんだけど、今回はちょっと当てはまらないな。
141行目: 141行目:
 
'''I''':  決まったら知らせるけど、編集長がどう言うかはわかるような気がするな。
 
'''I''':  決まったら知らせるけど、編集長がどう言うかはわかるような気がするな。
  
'''S''':  どうせ誰も信じないさ。でもまあ、そのテープだけはコピーをくれないかな。
+
'''S''':  どうせ誰も信じないさ。でもまあ、その[[テープ]]だけは[[コピー]]をくれないかな。
  
 
'''I''':  それならできるよ。
 
'''I''':  それならできるよ。
150行目: 150行目:
 
* [[オブジェクト指向プログラミング]]
 
* [[オブジェクト指向プログラミング]]
 
* [[オブジェクト指向プログラミング言語]]
 
* [[オブジェクト指向プログラミング言語]]
 +
* [[ オブジェクト指向は愚かな考え。排便メソッドを実装した人間クラスから美少女クラスが作れない。]]
 +
* [[不完全にしておよそ正しくないプログラミング言語小史]]
 +
* [[BSD入門の心得]]
 +
* [[IT土方]]
 +
** [[プログラマー]]
 +
** [[システムエンジニア]]
  
 
== 参考文献 ==
 
== 参考文献 ==

2014年10月6日 (月) 07:51時点における最新版

Bjarne Stroustrup インタビューとは、C++およびオブジェクト指向プログラミングを皮肉った世界的に有名な怪文書・ジョーク文書である。

その題名からも分かるように、C++の開発者であるビャーネ・ストロヴストルップが、Computer誌(IEEEが発行する学術誌)の下っ端編集者のインタビューに答えるという内容だが、その内容に非常に問題があるため、実際には掲載されなかった。それがどこからかリークされた。という形式になっている。

原文はUsenetニュースグループ「rec.games.roguelike.angband」への投稿記事だとされている[1]

このジョーク文書は実際にビャーネ・ストロヴストルップが読んだらしく、その反論が「IEEE Computer "Open Channel" Interview with Bjarne Stroustrup」という題名でウェブ上にて公開されている[2]

翻訳[編集 | ソースを編集]

この怪文書の日本語訳は様々な人々により行われ公開されているが、長村洋文氏による翻訳が個人的に一番読みやすかったので、それを用語解説のために引用し掲載する[3]


インタビューア(以下「I」): あなたがソフトウェアデザインの世界を一変させてから何年にもなる。振り返ってみて、感想は。

Stroustrup(以下「S」): 実はあなたがここへ来る直前、当時のことを思い出していたんだ。おぼえているかな。誰もが C 言語を使っていたけど、問題はみんな結構うまくコーディングしていたことだった。大学も C 言語を教えるのがうまくなっていたしね。驚異的な割合で有能な――「有能」という言葉は強調しておきたい――卒業生を量産していた。それが問題の原因だったんだ。

I: 問題?

S: そう、問題だったんだ。誰もが COBOL を使っていた頃のことはおぼえてる?

I: もちろん。僕もそうだった。

S: はじめの頃、COBOL ができる人間は神のような存在だった。給料も高かったし、王侯貴族のような扱いだった。

I: いい時代だったなあ。

S: うん。で、どうなった? 嫌気がさした IBM が何百万ドルもつぎ込んでプログラマを養成したものだから、COBOL プログラマは「一盛り十円」になってしまった。

I: だから僕は辞めたんだ。たった1年の間に給料が急落して、とうとうジャーナリストの方が給料がよくなったんだ。

S: そのとおりだ。で、当時は C プログラマにも同じことが起こっていたんだ。

I: なるほど。でも、要するに何が言いたいのかな。

S: ある日、オフィスにいたときに、ある策略を思いついたんだ。バランスを少し回復させる策略をね。「プログラマが余るなんてことが絶対にありえないくらい、複雑でおぼえにくい言語があったらどうなるかな」ってね。実は、この考えの一部は X10――例の X Window の――から頂いたんだ。あれはひどいグラフィックシステムでね、Sun 3/60とかでないと動かなかった。ばかばかしいくらい複雑な構文規則とか、わかりにくい関数とか、疑似オブジェクト指向的な構造とか、僕がほしいと思う要素は全部揃っていたんだよね。今でさえ、生の X Window コードを書く人間なんていない。正気を保つには Motif を使うしかないんだ。

I: 冗談でしょ…。

S: 全然。実を言うと、問題はほかにもあったんだ。UnixC で書かれているので、C プログラマなら誰でもシステムプログラマになれるんだ。汎用機システムプログラマが昔いくら給料をもらっていたか知ってる?

I: もちろんだよ、だって昔は僕もその一人だったから。

S: OK。つまり、この新しい言語は Unix と切り離す必要があったんだ。UnixC を結び付けているシステムコールを全部隠蔽してね。そうすれば、DOS しか知らないプログラマでもまともな生活ができるでしょ。

I: あなたがこんなことを言うとはとても信じられない…。

S: もうかなり時間がたったしね、C++ が時間の無駄だということにはほとんどの人が気がついたとは思うけど、でも当初予想していたよりはずいぶん時間がかかったな。

I: 具体的に何をどうやったのかな。

S: 最初はほんの冗談のつもりでね、みんながあの本を真に受けるとは思ってもみなかったんだ。脳みそが半分でもあれば、オブジェクト指向プログラミングが非直感的で、非論理的で、非効率なことくらいはわかるよね。

I: え?

S: それに「コードの再利用性」ときたら…。どこかの会社がコードを再利用したなんて話を聞いたことがある?

I: いや、実はないんだけども、でも…。

S: ほらね。言っておくけど、はじめの頃、努力した連中がいなかったわけではないんだ。オレゴン州の会社――確か Mentor Graphics という名前だった――が、90年か91年頃に何もかも C++ で書き直そうとしてひどい目にあったんだ。悪いなとは思ったけど、彼らの間違いを見ればみんな気がつくだろうと思ったんだ。

I: でも気づかなかった、というわけだね。

S: まるっきりね。問題はね、たいていの会社は大失敗を隠そうとするし、3000万ドルもの損失を株主に説明するのは至難の業だということだ。でも彼らが偉いのは、最終的にはなんとか動いたということだね。

I: 本当に? じゃあ、それが証拠だ、オブジェクト指向は使えるわけでしょ。

S: 使えそうなんだけどね。実行ファイルがあまりに巨大だったんで、128MB の RAM を積んだ HPワークステーションで読み込みに5分かかったんだ。読み込んだら、今度は死ぬほど遅い。実を言うと、これで策略は失敗するんじゃないか、1週間で化けの皮がはがれるんじゃないかと心配したんだけど、誰もそんなことを気にしなかったんだね。びっくりするほど強力なマシンSunHP が喜んで売ってくれて、その莫大なリソースを使って大したこともないようなプログラムを実行する、というわけだ。AT&TC++ コンパイラを初めて作ったとき、Hello Worldコンパイルしてみたんだけど、実行ファイルは信じられないようなサイズだった。2.1MB だよ。

I: え? でもまあ、その頃からすればコンパイラも随分進歩してるよね。

S: してるかな。最新バージョンの g++ で試してごらん。0.5MB 程度じゃ何もできない。それに、もっと最近の例も世界中にある。British Telecom はもう少しで大災害にあうところだったんだけど、幸運なことに全部スクラップしてはじめからやり直すことができた。Australian Telecom はそれほど幸運じゃなかった。今だと、Siemens が恐竜のような代物を作っているらしいね。実行ファイルに合わせてハードウェアがどんどん巨大化していくので心配しているらしい。多重継承って素晴らしいね。

I: うん、でも C++ は基本的にはしっかりした言語だと思う。

S: それ、本気で信じてるね。実際の C++ プロジェクトの経験はある? どうなるかって言うとね、まず第一に、いろいろワナを仕掛けてあるから、よほど小規模なプロジェクト以外は一発では動かないようになっているんだ。たとえば演算子のオーバーロードがそうだ。たいていの場合、プロジェクトの終わり頃にはほとんどのモジュール演算子をオーバーロードしている。プログラマの連中が、トレーニングコースで教わったとおりにやらなくちゃいけないと思うからだ。つまり、1つの演算子の持つ意味が、モジュールによってまったく異なることになる。モジュールの数が100かそこらあるときに、これをまとめあげようとしたらどうなると思う? データ隠蔽もあるね。モジュール間の連繋にどこかの会社が苦労しているなんて話を聞くと、笑いを抑えられないときがあるよ。「Synergistic」という言葉は、プロジェクト管理者の胸に刺さったナイフをグリグリ回すためだけに発明されたんじゃないかと思うな。

I: だんだん呆れてきたと言わざるを得ないな。プログラマの給料を上げるためにやったって言ったね? それはひどい話ではないのかな。

S: そうでもない。選択の自由は誰にでもある。こんなに話が膨らむとは思わなかったんだ。ま、いずれにしても、基本的に僕の策略は成功したんだ。C++ は今や消え去りかけているけど、でもプログラマの給料は高いままだ。特に、糞みたいな C++ コードメンテナンスしなきゃならない哀れな連中はね。大規模な C++ モジュールなんて、自分で書いたのでない限りメンテナンスできないことは理解してる?

I: どうして?

S: 現場から離れて長いんだな。typedef はわかるよね。

I: うん、もちろん。

S: RoofRaised って何だと思って、長い時間をかけてヘッダーファイルを調べてみたら、ただの double だった、なんてことがよくあったでしょ。大規模なプロジェクトのすべてのクラスで暗黙の typedef を見つけ出すのにどれくらい時間がかかると思う?

I: 策略が成功したと判断する根拠は何かな。

S: 平均的な C プロジェクトの長さをおぼえているかな。だいたい6ヵ月だ。家族を抱えた人間がまともな水準の暮らしを維持するには短すぎる。で、同じプロジェクトを C++ でやったらどうなる? 教えてあげよう。1~2年だ。素晴らしいね。たった1つの判断ミスで、安定した仕事が確保されるんだよ。それともう一つ。大学が C を教えなくなってからずいぶんたったから、最近ではまともな C プログラマが不足しているんだ。特に、Unixシステムプログラミングのわかる人間がね。もうずっと new を使っているものだから、malloc をどう使っていいかわからないし、戻り値もチェックしないんだ。ほとんどの C++ プログラマ戻り値を捨ててしまうんだよ。昔懐かしい -1はどこへ行ったんだろうね。少なくともエラーが発生したことはわかったし、throw だの catch だの try だのに悩むこともなかったんだ。

I: でも、継承が時間の節約になるのは確かでしょ。

S: そうかな。C プロジェクトと C++ プロジェクトの計画立案の違いに気がついたことはある? C++ プロジェクトの方が、計画に3倍時間がかかるんだ。継承するべきものはして、そうでないものは継承しないようにするために、それだけの時間をかけて調べる必要があるんだ。それでも間違う。C プログラムでメモリリークなんて聞いたことがあるだろうか。今では、メモリリークの発見が大産業になってしまった。全部見つけるのは費用がかかりすぎるから、たいていの会社はあきらめて、山ほどリークのあるプログラムを出荷してしまう。

Iツールはあるけど…。

S: そのツールも、ほとんどは C++ で書かれているんだよ。

I: このインタビューを公表したら、あなたは多分リンチにあう。それはわかってるね?

S: どうかな。さっき言ったように、C++ は既にピークを過ぎているし、まともな会社ならテストプロジェクトもなしで C++ プロジェクトを開始したりはしない。テストをすれば、ひどい目にあいそうだということはわかるはずだ。わからないなら、ひどい目にあって然るべきなんだよ。実はね、昔 Dennis RitchieC++Unix を書き直さないかって持ちかけたことがあるんだ。

I: Oh my God。で、返事は?

S: 幸運なことに、彼はユーモアのセンスがあってね。彼にしても、Brian にしても、早い時期に僕のたくらみに気づいたと思うんだけど、でも誰にも言わなかったんだ。僕に興味があるなら C++DOS を書くのを手伝ってやるって言ってくれたよ。

I: 興味はあった?

SC++ バージョンの DOS は実際に作ったんだ。終わったらデモをあげるよ。コンピュータ室SPARC 20で動いてるよ。4 CPU だとウソみたいに速いし、ディスクも70MB しか食わないんだ。

IPC だとどうなのかな。

S: それは冗談でしょ。Windows 95を見たことがないの? あれは僕の最大の成功だと思っている。もう少しでバレるかと思ったけどね。

I: さっき聞いた Unix++ の話が気になるんだ。どこかの誰かが絶対にやろうとするよ。

S: このインタビューを読んだらあきらめるさ。

I: 悪いけど、これはとても掲載できないと思う。

S: でもこれは世紀の大スクープだよ。僕はただ、ほかのプログラマに忘れられたくないんだ。彼らのために僕がしたことをね。C++ プログラマの最近の給料は知ってる?

I: 最後に聞いたところでは、本当に有能な人間の場合、1時間あたり70~80ドルだ。

S: ほらね。で、給料分の仕事はしているはずなんだ。僕が C++ に仕掛けたワナを全部おぼえておくのは並大抵のことではないんだよ。それに、さっきも言ったように、C++ プログラマというものはね、どういうわけか、どんなプロジェクトであろうと C++ のあらゆる要素を片っ端から使わなきゃいけないと信じ込んでいるんだ。実を言うと、時々頭に来ることもあるくらいだ――僕の本来の目的にはかなうことなんだけれどね。これだけ長くやってきたから、C++ を好きになりかけているんだ。

I: 以前は違った?

S: 嫌いだった。見た目すら悪いでしょ? でも、本の印税が入り出してからは…。まあ、言いたいことはわかるよね。

I: ちょっと待った。参照は? Cポインタよりは優れていると認めるでしょ。

S: うーん。それについてはね、どうなのかなとずっと思っていたんだ。最初は C より優れていると思ったんだ。でもね、その後、C++プログラミングを始めたという人間と、このことについて話す機会があった。彼が言うには、変数を参照しているのか逆参照しているのかがいつもわからなくなる、だから必ずポインタを使う。アスタリスクが思い出させてくれるから、と言うんだ。

I: やれやれ、普段ならここで「どうもありがとうございました」なんだけど、今回はちょっと当てはまらないな。

S: 必ず掲載すると約束してほしい。最近は良心の呵責に悩まされているんだ。

I: 決まったら知らせるけど、編集長がどう言うかはわかるような気がするな。

S: どうせ誰も信じないさ。でもまあ、そのテープだけはコピーをくれないかな。

I: それならできるよ。

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]

外部リンク[編集 | ソースを編集]