C++ を深く掘り下げるのに役立つリソース

すでに素晴らしいフィードバックをいくつか受け取りました 1 この投稿について、さらにフィードバック、エラー修正、およびリソースの推奨事項を歓迎します。私に連絡する方法の 1 つは、Twitter で私 (@Lesleylai6) に直接メッセージを送ることです .

2021 年 3 月 29 日更新:多数のリソースを追加します。

何年にもわたって、多くの人が C++ の学習について私に助けを求めてきました。このリソースのリストが、C++ を初めて使用する学習者に役立つことを願っています。

C++ を始めるにあたって誰かにアドバイスを求められるときは、まず自分のこれまでの経験について尋ねます。プログラミングを学び始めたばかりで、最初の言語として C++ を学ぶことに決めた人もいれば、C++ を限られた量しか学んでいないが、学びたいと思っている人もいます。もっと、そして彼らの何人かはすでに他の言語でベテランをプログラミングしています.あなたの経験に応じて、おそらく別の材料から始めたいと思うでしょう.そして私はこの投稿でそれらのそれぞれの背景に対応しようとします.

ただし、常に本を読んだりビデオを見たりすることは、最善の学習戦略ではないということを述べておきたいと思います。どの段階にいても、アイデアをコードに適用すると学習がはるかに簡単になります。コーディング プロジェクトが役立ちます。

学習を始めたらどうなるかプログラムを作成し、最初の言語として C++ を選択しますか?

初心者の場合、チュートリアルが間違いを犯しているのか、それとも悪い習慣を助長しているのかを見分けるのは難しいため、「最高のものから学ぶ」ことだけが重要です。

書籍については、Bjarne Stroustrup (C++ の生みの親) の「Programming:Principles and Practice Using C++ 第 2 版」を出発点としてお勧めします。

チュートリアル ビデオに興味がある場合は、Kate Gregory の Learn to Program with C++ をご覧ください。#include discord サーバーに参加する場合は、彼女にメッセージを送って試用コードを取得することもできます。

以前とさらに詳しく知りたいですか?

C++ の経験が限られている場合はどうでしょうか?大学のデータ構造コースで既に C++ を学んでいるかもしれませんし、C++ を使用するオンライン チュートリアルに従っているかもしれません。私の個人的な経験と聞いたことから、ほとんどの大学のプログラミング コースまたはオンラインチュートリアルは問題のあるプラクティスを教えますが、講師は言語をよく理解していないことがよくあります。したがって、C++ に関する以前の誤解を相殺するために、「最高の教材から学ぶ」ことが特に重要です。

書籍については、Bjarne Stroustrup の「Programming:Principles and Practice Using C++ 2nd edition」を引き続きお勧めします。ビデオ チュートリアルについては、Kate Gregory の C++ Fundamentals In including C++ 17 を試すことができます。

私がベテランだったらC++ について詳しく知りたいですか?

すでに他の言語の熟練したプログラマーであり、C++ を深く掘り下げたい場合は、より速いペースで教材を選択できます。

おすすめの本については、Bjarne Stroustrup の「The C++ Programming Language (4th Edition)」は、私が今まで読んだ中で最もよく書かれた本の 1 つですが、この本は C++11 で書かれており、その後の開発の一部が欠けていることに注意してください。この本も非常に分厚いので、短い紹介が必要な場合は、「A Tour of C++ (Second edition)」をお試しください。

私は C++ について十分に理解していると思います。次は?

したがって、上記の資料に何ヶ月も費やし、基本的な C++ の概念を十分に理解していると感じます。

経験豊富な C++ の人々にとっては、いいえ、その概念について話しているわけではありません 😃.

C++ を理解しているかどうかを確認するサニティ チェックは、いくつか例を挙げると、次のトピックに精通しているかどうかです。

  • constの使い方
  • テンプレート
  • リファレンスとポインタ
  • 標準ライブラリの使用、特にイテレータとアルゴリズム
  • RAII
  • デストラクタ
  • コンストラクタと代入をコピーして移動
  • ムーブ セマンティクス
  • 演算子のオーバーロード
  • ラムダ式と関数オブジェクト
  • 未定義の動作

C++ を実際に使用するときが来ました.C++ はさまざまな目的で使用されており、特定の分野で C++ を使用することは、おそらく C++ 言語自体よりも重要です.また、より広範な C++ エコシステムに時間を費やすのもおそらく良い時期です. 、Catch2 などのライブラリのテスト、CMake などのビルド システム ジェネレーター、Conan や vcpkg などのパッケージ マネージャーなど。

考慮すべきもう 1 つのことは、別のプログラミング言語の学習を開始することです。特に、この時点で C++ しか知らない人にとっては。 Lisp の方言。

