知らない言語でコードをレビューすることは効果的ですか?


108

私は経験豊富な開発者ですが、多くのコードレビューは行っていません。Pythonで書かれたコードをレビューするように求められていますが、Pythonがわかりません。

私が知らない言語でコードをレビューすることはまったく意味がありますか?


62
接線で、CodeReview.SEにアクセスしてpythonタグを一glすることを検討してください。質問だけを見て、コードにどのようなアドバイスを与えるかを検討し、それが回答に含まれているかどうかを確認してください。


14
Pythonについてさらに学ぶための優れた方法のように思えます。面白そうに見えるものは何でも質問してください。その一部はあなたが言語を理解していないことであり、一部は合法的なコードレビュー項目です。
ダンピチェルマン

9
@RobbieDee絶対に!あなたのコードを誰かに説明することは、テディベアであっても価値がある場合が多いです。
キリアンフォス

34
あなたはそうするように求められていると言います。あなたに尋ねる人は、あなたがこのタスクを実行することはあなたの組織に価値を加えると思います。あなたがその価値の本質が何であるかを知りたいなら、インターネット上の見知らぬではなく、その人尋ねてください!その人の頭の中で何が起こっているのかわかりません。おそらく、コードの品質が非常に低いため、初心者でも問題を見つけることができます。おそらく、コードは非常に高品質なので、そこから良い習慣を学ぶことができます。誰が言えるの?誰かが価値があると考えています。その人にその価値を尋ねてください。
エリックリッパー

回答:


120

任意の感覚?はい。プログラミング言語のセマンティクスについて何も知らない場合でも、文字を読んで、一貫性のないフォーマット、コメントの欠落、不適切に選択された識別子、明らかな重複などに気付くことができます。

あなたの時間の費用を返済するのに十分な感覚、または十分な感覚?よく分かりません。これは、あなたの立場、チームのワークフローにおけるコードレビューの重要性、および十分に定量化できない他のいくつかの要因に依存します。


50
いくつかのコードレビューを行うことは、モジュール、フレームワーク、さらには言語を知るための優れた方法です。したがって、とにかく時間をかける価値があるかもしれません(そして、おそらくあなたはそれにヒントを与えられています...)言語とコードの両方に精通している人にそれを見てもらうことなしではなく、私はそのようなレビューにサインオフしません。
オーダス

8
あなたが良いドメイン知識やコードを持っている場合にも合理的にあなたは依然として高いレベルで間違った/誤解/不足している機能(あなたがが原因構文の問題にミスを発見していない場合があります)見つけることができますコメント/命名された
ダン・

4
部外者としては、フェンスポストのエラー、または等量の正しい量を適用する際のエラー、およびその種のものを見つける可能性が高くなります。
KlaymenDK

2
ブールコンテキストでの@KlaymenDK割り当ては、(少なくとも一般的には)Pythonの構文エラーです。よく書かれたPythonでは、配列/リストインデックスを直接操作することはほとんどないため、フェンスポストエラーはほとんど発生しません。(あなたがそうするときでも、通常はenumerate。を使用します。)あなたのコメントは、よく知らない言語をレビューしようとする理由の良い例だと思います。
jpmc26

1
@Mawg-自動テストの目的はそれだと思う傾向があります。言語の専門知識がありますが、コードを実際に見て /実行せずに結果を観察するだけでは、コードが実際に設計仕様を満たすかどうかを判断することは困難です(設計仕様が本質的にコードそのものである限り) 。答えが列挙する側面は、コードレビューを行うための多くの(すべてではありませんが)有効な理由をカバーしています。通常、コードレビューには、レビュー対象のコードの実行は含まれません。
アロス

59

Code Review Stack Exchangeの定期的な寄稿者として、言語に依存しない問題に悩まされる多くの質問に遭遇します。たとえば:

  • 書式設定、インデント
  • 範囲
  • ループ
  • タイプ操作

そしてリストは続きます。ただし、言語を知る必要はありませんが、それらの問題/ポイントを確認できます。

私たちのトップユーザーの何人かは、積極的に使用していない、または知らない言語でトップアンサーを持っています。私のトップ10のうち2つでも、私のマシンでコンパイルも実行もできない言語です。

誰かの擬似コードをレビューするのと同じだとさえ言うでしょう。理解していることに関連するものを観察し、コメントできる限り、あなたは大丈夫であり、関連性があります。


2
PHPプログラムへの回答書いた。これは最大の答えではありませんが、元のループ宣言はisいものであると私は主張し続けています。
Hosch250

4
私はC#をレビューし、それを書き、書いたものをレビューしてもらうことの組み合わせを通して学びました。
ラバーダック

