blog

C++ API設計の第一人者マーティン・レディ:最適な言語を選択する

マーティン・レディ博士は、SRIでの5年間を含む15年以上の経験を持つソフトウェア業界のベテランで、Web上で3D地理空間情報モデルを記述するためのISO標準を作成し、Web3D協会の会長に2年連続で...

Jan 28, 2015 · 6 min. read
シェア

SRIインターナショナルに5年間在籍し、Web上で3D地理空間情報モデルを記述するためのISO規格を作成し、Web3Dアソシエーションのプレジデントに2年連続で選出されるなど、ソフトウェア業界で15年以上の経験を持つベテランです。ピクサー・アニメーション・スタジオでは、社内アニメーション・システムのリード・エンジニアとして6年間勤務し、『ファインディング・ニモ』、『インクレディブル』、『カーズ』、『ラタトゥイユ』、『ロボテック』など、アカデミー賞受賞作やノミネート作の制作に重要な役割を果たしたAPIを開発しました。マーティン・レディは『インクレディブル』でスーパーマンの父親の頭を借りたと言われています。

また、さまざまなソフトウェア会社に技術的アドバイスを提供するコンサルティング会社Code Reddyを立ち上げ、大規模なオンライン3D仮想世界Second LifeのAPIを設計し、基本アーキテクチャを改善しました。マーティン・レディは現在、ToyTalkのCTO。現在、ToyTalkのCTOを務め、同社初の製品リリースに向けて多忙な日々を送っています。

御社の新製品は音声認識と人工知能技術に基づいていますが、音声認識と人工知能は将来の主要な方向性の1つになると思いますか?

レディ:ありがとうございます!数年前にSiriが登場して以来、音声を入力メカニズムとして使うアプリやデバイスが増えてきました。電話やテレビの操作からゲームのコントロールまで。私は、コンピューターとコミュニケーションを取る方法は、お互いにコミュニケーションを取る方法と同じであるべきだと思います。ですから、音声認識技術が飛躍的に進歩し、自然言語処理と人工知能の進歩によって、相手の言葉をよりよく理解し、適切な応答ができるようになると予想しています。

記者:あなたは以前、世界をリードするピクサー・アニメーション・スタジオで働いていましたね。その成功は創造性によるものですか、それとも技術的な優位性によるものですか?

レディ:基本的なレベルでは、ピクサーの成功は創造的なストーリーテリングに起因しています。複雑なストーリーライン、好感の持てるキャラクター、ウィットに富んだセリフは、レイトレースされた反射や新しい表面下散乱アルゴリズムではなく、観客を映画に夢中にさせます。しかし、ピクサーをユニークにしているのは、優れたストーリーテリングと優れた3D映像を組み合わせる能力です。ジョン・ラセターが言ったように、"アートはテクノロジーに挑戦し、テクノロジーはアートを刺激する"。

記者C++以外に好きな言語はありますか?どんなツールが好きですか?

レポーター C++の応用分野はますます小さくなっていますが、今後の発展はどうなると思いますか?C++の進化の方向性はどのようなものですか?

記者新しいC++標準についてどう思われますか?APIの設計に影響はありますか?既存のライブラリはどのように最新の状態に保たれるのでしょうか?

Reddy: C++11では、C++に多くの素晴らしい機能強化が施されています。API設計の面では、タプル、無名関数、スレッド・プリミティブ、スマート・ポインタ、まったく新しい書き換えや最終キーワードなど、APIで使用できる新機能がたくさんあります。もちろん、C++11コンパイラを使用できない顧客がAPIを使用する必要がある場合は、C++03構文を維持するか、C++11顧客用のAPIラッパーを提供する必要があります。

レポーター C++のACEフレームワークはかなり複雑ですが、ACEは昔は分散フレームワークとして選ばれていました。現在では、選択できる技術がかなり多くなっていますが、分散アプリケーションを構築するのに、複雑なC++を使う利点はまだあるのでしょうか?もっと使いやすいC++のウェブ・テクノロジー・フレームワークはありますか?

Reddy:ACEのことはよく知らないのですが、Boost Asio、cpp-netlib、Qtのネットワーク・アクセスAPIなど、基盤となるネットワーク・フレームワークがいくつかあります。