そうは言っても、まだたくさんあります C++ 言語自体について学習します。そして、まだ比較的最新で、私が楽しんだいくつかのリソースをリストしようと思います:

「C++ プログラミング言語 (第 4 版)」を読んでいない場合でも、お勧めします。他にもお勧めしたい本がたくさんあります:

  • スコット・メイヤーによる「Effective Modern C++」
  • Jason Turner による「C++ ベスト プラクティス」
  • Nicolai M. Josuttis による「C++17 - 完全ガイド」

一部の書籍は、次のような言語の特定の領域に焦点を当てています:

  • David Vandevoorde、Nicolai M. Josuttis、Douglas Gregor による「C++ テンプレート - 完全ガイド、第 2 版」
  • Arthur O'Dwyer による「C++17 STL のマスター」
  • Ivan Čukić による「C++ での関数型プログラミング」
  • Anthony Williams による「C++ Concurrency in Action、第 2 版」

カンファレンス ビデオ

カンファレンス ビデオも、C++ について詳しく学ぶための優れたリソースです。彼らはさまざまなトピックに焦点を当てています。それらの多くは本で見つけるのが難しいです。また、コミットメントも少なくて済みます (ランチタイムに動画を 1 時間視聴するだけです)

初心者にも優しい私のお気に入りのいくつかを次に示します。

  • CppCon 2019:ケイト・グレゴリー「ネーミングは難しい:もっと上手くやろう」
  • CppCon 2018:ケイト・グレゴリー「シンプルさ:初心者だけではない」
  • CppCon 2017:Kate Gregory「今すぐ使い始める必要がある 10 のコア ガイドライン」
  • CppCon 2017:マット ゴッドボルト「コンパイラは最近何をしてくれましたか?コンパイラのふたを外す」
  • Going Native 2013:Sean Parent "C++ Seasoning"
  • CppCon 2014:Herb Sutter "Back to the Basics! Essentials of Modern C++ Style"
  • CppCon 2015:Bjarne Stroustrup「優れた C++14 の記述」
  • CppCon 2018:ジェイソン ターナー「応用ベスト プラクティス」
  • CppCon 2017:ジェイソン ターナー「実用的な C++17」

コミュニティ

C++ コミュニティの多くの人々と私は、ダイレクト メッセージの質問にいつでも喜んで答えます。ただし、私、またはオンラインで連絡できるほとんどの人は、経験が限られています.

人々の知恵を最大限に活用するには、プログラミング コミュニティに参加する必要があります。そうすれば、公の場で質問をして、複数の人から回答を得ることができます。 2

プログラミング コミュニティに積極的に参加することには、仕事に関する情報を入手したり、より多くのソーシャル サポートを得たりするなど、他にも多くのメリットがあります。

#include

#include は、参加するのに最適なコミュニティです。その使命は、支援を必要としている人々に会議の奨学金を提供することですが、ほとんどの人は、その不和サーバーに参加して、たむろして C++ について話すことができます。

ローカル ミートアップ

North Denver Metro C++ Meetup に参加したことは、大学時代の私にとって最良の決断の 1 つです。現在、ほとんどのミートアップがオンラインで開催されているため、執筆時点でミートアップに参加するのが難しい時期であることは理解しています。時間がある場合は、いくつかのミートアップに参加してみてください。オンライン ミーティングには、物理​​的なミーティングと比較していくつかの利点もあります。たとえば、コミットメントが少なくて済み、世界中のミートアップから選択できます。

カンファレンスへの参加

C++ に真剣に取り組んでいる場合、カンファレンスは志を同じくする人々に出会える絶好の場所です。C++ カンファレンスは世界中で開催されています。

ミートアップと同様に、執筆時点での問題の 1 つは、ほとんどの C++ カンファレンスがオンラインでホストされていることですが、それでも検討する価値はあります。ここでは、定期的に開催される C++ カンファレンスまたは C++ を大きく取り上げたカンファレンスの一部を、Twitter ハンドルと Youtube チャンネルと共に示します。 :

  • CppCon (@CppCon) [Youtube] (米国ベース)
  • C++Now (@cppnow) [Youtube] (米国を拠点とし、上級者向けに調整)
  • ACCU (@ACCUConf) [Youtube] (英国を拠点とするさまざまなプログラミング言語ですが、C++ コンテンツが多数あります)
  • Meeting C++ (@meetingcpp) [Youtube] (ドイツ語ベース)
  • emBO++ (@emBO++) [YouTube] (ドイツ語ベース)
  • Pacific++ (@pacificplusplus) [Youtube] (オーストラリアベース)
  • C++ on Sea (@cpponsea) [Youtube] (英国ベース)
  • Core C++ (@corecpp) [Youtube] (イスラエルベース)
  • Code::Dive (@code_dive_pl) [Youtube] (ポーランドベース)
  • Code Europe (@code_europe) [Youtube] (ポーランドを拠点とするさまざまなプログラミング言語)
  • NDC Conferences (@NDC_Conferences) [Youtube] (複数の場所、異なるプログラミング言語) 3

