Jemandem zu helfen, der nicht und niemals ein professioneller Programmierer ist, Code zu schreiben, der besser lesbar und benutzerfreundlicher ist und interpretiert werden kann [closed]


20

Ich bin Elvis und bemühe mich sehr, Einstein zu lernen. Ich arbeite für Mort.

Worüber zum Teufel redet dieser verrückte Idiot!?!? (Sie müssen nur die ersten paar Absätze lesen)

Wenn Sie diesen Link nicht lesen möchten, bin ich im Grunde ein professioneller Programmierer, und mein Chef ist (dies ist beängstigend genau):

Der professionelle Branchenprogrammierer, der keinen Abschluss in Informatik hat, aber mit Office und VBA bestens vertraut ist und in der Regel Produktivitätsanwendungen schreibt, die unter seinen Mitarbeitern geteilt werden

Trotzdem besteht ein großer Teil meiner Arbeit darin, seinen zusammengeschusterten Code zu nehmen und ihn für die Produktion vorzubereiten. Der sehr schlechte Stil und der Cargo-Kult machen dies jedoch schwierig. Hinzu kommt, dass er keine Programmierbücher lesen oder mir erlauben möchte, seinen Code zu überarbeiten.

Gibt es andere Strategien, um jemandem zu helfen, der kein professioneller Programmierer ist, niemals ein professioneller Programmierer sein wird, der in Zukunft Code schreibt, der besser lesbar und für mich benutzerfreundlicher ist, um ihn zu verwenden und zu interpretieren?


3
Es scheint eine gute Frage dafür zu geben, dass dort arbeitsplatz.stackexchange.com versteckt ist, aber ich bin nicht sicher, ob die Frage in der aktuellen Form gut ankommt.
Bart van Ingen Schenau

2
@BartvanIngenSchenau Ich habe darüber nachgedacht, es dort zu veröffentlichen, aber ich habe mich hier entschieden, weil die Probleme sehr programmspezifisch sind. Ich betrachte dies als (aus der Hilfe) Entwicklungsmethoden und -prozesse sowie als Software-Engineering-Management . Ich frage nicht nach allgemeinen Arbeitsplatzproblemen, nach der Büropolitik, sondern nach "welchen Strategien für die Softwareentwicklung kann ich mit einer solchen Person arbeiten".
Durron597

3
@gnat Ich denke, dies ist kein Duplikat, dank eines großen Unterschieds: In diesem Duplikat wurde der fehlerhafte Code bereits geschrieben. Hier stellt sich die Frage, wie verhindert werden kann, dass dieser fehlerhafte Code überhaupt von jemand anderem geschrieben wird.
Euphorisch

6
Die Frage ist: Können Sie irgendetwas tun , wenn Sie in dieser Situation untergeordnet sind?
Philipp

4
Ich sehe hier kein zu lösendes Problem. Bekommen Sie aufgrund seiner schlechten Arbeitsqualität Probleme von anderen Mitarbeitern im Unternehmen? Fehlen Ihnen wichtige Fristen aufgrund der Wartungskosten oder verhält sich die Software ständig schlecht, sodass Sie und / oder er von Ihren Benutzern gestört werden? Wenn keines der oben genannten Probleme vorliegt, ist die von Ihnen und Ihrem Chef geleistete minderwertige Arbeit genau das, was das Unternehmen wünscht und braucht, und es gibt wirklich kein Problem, außer dass Sie sich einen anderen Job wünschen. An welchem ​​Punkt nur Sie entscheiden können, wie viel Sie einen anderen Job möchten, wenn es das Risiko wert ist
Jimmy Hoffa

Antworten:


8

Wenn ich mir Ihre Antworten in mehreren Kommentaren ansehe, weiß ich nicht, ob Sie erkennen, dass das, was Sie erleben, ziemlich häufig ist, insbesondere wenn Sie in Spezialgebieten arbeiten, in denen Fachexperten (nennen wir sie den Wissenschaftler) erforderlich sind, um herauszufinden, wie es geht Integrieren und Anpassen von Algorithmen für aktuelle Probleme.

