ホームページ  >  記事  >  バックエンド開発  >  C++ プログラミング: 4 冊の本と 5 つの古典

C++ プログラミング: 4 冊の本と 5 つの古典

黄舟
黄舟オリジナル
2017-02-06 14:12:571306ブラウズ

C++ は、産業用ソフトウェア開発で広く使用されている大きな言語です。それ自体の複雑さと現実の問題を解決する能力により、学術研究と産業上の大きな価値があります。 C 言語と同様に、C++ は多くの重要な分野で大きな成功を収めています。


しかし、低レベルプログラミングの分野では C++ が C を圧迫し、C からの強い反発も受けているのに対し、高レベルプログラミングの分野では Java と C# が常に C++ の領域を侵害しています。おそらく C++ と C の統合は永遠に夢であり、おそらく Java と C# の流行により、最終的には C++ がそのルーツ、つまり低レベルのシステム プログラミング、高度な大規模な利点を持つ開発領域に戻ることになるでしょう。大規模な高性能アプリケーション設計、組み込みプログラミング、数値科学計算など。そうであれば、これは悪いことではないと思います。


C++ は非常に多くの知的投資を集めているため、この分野には、重量級のソフトウェア製品、プログラム ライブラリ、書籍など、数え切れないほどの優れた著作物が存在します。タイトル「C++ プログラミングの 4 冊と 5 つの古典」の厳密な意味は、「C++ プログラミング 4 冊 ⅹ 5 つの古典」です。はい、この記事 (および次の記事) では、カテゴリ別に 20 冊以上の C++ の優れた書籍をお勧めします。自分のニーズに応じて読むものを選択してください。


TCPLとD&E


TCPLとD&Eは、それぞれ「The C++ Programming Language」と「The Design and Evolution of C++」の略称で、両方ともBjarne Stroustrupによって書かれました。私がそれらを別々にリストしたのは、第一にビャルネが C++ 言語の作成者だからであり、第二に、「最初」よりも重要な理由からです。つまり、これら 2 冊の本は C++ の分野における疑いの余地のない傑作です。 C++言語のバイブルと言っても過言ではありません。


Bjarne Stroustrup、C++ プログラミング言語 (特別版 第 3 版)


「C++ プログラミング言語 (特別版)」、機械産業出版局


) (英語コピー版)、高等教育


を押してください。これまでのところ、TCPL は C++ 標準ドキュメントのほかに最も権威のある C++ リファレンス マニュアルです。多くの人と違って、私はビャルネの書き言葉が彼が作成したプログラミング言語に劣るとは思っていません。少なくとも私はこの種の学術的な仕事が好きです。この本の C++ 言語の説明は明確かつ簡単です。これは、言語の作成者の視点から C++ を考察しています。これは他の著者や書籍では実現できません。Bjarne 自身以上に C++ の使い方を知っている人は誰もいません。


これは、中級および上級の C++ 開発者を対象とした本格的な本です。あなたが経験豊富な C++ プログラマで、より重要な C++ 知識を理解する必要がある場合、この本はまさにあなたのためのものです。読んでクスッと笑えるような小さな本ではなく、何度も何度も噛み砕いて理解する必要があります。読む際には、ビャルネ氏が何を強調し、何を一文で述べたかに特に注意を払ってください。個人的には、この本の第 4 部「C++ による設計」が気に入っています。同様のプログラミング言語の本ではこのような内容を見るのは難しいので、Bjarne はこの部分を別の本として書くべきだとさえ思います。 Bjarne Stroustrup、The Design and Evolution of C++ Mechanical Industry Press


D&E は、C++ 言語の設計原則、設計決定、設計哲学に関するモノグラフです。これは、C++ が別の言語ではなく、なぜ今日のような形になったのかを明確に答えています。 C++ 言語の作成者として、ビャルネはそのユニークで深い洞察を生き生きと実証しました。広く賞賛されている言語機能に加えて、ビャルネ氏は物議を醸す、あるいは拒否する C++ 機能を 1 つずつ論理的に厳密で説得力のある説明をしました。内容は、C++ の先史時代、クラスを含む C、C++ 設計ルール、標準化、ライブラリ、メモリ管理、多重継承、テンプレートなどをカバーしています。また、例外メカニズム、ランタイム型情報、名前空間などの重要な新機能の紹介も提供します。それぞれについて深く議論されました。すべての C++ プログラマーは、Bjarne の説明から言語の理解をさらに深められるはずです。


この二冊の本は知識が凝縮されており、膨大な量の情報が含まれているということを改めて認識する必要があります。ビャルネの一見何気ない一文を見逃さないでください。


入門チュートリアル