ISO C++ Web サイトにカンファレンスのリストがあります。

ポッドキャストを聴く

2020 年に登場したいくつかの新しいポッドキャストを含む、多数の C++ ポッドキャストがあります:

  • CppCast
  • cpp.chat
  • TLB ヒット
  • ADSP:ポッドキャスト
  • 診断不要
  • 2 の補数

ブログのフォロー

RSS を使用して技術ブログを追跡しています。RSS も試してみることを強くお勧めします。

何百ものブログをフォローしています 4 、C++ やその他のさまざまなトピックを含みます。私の頭に浮かんだ最高の C++ トピックをいくつか紹介します:

  • 流暢な C++
  • アーサー・オドワイヤー
  • サッターズミル
  • モダン C++
  • 牧草地
  • フーナサン::blog()
  • バリー・レヴジン
  • 人工::精神
  • Bartek のコーディング ブログ
  • C++ を簡素化
  • ビデオ コルテックス
  • シャフィク・ヤグモア

このブログには RSS フィードもあります。

ブログでは、非常に高度なトピックについて話している場合があることに注意してください。

ツイッター

Twitter に参加するかどうかは、個人の好み次第です。一方、Twitter は、プログラミング コミュニティと直接やり取りし、他の人が何をしているかを知るための優れたプラットフォームです。また、個人的には、Twitter は私が知っているプラ​​ットフォームです。一方で、Twitter には、すべての先延ばしや運命のスクロールという欠点があります。目にするツイートの中には、気分を害するものもあります。私の提案は、少なくとも Twitter を試してみることです。

C++ の Twitterverse に慣れていない場合は、Shafik Yaghmour が C++ 開発者のリストを持っているので、フォローする人を見つけるための出発点として使用できます。

その他のリソース

言及する価値のあるその他のリソースもいくつかあります。優れたオンライン ツールもあれば、ビデオ シリーズもあります。

  • cppreference は、C++ 言語と標準ライブラリの参照用のサイトです。通常、他のサイトよりもはるかに正確で最新です。
  • Compiler Explorer は、C++ およびその他の多数の言語をサポートするオンライン コーディング環境です。プログラムのコンパイル済みアセンブリを表示し、プログラムを実行できます。多くの場合、古いコンパイラが付属しているほとんどのオンライン C++ コーディング環境とは異なり、コンパイラ エクスプローラーでは、最新のコンパイラを含む多くのコンパイラを選択できます。
  • Quick C++ ベンチマークは、C++ のクイック ベンチマークを実行するためのオンライン ツールです。
  • C++ Insights は、コンパイラがラムダ式や範囲ベースの for ループなどの「シンタックス シュガー」を舞台裏でどのように変換するかを示す貴重なツールです。 C++ ラムダ チュートリアルの投稿で使用しました。
  • 今週の C++ ヒント
  • Kate Gregory の STL アルゴリズム コースは、C++ 標準アルゴリズムについて学び、理解するための優れたリソースです。
  • C++ Weekly は、さまざまな C++ トピックに関する Youtube チャンネルで、毎週投稿されます。

参考文献と参考文献

  • 「C++ を教えるための SG20 教育と推奨ビデオ」。クリストファー・ディベラ 、2021年、https://www.cjdb.com.au/sg20-and-videos。 2021 年 1 月 15 日にアクセス
  • 「参照とリンク」. #インクルード<C++> 、2021年、https://www.includecpp.org/resources/references/。 2021 年 1 月 16 日にアクセス
  • ヤグムール、シャフィーク。 「C++ の学習を開始する場所と使用するリソース」. Shafik Yaghmour のブログ 、2019 年、https://shafik.github.io/c++/learning/2019/09/05/getting_started_learning_cpp.html。 2021 年 1 月 16 日にアクセス
<オール>
  • Shafik Yaghmour、Kate Greogory、Dwight Browne に感謝します。↩
  • オンラインで質問するのは芸術です。質問の言い回しが不十分だと、人々はどう答えたらよいかわからなくなります。さらに、礼儀正しくすぎて、質問の言い回しが不十分だと指摘できないことがよくあります。 Kate Gregory の C++ コーディングのヘルプを依頼する方法は、オンラインでヘルプを依頼する方法に関する優れた読み物です。↩
  • 上記のリンクの一部は、shafik/cpp_youtube_channels↩ から収集されています
  • 私がフォローしているブログをすべて見たい場合は、この要旨にアクセスしてください。↩