Anstatt sich über den Wissenschaftler zu beschweren und zu erwarten, dass er sich ändert, sollten Sie sich nur darüber im Klaren sein, dass der Wissenschaftler sich nicht viel um die "Codequalität" kümmert. Es ist häufig schwierig, andere Softwareentwickler dazu zu bringen, sich um "Codequalität" zu kümmern, geschweige denn um jemanden, dessen Hauptinteressen in der Domäne und nicht in der Programmierung liegen.

Wohin Sie von hier aus gehen, hängt weitgehend vom Grad des Vertrauens ab, das der "Wissenschaftler" in Ihre Fähigkeit hat, ihre Arbeit zu verstehen. Wenn sie sicher sind, dass Sie ihren Code verstehen und ihn beim Ändern nicht durcheinander bringen, gibt es normalerweise kein Problem. Sie verlassen sich auf Ihr Fachwissen.

Wenn der Wissenschaftler jedoch nicht möchte, dass Sie seinen Code ändern, ist es sehr wahrscheinlich, dass Sie sein Vertrauen noch nicht "verdient" haben. Wenn dies der Fall ist, sollten Sie sich auf das "Reparieren" konzentrieren, anstatt sich auf das Reparieren des Wissenschaftlers zu konzentrieren. Damit meine ich, Schritte zu unternehmen, um ihr Vertrauen zu gewinnen. Der wahrscheinlich einfachste Weg, dies zu tun, ist wie folgt:

Im Rahmen Ihres Testprozesses:

  1. Fange an, die Algorithmen in etwas zu verwandeln, das leichter zu verstehen ist (zB Diagramme, PDL, mathematische Notation)
  2. Lernen Sie die Algorithmen zu verstehen.
  3. Achten Sie darauf, die Randfälle zu identifizieren.
  4. Fragen Sie den Wissenschaftler, ob Ihre vereinfachte "alternative" Darstellung korrekt ist
  5. UND AM WICHTIGSTEN identifizieren Sie Probleme, die Sie gefunden haben; UND ohne "anklagend" zu klingen, sagen Sie so etwas wie "Ich habe mir den Algorithmus angesehen und festgestellt, dass XYZ dies tun soll oder soll es das tun?". Nichts wird ihr Vertrauen besser gewinnen als diese Kugel.

Sobald Sie anfangen, Fehler zu finden UND Interesse an ihrem Interessengebiet gezeigt haben, steigen die Chancen erheblich, dass Sie den Code zumindest ändern können, um ihn "professioneller" zu machen. Häufig werden sie nicht einmal mehr das Bedürfnis verspüren, einen Prototypen zu codieren. Sie schreiben einfach etwas in eine dieser "alternativen" Notationen, die Sie ihnen beigebracht haben (ohne dass sie es überhaupt bemerken), und sie haben das Vertrauen, dass Sie wissen, was sie bedeuten.

Mein erster Versuch wäre auf jeden Fall, einige Vorschläge zu machen, wie der Wissenschaftler am besten helfen kann, besser zu "kommunizieren", um Ihnen zu helfen. aber es hört sich so an, als hättest du es versucht. Der einzige Schritt, über den Sie die Kontrolle haben, ist das, was Sie tun. Verdienen Sie ihr Vertrauen und fast immer wird der Domain-Experte erleichtert sein, die Codierung an eine andere Person weiterzugeben und sich nicht um all die kleinen Details kümmern zu müssen, die beim Schreiben von Code anfallen. Sie konzentrieren sich vielmehr auf die Verbesserung der Algorithmen.

Manchmal können Sie nur einen Vorschlag unterbreiten und es danach belassen. Sie werden Ihren Chef oder einen Senior nicht beeindrucken, wenn Sie weiter an etwas herumhupen, das er bereits abgelehnt hat oder das er nicht tun möchte, selbst wenn Sie zu 100% korrekt sind. Tatsächlich schadet dies einer Beziehung, unabhängig davon, ob Sie der Vorschlagende oder der Vorschlagende sind. Konzentrieren Sie sich einfach darauf, was SIE tun können, um Ihre Arbeit zu erleichtern.