5
あなたは、Pythonがわからない場合、あなたは...語でインデントの重要性を高く評価する可能性は低い
フロリス

2
上位の回答の2/10があなたの知らない言語であると考えています。投票者が彼らについて何か知っていると言うのは誰ですか?
マーティンスミス

私は言語を知らないが、私はまだ私の声明を事実確認し、もし私が台無しにしたら...私を信じて、私はそれについて聞く
クイル

44

一般的なアドバイス

私の意見では、これが一番下の行です。

  • 機能や一般的なイディオムを理解するのに十分な言語を知らない場合は、おそらくレビューにあまり貢献しないでしょう。
  • 言語の機能とイディオムを学びたい場合は、レビューに参加できます。あなたの焦点はイディオムを観察し、あなたにとって意味をなさないパターンと組織について質問することです。これ、問題のある領域を特定するのに役立つ場合がありますが、開発者に自分がしたことを守るように強制するという意味でのみです。知識のギャップに余地を残すような方法で質問してください。これは最終的にレビュー自体の純コストになる可能性がありますが、そのコストは知識への投資であることに注意してください。
  • 言語の機能、イディオム、および標準に慣れるまで貢献する能力は制限されます。あなたが実際に言語でかなりの量のコードを書いたまで、これが変わるとは思いません。

Python固有の考慮事項と例

Pythonを知らないという特定の状況については、特に注意が必要です。Pythonには多くのイディオムと標準的な慣行があり、その結果、良いPythonは他の言語で期待されるものとは非常に異なって見えます。(実際、私はPythonが私のコードをした際立た物事が見えると思うより良いではの言語ではなく、他の方法で回避。)PEP8超えてあなたは完全にPythonが奨励考え方を逃すかもしれない方法の良い例があります。

簡単な例を見てみましょう。このコードを取ります:

f = open('/home/me/something.txt')
try:
    content = f.read()
finally:
    f.close()

このコードに問題がありますか?Pythonを使用したことがない場合は、おそらく使用しないでしょう。問題は、Pythonでまったく同じことを行う非常に好ましいスタイルがあることです。

with open('/home/me/something.txt') as f:
    content = f.read()

これはコンテキストマネージャーです。彼らが何のために良いのか知っていますか?いつ使用するのが適切かを知っていますか?自分で作成するのが適切な時期を知っていますか?番号?そうすれば、おそらくPythonをレビューする準備ができていないでしょう。

別の例を見てみましょう。

def add_fifty(other_list):
   result = list()
   for i in other_list:
       result.append(i + 50)
   return result

x = range(10)
y = add_fifty(x)

問題が発生しましたか?問題は、この方法が完全に不要であることです。操作がこのように単純な場合、おそらく理解を適切に使用する必要があります。

x = range(10)
y = [i + 50 for i in x]

あなたがそれを見なかったなら、あなたはPythonの機能とイディオムに慣れていません。


1
最後の例では、最終的なコードを見た場合、おそらく(Pythonを知らずに)ど​​うすればよいかがわかり、お気に入りの言語で似たようなことをすることができるかどうか疑問に思うかもしれません。
gnasher729

1
@ gnasher729「確かに、Pythonが強調していることにより、他の言語ではなく、他の言語でコードの見栄えが良くなったと思います。」=)私が他の言語で知っている唯一のことは、リモートでも似ています。.NETのLINQとJava 8のStreamです。Rubyには何かがあるかもしれませんが、関数型言語は何かに近づいていると確信しています。この例での私のポイントは、Pythonに精通していない場合、それを行うことさえ知らないかもしれないので、「悪い」バージョンに挑戦することすら知らないでしょう。
jpmc26

@x = 1 .. 10; @y = map {$ _ + 50} @x;
パイプ

2
コードレビューは、特定の言語で(外部プログラマに)曖昧な構文を実装することよりも、論理エラーに関するものです。それは、アルゴリズムを完全に誤って実装するような(追加する必要があるときに除算を使用するなど)論理的なバグを見つけることです。そのため、コードは仕様どおりにはなりません。結果の出力が正しい限り、それは重要ではありません。少なくとも、このような特定の最適化について心配しているのであれば、チームコードのレビューはさらに良いでしょう。
phyrfox

3
@phyrfoxそれは単に真実ではありません。ロジックエラーは見つかるかもしれませんが、コードレビューは(または主に)ベストプラクティス、セキュリティ、パフォーマンス、信頼性、読みやすさ/保守性などに関するものでもあります。StackExchangeのコードレビュー定義はかなり注目されています。Pythonで言及した例は、「小さな最適化」ではありません。これらのパターンを使用しないPython開発者は、経験が浅く、時代遅れで、または無能です。これらは言語の基本的な要素です。
jpmc26