言語を学習するには、初心者から熟練者まで、段階的なプロセスが必要です。しかし、いわゆる初心者にとって、自分がまったくの初心者なのか、他の言語に精通している「初心者」なのか、あるいは特定の言語のプログラミングの分野でかなりの業績を上げた達人なのかを判断することは困難です。一般化しますか? C++ 初心者ごとに必要な入門書も異なります。


Andrew Koenig、Barbara E. Moo、Accelerated C++: Practical Programming by Example


「Accelerated C++ Chinese Edition」、China Electric Power Press


市販されているほとんどの C++ チュートリアルとは異なり、この本は「C++ の C」から始まるのではなく、本格的な C++ の機能から始まります。最初から標準ライブラリを使用してプログラムを作成しますが、徐々に説明が深まり、これらの標準ライブラリのコンポーネントが依存する基本的な概念が 1 つずつ説明されます。さらに、他の C++ 教科書とは異なり、この本では例を使用して言語と標準ライブラリを説明します。後者の 2 つは、ほとんどの C++ 教科書のように単に言語の機能を説明するための補助ツールとして例を使用するのではなく、サンプル プログラムのサポートを提供するために説明されています。そして標準的なライブラリの使用法。


著者は、C++ 分野におけるプログラミングの実践、教育とトレーニング、テクニカル ライティングの分野で世界クラスの人物です。私は、C++ 言語の標準ライブラリとネイティブ機能を多用した、このさわやかな書き方が好きです。この教科書の前では、これまでのほとんどすべての C++ 教科書が影をひそめるか、時代遅れに見えます。この教科書は国内の高等教育としては少し前衛的なものかもしれませんが、それでも同僚に強く勧めています。ところで、ビャルネと私との間の最近の文通の中で、彼はこの本について次のようにコメントしました: C++ を学習する経験豊富なプログラマにとって、この本は世界で最高の本かもしれません。


Stanley B.Lippman、Josee Lajoie、C++ Primer (3rd Edition)


『C++ Primer (3RD) Chinese Edition』、China Electric Power Press


この本の名前はなんだか違う誤解。著者は、この本は C++ 初心者向けに書かれていると主張していますが、その厚さと説明の深さの両方がそうではないことを示唆しています。おそらく、「初心者から熟練者まで」の C++ チュートリアルと呼ぶ方が適切かもしれません。個人的には、C++ をまったく知らない初心者には適していないと思います。この本を読む前に、C または C++ について少なくとも少しの背景知識、または少なくとも他の言語でのプログラミング経験が必要です。


この本では、いくつかの高度な C++ 機能の説明が省略されていますが、これまでで最も包括的な C++ 学習チュートリアルと呼ぶことができます。実際、C++ 初心者がこの本を地に足のついた方法で読み、「C++ 入門解答集」に従って演習をすべて完了することができれば、そのレベルは間違いなくプロの C++ プログラマーの仲間入りをすることができます。個人的には、すでに TCPL を所有している場合でも、この本は多くの点で TCPL よりも詳細で理解しやすいため、依然として所有する価値があると思います。 Stanley B. Lippman、Essential C++

この本は、「C++ Primer」の合理化されたバージョンであると大まかに考えることができます。本書では、手続き型プログラミング、汎用プログラミング、オブジェクトベース プログラミング、オブジェクト指向プログラミング、テンプレート プログラミング、例外処理など、C++ の代表的なトピックを 1 つずつ説明します。 Stanley は、「他の言語でのプログラミングの経験がある」C++ 初心者が受け入れられる最も基本的なレベルまでしきい値を下げ、「C++ 入門」のような書籍を読まなくてもすぐに C++ でプログラミングを開始できるようにします。例を使って学習をガイドし、読者ができるだけ短い時間で C++ の本質を理解できるように努めています。

おそらく、C++ プログラミング パラダイム (パラダイム) のすべての側面を他の人が概説するには何百ページもかかるでしょうが、この小さな本はそれを信じられないほどうまくやっています。個人的には、この手の、テクニックが満載で、簡潔で、言いたいことがある本が好きです。この本には明白なスタイルもあります。すべてのプログラム例は標準ライブラリ コンポーネントを使用しており、これが新鮮です。

上記の 3 冊の本は、プログラミングの完全な初心者向けに書かれたものではありません。 C++ プログラミングのまったくの初心者は、Francis Glassborow の新しい本 (未出版)、「コンピュータ プログラミングの初心者入門: You Can Do It!」を読むことができます。これはビャルネも推奨しています。 Francis Glassborow は ACCU の会長であり、彼自身の著書は当然ながら C++ コミュニティの大きな関心を呼び起こします。

効率的で堅牢なプログラミング