19

Wenn er wirklich "jemand ist, der kein professioneller Programmierer ist, der niemals ein professioneller Programmierer sein wird", wie Sie sagen, und wenn ein großer Teil Ihrer Arbeit wirklich darin besteht, "seinen zusammengepflasterten Code zu nehmen und für die Produktion vorzubereiten", hört es sich wie Ihr an Zwei-Mann-Team wäre produktiver, wenn er die Programmierung Ihnen überlassen und sich auf den Management-Teil des Projekts konzentrieren würde.

Dies setzt jedoch voraus, dass Sie Recht haben. Wir Programmierer tendieren immer dazu, Code, der von anderen Leuten geschrieben wurde, als viel schlimmer als unseren eigenen zu ignorieren. Dieses Vorurteil ist wirklich schwer zu besiegen und führt dazu, dass wir unsere Kollegen unterschätzen. Was Sie als "Frachtkultprogrammierung" bezeichnen, könnte aus seiner Sicht "bewährte Best Practices" sein, und was Sie als "elegante Anwendung objektorientierter Muster" bezeichnen, könnte für ihn "unnötiges Überentwickeln" sein. Schwer zu sagen für mich, weil ich nur deine Seite der Geschichte kenne.

Die Verachtung für den Code anderer Völker wird umso stärker, je unterschiedlicher unsere Programmierstile sind. In diesem Fall ist das ein positiver Instinkt, da es sehr schwierig ist, verschiedene Programmierstile in einem Projekt zu mischen.

Wenn Sie beide nicht in der Lage sind, den Stil des anderen nachzuahmen, können Sie klare Verantwortlichkeiten definieren. Machen Sie eine Person für einen Teil der Anwendung und die andere Person für die andere Person verantwortlich. Definieren Sie klare Schnittstellen zwischen beiden Modulen, überlassen Sie die interne Implementierung jedoch dem Verantwortlichen. Um ihn auf Fehler in seinem Code aufmerksam zu machen, könnten Sie Unit-Tests für ihn schreiben und darauf hinweisen, dass sich sein Code offensichtlich nicht gemäß dem von Ihnen gemeinsam festgelegten Schnittstellenvertrag verhält.

Durch die Einrichtung einer eindeutigen Code-Eigentümerschaft können Sie eine bessere Koexistenz Ihrer verschiedenen Stile erreichen. Auch wenn Sie beide für die Behebung der Fehler in ihrem eigenen Code verantwortlich sind, müssen Sie nicht oft im Code der jeweils anderen navigieren.


2
Ich würde das gerne tun. Das Problem ist, wenn wir jetzt alle 40 Wochen arbeiten, würde dies die Arbeitsteilung auf 20 und 60 verteilen, und er hätte mit dem Rest seiner Zeit wenig zu tun. Unser Bedarf an mehr Personal (damit er nicht programmieren muss) ist etwas, das wir beide wollen, aber im Moment gibt es finanzielle Probleme.
Durron597

4
Dies ist nicht das, was wir tun, aber stellen Sie sich vor, Sie arbeiten an einem Projekt, das DNA analysiert. Ihr Chef schreibt ein beschissenes Programm, das einen kleinen Datensatz auf verschiedene Dinge analysiert, die Richtigkeit überprüft und dann das Programm für die gesamte Datenbank des Humangenomprojekts ausführt. Ich habe nicht nur Bereinigungsstil, ich muss auch den Algorithmus für die Leistung verbessern. Aber sein Job (der Grund, warum er ein Gehalt hat) ist Fachwissen im Bereich "Korrektheit", was eigentlich kein Programmierproblem ist, und ich habe nicht das gleiche Fachwissen.
Durron597

2
@ durron597: Es hört sich so an, als ob er einen groben Proof-of-Concept-Test durchführt und Sie dann dazu bringt, ihn schön und poliert und produktionsbereit zu machen.
FrustratedWithFormsDesigner

