序文この記事では、多くの学生が非常に関心を持っている質問、 「オープンソース プロジェクトのソースコードをどのように読むか」について簡単に説明します。 多くの大企業は面接中に非常に深いレベルのソースコードを詳しく調べることが多いため、多くの学生はソースコードを読むことで技術スキルを向上させたいと考えていると思います。 1. 最も単純なソース コードから開始します。すぐに成功できるとは思わないでください。実際には、Spring のようなフレームワークや、データベース接続プールや log4j のようなユーティリティ プロジェクトなど、さまざまな種類のオープン ソース プロジェクトが存在します。 もちろん、RocketMQ、Kafka、Redis といった非常に重いミドルウェアクラスもあります。さらに極端な例としては、Hadoop や Spark といった、数百万行ものコードを持つビッグデータクラスがあります。 したがって、多くの学生がソースコードを読みたい場合、最初に直面する問題は、どこから始めればよいかわからないことです。 ということは、オープンソース技術のソースコードをランダムに選び、山を動かした老人の精神を取り入れて、歯を食いしばって読み続ければ、粘り強く続けることで勝利が得られ、鉄の棒は必ず針に磨かれるということでしょうか? いいえ!実際、多くの学生はソースコードを読む順序、テクニック、方法を習得したことがなく、そのためソースコードを読もうとしても理解できないのです。 まず前提を理解する必要があります。例えば、KafkaとHadoopの開発者は長年の経験と非常に確かな技術力を持ち、いずれも一流の技術専門家であり、これらの優れた分散システムを非常に高い視点から設計・開発してきました。 あなたの技術力が彼らのレベルに達していないのなら、彼らが書いたソースコードを読んだだけで理解できると思いますか? それは非常に難しいでしょう。なぜなら、基礎となるさまざまな技術的詳細、分散アーキテクチャの設計概念、および関連する複雑なアルゴリズムとメカニズムは理解を超えているからです。 したがって、私の最初の提案は、ソースコードを見たい場合は、自分の技術レベルに合った最も単純なものを選択することです。 例を挙げてみましょう。普段使っているソースコードにはどのようなものがありますか?皆さんご存知の通り、Spring Web MVC、Spring、MyBatis、Spring Boot などをよく使っています。 実際、これらのオープンソース フレームワークのソース コードも単純なものではなく、オープンソースの作成者の深い技術的専門知識も含まれています。 ただし、これらのオープンソースプロジェクトは、分散システムではなく、複雑なアーキテクチャ、ネットワーク通信、I/O、その他の技術的な詳細を必要としないため、一般の人にとって比較的アクセスしやすいという点を考慮する必要があります。 これらは主に、動的プロキシ、サーブレット、HTTP プロトコル、JDBC などの低レベルの Java テクノロジに依存しています。 これらのフレームワークが依存する基礎は、ほとんどの一般的なエンジニアが習得しているので、まずはこれらのオープンソース フレームワークのソース コードをいくつか読んでみることをお勧めします。 2. 段階的に進めます。まず、基礎となる依存テクノロジを解決します。さて、数か月間の懸命な努力の末、前述の 3 つの主要な SSM フレームワークなどのオープンソース フレームワークのソース コードを読み終え、技術スキルがさらに向上したとします。 これらの改善は主に、オープンソース プロジェクトの設計哲学、コンポーネント設計、コンポーネントの相互作用、フレームワークのカプセル化などのより深い理解に反映されています。 次に、もう少し難しいソースコードを読んでみましょう。 例を挙げましょう。今、Kafkaのソースコードを読んでいるとしましょう。問題ありません。しかし、いくつか注意すべき点があります。Kafkaの基盤となる実装は、ZooKeeperに大きく依存しています。 ZooKeeper を習得していないと、Kafka も理解するのが難しいでしょう。 そのため、この時点では、まず基盤となるテクノロジーを整理する必要があります。ZooKeeperのソースコードを読み直し、ZKテクノロジーを習得する必要があります。 同様に、ZK を学習していて、Java の並行処理パッケージを多用しているなど、よく理解していない基盤技術があることに気付いた場合、ZK が自分には適していないことがわかるかもしれません。 したがって、Java 並行処理パッケージを十分に理解していない場合は、まず Java 並行処理パッケージのソース コードを注意深く調べることをお勧めします。 このようにして、まだよく知らない多くの基盤技術をたどり、1つずつ取り組むことで、基盤技術のソースコードを徹底的に研究することができます。 その後、徐々により高度なテクノロジーを学習することができ、複雑なテクノロジーのソースコードを理解しやすくなります。 3. 必ず「Hello World」から読み始めてください。ソースコードを読む際に、とても役立つヒントがあります。それは、ソースコードをローカルIDEにダウンロードして、適当にざっと目を通すだけではダメだということです。それではうまくいきません。 一般的なアドバイスとしては、オープンソース テクノロジに基づいた非常に基本的な HelloWorld プログラム (初心者レベルのプログラム) を作成し、そのコア機能を動作させることです。 たとえば、ZooKeeper のソースコードを読みたい場合は、まず ZK HelloWorld プログラムを作成する必要があります。 例えば、まず接続し、次にznodeを作成し、そのznodeのリスナーを登録します。そして、そのリスナーをトリガーし、最後に接続を閉じる、といったシンプルなプログラムです。 次に、ブレークポイントを設定し、この「Hello World」レベルのソース コードを段階的にトレースして、接続の開始と確立の方法や、基礎となるコード フローがどのようなものかデバッグおよびトレースできます。 4. 主要な側面に焦点を当て、マイナーな側面は無視します。注釈を書きながら図を描きます。ソースコードを確認すると、コアプロセスに混在する特殊なビジネスロジックの処理に混乱する人が多くいます。 例を挙げましょう。下のコードを見てください。これは私がデモのためにその場で書いたものです。 チェックユーザー(); ピアからフェッチ(); countMetrics(); ご覧のとおり、上記のコードはたった3行です。メソッド名からもわかるように、まず権限チェックなどの操作を実行し、次にコアビジネスロジックがデータを取得し、最後にメトリック統計を実行します。 多くの学生は、ソースコードを見る際、一行一行を理解しようとし、最終的には非常に深い部分まで掘り下げて完全に混乱してしまいます。そして、ソースコードの海に溺れてしまうのです。 これは実際には間違っています。これは、ソースコードを読む際の主要な原則を習得していない典型的な例です。 全体像に焦点を当て、細かいことは気にしないでください。 たとえば、上記の 3 行のコードでは、1 行目と 3 行目は見ずにスキップし、2 行目のコア ロジックに直接進む必要があります。 つまり、コアとなるコードの流れを把握するだけで十分です。重要でないコードを執拗にクリックして何度も見続けるのはやめましょう。そうすると、初心者からソースコード作成への諦めに陥ってしまうでしょう。 もう一度強調させてください! 強調してください! 重要なので3回言います。ソースコードを読むときは、まずコードの大まかな流れを把握するだけで十分だと、何度も自分に言い聞かせて、冷静さを保つ必要があります。 細かい部分が理解できない場合は、飛ばして読んでください。細部まで理解しようと執着しすぎないでください。 また、ソースコードを読む際には、できるだけ多くのコメントを書き込む習慣をつけることが大切です。 自分自身の理解を組み合わせて、ソースコードの読み取りプロセスに関する考えをソースコード内のコメントとして書き留める必要があります。 この習慣により、読みながら考えることが促進され、独自の注釈付きソースコードを持つことは貴重な資産になります。 さらに、もう一つ非常に重要な点があります。それは、たくさんの図を描く必要があるということです。 ソースコードを読みながら、そのコアとなるフローを抽出し、それを図に描いてみましょう。図の作成には、任意の描画ソフトウェアを使用できます。 人間の脳はテキストやコードよりも画像に対してはるかに敏感であることを覚えておいてください。これは脳のメカニズムによって決まります。 私が公開しているWeChatアカウントで書いた記事の多くは、様々な技術を多数の図を用いて解説しています。長々とした文章での説明に比べて、画像の方が読者にとって理解しやすく、受け入れやすいのです。 図を描くことで、ソースコードのコアフローを抽象化し、要約することができます。後で確認したり、勉強したりする必要がある場合は、図を見るだけで済みます。 5. 3回繰り返す: ソースコードを真に理解するもう一つ注目すべき点は、ソースコードを読めば読むほど理解が深まるということです。 なぜなら、初めて見るときは、前述の「全体像に焦点を当て、細かい詳細は無視する」アプローチに従うと、最初はコアではないコードが何をしているのか理解できず、多くのことを飛ばしてしまう可能性があるからです。 しかし、初めて読んだ後、自分でコメントを書いたり図を描いたりすることで、オープンソース プロジェクトのコア プロセス、アーキテクチャ、原則についてある程度理解することができました。 今、ソースコードを二度目に読むと、以前は理解できなかった多くの詳細が明らかになるでしょう。そして三度目に読むと、コードの大部分を自分で理解できるようになっていることに気づくでしょう。 したがって、どのソースコードも少なくとも 3 回読む必要があり、1 回の読み取りで完了することはできません。 6. 既存のリソースを活用する: ソース コード分析に関する書籍やブログを参照します。人気のあるオープンソースプロジェクトのソースコードを分析した書籍やブログは数多く存在します。これらは、技術に精通した専門家がソースコードを読んだ上で書いた分析や考察だと考えると分かりやすいでしょう。 しかし、他人の著作なので、ソースコード解析の本やブログをそのまま見始めると、テキストで伝えられる情報だけでは複雑なことを理解できない場合があり、理解できない可能性があります。 したがって、まずは自分で何度か読んでみることをお勧めします。ある程度理解が深まったら、ソースコード解析に関する書籍やブログを参考にしたり、他の技術者のソースコード解釈から学んだりしましょう。そして、自分のこれまでの考えと組み合わせ、ソースコード全体を解析してみましょう。このアプローチは間違いなく非常に有益です。 他の人の理解によって、自分では理解できなかった疑問や見落としていた詳細を効果的に補えることがわかります。 ただし、オンラインの多くのブログや書籍には誤ったソース コード分析が含まれている可能性があることに注意してください。 したがって、本に書かれていることをすべて盲目的に信じるのは、全く本を読まないよりも悪いのです。批判的な視点を持つ必要があります。自分の理解と矛盾することがあるからといって、必ずしも間違っているわけではありません。 7. 結論: 独自のコアテクノロジーの構築に数年を費やしてください。実際、上記のプロセスは単純に聞こえますが、実行するのは非常に困難です。 なぜなら、上記のどのステップでも、読書の過程では知らないことがたくさんあるため、難しく感じ、何度も諦めたくなるかもしれません。 結局のところ、人間の脳は難しいことに抵抗する性質があり、それは本能的なものです。私たちは心地よくリラックスできるものに自然と惹かれるのです。 しかし、人間の動物的本能と惰性を克服し、困難に正面から立ち向かい、粘り強く努力できる学生だけが、さまざまな技術的課題を真に克服することができます。 脳を活発に保ち、上記のプロセスについて常に考え続けましょう。小さな啓示を得るには1年、洞察を得るには3年、そして真の熟達を達成し、内なるチャンネルを開き、一流の技術エキスパートになるには5年、あるいは8年かかるかもしれません。 しかし、粘り強さも同様に素晴らしいものです。一度それを達成すれば、普通の人や新卒者をはるかに凌駕する、最も核となる技術スキルを身につけることができます。技術的な深みと基礎的な専門知識は、すべてのエンジニアにとって最も重要な技術的強みです。 ぜひ今から、私が紹介したテクニックを使ってソースコードを読んでみてください。自分のコンフォートゾーンから抜け出し、より広い領域に挑戦してみましょう。 ソースコードを徹底的に理解し、プロジェクトの問題点やエラーログをもとにソースコードレベルからオンラインバグを正確に特定し、神のような視点で問題を解決する満足感を直接体験してください。 |