it-swarm.com.de

Ist es effektiv, Code in einer Sprache zu überprüfen, die ich nicht kenne?

Ich bin ein erfahrener Entwickler, habe aber noch nicht viele Codeüberprüfungen durchgeführt. Ich werde gebeten, den in Python] geschriebenen Code zu überprüfen, aber ich kenne Python nicht.

Ist es überhaupt sinnvoll, Code in einer Sprache zu überprüfen, die ich nicht kenne?

109
Heather Smith

Beliebig Sinn? Ja. Selbst wenn Sie nichts über die Semantik einer Programmiersprache wissen, können Sie dennoch Zeichen lesen und inkonsistente Formatierungen, fehlende Kommentare, schlecht ausgewählte Bezeichner, offensichtliche Überschneidungen usw. feststellen.

Viel Sinn oder genug Sinn, um die Kosten Ihrer Zeit zurückzuzahlen? Ich bin mir nicht sicher. Dies hängt von Ihrer Position, der Bedeutung von Codeüberprüfungen im Workflow Ihres Teams und mehreren anderen Faktoren ab, die wir nicht gut genug quantifizieren können.

118
Kilian Foth

Als regelmäßiger Mitarbeiter bei Code Review Stack Exchange stoße ich auf viele Fragen, die unter sprachunabhängigen Problemen leiden, zum Beispiel:

  • Formatierung, Einrückung
  • Umfang
  • Schleifen
  • Geben Sie Operationen ein

und die Liste geht weiter. Obwohl ich die Sprache nicht kennen muss, kann ich diese Probleme/Punkte dennoch überprüfen.

Einige unserer Top-Benutzer haben Top-Antworten in Sprachen, die sie entweder nicht aktiv verwenden oder nicht kennen. Sogar zwei meiner Top Ten sind in Sprachen, die ich weder kenne noch auf meinem Computer kompilieren/ausführen kann.

Ich würde sogar sagen, es wäre dasselbe wie das Überprüfen des Pseudocodes von jemandem. Solange Sie Dinge beobachten und kommentieren können, die für Dinge relevant sind, die Sie verstehen, wird es Ihnen gut gehen, und es wird relevant sein.

57
Quill

Allgemeine Hinweise

Hier ist das Fazit meiner Meinung nach:

  • Wenn Sie die Sprache nicht gut genug kennen, um die Funktionen und gebräuchliche Redewendungen zu kennen, werden Sie wahrscheinlich nicht viel zur Überprüfung beitragen.
  • Wenn Sie die Funktionen und Redewendungen der Sprache lernen möchten, können Sie an der Überprüfung teilnehmen. Ihr Fokus sollte darauf liegen, die Redewendungen zu beobachten und Fragen zu Mustern und Organisation zu stellen, die für Sie keinen Sinn ergeben. Dies kann hilft bei der Identifizierung von Problembereichen, aber nur in dem Sinne, dass Sie den Entwickler möglicherweise zwingen, das zu verteidigen, was er getan hat. Stellen Sie Ihre Fragen so, dass Platz für Ihre Wissenslücke bleibt. Beachten Sie, dass dies möglicherweise ein Nettowert von Kosten in der Überprüfung selbst ist, diese Kosten jedoch eine Investition in Ihr Wissen darstellen.
  • Ihre Fähigkeit, Beiträge zu leisten, bis Sie sich mit den Funktionen, Redewendungen und Standards der Sprache vertraut gemacht haben, ist begrenzt. Ich würde nicht erwarten, dass sich dies ändert, bis Sie tatsächlich geschrieben eine signifikante Menge an Code in der Sprache haben.

Python-spezifische Überlegungen und Beispiele

Für die spezielle Situation, Python nicht zu kennen, wäre ich besonders vorsichtig. Python hat viele Redewendungen und Standardpraktiken, die am Ende gut werden Python sieht ganz anders aus, als Sie es in anderen Sprachen erwarten könnten. (In der Tat, denke ich Die Dinge Python betont haben, dass mein Code besser in anderen Sprachen aussieht und nicht umgekehrt.) - Beyond PEP8 hat ein gutes Beispiel dafür, wie Sie die Denkweise völlig verfehlen könnten Python ermutigt.

Schauen wir uns ein einfaches Beispiel an. Nehmen Sie diesen Code:

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

Sehen Sie das Problem mit diesem Code? Wenn Sie nicht mit Python gearbeitet haben, tun Sie dies wahrscheinlich nicht. Das Problem ist, dass es einen viel bevorzugten Stil in Python, der genau dasselbe tut:

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

Dies ist ein Kontextmanager. Weißt du, wofür sie gut sind? Wissen Sie, wann es angebracht wäre, eine zu verwenden? Wissen Sie, wann es angebracht wäre, Ihre eigenen zu erstellen? Nein? Dann sind Sie wahrscheinlich noch nicht bereit, Python zu überprüfen.

Schauen wir uns ein anderes Beispiel an.

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)

