DUICUO

大規模オープンソースソフトウェアを読むための4つのヒント

[[339183]]

最近、AndroidのサポートツールとAndroid Studioの実装、そしてそれらがどのように連携してAPKをビルドするかを研究しています。これは、システム内の様々なモジュール間の関係が非常に複雑で、異なるモジュール間でかなりの量のコード(コード行数と関数の長さの両方において)が存在するためです。

一般的に、コードを読み始める前に、次のことを行う必要があります。

  1. コードの背後にあるビジネスプロセスを理解する
  2. 建築設計の背後にある考え方を理解する

そうして初めて、主要な流れ(構造)を理解できるようになります。この点に関して、いくつかの異なるパターンを発見することができます。

  1. 他の人から学びましょう。他の人の学習ノートを研究することで、全体的な思考プロセスとプロセスを理解しましょう。例えば、Android APKの構築やAndroidリソースの最適化方法は、コードを読む際のアプローチを明確にするのに役立ちます。
  2. ソースコードの勉強中。
  3. テストとデバッグを活用します。
  4. 主なプロセスはフォークすることです。

これらは互いに独立しておらず、一緒に使用されることがよくあります。

他人から学ぶ

このモデルは迅速な学習を可能にしますが、いくつか重大な欠点があります。

  • 私が学んだことは間接的で加工されたものでした。
  • コードの一部は現実とかけ離れている可能性があります。

したがって、特定の部分の機能を素早く理解して大まかな概要を把握し、その後その部分についてさらに深く掘り下げたい人に適しています。

このモデルでは、書籍を購入して読むことで学習することをお勧めします。書籍を購入できる場合は幸運です。なぜなら、書籍はすでに体系的な処理が施されているからです。唯一の問題は、上記のコードがやや古くなっていることです。しかし、より体系的で網羅的であり、理解しやすく、情報検索のコストを削減できます。

オンラインで情報を探してみませんか?

  1. 情報を見つけるには時間の投資が必要です。
  2. 情報が詳細でない可能性があります。

詳細な情報を直接見つけることができ、それにかかる時間が短ければ問題ありません。

ソースコード研究

ソースコードの調査は時間と労力を要する作業であり、どうしても必要な場合を除いてこの方法は使いたくありません。なぜなら、文脈が十分に理解されていないため、誤解を招く可能性があるからです。

事前準備:

  1. 適切なツール。できれば実際に使える有料のもの(🐶)が望ましいです。
  2. 十分なストレージ容量。Androidのようなシステムのクローン作成には120GB、コンパイルにはおそらく200GBの容量が必要です。一方、Android Studioのソースコードのクローン作成には60GBの容量が必要です。
  3. 読書パターンを見つけます。
  4. アプリケーションを構築してみてください。実現可能かどうかはわかりませんが、もし可能であれば、多くの時間を節約できます。

ソースコードの学習は非常に要求の厳しい学習方法であり、かなりの時間の投資が必要です。

  1. コードセクション間を移動する
  2. ビジネスロジックを分析する

そこで、怠けるための良い方法をいくつか紹介します。

本を通して学習を強化しましょう。私は常に、本を読むことが学習の理想的な方法だと感じてきました。なぜなら、情報を見つけるには労力が必要であり、ほとんどの本は索引として役立つからです。

類似の再発明された車輪を見つける。興味深い技術は、必然的に多くの企業や個人によって研究され、皆が類似の再発明された車輪を作ろうとするでしょう。唯一の問題は、私たちはどこまで学ぶべきなのかということです。理解するだけなら、他人が模倣した再発明された車輪を見るだけで十分です。しかし、より深く学ぶのであれば、ソースコードまで遡って確認する必要があります。

テストとデバッグの助けを借りて

デバッグ中に直面するもう一つの課題は、私のようなエントリーレベルのMBP構成では、大規模システムのコンパイルには到底不十分だということです。この問題への良いアプローチは、テストデバッグ用のIDEを使用して、特定のコードセクションのデバッグを完了することです。(追記:この方法は、ビジネスロジックコードの開発にも適用できます。)

アプリケーションのエントリ ポイントで特定のモジュールのテストを作成することができれば、アプリケーション全体をすばやくデバッグできます。

メインプロセスをフォークする

私にとって、ソースコードだけを読むのは、問題を一時的に解決する手段に過ぎません。また、普通の人であれば、10日か半月も使わなければ、得た知識や内容をすべて忘れてしまうかもしれません(もっとも、これは良いことだとずっと思っていましたが)。

コードを読み、プロジェクトをフォークする際には、いくつかの課題にも直面します。

  1. 言語能力とパターン。ビジネスコードを書くときなど、使い慣れた言語では、クラスローダー、メタプログラミング、バイトコードといった複雑なパターンを理解する必要はありません。
  2. 新しいフレームワーク、ツール、言語の学習曲線。例えば、私の場合、Gradleプラグインのビルドメカニズムの一部を理解し、習得する必要性に気づきました。
  3. コードには大量の無駄な例外処理コードが含まれています。
  4. 他人のコードはゴミです。(追記: 私自身のコードも 1 か月後にはゴミになります。)

したがって、他にもいくつかのパターンがあります。

  1. モジュールの境界を定義します。アーキテクチャ図を見つけて、それを使用してモジュールを分割します。
  2. セグメント実行。システム全体をモジュールごとに理解します。例えば、IDEAプラグインの記述方法、IDEAプラグインとGradleの連携方法、Gradleプラグインの原理と記述方法、Gradleが他のコマンドラインツールを呼び出す方法、コマンドラインツールの原理と記述方法などです。
  3. テスト経由で実行します。ApkAnalyser のようなツールの場合、CLI を構築する代わりにユニットテスト経由で実行できます。
  4. 別の言語を選びましょう。他の人がJava、Groovy、Kotlinで書いたアプリケーションをRustやGoで書き直すと、新しいプログラミング言語とオープンソースプロジェクトのコードという2つのことを同時に学ぶことができます。

README出力

私たちが参照しやすく、他の人が使いやすくなるように、関連するコンテンツをプロジェクトの README に記録することがよくあります。

  • 関連文書および資料
  • 類似のオープンソースプロジェクト
  • プロセス中に出力されるコンテンツ
  • 簡単なコードの説明
  • ...

このようにして、他の人も学習の過程で同様のアイデアを得ることができます。

結論は

最後に、簡単なコスト比較をしてみましょう。

モデル料金費用対効果メインシーン
他人から学ぶ低い高い勉強
ソースコードを読んで学ぶ高い低いアイデアを理解する
メインプロセスをフォークする高い低い理解、模倣
テストとデバッグの助けを借りてより高い真ん中理解、模倣

いくつかの組み合わせパターン:

二次資料を読んで、それに基づいて主要な構造を理解します。

メインの呼び出しチェーンを記述し、理想的なアーキテクチャ設計を理解します。

オープンソース ソフトウェアのテストとデバッグを通じてパラメータとプロセスを理解します。

...

この記事はWeChat公式アカウント「phodal」から転載したものです。以下のQRコードからフォローできます。転載の許可については、「phodal」公式アカウントにお問い合わせください。