「Bjarne Stroustrup インタビュー」の版間の差分
imported>Administrator |
imported>GamerBook |
||
| 11行目: | 11行目: | ||
'''インタビューア(以下「I」)''': | '''インタビューア(以下「I」)''': あなたが[[ソフトウェアデザイン]]の世界を一変させてから何年にもなる。振り返ってみて、感想は。 | ||
'''Stroustrup(以下「S」)''': 実はあなたがここへ来る直前、当時のことを思い出していたんだ。おぼえているかな。誰もが [[C 言語]]を使っていたけど、問題はみんな結構うまく[[コーディング]]していたことだった。大学も [[C 言語]]を教えるのがうまくなっていたしね。驚異的な割合で有能な――「有能」という言葉は強調しておきたい――卒業生を量産していた。それが問題の原因だったんだ。 | '''Stroustrup(以下「S」)''': 実はあなたがここへ来る直前、当時のことを思い出していたんだ。おぼえているかな。誰もが [[C 言語]]を使っていたけど、問題はみんな結構うまく[[コーディング]]していたことだった。大学も [[C 言語]]を教えるのがうまくなっていたしね。驚異的な割合で有能な――「有能」という言葉は強調しておきたい――卒業生を量産していた。それが問題の原因だったんだ。 | ||
| 25行目: | 25行目: | ||
'''I''': いい時代だったなあ。 | '''I''': いい時代だったなあ。 | ||
'''S''': うん。で、どうなった? 嫌気がさした [[IBM]] が何百万ドルもつぎ込んで[[プログラマ]] | '''S''': うん。で、どうなった? 嫌気がさした [[IBM]] が何百万ドルもつぎ込んで[[プログラマ]]を養成したものだから、[[COBOL プログラマ]]は「一盛り十円」になってしまった。 | ||
'''I''': だから僕は辞めたんだ。たった1年の間に給料が急落して、とうとうジャーナリストの方が給料がよくなったんだ。 | '''I''': だから僕は辞めたんだ。たった1年の間に給料が急落して、とうとうジャーナリストの方が給料がよくなったんだ。 | ||
'''S''': そのとおりだ。で、当時は C | '''S''': そのとおりだ。で、当時は [[C プログラマ]]にも同じことが起こっていたんだ。 | ||
'''I''': なるほど。でも、要するに何が言いたいのかな。 | '''I''': なるほど。でも、要するに何が言いたいのかな。 | ||
'''S''': ある日、オフィスにいたときに、ある策略を思いついたんだ。バランスを少し回復させる策略をね。「プログラマが余るなんてことが絶対にありえないくらい、複雑でおぼえにくい言語があったらどうなるかな」ってね。実は、この考えの一部は | '''S''': ある日、オフィスにいたときに、ある策略を思いついたんだ。バランスを少し回復させる策略をね。「プログラマが余るなんてことが絶対にありえないくらい、複雑でおぼえにくい言語があったらどうなるかな」ってね。実は、この考えの一部は [[X10]]――例の [[X Window]] の――から頂いたんだ。あれはひどいグラフィックシステムでね、[[Sun 3/60]]とかでないと動かなかった。ばかばかしいくらい複雑な[[構文規則]]とか、わかりにくい[[関数]]とか、[[疑似オブジェクト指向]]的な構造とか、僕がほしいと思う要素は全部揃っていたんだよね。今でさえ、生の [[X Window]] [[コード]]を書く人間なんていない。正気を保つには [[Motif]] を使うしかないんだ。 | ||
'''I''': 冗談でしょ…。 | '''I''': 冗談でしょ…。 | ||
| 65行目: | 65行目: | ||
'''I''': 本当に? じゃあ、それが証拠だ、[[オブジェクト指向]]は使えるわけでしょ。 | '''I''': 本当に? じゃあ、それが証拠だ、[[オブジェクト指向]]は使えるわけでしょ。 | ||
'''S''': 使えそうなんだけどね。実行ファイルがあまりに巨大だったんで、128MB の [[RAM]] を積んだ [[HP]] の[[ワークステーション]] | '''S''': 使えそうなんだけどね。実行ファイルがあまりに巨大だったんで、128MB の [[RAM]] を積んだ [[HP]] の[[ワークステーション]]で読み込みに5分かかったんだ。読み込んだら、今度は死ぬほど遅い。実を言うと、これで策略は失敗するんじゃないか、1週間で化けの皮がはがれるんじゃないかと心配したんだけど、誰もそんなことを気にしなかったんだね。びっくりするほど強力な[[マシン]]を [[Sun]] や [[HP]] が喜んで売ってくれて、その莫大な[[リソース]]を使って大したこともないような[[プログラム]]を実行する、というわけだ。[[AT&T]] で [[C++]] [[コンパイラ]]を初めて作ったとき、[[Hello World]] を[[コンパイル]]してみたんだけど、[[実行ファイル]]は信じられないようなサイズだった。2.1MB だよ。 | ||
'''I''': え? でもまあ、その頃からすれば[[コンパイラ]]も随分進歩してるよね。 | '''I''': え? でもまあ、その頃からすれば[[コンパイラ]]も随分進歩してるよね。 | ||
'''S''': してるかな。最新バージョンの [[g++]] で試してごらん。0.5MB | '''S''': してるかな。最新バージョンの [[g++]] で試してごらん。0.5MB 程度じゃ何もできない。それに、もっと最近の例も世界中にある。[[British Telecom]] はもう少しで大災害にあうところだったんだけど、幸運なことに全部スクラップしてはじめからやり直すことができた。[[Australian Telecom]] はそれほど幸運じゃなかった。今だと、[[Siemens]] が恐竜のような代物を作っているらしいね。[[実行ファイル]]に合わせて[[ハードウェア]]がどんどん巨大化していくので心配しているらしい。[[多重継承]]って素晴らしいね。 | ||
'''I''': うん、でも [[C++]] は基本的にはしっかりした[[言語]]だと思う。 | '''I''': うん、でも [[C++]] は基本的にはしっかりした[[言語]]だと思う。 | ||
'''S''': それ、本気で信じてるね。実際の [[C++]] プロジェクトの経験はある? | '''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 | '''S''': 平均的な C プロジェクトの長さをおぼえているかな。だいたい6ヵ月だ。家族を抱えた人間がまともな水準の暮らしを維持するには短すぎる。で、同じプロジェクトを [[C++]] でやったらどうなる? 教えてあげよう。1~2年だ。素晴らしいね。たった1つの判断ミスで、安定した仕事が確保されるんだよ。それともう一つ。大学が [[C]] を教えなくなってからずいぶんたったから、最近ではまともな [[C プログラマ]]が不足しているんだ。特に、[[Unix]] の[[システムプログラミング]]のわかる人間がね。もうずっと [[new]] を使っているものだから、[[malloc]] をどう使っていいかわからないし、[[戻り値]]もチェックしないんだ。ほとんどの [[C++ プログラマ]]は[[戻り値]]を捨ててしまうんだよ。昔懐かしい -1はどこへ行ったんだろうね。少なくとも[[エラー]]が発生したことはわかったし、[[throw]] だの [[catch]] だの [[try]] だのに悩むこともなかったんだ。 | ||
'''I''': | '''I''': でも、[[継承]]が時間の節約になるのは確かでしょ。 | ||
'''S''': そうかな。C プロジェクトと C++ プロジェクトの計画立案の違いに気がついたことはある? C++ | '''S''': そうかな。C プロジェクトと C++ プロジェクトの計画立案の違いに気がついたことはある? C++ プロジェクトの方が、計画に3倍時間がかかるんだ。[[継承]]するべきものはして、そうでないものは継承しないようにするために、それだけの時間をかけて調べる必要があるんだ。それでも間違う。C プログラムで[[メモリリーク]]なんて聞いたことがあるだろうか。今では、[[メモリリーク]]の発見が大産業になってしまった。全部見つけるのは費用がかかりすぎるから、たいていの会社はあきらめて、山ほど[[リーク]]のある[[プログラム]]を出荷してしまう。 | ||
'''I''': [[ツール]]はあるけど…。 | '''I''': [[ツール]]はあるけど…。 | ||
| 101行目: | 101行目: | ||
'''I''': このインタビューを公表したら、あなたは多分リンチにあう。それはわかってるね? | '''I''': このインタビューを公表したら、あなたは多分リンチにあう。それはわかってるね? | ||
'''S''': どうかな。さっき言ったように、[[C++]] | '''S''': どうかな。さっき言ったように、[[C++]] は既にピークを過ぎているし、まともな会社なら[[テストプロジェクト]]もなしで C++ プロジェクトを開始したりはしない。[[テスト]]をすれば、ひどい目にあいそうだということはわかるはずだ。わからないなら、ひどい目にあって然るべきなんだよ。実はね、昔 [[Dennis Ritchie]] に [[C++]] で [[Unix]] を書き直さないかって持ちかけたことがあるんだ。 | ||
'''I''': Oh my God。で、返事は? | '''I''': Oh my God。で、返事は? | ||
| 109行目: | 109行目: | ||
'''I''': 興味はあった? | '''I''': 興味はあった? | ||
'''S''': [[C++]] バージョンの [[DOS]] | '''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''': でもこれは世紀の大スクープだよ。僕はただ、ほかの[[プログラマ]] | '''S''': でもこれは世紀の大スクープだよ。僕はただ、ほかの[[プログラマ]]に忘れられたくないんだ。彼らのために僕がしたことをね。[[C++ プログラマ]]の最近の給料は知ってる? | ||
'''I''': 最後に聞いたところでは、本当に有能な人間の場合、1時間あたり70~80ドルだ。 | '''I''': 最後に聞いたところでは、本当に有能な人間の場合、1時間あたり70~80ドルだ。 | ||
'''S''': ほらね。で、給料分の仕事はしているはずなんだ。僕が [[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''': それならできるよ。 | ||