記者新しく設計されたシステムAPIは、初期のバージョンは、しばしば機能を追加するために "熱狂 "に陥るが、安定期にしばしばアップグレード時に振り払うことができない負担となり、さらに初期のバグが "機能 "をサポートし続けることを余儀なくされます。初期のバグでさえ、継続的にサポートしなければならない「機能」になるのです。APIの最初のバージョンを設計するとき、表現力、使いやすさ、互換性のバランスをどのように取りますか?

Reddy:これはAPI設計の最も重要な部分の1つです。ひとつだけ正しいことがあります。APIの以前のバージョンで登場したすべての機能は、APIのライフサイクルを通じて継続的にサポートされなければなりません。私は、本当に必要なもの以外はインターフェイスに何も追加しないというアプローチを支持します。今は役に立たなくても、将来役に立つかもしれないと思われるものは追加しないでください。核となる問題に集中しましょう。

記者 Go言語の人気が高まっていますが、C/C++に取って代わることを意図しているこの言語に対するあなたの姿勢は?

記者Pythonのような「実行可能な擬似コード」が受け入れられつつある今、プログラミング言語の未来がどうなるか予測できますか?誰もが記事を書けるようになるのでしょうか、それともプログラマーのものであり続けるのでしょうか?

レディ:上でも言ったように、私はPythonが大好きです。その明快な解釈と動的型付け機能によって、Pythonは始めやすく、学習しやすくなっています。Pythonは標準ライブラリの数が多く、ゴミ収集やメモリ管理も充実しているので、最初に学ぶプログラミング言語としては最適だと思います。また、Pythonがコンピュータサイエンティストでなくても、計算や自動化の手助けに使えるという点にも同意します。例えば、Pythonはバイオインフォマティクスの分野で非常に人気があります。しかし、言語間の溝は常にあると思いますし、異なる言語にはそれぞれの領域があります。一般の人にとってより親しみやすい言語もありますが、効率と精度が最重要視される分野では、パフォーマンス志向でコンパイル可能な静的型付け言語がまだまだ必要だと思います。

記者プログラマーとしてどのように学ぶべきですか?プログラミングの強者になるには何十年もかかるのでしょうか?近道はありますか?コンピュータサイエンスを専攻する大学生に何か特別なアドバイスはありますか?

レディ:プログラミングの第一人者になるのに何十年もかかるとは思いません。しかし、プログラミング言語の奥深さや詳細を理解し、コンパイラーやアノテーターがどのように役立っているのか、バックグラウンドでどのような詳細な作業を行っているのかを理解するには、かなりの情熱が必要だと思います。C++の場合、テンプレートのコードを生成する方法を理解していますか?仮想関数テーブルがどのように機能するか知っていますか?あるいは多重継承の何が問題なのか?Pythonの場合、参照カウントの仕組みを理解していますか?変数は値で渡されるのか、参照で渡されるのか知っていますか?仕事で最も重要なツールについて、表面的な知識で満足してはいけません。ツールについて知れば知るほど、より良いプログラマーになれるのです。

しかし個人的には、優秀なプログラマーと優秀なエンジニアには違いがあると思っています。優れたプログラマーはコードの書き方を知っていますが、優れたエンジニアは複雑なシステムの構造と構築の仕方を知っています。優秀なエンジニアになるのはさらに難しく、一番の教師は経験です。ですから学生には、大規模なソフトウェア製品を扱う企業でインターンシップを行い、エンジニアのチームの一員として働いて、複雑な生産ソフトウェアに携わるプロセスとテクニックを学ぶことをお勧めします。

記者日本では多くの人が管理職になることを好みます。プログラマーは一生の仕事になると思いますか?

Read next

DB2 10.5 BLU: Hadoopとインメモリデータベースのキラーが来るか?

最近リリースされたDB2のアップデートで、IBMはコードネームBLUと総称される一連のアクセラレーション・テクノロジーを搭載し、由緒あるデータベース管理システムを大規模なインメモリデータ分析ジョブの実行にさらに適したものにすることを約束しました。

Jan 27, 2015 · 3 min read