Mir wird langsam klar, dass das Entwickeln von Software (unter anderem) ein Prozess ist, bei dem Sie sich ständig Fragen stellen. Fragen zur Codequalität, zur Trennung von Anliegen, zur Minimierung von Abhängigkeiten, ...
Aber die Hauptfrage ist: Wie weit können Sie gehen, ohne in einer Nervenklinik zu landen?
Ich bewerbe mich um eine neue Stelle. Gestern war ich bei einem möglichen zukünftigen Arbeitgeber, der meine Programmierfähigkeiten testen wollte. Eine der Übungen war: Erklären Sie, was dieser Code bewirkt. Ich habe einen Code der Anwendung (winforms in vb.net) durchgesehen, die sie entwickelt haben (es ist eine Verwaltungsanwendung für ein Krankenhaus). Dies gab mir die Möglichkeit, tatsächlich zu sehen, wie sie sich den Dingen nähern, und es war ziemlich enttäuschend.
Einige Beispiele:
- Ich sah irgendwo: Rufen Sie [Name des Unterprogramms hier einfügen] -> Ich war geschlagen: ist das nicht etwas von VB6?
- Sie haben eine separate Datenschicht, die ado.net verwendet, aber eine Methode, die ich untersuchen musste, gibt einen Datensatz an die aufrufende Schicht zurück. Unabhängig davon, ob es sich um eine separate Datenschicht handelt oder nicht, die Anwendung ist an ado.net gebunden (was auch kein Problem sein kann, wenn sie niemals zu einem anderen Datenzugriffsansatz wechselt).
- Dieser Datensatz wird so wie er ist gelesen, es handelt sich also immer noch um einen datenzentrierten Ansatz (natürlich kann man darüber streiten, wie viel Logik / Verhalten Sie Klassen wie "Patient" oder "LabAnalysisRequest" zuordnen können.
- Ich glaube auch, die Konstruktion einer SQL-Abfrage durch String-Verkettung gesehen zu haben.
- Sie verwenden gespeicherte Prozeduren (was für mich bedeutet: Streuung der Logik)
- Keine Erwähnung von Views / Controllern: Es ist alles formgetrieben
- Das hässlichste was ich gesehen habe war:
Wenn TestEnvironment.IsTesting dann someVar = [irgendein fest codierter Wert] sonst someVar = [ein dynamisch abgerufener Wert] ende wenn [Rest der Funktion hier]
Es ist alles so anders als das, was ich in der Schule gelernt habe: (Persistenz-Agnostiker) Domain-Layer, Persistenz-Layer, Präsentations-Layer, Unit-Testing, ...
Also formuliere ich meine Frage neu: Wie fundamental oder dogmatisch sollte man sein? Inwieweit sollte sich ein Programmierer an seine Prinzipien halten oder einfach Code schreiben, der die Aufgabe erfüllt?