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


プログラミング学習論の設計

 Andrew Koenig氏は、ここの「A note to experienced C and C++ programmers」欄で次のようなことを述べています。

 Of course, many of the syntactic details will be familiar, but they're just details. We treat the important ideas in a completely different order from what you've probably encountered. For example, we don't mention pointers or arrays until Chapter 10, and we're not even going to discuss your old favorites, printf and malloc, at all. On the other hand, we start talking about the standard-library string class in Chapter 1. When we say we're adopting a new approach, we mean it!

この文章には次のような主張が含まれています。

・私たちは新しいC++学習アプローチを採用している。
・言語構文の詳細にこだわるべきではない。
・C的な技術詳細(ポインタ、配列、printf、malloc)にこだわるべきではない。
・標準ライブラリ(stringクラスなど)をまず覚えるべきである。

 この主張内容は、C++設計者のBjarne Stroustrup氏のものとまったく同じです(参考連載)。筆者もこの説に賛成します。しかし、現場の開発者は次のような現実的な関心を持っているのが普通です。

・どの開発環境を使用するか(開発効率)
・その開発環境はどのような標準ライブラリをサポートしているか(クロスプラットフォーム)
・使用する開発環境にどのようなライブラリを追加するか(ユーザニーズへの対応)

 筆者は、MicrosoftのVC++開発環境とそこに付属する標準ライブラリを基本的に使用していますが、Boostやその他のライブラリも必要に応じて追加しています(参照)。それでは、ここからダウンロードできるソースコードのstringクラスを参考にしながら、C++学習者が注意すべき点を具体的に考えてみます。

ダウンロードしたソースコード内の多くの箇所では、stringクラスは次のように使用されています。

std::string name;

このソースコードは、VC++環境では次のようにコンパイルされます。
004011D2  lea         ecx,[name]
004011D8  call        dword ptr [__imp_std::basic_string,std::allocator
              >::basic_string,std::allocator >
              (40D514h)]
004011DE  mov         dword ptr [ebp-4],0

また、コンパイラーオプションの指定条件によっては、次のようにコンパイルされることもあります。
004011F8  mov         esi,esp
004011FA  lea         ecx,[name]
004011FD  call        dword ptr
                           [__imp_std::basic_string,std::allocator
                           >::basic_string,std::allocator
                           > (40D514h)]
00401203  cmp         esi,esp 
00401205  call        _RTC_CheckEsp (404DA0h) 
0040120A  mov         dword ptr [ebp-4],0 

 皆さんの中には、"このようなコードの技術背景をしっかり習得したい"と考えてい人も結構いらっしゃるはずです。しかし、Stroustrup氏とKoenig氏はともに、C++学習者はこのような技術詳細に当初はこだわるべきではないと主張しています。筆者もその主張に同意します。

 ここでは、次のような筆者の結論だけを紹介しておきます。

 "C++設計思想は現在利用できるプログラミング言語の基礎となっている。このため、C++の歴史とその哲学を知ることは重要である。ソフトウェア開発ツールのほとんどの機能はその哲学から誕生している"

 C++の設計思想と歴史に触れておくと、各種開発ツールの詳細なオプション機能の意味を理解し、きちんと使えるようになります。触れていない人は、おそらく、バージョンアップを繰り返す開発ツールの前でうろたえることになるでしょう。開発者としてのその後の成長もあまり期待できません(途中で挫折してしまうため)。

 なお、Koenig氏の著書の邦訳はここから購入可能ですが、筆者は、邦訳タイトルである「Accelerated C++―効率的なプログラミングのための新しい定跡」の意味を理解できません。本書で強調されているのは、学習アプローチであり、プログラミング技術ではありません。C++設計者のBjarne Stroustrup氏は、現在提唱されているC++学習プロセス(教育)やプログラミング書籍の内容に不満を持っています。同氏は、C++の健全な普及のためには、普及プロセスの"設計"が不可欠と考えています(参照)。ソフトウェアの普及にも、やはり、設計が大切なのですね。

 海外の歴史や哲学の輸入の難しさを今更のように痛感します。このレベルの話になると、人材不足は深刻です!

前へ | 技術資料リスト



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


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