2 年前、私は州の電力配電システム プロジェクトを担当していたとき、SCADA システムからリアルタイムの電力情報を取得するゲートウェイ プログラムを作成しました。通信インターフェイスは、珍しいデータベース直接接続方式を採用しています (このゲートウェイ プログラムは、一方の端で SQL Server 6.5、もう一方の端で Oralce 8.1.6 に接続します)。リアルタイム測定ポイントは 10,000 近くあるため、毎回すべてのサンプルを更新または挿入するのは明らかに非効率です。ゲートウェイ プログラムにメモリ ライブラリを構築し、取得したデータをその中で比較し、その後物理データベースを更新するかどうかを決定します (その他のより複雑な処理も行われます)。これにより、効率とリソースの使用量が向上します。期待通りの効果が得られました。

このプログラムは非常に順調に動作していましたが、サイトを離れたある日、システム管理者から電話があり、ネットワーク障害やその他の理由でゲートウェイ プログラムがクラッシュすることがある、それが自動的にクラッシュしただけだ、それが問題だと言われました。また、Windows 2000 Advanced Server も「ブルー スクリーン」になります。率直に言って、私は意図的でないプログラムがこのようなことをするのを見たことがありません。当時私は別の大きなプロジェクトで忙しかったため、デバッグのために現場に行くことができず、最終的には経験に基づいて例外処理コードを使用してメモリ ライブラリ コードを慎重にカプセル化する必要がありました (その他の修正も加えました)。 ...)。このようにして、問題は完全に解決されたわけではありませんが、プログラムはそれほど醜くなくなりました。


ここでそのようなちょっとしたことを話すことに何の意味があるのでしょうか(あの恐ろしいバグについて考えていたとき、それが「タップ」だとは思いませんでした)?私が言いたいのは、どんなソフトウェアであっても、堅牢性がなければ効率性もありえないということです。 C++ プログラマにとって、効率的なプログラムを書くのは難しくないかもしれませんが、24 時間年中無休で実行する必要があるサーバー側のソフトウェアを書くのはそれほど簡単ではありません。多くの要素を考慮する必要があり、場合によってはそれらの要素がはるかに遠い場合もあります。 C++ 言語や開発ツール自体を超えて。実際のプロジェクト ソフトウェアを開発するプログラマーとして、謙虚であれば、自分で壁にぶつかって経験を積む必要はありません。他の人の経験が参考になることがよくあります。これを念頭に置いて、堅牢性と効率性の両方で恩恵を受ける次の書籍を読むことをお勧めします (もちろん、例外処理以外のこともカバーしています)。


Scott Meyers、効果的な C++: プログラムと設計を改善する 50 の具体的な方法 (第 2 版)


Scott Meyers、より効果的な C++: プログラムと設計を改善する 35 の新しい方法


「効果的な C++ 中国語版」、華中科技大学出版局


「より効果的な C++ 中国語版」、中国電力出版局


「効率的な C++ (コピー版)」、中国電力出版局


「Effective C++」が主に C++ の比較的基本的な概念とテクニックについて説明している場合、「More Effects C++」は例外処理を含む一連の高度なテクノロジに焦点を当てています。前者と比較すると、後者には 2 つの主な違いがあります。1 つは、多くの新しい標準 C++ コンテンツが含まれていること、2 つ目は、議論されるトピックが「戦術的」ではなく「戦略的」である傾向があり、議論がより深く徹底的であることです。 。特に、仮想デストラクター、スマート ポインター、参照カウント、プロキシ クラスなどのテクノロジとパターンに関する詳細な説明が、このような小さな本に掲載されるとは想像しにくいです。


快適な技術スキルと優れたライティングスキルを備えた Scott は、間違いなく世界最高の C++ テクニカル ライターの 1 人です。どちらの本も、簡潔さ、明瞭さ、読みやすさの点で優れています。つまり、プログラミング スキルとデザイン思考を向上させるために Scott が提供する 85 のメソッドは、すべて中級および上級の C++ プログラマーにとって必須のスキルです。これらの本は両方とも強くお勧めします (後で説明するように、実際にはもう 1 冊あります)。


ハーブ・サッター、より優れた C++: 47 のエンジニアリング パズル、プログラミングの問題、およびソリューション 中国語版」、中国電力出版


「より優れた C++ 中国語版」、華中科技大学出版


あなたは自分を C++ 言語の専門家だと思いますか?答える前に、ISO C++ 標準委員会の事務局長によるこれら 2 冊の本を読んでください。これら 2 冊の本では、ハーブは「質問と回答」アプローチを使用して、C++ 言語機能の学習をガイドします。各トピックについて、ハーブはまずあなたの質問や混乱を合理的に想像し、次にあなたの答えがおそらく間違っていると推測し、次にあなたにガイダンスを与え、最適な解決策を提案し、最後に同様の問題を解決する方法をまとめます。