Sehen Sie das Problem? Das Problem ist, dass diese Methode völlig unnötig ist. Sie sollten wahrscheinlich nur ein vorhandenes Verständnis verwenden, wenn die Operation so einfach ist:

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

Wenn Sie das nicht gesehen haben, sind Sie mit den Funktionen und Redewendungen von Python nicht vertraut.

44
jpmc26

Bei der Codeüberprüfung geht es nicht darum, nach Variablen mit ungültiger Schreibweise und falscher Formatierung zu suchen. Wenn Sie die Codeüberprüfung verwenden, um solche Dinge zu finden, verschwenden Sie keine Zeit mehr und verwenden Sie ein Tool.

Bei der Codeüberprüfung geht es darum, das Design zu verbessern und häufige Fehler von unerfahrenen Programmierern zu erkennen.

Da ich in C++ programmiere und nicht weiß, Python gut genug, würde ich es nicht wagen, Python Code) zu überprüfen Ich könnte jedoch bei einer Java Codeüberprüfung) helfen.

Sie haben nicht gesagt, in welcher Sprache Sie programmieren, aber ich sehe nicht, was Sie in einer Codeüberprüfung beitragen könnten, wenn Sie die Sprache, in der sie programmiert ist, nicht kennen.

21
BЈовић

Möglicherweise haben sie Sie gebeten, Python Code zu überprüfen, gerade weil Sie Python nicht kennen . Es gibt eine Management-Theorie dass es nützlich ist, einen "Narren" in einem Team zu haben. Ich nenne Sie keinen schlechten Namen :) Die Idee ist, dass ein Team unter Gruppendenken leiden und Tunnelblick entwickeln kann. Eine Möglichkeit, daraus auszubrechen, besteht darin, jemanden in das Team aufzunehmen, den die anderen Teammitglieder als "Narren" betrachten würden, dh jemanden, der das Thema nicht kennt. Sie werden Fragen stellen, um sich zu informieren, und die Fragen werden aus einer Sicht kommen, die die anderen Teammitglieder wahrscheinlich nie berücksichtigt haben.

Sie kennen Python nicht. Was für die Python -Codierer) gewöhnlich erscheint, mag Ihnen seltsam erscheinen. Sie könnten eine Verbesserung vorschlagen, die das Team nie in Betracht gezogen hat.

21
user2023861

Codeüberprüfungen (zusätzlich zur tatsächlichen Suche nach Fehlern) sind eine gute Einführung von einem Teammitglied in andere für den Code, der hinzugefügt oder geändert wird. Wenn Sie ein erfahrener Entwickler sind, sollten Sie in der Lage sein, genug durchzulesen, um größtenteils zu verstehen, was los ist.

Schauen Sie sich eine Codeüberprüfung aus der Sicht eines Teamleiters an: Es gibt jemanden, der versteht, was die Anwendung tut sollte tun (Geschäftslogik), es gibt jemanden, der versteht, was der Code tut (Implementierungslogik) ) und möglicherweise mehrere andere Leute dort, die eine Vorstellung davon haben müssen, wie all das zusammenpasst.

10
Adam Zuckerman

Sie sollten definitiv nicht der einzige Rezensent sein, aber es gibt viele gute Gründe für Sie, einer der Gutachter. Das Nicht-Kennen der Sprache ist kein großes Hindernis für viele Fragen, die in einer Codeüberprüfung beantwortet werden müssen. Als Beispiel bin ich einer der Top 20 Antwortenden im C # -Tag auf dieser Site, und ich habe nicht einmal die Hallo-Welt in C # zusammengestellt.

Einige Fachkenntnisse, die Sie teilen können, ohne die Sprache zu kennen:

  • Fachwissen.
  • Allgemeines objektorientiertes Design.
  • Allgemeine Programmierpraktiken: Benennung, Klarheit usw.

Dies ist auch eine gute Möglichkeit, sich über ein neues Produkt auf dem Laufenden zu halten. Ich bin gerade einem neuen Team beigetreten, in dem ich die verwendeten Sprachen recht gut kenne, aber die Domain nicht kenne. Die Teilnahme an Codeüberprüfungen hat mir geholfen, die Domain-Seite besser kennenzulernen, obwohl ich noch nicht viel dazu beitragen konnte.

In Ihrem Fall ist dies eine gute Möglichkeit, die Redewendungen einer neuen Sprache zu lernen, da Sie die Kommentare sehen, die andere Rezensenten hinterlassen. Dies sind die Dinge, die auf andere Weise sehr schwer zu lernen sind, da es Ihrem Interpreter egal ist, ob Ihr Code Pythonic ist oder nicht.

7
Karl Bielefeldt

Dies könnte eine Win-Win-Situation sein. Ich würde sogar sagen, dass Sie ein besonders wertvoller Rezensent sein könnten , weil Sie eine Python Jungfrau wer sind) sind wurde nicht durch den Fluch des Wissens verdorben.

