勝者は次のとおりです:

先週、クイズを始めました。その対価は、スロボダン・ドミトロヴィッチの著書「Modern C++ for Absolute Beginners」の 5 つのバウチャーのうちの 1 つを獲得するためのものでした。

あなたの課題は、次の質問に答えることでした:

  • C++ を学ぶときの最大の課題は何でしたか?時間を戻すことができるとしたら、今とは違う方法で何をしますか?
  • C++ の初心者に何かアドバイスはありますか?

私たちの意見では、最良の 5 つの回答を提示する前に、非常に興味深い回答を提供してくれた 20 人を超える参加者に感謝の意を表したいと思います。一人一人が異なる視点を持っていました。手短に言うと、ここに 5 つの勝者があります。

  • ニコ・リベラト・カンディオ
  • イヴィツァ・ボゴサヴリェビッチ
  • ガブリエル・バレンズエラ
  • ドミニク・キューベリック
  • ディートマー・シュルツ

あなたの電子メール アドレスを apress に送信し、彼らからご連絡いたします。

ここに引用された答えがあります。いくつかのタイプミスを修正しました。

C++ を学習する際の最大の課題は何ですか?時間を戻すことができるとしたら、今とは違う方法で何をしますか?

ニコ リベラト カンディオ

私の意見では、C++ を学習する際の大きな課題の 1 つは、言語自体に対する「恐怖」を克服することです。何年も前に、文学の本やリソースには、言語を一般的にアクセス可能で簡単に学習できるようにするためのものが実質的に存在しなかったことを覚えています. C++ の書籍 (Bjarne の優れた書籍 Tour of C++ を除く) は複雑で、まったくの初心者には高度すぎて詳細です。

当時を振り返ると、実用的なアプローチ (hackerrank ビデオ + 演習、当時はリソースがなかった、Udacity など) を通じて、言語を学ぶためのシンプルでアクセスしやすい方法を優先していました。おそらく、実用的な方法で基礎 (I/O、クラスと OOP、文字列、STL など) にもっと焦点を当ててから、より高度なトピック (テンプレート、ラムダなど) をつかみ始めるでしょう。

イヴィツァ・ボゴサヴリェヴィッチ

間違いなくテンプレートです。私はパフォーマンス エンジニアとして働いており、テンプレートはその不可欠な部分です。コードの重複なしに、それぞれが特定のケースに合わせて最適化されている、同じ関数の複数のバージョンを使用できます。型ごとに個別のコンテナーを用意することで、コンパイル時に高速なポリモーフィック コードを作成できます。また、テンプレートを使用すると、それぞれに複数の関数を含めることができます。

過去に戻れたら、間違いなくテンプレートをもっとよく学べるはずです.可変個引数テンプレート、コンパイル時のテンプレートを使用した再帰関数など。STL で利用可能なものよりも高速な可変個引数テンプレートを使用する多態性オブジェクト用のカスタム配列コンテナーを作成しました (見たい場合はリンクを提供できます)。

ガブリエル・バレンズエラ

私にとって最大の課題は、メモリ管理を理解することです。 C++ は、アセンブラーを抽象化した最初のプログラミング言語の 1 つである C から派生しています。 C は関数 calloc()、malloc() および free() を使用してメモリ管理を支援するようになり、このベースでオブジェクト指向パラダイム (OOP) を導入して C++ を導入し、C の行に従い、近代化された新機能を導入しました。利用可能にします。
私が初めて C++ を学んだのは、大学の工学部 1 年生のときでした。さまざまな方法でやりたいことがたくさんありました。新しい標準について学び、コンパイラについて学び、コンパイルされた言語の意味をよりよく理解し、スマート ポインターを学び、他のトピック間の生のポインターよりも効率的である理由を確認してください。

ドミニク キューベリック

C++ の学習を始めたばかりの私にとっての最大の課題は、有効で最新の有効なリソースを実際に見つけて、得られたすべての混合情報を区別することです.
時間を戻すことができれば、間違いなくもっと早く C++ を学ばなければなりません.

ダイエットマー シュルツ

.NET と C# を導入したことで、私は非常に幸運になりました。私は C++ を酷評し、C# と .NET がダングリング ポインターとメモリ リークに関する C++ の問題を解決すると本当に思っていました。 boundchecker や bugtrapper などのツールはもう必要ありません。
-->なんてナンセンス!もちろん、C# を使用した開発は高速化され、循環参照や null 参照の既知のトラックへの移行も高速化されました。
そして、知的財産を保護するために、これらのモジュールには C++ を使用する必要がありました。 C# と C++ の間のバインディング部分は、Microsoft のマネージ C++ で実装されました ... イライラします。

C++ の初心者にどのようなアドバイスをしますか?

ニコ リベラト カンディオ

基本から始めて、実践的なアプローチを優先します。理論に費やす時間の 50% に基づいたスケジュールに従い (I/O の学習など)、実践的な演習で理論を適用します。

イヴィツァ・ボゴサヴリェヴィッチ

C++ は難しいです。言語は複雑で、学ぶべき癖がたくさんあります。しかし、まさにそのため、高速で強力です。ですから、心配する必要はありません。最も一般的なことはすぐに理解でき、その時が来れば他のことも学べます。

ガブリエル・バレンズエラ

しばらくお待ちください。 C++ を学ぶことは、山を登るようなものです。フィニッシュ ラインは遠く、到達できないように見えますが、一歩一歩 (どんなに小さくても) 道を終えるところまで少し近づいています。その他のアドバイスとしては、間違いを犯しても失敗するという意味ではありません。さらに良いことに、成功よりも間違いについて多くを学びます。

ドミニク キューベリック

まあ、私自身初心者なので、一番効果的だと思うアドバイスは、よく読んで、コード コードをコーディングすることです。

ダイエットマー シュルツ

単純な C から始めて C++ に移植するのではなく、コンテナーを自分で開発する代わりに、できるだけ STL やその他のライブラリを使用してください。ポインターを使用する際は、常に所有権を意識してください。コンパイラがリリース モードで発行する警告も必ず確認してください。デバッグ ビルドでは得られない非常に重要なヒントがある可能性があります!

もう一度。すばらしい回答をありがとうございます。

モデルヌ C++、