Stroustrup氏の回答2:教育資料の提供がC++の人気に追いついてきません
One of C++'s problems have always been that its popularity outstripped the availability of quality tutorial material so that some people were confused and others suffered from material that (IMO) misrepresented what C++ was and even what it was supposed to be.
My new book ("Programming: Principles and Practice Using C++") uses C++98; after all, that's what available. I would have liked to use C++0x because that will be easier to use for teaching programming. So, as soon as there are industrial strength implementations available, Ill produce a new edition of that book. Until then, we can try C++0x features on experimental implementations and the major implementers will soon start providing C++0x features and libraries - in fact, this is already happening. Initially, I suspect we will see explanations of individual features to be published. I suspect I might write a few such "feature tutorials" myself, but the difficult job will be to present C++0x as a whole rather as a set of disjoint features.
Just now, there is not much introductory reading material available:
- My interviews answer some questions,
- The last third of my HOPL3 paper addresses the overall design of C++0x (Bjarne Stroustrup: Evolving a language in and for the real world: ・C++ 1991-2006. ACM HOPL-III. June 2007. (incl. slides and videos),
- There is a solid, but rather academic, paper on concepts (Douglas Gregor, Jaakko Jarvi, Jeremy Siek, Bjarne Stroustrup, Gabriel Dos Reis, Andrew Lumsdaine: Concepts: Linguistic Support for Generic Programming in C++. OOPSLA'06, October 2006.
- My extended foreword to Japanese translation of "The Design and Evolution of C++". January 2005 is not completely outdated.
I hope that a year from now I'll be able to give a far more constructive answer to this question.
プログラミング言語としてのC++は人気があります。しかし、良質な教育資料の提供がC++人気に追いついてきませんでした。これは昔からの悩ましい問題の1つです。結局、人々は混乱したり、(私の判断では)C++に関する誤った情報に悩まされることになったのです。
私の新しい書籍『Programming: Principles and Practice Using C++』は、C++98を採用しています。利用できたのはC++98仕様しかなかったからなのです。本当は、プログラミングを教えるためにより適している、C++0xを採用したかったのですが...。実用的なC++0xコンパイラが利用できるようになれば、可能な限り早い時期に新しい書籍を出版したいと考えています。それまでは、C++0x準拠試用版でC++0x機能を試してください。主要なコンパイラベンダーはC++0x機能とライブラリを間もなく提供し始めるはずです。実際、C++0x準拠コンパイラは出荷されつつあります。ただ、はじめは、個々のC++0x機能に関する紹介記事などが公開されることになると思います。教育的な機能説明は私が引き受ける必要があると思っています。その作業は、個々の機能の断片的な解説情報ではなく、C++0xの全体像を紹介する必要があるでしょうから、困難なものになるはずです。
現在のところ、次の資料を除き、入門者向けの参考図書はそれほどありません。
- 私のインタビュー記事
- C++0xの設計概要を記したHOPL3資料(Bjarne Stroustrup: Evolving a language in and for the real world: ・C++ 1991-2006. ACM HOPL-III. June 2007. (incl. slides and videos))
- Conceptsに関するアカデミックな資料(Douglas Gregor, Jaakko Jarvi, Jeremy Siek, Bjarne Stroustrup, Gabriel Dos Reis, Andrew Lumsdaine: Concepts: Linguistic Support for Generic Programming in C++. OOPSLA'06, October 2006. )
- 日本語版「The Design and Evolution of C++」への追加序文(いまでも廃れた内容ではありません)
来年になれば、より前向きな回答をお送りできると思います。
対話のポイント
Stroustrup氏は自身のホームページから大量のC++関連情報を公開しています。情報を公開する最大の理由は、"C++を正しく理解してもらうため"としています。C++の習得は難しい。C++は使いにくい言語。C++はCとオブジェクト指向の中途半端な折衷言語であり、危険な言語でもある。Stroustrup氏は、こうした否定的な意見に対しては、基本的に、無知(C++が正しく理解されていないこと)に起因すると考え、感情的に反論するのではなく、公開情報量を増やし納得してもらう方針を採っているようです。これは客観的に見て、気の遠くなるような難儀な作業です。
今回の回答には、"困難な説明作業は自分が引き受ける"、という強い決意が表明されていています。例えば、"個々の機能の断片的な解説情報ではなく、C++0xの全体像を紹介する必要がある"という文があります。これは冒頭で触れた"意見集約"に相当します。筆者は常日頃、大変残念なことに、自分たちが開発したソフトウェアや所有する独自技術の全体像を上手に説明できる人に出会えることがほとんどありません。ある機能に関して質問をすると、その部分に関しては能弁に語りますが、「といういうことは、結局、こういうことですね」と念を押そうとすると、「一概にそうとも言えません」という一言から熱弁が再開され、話があちこちにとんだ挙句、希望する結論が得られなくなります。
最終回となる次回は、C++の特徴的な機能と使用上の注意点などをお尋ねする予定です。お楽しみに!
Stroustrup氏は、"使用すると危険なC++機能は醜く設計してあります"などと平然と答えることがあります。同氏は、ドイツの哲学者カントやデンマークの哲学者キルケゴールなどの書物を読み、教養を高めた、といわれます。Stroustrup氏の説明能力の高さや魅力、C++発展の歴史などに興味のある方は、お時間の取れる週末などに、筆者が整理したStroustrup氏情報に目を通してください(参照サイト:豊田孝の「IT談話館」)。"C++を使用すればエレガントなコードが書ける"、"Classキーワードの代わりにTypeというキーワードを導入する予定であったが、現場プログラマの負担を考慮し、Classキーワードはそのまま残した"、あるいは、"Cの関数はプログラムを組織化する道具である"、などといった同氏の若き日の人間的な側面を整理してあります。
