【再録】大規模プロジェクトのソースコードを学ぶ方法

Unreal Engine のソース コードは約数百万行あります (正確な統計はありません。以下の純粋なコード フォルダーのスクリーンショットを参照してください)。これは、1998 年に Epic が独自に開発した 3D ゲームである Unreal にまで遡ることができます。このような完全な機能セットを提供するゲーム エンジンのコードは非常に複雑であることが想像できます。したがって、学習の開始時に、すべてのソース コードを最初から最後まで読むことが目標ではなく、学習目標を決定した後、特定のモジュールの内容を順序立てて分類することであることを明確にする必要があります。 。

ここに画像の説明を書きます

ここではまず概要を簡略化して、各項目について詳しく説明します。

準備: 大きくて継続的な時間 (細かい時間はクラス関係の整理を中断しやすい)、見つけやすい IDE またはツール (VS、Notepad++ など)、クラス図ツール (staruml、エドローなど)

学習手順(簡易版):

  • 1. 学習するモジュールを決定し、公式ドキュメントや関連するまとめ記事を検索し、大まかな学習内容と目標を整理します。
  • 2. プログラムを実行し、パフォーマンスを観察します。
  • 3. ソース コードを実行し、ブレークポイント デバッグし、ソース コードの実行プロセスを最初から追跡し、関数スタックに注意を払います。
  • 4. クラス図とフローチャートを描き、最初に遭遇した重要なクラスを記録し、各クラス間の関係を示します。
  • 5. 問題を記録する、理解できなかった授業や内容を問題の形で記録する
  • 6.記事やメモを書き、残った問題を一つずつ解決してみます

2 ~ 6 は継続的に繰り返す必要がある場合があります


学習手順(詳細版):

  1. 公式ドキュメントや関連するまとめ記事を探します。
    たとえば、ネットワーク モジュールを学習したい場合は、まず公式ドキュメント、フォーラム、Wiki でネットワークに関連するすべてのコンテンツを確認します。このとき、次のような問題を解決しようとします。ここの記事が最も権威があり、エラー率が非常に低いため、まず公式ドキュメントにアクセスすることが非常に必要だと思います。次に、Google や Baidu にアクセスして、関連する記事や投稿を検索します。同時に、いくつかの技術 QQ グループに参加することもできます (水に関するグループがある場合は、思い切ってやめて、質の高いコミュニケーション グループをいくつか残しておきます)。これらの記事や資料に目を通してください。現在、より優れた技術 Web サイトを見ることができるのは、一般に各技術に対応する公式 Web サイト (フォーラム)、StackOverflow、Zhihu、ブログ ガーデン、短冊、CSDN、一部の個人 Web サイトなどです。もちろん、一部の Web サイトには本格的なコピーがあります。問題を貼り付ける場合は、フィルタリングする必要があります。原文へのリンクが見つかったら、原文で読んでみると、原著者の優れた記事がさらに多く表示される可能性があるため、お勧めします。

  2. プログラムを実行するときは、さまざまなパラメータを調整してさまざまな状況を実行し、そのパフォーマンスを観察して推測や結論を検証する必要があります。
    たとえば、休止状態のアクターのプロパティが正常に同期できるかどうか、クライアントのプロパティがサーバーのプロパティと同じである場合にコールバック関数が実行されるかどうかなどです。プログラムを実行すると迅速に結論を導き出すことができ、その結論に基づいてより迅速かつ正確に分析を行うことができます。効率を向上させるには、最初に別の構成や GM などを設定し、プロジェクトの実行中に実行内容を動的に変更することが最善です。これは、大規模なプロジェクトは一般的にコンパイルされた言語であり、頻繁に変更する必要がある場合があるためです。コンパイルして再実行するコード。

  3. デバッグは最も重要なステップと言えますが、詳細の 80% は、デバッグ中にここで関数が実行されるタイミング (関数ブレークポイント) を理解する必要があります。各ステップでの各属性の値は何ですか? プロパティ値はいつ変更されますか (条件付きブレークポイント)? 完全な実行フロー (関数スタック) はどのようなものですか? これらの問題を解決するには、少しずつ追跡してデバッグし、最終的に解決する必要があります。

  4. 多くの人は絵を描く習慣がないかもしれませんが、これはフレームワークの理解を大幅に向上させることができるため、個人的には必須のリンクだと思います。複雑なプロジェクトの場合、各モジュールには多数のクラスが含まれます (純粋な C を除く)プロジェクト)、クラス間の関係は複雑で、結合を減らすためにさまざまな設計パターンが使用される可能性があるため、コードを読むのが大幅に難しくなります。3 つまたは 4 つのクラスを読むと、完全に混乱する可能性が非常に高くなります。する。たとえば、UE4 の属性同期モジュールを見ていたとき、さまざまなクラス間の関係がまったくわからなかったので、クラスを見つけたらそのクラス図を描き、関連するクラスを見つけたらそれらの関係を記録しました。 , そして最終的に以下のような簡略化されたクラス図が得られました。調べてみると、両者の関係を一言で要約できます。もちろん、クラス図以外にも、フローチャートやシーケンス図、さらには便宜的に考え出した「モジュール関係図」などもありますが、このとき、図の種類や仕様は実はそれほど重要ではありません。彼らはあなたが理解するのを助けることができます。ここに画像の説明を書きます

  5. 他人から出題される質問と自分から出題される質問の2種類が収録されており、
    無数の質問が用意されています。この時点では心配せず、重要な順に解決し、簡単な問題をインターネットで検索してください。それでも解決しない場合は、問題を書き留めて学習を続けてください。あるレベルまで深く掘り下げると、問題は自然に解決される可能性があります。
    自分自身に与える質問: 他人から与えられる質問を解決すると、半分以上は理解できるはずです。しかし、誰かが書いた記事ですべてを網羅することは不可能であり、自分自身でより深く疑問を掘り起こし、自分で答えていくことで、他の人よりも理解が深まり、自分の価値観をよりよく反映できるようになるのです。

  6. 記事を書くこととnoteを書くことは違いますが、どちらも意味があるので、
    上記の手順に比べて記事を書く必要はないと思います、完璧を求めて時間を捻出する人には向いています。あなたが書いたものは他の人が読むものなので、あなたの目的は他の人にそれを明確にすることです。記事を書くときは、自分の言ったことは本当に正しいのか、確信があるのか​​、総合的に考えたのかを考えます。このような自虐の元、知識体系を改善し、不正確と思われる記事の内容を修正するために最善を尽くします。最終的に読者に明確に伝えることができれば、本当にそうなります。
    noteは記事を書くよりずっと楽で、自分がまとめたことや学んだことを記録するだけなので、あまり考えなくて済みます。記事を書くほど完璧ではありませんが、このプロセス中にさらに多くのことを考え、その後の学習プロセスで学習経験をすぐに思い出すこともできます。

備考: このプロセスを初めて実行する場合、非常に長くて難しく、私のように最初に十分な知識がない場合、ほぼすべてのステップで多くの学習と検索が必要になります。しかし、それに固執する限り、最終的には多くのことを得ることができ、他のモジュールのソースコードを読むのがはるかに簡単になることがわかります。
上記は私がソースコードを学ぶための単なる方法であり、すべての人に適しているとは限りませんし、さらに改善できる箇所はまだたくさんあります。

最後に、時間は限られているため、ツールを使いこなしたいだけであれば、すべてを完全に理解する必要はないことを強調したいと思います。学ぶ姿勢でソースコードの詳細を本当に研究するのであれば、多くの時間を費やしてそれに固執する準備をしてください。

おすすめ

転載: blog.csdn.net/hechao3225/article/details/113752436