21

あなたはPythonを知らないので、彼らはPythonコードを正確にレビューするようにあなたに頼んだかもしれません。 チームに「愚か者」がいると便利だという経営理論があります。私はあなたに悪い名前を呼んでいるわけではありません:)アイデアは、チームがグループの思考に苦しみ、トンネルビジョンを開発するかもしれないということです。これを打破する1つの方法は、他のチームメンバーが「ばか」と考えるチームの誰か、つまり主題を知らない人を含めることです。あなたは自分自身に知らせるために質問をするでしょう、そして質問は他のチームメンバーがおそらく考えなかった視点から来ます。

あなたはPythonを知らないので、Pythonコーダーにとって普通に見えるかもしれないことは、あなたにとって奇妙に見えるかもしれません。チームが決して考慮しなかった改善を提案するかもしれません。


1
これが私の答えでした。PythonルーチンとPythonの達人のグループを指定した日には、コードをGARBAGEに追加するだけです。
dwoz

そして、多くの場合、「ばか」に何かを説明するだけの行為が「Doh!」を引き出します。「専門家」がコードが意図したとおりに機能していないことに突然気づいたとき、または重要なエッジケースを見逃したとき。また、知識の普及を始めるきちんとした方法でもあります。
TripeHound

21

コードレビューとは、スペルが正しくなく、形式が間違っている変数を検索することではありません。コードレビューを使用してそのようなものを見つける場合は、時間を無駄にせずにツールを使用してください。

コードレビューとは、初心者プログラマーによる設計の改善とよくある間違いの検出です。

私はC ++でプログラミングしているので、Pythonを十分に知らないので、あえてPythonコードをレビューすることはありません。しかし、私はJavaコードのレビューを手伝うことができました。

どの言語でプログラムするかは言わなかったが、プログラムされている言語がわからない場合、コードレビューで何が貢献できるかわからない。


23
本当に、悪い名前の変数と良い変数を区別できるツールがありますか?私はそれを見ることに本当に興味があります。
DavorŽdralo

1
@DavorŽdraloすぐにでもJavaにはCheckstyleがあることを知っています。より正式な静的分析ツールは多くの言語で一般的であり、通常、コーディング標準を強制することは、その義務の最小です。
シェーズ

9
ここでコードレビューの定義に少し違いがあると感じていますが、CR Metaに関するこの質問を思い出します:コードレビューとは何ですか?。特定の何かを除外せず、「コードレビューはXYZについてではありません」と言います。また、経験豊富なプログラマーはコードをレビューする必要がないと言っているように聞こえますが、これは私が非常に反対しています。
サイモンフォースバーグ

3
@SimonForsbergそれは私が言っていることではありません。上級プログラマーでさえ、優れたコードレビューで何かを学ぶことができます。しかし、「ここで変数のつづりを間違えた」というコメントだけがある場合は、時間を無駄にしていることになります。
BЈовић

2
@BЈовићいいえ、それはあなたが見つけることができる最悪のものではありませんが、「まだ価値のある最小の発見」にかなり近いです。
バティーン

11

コードレビュー(実際に欠陥を探すことに加えて)は、追加または変更されるコードについて、あるチームメンバーから他のチームメンバーへの良い紹介です。あなたが経験豊富な開発者であれば、何が起こっているのかをほとんど理解するのに十分に読み通せるはずです。

チームリーダーの観点からコードレビューを見てください。アプリケーション何をすべきかを理解している人(ビジネスロジック)、コードが実行していることを理解している人(実装ロジック)、そしておそらく他の数人がいます。そのすべてがどのように適合するかを知る必要がある人。


7

あなたは間違いなく唯一のレビュアーではありませんが、あなたがレビュアーの一人になる理由はたくさんあります。言語を知らないことは、コードレビューで回答する必要がある多くの質問にとって大きな障害ではありません。例として、私はこのサイトのC#タグトップ20回答者の 1人であり、C#でコンパイルされたhello worldほど多くはありません。

言語を知らなくても共有できる専門知識:

  • 領域知識。
  • 一般的なオブジェクト指向設計。
  • 一般的なプログラミング慣行:命名、明快さなど。

また、新製品の速さを知る良い方法でもあります。私は新しいチームに参加しました。そこでは、言語がよく使われていることは知っていますが、ドメインはわかりません。コードレビューに参加することで、ドメインの側面をよりよく学ぶことができましたが、まだそれらの行に沿って貢献することはできませんでした。