Stellen Sie sich das so vor: Wenn der Code klar genug ist, dass selbst eine Jungfrau Python Jungfrau ihn verstehen kann), muss es sich um guten Code handeln. Die Teile, die Sie nicht verstehen können, sind möglicherweise Kandidaten für eine Überarbeitung oder besser kommentieren.

Natürlich wäre es auch für Sie von Vorteil, da Sie unterwegs eine neue Sprache lernen würden. (Hoffentlich ist der Code, den Sie erhalten, ein gutes Beispiel, aus dem Sie lernen können.) Diese Anordnung sollte besonders gut für Python funktionieren, eine Sprache, die den Ruf hat, "ausführbarer Pseudocode" zu sein. Wenn Sie ein erfahrener Entwickler sind, sollten Sie keine großen Schwierigkeiten haben, den Kern eines Python -Programms) zu verstehen.

Die Einschränkung wäre, dass Sie keine Fehler erkennen würden, die durch sprachspezifische Fallstricke entstehen. Das Auffinden von Fehlern ist jedoch nicht der einzige Zweck von Codeüberprüfungen. Wenn nichts anderes, würden Sie am Wissenstransfer teilnehmen, indem Sie einfach wissen, was im Code Ihres Kollegen vor sich geht.

5
200_success

Ich wurde einmal gebeten, ein Projekt zu prüfen, das von einem Subunternehmer durchgeführt wurde und anscheinend ernsthafte Leistungsprobleme hatte. Ich stellte ziemlich schnell fest, dass der kritische Faktor ein einzelnes Perl-Modul war. Ich war noch nie auf Perl gestoßen und wir hatten niemanden in der Organisation, der es wusste, also machte ich mich daran, es selbst zu verstehen. Ich bin nie so weit gekommen, das Detail zu verstehen, aber es war sehr klar, dass der verwendete Algorithmus eine quadratische Datengröße hatte und dies die Ursache für alle Probleme war. Ja, das Lesen von Code in einer Sprache, die Sie nicht vollständig verstehen, kann definitiv produktiv sein. Der Bonus ist, dass Sie neue Tricks lernen, während Sie dabei sind.

2
Michael Kay

Einige Beobachtungen:

1) Wenn Sie ein erfahrener Entwickler sind, werden Sie Python (oder mindestens so viel, wie Sie wissen müssen) lernen, indem Sie einfach damit arbeiten. Es wird ein Fall von "Lernen" sein "Es wird zunächst schwierig, aber es wird einfacher, wenn Sie die Sprache lernen. Stellen Sie sich dies als Gelegenheit vor, eine andere Sprache zu lernen (Menschen lernen oft" Fremdsprachen "durch" Eintauchen ".)

2) Es gibt eine Reihe wertvoller Leute auf SE-Sites, die "nicht technisch" sind, aber mit Grammatik, Kommunikation und Logik vertraut sind. Solche Leute bringen ein "frisches Auge" zu den Themen und machen eine Reihe von "einfachen" Korrekturen, die andere vermissen, weil sie im Material zu "gefesselt" sind. Sie werden vermutlich wegen Ihrer nicht "technischen" (d. H. Nicht Python) Fähigkeiten wie Logik und allgemeiner Programmierkenntnisse konsultiert.

Und wenn Sie nicht viel Code überprüft haben, hilft Ihnen fast jede Erfahrung mit Codeüberprüfung als Entwickler. Dies scheint eine gute Übereinstimmung zwischen Ihren Fähigkeiten und Bedürfnissen und denen des Teams zu sein.

0
Tom Au

Das hängt davon ab, was das Ziel der Überprüfung ist. d.h. was Sie mit effektiv meinen.

Sie werden wahrscheinlich immer noch in der Lage sein, einige Probleme zu erkennen. Wenn Sie alles sind, mit dem sie sich befassen müssen, und sie nur hoffen, dass ein Blick darauf hilft einigen und möglicherweise etwas fängt, dann sicher. Viele Strukturkonzepte sind zwischen den Sprachen ähnlich. Eine ist insbesondere die Möglichkeit, die Kommentare zu überprüfen. Es sollte gut genug kommentiert werden, dass ein Programmierer, der nicht zu dieser bestimmten Sprache gehört, immer noch ein gutes Gefühl dafür bekommen sollte, was passiert. Wenn nicht ... dann können Sie ihnen sagen, wo ihre Kommentare fehlen. Wenn es so gut kommentiert ist ... dann sollten Sie in der Lage sein, einiges über ihre Struktur zu überprüfen, indem Sie einfach die Anmerkungen zu den Vorgängen lesen, anstatt den Code der Vorgänge tatsächlich zu lesen.

Aber Sie werden wahrscheinlich nicht viele andere Probleme entdecken. Wenn sie also beabsichtigen, dass Ihre Überprüfung eine erschöpfende Entscheidung darüber ist, ob dies ein gut gemachtes/praktikables Programm ist oder nicht, werden sie enttäuscht sein.

Ob dieses Ergebnis die Zeit wert ist, die Sie dafür tun, hängt weitgehend vom Projekt ab.

0
Jimbo Jonny