これら 2 冊の本は C++ 言語の詳細を掘り下げた典型的な本ですが、内容は Scott の 2 冊よりもはるかに難しいと思います。スコットの本よりも優れています。理解するのがはるかに困難です。この 2 冊の薄い本に含まれる知識を学ぶには、少なくとも数か月はかかるでしょう。 (Scott の序文の中で、彼は GotW の問題の罠に何度も陥ったと告白しました。これが何を意味するか知っておくべきです) 言語の詳細を研究する利点は何ですか?ほとんどの場合、C++ コードの舞台裏で何が起こっているかを気にする必要はありませんが、そうした場合には、これら 2 冊の本が C++ 言語の微妙だが重要な側面を明らかにするため、良い手がかりを提供してくれます。 。


スティーブン C. デューハースト、C++ の落とし穴: コーディングと設計における一般的な問題の回避


「C++ プログラミングの罠」、中国青年出版社


スティーブンの理論的リテラシーと実践的な経験により、この本は読む価値があります。 Stephen は、ベル研究所の最初の C++ ユーザーの 1 人でした。彼は C++ を使用して、コンパイラ、証券取引、電子商取引、組み込みシステムなどの分野の問題を解決することに成功しました。この本には、開発の最前線から得た著者の 99 のプログラミングに関する洞察がまとめられています。これらを理解することで、C++ の設計およびプログラミングに関する一般的な問題のほぼすべてを回避できます。


C++ プログラミングの初心者にとって、この本を読んだ方が、Scott と Herb の本を読むよりも簡単ですぐにできるようになるとさえ思います。私は個人的にこの本の書き方が好きです。スティーヴンの見解の多くは極端に見えるかもしれませんが、反駁の余地はありません。もちろん、この自信(そして乾いたユーモア)は、傲慢な被害妄想ではなく、著者の深い技術的リテラシーから来ています。


上記で推奨した書籍に加えて、Dov Bulka と David Mayhew の共著『Efficient C++: Performance Programming Techniques』 (『C++ パフォーマンスを向上させるプログラミング手法』、清華大学出版局) も読む価値があります。この薄い小さな本は、高性能 C++ アプリケーション開発に焦点を当てています。著者 2 人はどちらも IBM ソフトウェアの専門家であり、非常に高いパフォーマンスが要求されるシステム構築の分野で働いています。この本は彼らの経験に基づいています。この本は C++ と関係のない話に多くの時間を費やしているので好きではない人もいますが、私はこの本が好きです。だからこそ、この本が私の視野を広げてくれたのです。


テンプレートと汎用プログラミング


テンプレートとテンプレートベースの汎用プログラミングは、間違いなく現在最も活発に開発されている C++ プログラミング テクノロジです。テンプレートの最初の革新的なアプリケーションは STL であり、汎用コンテナーやアルゴリズムの分野でのテンプレート テクノロジの適用を完全に実証し、Boost や Loki などの最新のライブラリはテンプレート テクノロジの可能性を最大限に引き出し続けています。テンプレートと汎用プログラミングの分野では、次の 2 冊の分厚い本をお勧めします:


David Vandevoorde、Nicolai M. Josuttis、C++ テンプレート: 完全ガイド


『C++ テンプレートの概要 (繁体字中国語版)』 》、Taiwan Qifeng Information Co., Ltd.


『C++ テンプレート概要 (簡易版)』、People's Posts and Telecommunications Publishing House


本を褒める昔ながらの方法があります。ざっくり言うと「いいえ、この本を読んだ後は、何をしても大丈夫です。」 この本には誇張が含まれていることがよくあります。ただし、「『C++ テンプレート: 完全ガイド』を読まずに C++ テンプレート プログラミングに熟達することはできません。」という場合、この主張は世界中の大多数の C++ プログラマに当てはまります。


この本は、C++ テンプレート本の分野における長年の空白を埋めます。以前は、高度なテンプレート プログラミング テクニックと一般的なパターンに焦点を当てた『Modern C++ Design』や、特定のテンプレート フレームワークとコンポーネントの使用方法をガイドする『The C++ Standard Library』などの書籍がありました。ただし、テンプレートの仕組みを深く理解していないと、自由に「上り下り」することは難しくなります。この点を考慮して、C++ テンプレート テクノロジを徹底的に理解したいすべての人にこの本をお勧めします。


