他のコードをどのように読みますか?[閉まっている]


23

ほとんどすべての上級プログラマーは、他の専門家のコードを読むことは非常に役立つと言っています。通常、彼らはオープンソースに助言します。

あなたはそれを読むかどうか?もしそうなら、コードを読む手順はどれくらいの頻度で何ですか?また、初心者がSVNを扱うのは少し難しいです-ファイルの束。解決策は何ですか?

回答:


25

あなたはそれを読むかどうか?

はい。

もしそうなら、どのくらいの頻度で

毎日。常に。私は多数のオープンソースプロジェクト(主にPython関連)で作業しており、最も正確なドキュメントであるため、ソースを読む必要があります。

そして、コードを読む手順は何ですか?

あの 開いて読む。

また、初心者がSVNを扱うのは少し難しいです-ファイルの束。解決策は何ですか?

開いて読む。その後、詳細をご覧ください。

簡単ではない。簡単なことは何もありません。理解するための王道はありません。仕事が必要です。


答えてくれてありがとう。コードが良いかどうかを定義する方法は何ですか?すべてのオープンソースプロジェクトが実際の専門家によって行われるわけではないのですか?
セルゲイ

1
@Sergey:「コードが良いかどうかを定義する方法は何ですか?」コードを読んでください。「良い」は主観的です。それが役に立ち、あなたがそれを理解できるなら、それは良いことです。混乱したり、実際に機能しない場合は、良くありません。保守性、安全性、適応性、高パフォーマンスなど、多くの多くの品質属性があります。コードは、ある方が得意で、別の方が得意ではありません。
S.Lott

7
私は抵抗することができませんでした:osnews.com/images/comics/wtfm.jpg
ゲイリー・ウィロビー

@Sergey-たとえそれが今までに書かれた最大のコードであっても、あなたの経験のレベルのためにそれを読むことができない場合、それはあなたに何の役にも立ちません。あなたはそれをあなたの時間の最善の利用法ではないと見るかもしれませんが、あなたは不完全に書かれたコードにさらされることになるので、あなたはその違いを学ぶかもしれません。S.Lottが言ったように、それは仕事と時間がかかります。
JeffO

小説を読むように座ってコードを読むことができる人を賞賛しますが、時々それは少し退屈です。私にとって「コードを読む」とは、実際に行うアクティビティを説明するものではないことに気づきました。私がしていることのより良い言い回しは「コードの理解」です。コード読み取りに関する長い記事を書きました-technikhil.wordpress.com/2010/07/06/how-to-read-code-a-primer
Nikhil

9

あなたが抱える難問にはいくつかの層があります。まず、いわば鳥瞰図である高レベルから始めます。プロジェクトをチェックアウトすると、ディレクトリ構造に多数のファイルが作成されます。それは、オープンソースであろうとクローズドソースであろうと同じです(ソースコードは結局ソースコードです)。だからこれから始めましょう:

  • ソースファイルはどのように構成されていますか?ファイルの名前またはそれを含むディレクトリの名前で、中身を見つけることができますか?プログラマは、予測可能な名前と論理構造を好む傾向があります。特定の問題をどこで見るべきかについて大まかな考えを得ることができるはずです。
  • アプリケーションの性質は何ですか、それはWebベースのコマンドラインGUIですか?これが重要な理由は、実行のトレースを開始する場所を知りたいからです。Webベースの場合は、アプリがリクエストの処理を開始する場所から開始する必要があります。それがフレームワーク上に構築されている場合、さらに良いです。フレームワークを理解したら、通常はそこにあるコードを十分に理解できます。それ以外の場合は、コマンドライン/ GUIアプリのそれぞれのエントリポイントから開始します。
  • 紙と鉛筆を手に入れるか、運が良ければホワイトボードと乾式消去マーカーを入手してください。コンポーネントに名前を付けて(またはコードで提供されているものを使用して)、矢印の付いたボックスの間に線を引き、物事の処理方法を確認します。あるいは、アルゴリズムを見ている場合は、操作方法を理解してスケッチできるようにデータ構造をスケッチします。

