プログラミング言語C++ (アスキーアジソンウェスレイシリーズ―Ascii Addison Wesley programming series)

プログラミング言語C++ (アスキーアジソンウェスレイシリーズ―Ascii Addison Wesley programming series)

英語の学習方法を考えてみると、この本を読むにあたって、参考になるかと思います。
通常、初学者を対象にした英語の学習参考書には、「販売」が可能であるために、暗黙のルールに従っています。
当たり前の話ですが。

「習っていないことは、いきなり使わない」

この一点につきます。
Be動詞の使い方を学習している段階の生徒さんに対して、
そのテキストの例文に、分詞の使い方だとか、時制の見分け方を知っていることが前提の例文を掲載することは、
「躓きの石」になるという合意が、英語教育の世界にはあると思います。
しかし、この例文・カリキュラムの組み方は、実際のネイティブスピーカが、ネイティブスピーカに対して、
発信する英文の具体的なありようとは、異なるわけです。
Googleのブログにせよ、大統領演説にせよ、
求められるのは、「英語の総合力」になります。あらゆる文法が、フルセットで、使用されます。

コンピュータに何か、仕事をさせるための手段である、コンピュータプログラミング言語の初期の学習においても
似たような問題があるのだと思います。

さて、本テキストが、この受験英語学習の大原則に忠実にのっているかというと、残念ながらそのような構造には
なっていないということになります。
英語の参考書の例文にあたる、「ソースコード」は、かなりわかりやすく記述されてはいるものの、
やはり、
いきなり、C++の文法構造の全体が、読者の頭にある程度は、はいっていることが前提にされているとしか思えません。

ですから、このテキストの第2章を読んでいても、「やはり、C++の文法について、網羅的に扱ったテキストが常にそばにおいておかないとつらいな」
と思う場所がところどころにあります。
はづかしい限りですが、Stackというものや、アンダーフローという言葉とか、いきなり出てきて、戸惑いました。
いきなりテンプレートも出てくるし。これ、間違っても、入門のテキストではないわけですね。
アマゾンの書評で、いきなり「手をだすな」と書かれていますが。
くわしく、書きますと、こういうことになります。
だからといって、悪い本ではないと思います。決して。
さすがに、バイブルといわれただけあるなと思いました。
筆者のまわりには、それだけ、プロフェッショナルだけがいるということなのかもしれません。

このC++の本の記述で念頭に置かれているのは、ソフトウェアを開発する過程で、
通常、プログラマは一人ではないということです。
複数のプログラマでチームワークをしながら、作業を進めることが前提になっています。
メンバーの一人、一人が、ソースコードの詳細をすべて知っていることが求められている作業の進め方は
プログラマに過大な負担を要求するし、効率ということを考えても、やるべきではない。
複数のプログラマーそれぞれが、自分の得意とする分野のことだけ把握して、
自分が一番、力を発揮できる分野のコーディング作業に専念できることが理想の状態だとしたら、
どうやって、その理想の作業状態に一歩でも近づけるのかという問題意識も、開発現場では生まれるのだと
思います。

筆者のこのテキストには、そういう実践的な意図がいろいろなところに感じられます。
このスタイルは、「ゲームプログラマ・・・」のテキストでも、共通して、感じられるものでした。

というより、そういうことが大事なのだと、筆者ははっきりと書いています。



76P  パニックに陥らないように、すべてはいずれ明らかになる

何か、未知のものを学習者に習得してもらう場合。
「出来る限り、学習対象の全体構造を、把握しておいてもらう。(はじめて、ディズニーランドに遊びにいく人たちは、やはりエントランスで、遊園地の中の地図をもって行動する。これは、それなりのメリットがあるから。)」

これが、大事になるわけですが。
この原則を実行に移すと、

「学習者が習っていないことを、中途に、ことわりもなく、使用してはいけない」

という原則と平気で衝突を起こします。

このテキストの第2章は、とてもよく出来ているとは思いますが、この衝突のとてもいい例になっています。

どうして、こういうややこしいことになるかというと、それも、筆者の記述が明らかにしてくれているように思います。

言語の学習では、言語のすべての機能のすべての詳細を理解することではなく、その言語本来の自然なスタイルをマスターすることに
重点をおく必要がある。

ひとつの言語機能をほかから切り離して知っていてもほとんど意味はない。テクニックとほかの昨日がもたらす文脈の中でしか機能は意味を持たないし、力を発揮しない。

玄人の人が、なにか教育的配慮のあるテキストを執筆するときに、必ず、念頭におかれることのひとつです。
たしかに、これはこれで、重要だと思います。

ただ、この筆者は、ただの教科書執筆者ではなく、この学習対象になっている言語の設計者その人なのです。
つまり、この人がC++について何を記述したのかということは、そのまま、プログラマの世界では、ひとつのスタンダードになります。
そういう人のテキストが、上記の引用の立場を強く意識した叙述のスタイルをとると、
一番、読まれるべきテキストの敷居を、無数のプログラマに対して、高くするという弊害があるような気がします。

ゲームプログラマになる前に、覚えておきたい技術」という書籍のC++ソースコードが読めるようになりたいという目的。
このテキストでの学習内容を、消化して、「ゲームプログラミング」というものを、習得したいという目的。

では、C++を学習しようというときに、一番、権威のあるテキストが、とてつもなく敷居が高いというのは、
かなり嘆かわしいことです。
そういえば、民法の教科書もそういうつくりになっていたか。
我妻先生は、たしか、戦後の民法の家族法の改正に深くコミットしたわけだから、彼の書いたテキストには、一定の権威が発生していた。
でも、僕が学生時代に、彼のテキストをよりどころにして、司法試験の勉強をしていた人が、どれくらいいたのかなと思う。
この間、彼の「民法案内」の膨大な叙述を目にして、

「本当のオリジナルのオリジナルというのは、どんな分野でもアクセスがつらい」

ということに、思い至ったことがあります。
この先生の「民法案内」もいつか、このブログで、連載企画で、取り扱いたいと思うけど。
日本列島の商取引について、法学者について、極上の記録文学になっているように私には思う。もちろん、民法という法学のテキストに
そったものですけど。

アンダーフロー

【英】underflow
アンダーフローとは、浮動小数点演算処理について、計算結果の指数部が小さくなり過ぎ、使用している記述方式では数値が表現できなくなることである。

これに対して、計算結果が膨大になり過ぎて表示しきれなくなることがオーバーフローと呼ばれる。表示できなくなるという点ではどちらも共通している。


目次

第2章 C++ひとめぐり


2-1 C++とはなにか
2-2 プログラミングのパラダイム
2-3 手続き型のプログラミング
 2-3-1 変数と算術演算
 2-3-2 テストとループ
 2-3-3 ポインタと配列
2-4 モジュラプログラミング
2-5 データ抽象
 2-5-1 型を定義するも銃る
 2-5-2 ユーザー定義型
 2-5-3 具象
 2-5-4 抽象型
 2-5-5 仮想関数
2-6 オブジェクト指向プログラミング 
 2-6-1 具象型の問題点
 2-6-2 クラス階層
2-7 ジェネリックプログラミング
 2-7-1 コンテナ
 2-7-2 汎用アルゴリズム
2-8 最後に
2-9 アドバイス