この本は中国本土と台湾でも翻訳されていますが、異なる翻訳者によって書かれています。この記事を読む頃には、両方の翻訳版が発売されているはずです。当然、読者には選択肢が 1 つ増えます。 Hou Jie 氏の個人ウェブサイトでは、伝統的な翻訳のほとんどの章が公開されているので、ちょっと覗いてみるといいでしょう。


Andrei Alexandrescu、最新の C++ 設計: 汎用プログラミングとデザイン パターンの適用


「C++ 設計における新しい考え方: 汎用プログラミングとデザイン パターンの適用」、華中科技大学出版局


《 C++ 設計の新しい思考 (コピー版)"、中国電力出版社


あなたは自分を C++ テンプレート プログラミングのマスターだと思いますか? J に答える前にこの本を読んでください。これは天才によって書かれた畏敬の念を抱かせる傑作です。ジェネリック モードは視野を無限に広げ、C++ プログラマーの思考の限界に挑戦するのに十分です。


この本は 2 つのパートに分かれており、最初のパートでは、Loki ライブラリで使用される基本テクノロジーと、ストラテジベースのクラス設計、テンプレートのローカル特殊化、コンパイル時のアサーション、タイプリストなどのいくつかの高水準言語機能について説明します。小型オブジェクト配置技術など2 番目のパートでは、汎化ファンクター、シングルトン、スマート ポインター、オブジェクト ファクトリ、抽象ファクトリ、ビジター、マルチメソッドなど、Loki の重要なコンポーネントとジェネリック パターン テクノロジに焦点を当てます。どのテクノロジーも目を見張るものがあって、息を呑むようなものです。


C++ の学習に関しては、やりすぎると、より深い理解を求めない言い訳になることがよくあります。ただし、オブジェクト指向が C++ のすべてではなく、テンプレートや汎用プログラミングもその半分を占めます。 「本格的な」C++ プログラマにとって、この実証済みの成功したテクノロジをタイムリーにフォローアップするのは賢明な行動です。


結論


これらの作品はとても有名なので、特に推薦する必要はないかもしれません。ただし、C++ プログラマー チームが他のファッショナブルな言語ほど急速に成長しないとしても、退職する人材よりも新しい人材が常に多く入ってきます。新規参入者を温かく歓迎することに加えて、個人的には、C++ 書籍の「目録」を作成する時期が来たと考えており、そのような「目録」が興味のある読者にとって有益であることを願っています。辛抱強く親切に対応してください。次回も引き続き、標準ライブラリやネットワークプログラミングなどに関するC++の良書を紹介していきたいと思います。良い本が傍にあれば、この冬は寒くありません。


C++ プログラミングの 4 冊の本と 5 つの古典 (パート 2)


前の記事では、TCPL と D&E、入門チュートリアル、効率的で堅牢なプログラミング、テンプレート、汎用プログラミングを「棚卸し」しました。 、など。いくつかの優れた C++ 本。冬が春に変わるにつれて、C++ 書籍 J の素晴らしい旅を続けましょう


標準ライブラリ


私がまだ研究所で働いていたとき、同じ研究所内の他の 2 つの研究所と協力して、大規模水利事業派遣統合事業3 つのソフトウェア システムはすべて相互に通信する必要があります。通信モジュールをデバッグしているとき、気配りのある顧客 (勉強熱心なシステム管理者) は、同じ通信プロトコルの解釈コードが私のものは 30 行を超えていないのに、相手のものは 150 行を超えており、理解するのが難しいことに気づきました。システム管理者は非常に困惑していましたが、プログラミングのスタイルや習慣は人それぞれ異なりますが、私は標準ライブラリを使用していますが、彼は慣れ親しんだ従来の C プログラミング スタイルやその他のテクノロジを使用しています。


誤解しないでください!私は決してこのパートナーを貶めるつもりはありません。実際、私は深い C プログラミング スキルを本当に持っているプログラマーをよく尊敬します。結局のところ、今日の C++ の成功は主に C に深く根ざしていることによるものです。 C++ プログラマとして C++ の C に慣れていない場合、基本的なスキルがしっかりしておらず、技術的な自信が不十分であると考えてしまいがちです。


しかし、繰り返しになりますが、C++ はマルチパラダイム プログラミング言語です。プロのプログラマーは、特定の状況に応じてどのプログラミング スタイルを使用するかを知っておく必要があります。私は、現場で即席開発を行うことが多いプロジェクトリーダーとして、緊急のタスクを迅速かつ迅速に解決するために、可能な限り既存のライブラリ(およびコンポーネント)を使用することに慣れています。 C++ 標準ライブラリの効率性 (および堅牢性) はすでに証明されているので、それを使用しない理由はありません。


Nicolai M. Josuttis、C++ 標準ライブラリ: チュートリアルとリファレンス