練習が必要ですが、間違いなく実行可能です。アプリケーションが使用しているライブラリとフレームワークについて理解すればするほど、コードを整理する方法と、特定の質問に対する答えを探す場所がわかります。一部のコードは、特にかなり間接的である場合、追跡するのが少し難しくなります。だからこそ、鉛筆と紙が必要です。最終的にあなたの頭の中で電球が消え、あなたはそれを手に入れます。それは、コードの残りの部分を読むことが非常に理にかなっているときです。


コード読み取りの1つの側面は抽象化です。ソースがどのように構成されているかを調べるなどのことは、間違いなくコード読み取りのプロセスを抽象化します。
デヴィッド・ガオ

5

小説を読むようなものではなく、参考書を読むようなものです。良い方法は、チェックインメッセージから最近修正されたバグを選択し、変更内容の差分を取り、問題と解決策の両方を理解するまで関連する部分を読むことです。よく公開されているセキュリティの脆弱性は、フォーラムで多くの議論があるため、選ぶのが楽しいバグです。次に、バグトラッカーから「ぶら下がっている果物」のバグの1つを選び、自分で修正する方法がわかるまで読んでください。専門家が行うコード読み取りのほとんどは、バグの修正や機能の追加の過程で発生します。

通常、最高のコードサンプルはほとんど目立ちません。一度も読むことなく、すぐに理解できます。優れたコードは通常多くのドラフトを通過しますが、非常に簡単に記述できるように見えます。それはあなたが考えた最初の方法でなくても、もちろん与えられたコードがそれをする明白な方法であるという逆説的な感覚を生み出します。

そのようなコードに出くわしたら、それを書いた洞察と関連する設計原則を理解するようにしてください。そうすれば、将来同じような状況に陥ったときに同じ原則を適用できることを願っています。


4

複雑な関数を読み取るときによく使用するトリックの1つは、コードセグメントは、ロジックを変更せずに、より読みやすいものにリファクタリングを開始することです。


1
+1:私も。//かつて、リファクタリングに気づき、時間を無駄にしていると非難する上司がいました。彼は理解できませんでした。なんてばか。
ジムG.

2

「ファイルの束」にどう対処しなければならないのですか?文書化されていない限り、組織の予備知識がないことを除いて、独自のコードを書くときと違いはありません。

あなたが主張するプログラマとして、「ファイルの束」からプロジェクト構造を理解できない場合、それは非常に組織化されていないプロジェクトであるか、あなたが不適切なプログラマ(または極端な場合、両方)です。

読み始め、いくつかのエントリポイントまたはその他の重要なピボットクラス/メソッドを見つけて、そこからすべてがどのようにまとめられるかを理解してください。すぐにではなく、時間がかかりますが、ドキュメントがまったくなくても実行できます。


3
「理解を築く」ために「時間がかかる」は、ほとんど「ハード」の定義です。毎日対処することが困難であるからといって、それほど難しくはありません。「この変更はどこで行いますか?」専門家の間でも共通の質問です。また、ソース管理と大規模なコードベースの処理は、大学教育における大きな穴の1つです。大学で複数のソースファイルを必要とする1つまたは2つのプロジェクトを行いましたが、最大で10個のファイルしか作成できなかったと思います。
カールビーレフェルト

0

別のプロジェクトのコードを読むときに期待できる最善のことは、APIであろうとソフトウェアであろうと、変数、関数、マクロ名は曖昧に省略したり名前を付けたりせず、その意図を理解できるようにすることです。

しかし、それ以外には、言語、プログラミング手法、そして複雑なコードに飛び込むことができるコードの目的自体にまともな知識が必要です。

私は現在、Luaがその魔法の一部をどのように実行しているかを見ようとしていますが、多くの識別子が漠然と命名されており、どの行が試行されているのかわからない点まで省略されている点に到達しています私が知っていることを行うには、関数コードのある時点で行う必要があります...頻繁に使用される単一文字の変数と、かなり省略されたマクロ/関数名が頭を抱えています。


0

@Berin Loritschが示唆したように、「最初に、高レベルで開始、鳥瞰図」を見てから、もしあれば単体テストや統合テストを探すことができます。

ユニットテストは、(API-が)仕事の詳細をどのように見るのは興味深いです。

integrationtestは通常、businesprocessesの概要を提供します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.