4
@ durron597 Wenn er der Domain-Experte ist, der in der Lage ist, die Richtigkeit zu überprüfen, ist er dann offen für die Idee, Komponententests zu schreiben, die alles genau spezifizieren? Anstatt dass er die Funktionalität prototypisiert, würden Sie eine Form von TDD erstellen, in der er die Tests schreibt, um sicherzustellen, dass alles korrekt ist und Sie die eigentliche Implementierung durchführen?
Evicatos

4
@durron597 (nach einem wilden Hasen, der durch einen der Kommentare ausgelöst wurde :) könntest du eine (n E) DSL schreiben, die es ihm ermöglicht, seine Logik auf eine Weise präziser auszudrücken, die kein Umschreiben deinerseits erfordert ?
Paul

3

Sie müssen sich fragen: Was ist Ihr oberstes Ziel hier? 1. um deinem Chef zu helfen? 2. um der Firma zu helfen? 3. um sich selbst zu helfen? Und bevor Sie mit "all the above" antworten, sollten Sie langsamer fahren. Ihre erste Aufgabe ist es, Ihr primäres Ziel klar zu definieren, denn die Antwort hängt davon ab.

Wenn Sie das Ziel haben:

  1. Helfen Sie Ihrem Chef? Es aufgeben. Er scheint nicht danach zu fragen. Sie sagten: "Er weiß, dass sein Code schlecht ist, aber er tut, was er braucht." Na dann, Ende der Diskussion. Solange Ihr Chef nicht mit der aktuellen Situation unzufrieden ist, wird er sich nicht ändern, und er wird sich über Ihre Bemühungen, ihm zu helfen, ärgern. Wenn er irgendwann in der Zukunft den Schmerz des Status Quo verspürt, haben Sie sich hoffentlich als vertrauenswürdiger Mentor etabliert und wissen, wo er Hilfe holen kann.

  2. Helfen Sie Ihrem Unternehmen? Bedroht die aktuelle Situation das Endergebnis? Sind Fristen gefährdet? Steigert das obere Management seine Hitze? Wenn nicht, dann gib es auf. (Dies ist im Wesentlichen der Punkt, den Jimmy Hoffa in seinem Kommentar zu Ihrem ursprünglichen Beitrag angesprochen hat.) Wenn jedoch die aktuelle Situation tatsächlich ein inakzeptables Risiko für Ihre Abteilung / Ihr Unternehmen darstellt, ist eine Änderung des Prozesses angezeigt. In diesem Fall würde ich vorschlagen, dass Sie sich hinsetzen und eine andere skizzierenArbeitsteilung. Der Schlüssel hier ist zu erklären, dass die Zeit, die Sie mit der Umgestaltung des Codes Ihres Chefs verbringen, besser mit dem Schreiben von neuem Code verbracht wird. Sie sagen, Sie haben keine Zeit, alles selbst zu schreiben, aber das schlage ich nicht vor. Sie müssen herausfinden, wie Sie Ihre jeweiligen Stärken maximieren können. Hören Sie auf, ihn als Mort zu betrachten, und denken Sie an ihn als Junior-Entwickler mit überlegenen Domain-Kenntnissen. Das ist eine sehr gemeinsame Arbeitsanordnung in der Industrie, und es wäre gut beraten , Sie lernen , wie man in ihnen gedeihen. Stellen Sie beispielsweise sicher, dass er weiß, dass Sie wissen, wie wichtig sein Fachwissen ist (wiederholen Sie diesen Schritt häufig), und dannSchlagen Sie demütig die folgende Strategie (oder etwas Ähnliches) vor, um sein Wissen schneller auf den Markt zu bringen: (a) Teilen Sie die Arbeit in "agile" Sprints auf, (b) arbeiten Sie im Vorfeld intensiv zusammen (in jedem Sprint), um den Over zu definieren -alle Anforderungen und Architektur. (c) Lassen Sie ihn los und bauen Sie den Prototyp, um alle algorithmischen Entscheidungen zu treffen, während Sie die Infrastruktur aufbauen, auf die Sie sich im vorherigen Schritt geeinigt haben. (d) Implementieren Sie seine Algorithmen in Ihre Struktur, während er Tests erstellt, um dies zu überprüfen. (e) Führen Sie Ihre V & V gemeinsam in einer Peer-Programmierumgebung durch. (zB "Dieser Test ist fehlgeschlagen; warum? Fehler in der algorithmischen Logik oder Codierungsfehler?"; hier wiederholen).

  3. Bedienen Sie sich? Sei hier ehrlich. Wenn Sie sich nur darüber beschweren, dass Sie Ihren Job nicht mögen, sollten Sie sich mehr Gedanken über Nummer 2 machen. Wenn Sie sich nicht für das Unternehmen interessieren UND Sie Ihre Arbeit nicht mögen, beginnen Sie, Ihren Lebenslauf zu verteilen. Wenn Sie sich für Ihr Unternehmen interessieren, aber keinen Spaß an Ihrer Arbeit haben, sollte die Konzentration auf Nummer 2 bei BEIDEN Konten helfen. In diesem Fall ist es jedoch nur dann ein Gewinn, wenn allen klar ist, dass Ihre Leidenschaft wirklich auf dem Wunsch beruht, dem Team zu helfen, und nicht nur auf einer egozentrischen Frustration in Ihrem Auftrag.