『C++ 標準ライブラリ: 自習用チュートリアルとリファレンス マニュアル』、華中科技大学出版局


これは、C++ 標準ライブラリに関するこの百科事典的著作であり、何度も参照する必要があるリファレンスです。完全性、詳細さ、正確さにおいて比類のないものです。この本では、STL だけでなく、ストリームやローカリゼーションを含む標準ライブラリ全体をカバーし、標準ライブラリの各コンポーネントの仕様と使用法を詳しく説明します。この本の副題が示すように、最初はチュートリアルとして、その後はリファレンス マニュアルとして読むことを目的としています。


わかりやすい文体なので、とても読みやすい本です。標準ライブラリの使用方法を学び、その可能性を最大限に活用したい場合は、この本が必要です。インターネットで言われているように、この本は本棚に置くだけでなく、コンピューターの机の上にも置くべきです。すべてのプロの C++ プログラマーに強くお勧めします。


Angelika Langer、Klaus Kreft、標準 C++ IOStreams and Locales: Advanced Programmer's Guide and Reference


「標準 C++ 入出力ストリームとロケール」、People's Posts and Telecommunications Press


C++ 標準ライブラリは、STL、ストリーム、ローカリゼーションの 3 つの部分で構成されています。STL に関する書籍は数多くありますが、ストリームとローカリゼーションに関するこの本は、これら 2 つの分野で最も優れています。この本よりも包括的に、ストリーム ライブラリを「知る」だけでは満足できない場合は、ぜひ読んでください


2001 年夏、私はこの本の中国語版をパラパラとめくりましたが、すべてに非常に感銘を受けました。内容からパッケージに至るまで、ネガティブなものはほとんどネガティブなものでしたが、2003 年の秋に、この本の中国語訳が非常に安い価格で販売されていることを偶然知りました。


Scott Meyers、Effective STL: 50 Specific Ways to Enhance Your Use of the Standard Template Library


「Effective STL (photocopy version)」、China Electric Power Press


中国語を読んだ後Scott の『Effective C++』と『More Effects C++』の翻訳を楽しみにしていましたが、彼と彼のパートナーがこの本の翻訳を完了したようだと、Pan Aimin 氏の個人ホームページで知りました。この本ですが、幸いなことにまだ市場には出ていません


この本は、STL を使用するプログラマにとって必読の本です。この本の中で、スコットは STL コンテナとアルゴリズムがどのように機能するのか、そしてそれらを最大限に活用する方法を教えてくれます。スコットの他の作品と同様、この本も明確で正確なスタイルで書かれており、非常に読みやすいです。この本を読んだ後、あなたも私や他の C++ プログラマと同じ考えを持つかもしれません。スコットはいつ「より効果的な STL」を書くのでしょう?


STL に関しては、Matthew H. Austern の『Generic Programming and the STL: using and Extending the C++ Standard Template Library』(『Generic Programming and STL』、China Electric Power Press) にも注目してください。この本はアカデミックな雰囲気を強く漂わせています。 『Accelerated C++: Practical Programming by Example』の巻末で、Andrew Koenig と Barbara Moo は、(彼ら自身の『Ruminations on C++』に加えて) 他に 2 冊の優れた高度な本を厳粛に推奨しています。そのうちの 1 つは TCPL、もう 1 つははこの本です!


ネットワーク プログラミング


ネットワーク プログラミングの時代において、ACE (適応型通信環境) が C++ が果たすべき役割を教えてください。


Douglas C. Schmidt、Stephen D. Huston、C++ ネットワーク プログラミング、第 1 巻: ACE とパターンで複雑さをマスターする


Douglas C. Schmidt、Stephen D. Huston、C++ ネットワーク プログラミング、第 2 巻: ACE とフレームワークによる体系的な再利用


「C++ ネットワーク プログラミング、第 1 巻: ACE とパターンを使用して複雑さを排除する」、華中科技大学出版局


「C++ ネットワーク プログラミング、第 2 巻: に基づく」 ACE and Frameworks」「Systematic Reuse」、Electronic Industry Press


エンタープライズ レベルのネットワーク プログラミングに C++ を使用する場合、現時点では ACE (およびこれら 2 冊の本) は検討する価値のある選択肢です。 ACE は、高パフォーマンスのネットワーク アプリケーションとミドルウェアを構築することを目的とした、オブジェクト指向のクロスプラットフォームのオープンソース ネットワーク プログラミング フレームワークです。 Douglas は ACE の創設者であり、Stephen は数年間にわたって ACE に技術サポートとコンサルティング サービスを提供してきました。2 人とも ACE コミュニティのメンバーです (はい、ACE の影響力と実用化によってコミュニティが形成されています)。