あなたの場合、他のレビュアーが残すコメントを見ると、新しい言語のイディオムを学ぶ良い方法になります。インタープリターはコードがpythonicであるかどうかを気にしないので、これらは他の方法で学ぶのが非常に難しい種類のものです。


5

これは双方にとって好都合な状況である可能性があります。あなたは、知識呪いによって汚染されていないPythonの処女なので、あなたは特に価値のあるレビュアーになることができると言っています。

このように考えてください。Pythonの初心者でも理解できるほど十分にコードが明確である場合、それは適切なコードでなければなりません。あなたが理解するのに苦労している部分は、手直しまたはより良いコメントの候補かもしれません。

明らかに、新しい言語を習得するので、あなたにとっても有益です。(うまくいけば、与えられたコードは学ぶための良い例です。)この配置は、「実行可能な擬似コード」であるという評判のあるPythonで特にうまく機能するはずです。経験豊富な開発者であれば、Pythonプログラムの要点を理解するのにそれほど困難はないはずです。

警告は、言語固有の落とし穴から生じるバグを見つけることは期待できないということです。しかし、バグの発見がコードレビューの唯一の目的ではありません。それ以外の場合は、同僚のコードでどのようなことが行われているのかを認識するだけで、知識移転に参加できます。


2

私はかつて、下請業者が請け負っていて、深刻なパフォーマンスの問題があると思われるプロジェクトを監査するように頼まれました。私はかなり重要な要素が単一のPerlモジュールであることをすぐに確立しました。私は以前にPerlに出会ったことがなく、それを知っている組織に誰もいなかったので、自分でそれを理解しようと試みました。詳細を理解することはできませんでしたが、使用しているアルゴリズムのデータサイズが2次であり、これがすべての問題の原因であることが非常に明確でした。そのため、完全に理解していない言語でコードを読むことは間違いなく生産的です。ボーナスは、あなたがそれについている間に新しいトリックを学ぶことです。


1

いくつかの観察:

1)経験豊富な開発者であれば、Pythonを使用するだけで(または少なくとも必要なだけ)Pythonを習得できます。「やることで学ぶ」というケースになります。最初は難しいですが、言語を習得するにつれて簡単になります。これを別の言語を学ぶ機会と考えてください(多くの場合、人々は「没入」を通じて「外国語」を学びます)。

2)SEサイトには、「技術的ではない」が、文法、コミュニケーション、ロジックに精通している多くの貴重な人々がいます。そのような人々は「新鮮な目」を被験者にもたらし、他の人が見逃すような「ブレインレス」な修正を数多く行います。おそらく、ロジックや全体的なプログラミングに精通しているなど、「技術的」ではない(Python以外の)スキルについて相談されています。

また、多くのコードレビューを行っていない場合、ほとんどすべてのコードレビューの経験が開発者として役立ちます。これは、あなたのスキルとニーズとチームのものとの間の良い一致のように見えます。


1
コードのレビューが意味のある程度まで「実行することによる学習」を構成するかどうか疑問です。おそらく私のレビューの経験はあなたのものとは異なるかもしれませんが、意味のある、または実質的なコードの記述は非常にまれであり、実行されることはほとんどありません。
難解なスクリーン名

@EsotericScreenName-コードを書いた人やコードを知っている人からのフィードバックの量に依存すると思います。また、他の言語で作業しているドメイン領域にある可能性が高いため、典型的なコード例よりも関連性があります。ほとんどのコーディング例は、タックの小さなスニペットを実行する方法を示しているだけで、大規模なプロジェクトの一部として表示されることはほとんどありません。
ジェフ

0

これは、レビューの目的によって異なります。すなわち、あなたが効果的に意味するもの。

それでも、いくつかの問題を検出できる可能性があります。あなたがすべてをレビューする必要があり、彼らがあなたがそれを見ればあなたがそれを助けて、おそらく何かをキャッチすることを望んでいるなら、確かです。構造の多くの概念は、言語間で似ています。特に1つは、コメントをレビューできることです。その特定の言語ではないプログラマーが、何が起こっているのかをよく理解できるように、十分にコメントする必要があります。そうでない場合...あなたは彼らのコメントが欠けている場所を伝えることができます。それがよくコメントされている場合...その後、実際に何が起こっているかのコードを読むのではなく、何が起こっているのかの注釈を通して、その構造のかなりの部分をレビューできるはずです。

しかし、他の多くの問題を検出する可能性は低いでしょう。ですから、もしあなたのレビューが、これがよくできた/実行可能なプログラムであるかどうかの徹底的な決定であると彼らが意図するなら、彼らは失望します。

その結果があなたの時間の価値があるかどうかは、主にプロジェクトに依存します。

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