1
Gute Antwort. Es ist definitiv die Nummer 2, und Ihre Beschreibung der zu erledigenden Aufgaben ähnelt der Beschreibung, die wir in den letzten Tagen besprochen haben. Wir kommunizieren definitiv nicht genug.
Durron597

Ich habe gerade einen letzten Satz im 3. Punkt hinzugefügt. Vielleicht das wichtigste von allen. Lesen Sie Ihren Beitrag noch einmal durch und fragen Sie sich ehrlich, ob Sie anderen auf diese Weise begegnen.
Kmote

2

Ich bin mir nicht sicher, ob ich dieser Diskussion etwas hinzufügen werde, aber nachdem ich in ähnlichen Szenarien gearbeitet habe, in denen eine Zugriffsverletzung auf eine Zeile mit ShowMessage('Hello');oder ähnlich trifft , muss ich feststellen, dass dieselbe Zeile mehr Code enthält Recht,

Ich glaube, dass Sie zwei grundlegende Optionen haben:

  1. Lass den Code laufen . Wenn der Code funktioniert und das tut, was er tun soll, lassen Sie ihn einfach so, wie er ist, es sei denn, Ihr Chef fordert Sie ausdrücklich auf, den Code zu reparieren. Dies kann ihn auch dazu bringen, zu verstehen, dass Ihr Code besser aussieht, und Ihnen die Arbeit überlassen (wie auch Dunk in seiner Antwort ausgeführt hat).
  2. Wenn Sie sehr entschlossen sind, den Code professionell zu gestalten, erstellen Sie eine Bibliothek / ein Framework , das er verwenden kann. Wenn es ein Muster für die Fehler / Strategien gibt, die Sie normalerweise beheben, können Sie diese möglicherweise in einige Bibliotheksdateien packen und sie ihm als "Basisbibliothek für das Unternehmen" geben , die Sie auch als Standardbibliothek verwenden können gemeinsame Schnittstelle.

"Bauen Sie eine Bibliothek / ein Framework" Ich habe versucht, dies zu tun, wenn ich Zeit habe, aber das Problem ist, dass das Projekt immer wieder wegen "kurzfristiger Bedenken"
abgewiesen wird

1
Ich war an diesem Ort. Ich hatte einen Chef, der mir eine Visitenkarte des Kunden gab, und bat mich, "in ein paar Tagen eine Website für diesen Kunden zu erstellen" (ohne tatsächlich andere Informationen als die Visitenkarte zu haben). Vielleicht möchten Sie ihm etwas über Ihren Plan zur Vorbereitung einer Bibliothek und darüber erzählen, wie dies Ihre Produktion ankurbelt, damit Sie Zeit sparen können.
mavrosxristoforos

Der Aufbau einer Bibliothek sollte mit einer einfachen Sammlung der kleinen Programme beginnen, die Sie bereits geschrieben haben, nachdem Sie nur eines seiner Programme repariert haben.
DougM
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.