ACE は大学や研究機関によって求められているだけでなく、世界中で何千もの商用アプリケーションで使用されて成功しています。 ACE は、電気通信、航空宇宙、医療、金融の分野のネットワーク システムにおいて重要な役割を果たしてきており、今後も果たし続けます。高性能通信システムを開発する準備ができている場合は、世界有数の専門家からなるこのコレクションを検討してください。


C++ オブジェクト指向設計テクノロジやテンプレートなどの高級言語機能の使用に加えて、ACE は多数のパターンも使用します。 『C++ ネットワーク プログラミング』第 1 巻と第 2 巻では、ACE のすべての側面を説明するだけでなく、パターンや一般的なフレームワーク設計などの高度なテクニックも説明します。したがって、中級または上級の C++ プログラマーとして、本格的な C++ ネットワーク プログラミングをめったに行わない場合でも、これら 2 冊の本を読むことで利益を得ることができます。


はい、すべてのネットワーク アプリケーションが Web サーバー (および他のアプリケーション サーバー) と重量コンポーネント モデルを使用する必要があるわけではありません。その一方で、軽量 ACE コンポーネントの恩恵を受けることもあります。


その他


以下の本は、より適切な分類方法が思い浮かばなかったという理由だけで、上記の本と同様に読む価値があります。


Bruce Eckel、Thinking in C++、第 1 巻: 標準 C++ 入門 (第 2 版)


Bruce Eckel、Think in C++、第 2 巻: 実践的なプログラミング (第 2 版)


《 C++ Programming Thoughts (2nd Edition) Volume 1: Guide to Standard C++", Machinery Industry Press


「C++ Programming Thoughts (2nd Edition in English)」, Machinery Industry Press


「」の初版Thinking in C++」は、1996 年に Software Development 誌のブック ショック賞を受賞しました。新たに発売された第 2 版では、C++ 標準化の影響や、近年のオブジェクト指向分野における最新の研究と実践の結果を反映するために内容が大幅に書き直され、調整されました。 「入力ストリーム」、「多重継承」、「例外処理」、「実行時型認識」などの高度なトピックは、C++ の標準化後に追加された内容とともに、第 2 巻に配置されています。 Bruce は経験豊富な C++ 講師兼コンサルタントであり、彼のトレーニングと執筆経験は世界クラスです。彼の作品は、「いたずら」な技術スタッフが書いたものよりも読者にとって魅力的です。実際、同様の本の中で、この本はほとんどの読者にとって TCPL や「C++ 入門」よりも読みやすいです。ちなみに、著者のサイトにアクセスすると、第2巻の一部を覗くことができます。


Andrew Koenig、Barbara E. Moo、Ruminations on C++: A Decade of Programming Insight and Experience


「Meditations on C++」、People's Posts and Telecommunications Press


Andrew は、世界で数少ない C++ 専門家の 1 人です。これは、言語の詳細ではなく、C++ プログラミングのアイデアとプログラミング テクニックについて説明した本です。すでにある程度の基礎ができている方には、この本で C++ でプログラミングする際の考え方や解決策の表現方法が学べます。全体的に技術的な表現が丁寧で、文章もわかりやすいです。 Bjarne はこの本について次のようにコメントしています。 この本には、「C++ とは何か、C++ で何ができるか」についての洞察が満載です。 Stanley B. Lippman、Inside The C++ Object Model、China Electric Power Press


コンパイラーの観点から C++ を観察すると、何が起こっているのか、なぜ起こっているのかを理解するのに役立ちます。この本では、コンストラクター、関数、一時オブジェクト、継承、仮想化、テンプレートのインスタンス化、例外処理、ランタイム型識別などを含む、C++ オブジェクト指向プログラミングの基礎となる多数の操作メカニズムについて説明します。また、実装のいくつかの側面も紹介します。 C++ オブジェクト モデル プロセスで生じるトレードオフ。より深く掘り下げたい C++ プログラマーは、この本をお見逃しなく。


Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides、デザイン パターン: 再利用可能なオブジェクト指向ソフトウェアの要素


「デザイン パターン: 再利用可能なオブジェクト指向ソフトウェアの基礎」、機械産業出版局


『デザインパターン: 再利用可能なオブジェクト指向ソフトウェアの基礎 (英語版)』、Machinery Industry Press


再利用可能なオブジェクト指向ソフトウェアを設計するには、デザインパターンをマスターする必要があります。この本は C++ プログラマ向けに特別に書かれたものではありませんが、C++ プログラマは特に、主要なサンプル言語として C++ (および Smalltalk) を使用することで恩恵を受けるでしょう。 4 人の著者はいずれもオブジェクト指向ソフトウェアの分野で国際的に認められた専門家であり、オブジェクト指向ソフトウェアの設計経験を設計パターンとして詳細に記録しています。この本の影響は非常に大きく、4人の著者とこの本はGoF(Gang of Four)というあだ名が付けられました。この本はアカデミックな雰囲気が強く、厳密かつ簡潔な文体を持っています。パターンを解説する本ほど読みやすいわけではありませんが、デザインパターンを正確に理解したいなら、この本が最高の権威です。デザインパターンを学ぶには、この本を何度も噛む必要があります。ところで: デザインパターンをオープンマインドな思考への鍵とし、決して閉鎖的な思考の足かせにはならないようにしてください。


読む価値のある C++ の優れた本もいくつかありますが、ここにすべてをリストすることはできません。例えば、John Lakos氏の著書「Large-Scale C++ Software Design」(「Large-Scale C++ Programming」、China Electric Power Press)やHou Jie氏の著書「STL Source Code Analysis」(華中科技大学出版局)など。 。


『STL ソースコード分析』は非常に特徴的な本ですが、もっと良い本になると思います。個人的には、侯潔氏が初版のリリース以来、テンプレート技術を蓄積し、再考した上で、より深く徹底した包括的な「第二版」を執筆してくれることを期待しています。残念ながらHou Jie氏は書籍『C++ Templates: The Complete Guide』の翻訳を終えた後、テンプレート、汎用プログラミング、STLの分野に一時的に別れを告げることにしたようだ。


2004年3月31日追記:私がよく参照する参考書は「C++標準プログラムライブラリ」と「STLソースコード解析」の2冊です。もちろん、これは私の今年の執筆計画と大きく関係しています。


C++ を使用して大規模なソフトウェア システムの開発を成功させるには、ほとんどの C++ 書籍で説明されている論理設計の問題をよく理解する必要があるだけでなく、「大規模なソフトウェア システム」で説明されている物理設計テクニックを習得する必要もあります。スケール C++ プログラミング」。もちろん、この本は少し古いですが、体力とお金に余裕があるのであれば、一冊買っても損はありません。


この時点で、推奨されない(良い)本がいくつかあることを述べておく必要があると思います。主な理由は次のとおりです。


上記の本で十分です。


中国語であろうと英語であろうと、通常のルートで購入するのが難しい本はお勧めしません。


著者(翻訳者)の名声は私の推薦に影響しません。私たちは人ではなく本を読んでいます。


読んだことのない本はお勧めしません。少なくとも 1 つのバージョン (電子版を含む) を見ている必要があります。この「読む」は一般的には「じっくり読む」ことを指しますが、中には「立ち読み」としか捉えられないものもあります。


結論


私は普通のテクニカルライター兼翻訳者として、技術的な創作と翻訳の苦労(そして喜び)をよく知っており、創作、翻訳、制作、技術書籍の出版とマーケティング ピッチの詳細。今日は、物足りなさそうな本については何も言いません。同じ本のさまざまなバージョンをリストする目的は、より多くの情報を提供し、選択肢を 1 つ増やすことだけです。


この記事を書く最後の段階で、私はビャルネに手紙を書き、もしこの記事を書くとしたら何を書くだろうかと尋ねました。彼は私に簡潔なアドバイスをくれた。ビャルネ氏は、上に挙げた書籍のほとんどが世界トップクラスの C++ 書籍であることを確認しながら、専門プログラマーには「The C++ Standard: Incorporating Technical Corrigendum No. 1」を忘れずに勧めるよう注意してくれました。本書は C++ 標準仕様の「書籍版」であり、序文はビャルネ自らが執筆したものです。


Bjarne さんも、私のおすすめリストには C++ プログラマーの Windows プログラミングを助ける本はない、と親切にも思い出させてくれました。これはまさに私の意図です。この記事では、プラットフォームに依存しない C++ 作品 (ネットワーク プログラミングを除く) のみを推奨およびレビューします。これらはオペレーティング システムや統合開発環境とは何の関係もありません。コンパイラ。ビジネス開発のニーズに応じて、好きな分野に関連する C++ 書籍を選択して読むことができます。


「システム非依存かつプラットフォーム中立」といえば、「抽象化レイヤー」の概念を思い出さずにはいられません。実用的なアプリケーションを開発する C++ プログラマは通常、特定のオペレーティング システム、特定の開発環境、および特定のビジネス分野で作業します。標準 C++ と C++ 標準ライブラリをしっかりと深く理解していれば、間違いなく、さまざまなオペレーティング システムやさまざまな開発環境で作業できるようになります。異なるビジネス領域間で飛び交う「抽象的な」コスト。

上記は、C++ プログラミングの 4 冊と 5 つの古典の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。