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?
If TestEnvironment.IsTesting then
ist der Code in einem ziemlich guten Zustand.Antworten:
Ich weiß, dass dies Ihre Frage nicht direkt beantwortet, aber ich bin dennoch der Meinung, dass dies mehr als einen Kommentar wert ist:
Wenn Sie ein Vorstellungsgespräch führen, interviewen Sie sie genauso wie sie Sie interviewen . Brechen Sie die Angewohnheit ab, ein Interview als etwas zu sehen, zu dem Sie auf Ihrem Bauch kriechen, und bitten Sie darum, dass sie Ihnen etwas anbieten. Sie checken dich aus, aber du checkst sie auch. Wenn sie dich nicht mögen, werden sie dich nicht einstellen. Wenn Sie sie nicht mögen, gehen Sie nicht dort arbeiten.
Ja, in der Branche wird der Code mit einer zehn Jahre alten alten Codebasis, die im Laufe der Zeit von drei Dutzend Entwicklern mit unterschiedlichem Hintergrund, Fähigkeiten und Leidenschaften gehackt wurde, die von engen Fristen, fehlenden Ressourcen und finanziellen Zwängen getrieben werden, niemals funktionieren Sieh so aus, wie du gelernt hast, dass es aussehen sollte. Sie müssen einige Zugeständnisse machen. Aber wie viele und wo Sie die Grenze ziehen, liegt ganz bei Ihnen.
Natürlich sind Jobs schwieriger zu finden, wenn Sie weniger Zugeständnisse machen. Aber sie könnten angenehmer sein.
FWIW, ich habe bisher (> 10 Jahre in der Branche) noch nie in einem großen Unternehmen mit vielen Entwicklern gearbeitet (~ 30 Entwickler waren die meisten, ein Dutzend der Norm), weil es so viel wahrscheinlicher ist, dass Sie etwas in einem kleinen ändern Unternehmen. Solange ich genug Geld verdiene, um die Kinder nicht zu verhungern, möchte ich nicht ein kleines Zahnrad in einer großen Firma sein, wo ich mich nur synchron mit dem Rest der Gänge drehen muss.
Ich habe Stellenangebote abgelehnt, nachdem ich die Tests gesehen habe, die ich bestehen soll. Ich bin ein C ++ - Entwickler, und es gibt viele C ++ - Tests, die so schlecht sind, dass sich Ihre Zehennägel angewidert kräuseln. Ich möchte meine Zeit nicht damit verbringen, gegen Windmühlen zu kämpfen, weil sie Schwachköpfe eingestellt haben, die keinen sauberen Code schreiben können.
Ich habe den Job auch nach ein paar Monaten verlassen, weil ihre Programmierphilosophie (kurzfristige Ziele, egal nächstes Jahr) nicht zu meinen Fähigkeiten (langfristige Codestabilität) passte, obwohl sie im Interview etwas anderes sagten.
quelle
Schreiben Sie niemals Code, der nur die Arbeit erledigt. Seien Sie jedoch ebenso bereit, Ihre Lehre zu überprüfen. Nur weil du es in der Schule gelernt hast, heißt das noch lange nicht, dass es aktuell oder sogar gültig ist. Der Lebenszyklus des Software-Designs ist hinfällig, da die Programmierung reaktiver auf die Geschäftswelt reagieren muss. Manchmal sind umständlich verknüpfte Softwarelösungen umständlich verknüpft, weil Teile nach Zeitaufwand ausgetauscht wurden.
Hier ist eine Liste der Themen, die ich zusammengestellt habe, um festzustellen, wie gut Sie in den Kodierungsstil eines Unternehmens passen.
Die Antworten auf diese Fragen passen besser dazu, wie Sie ihren Programmierstil bewerten, als zu sehen, ob sie zu Ihrem Dogma passen.
Das Dogma wird unweigerlich kaputt sein (wir haben einfach keine Zeit, X zu aktualisieren). Die Prioritäten bestimmen jedoch, inwieweit Sie mit Ihrem Stil und Ihrer Entscheidungsfindung in Konflikt geraten.
quelle
Ich denke, Sie müssen dies als Teil des Ganzen abwägen. Ich erinnere mich, dass einer meiner ersten Jobs eine Position in einer Gruppe war, in der mir mitgeteilt wurde, dass sie objektorientiertes C ++ betreiben - was ich gerade einige Jahre in der Schule getan hatte.
Ihre Selbsteinschätzung war falsch - sie machten etwas klobiges C. Es war immer noch sehr funktional gestaltet und ich musste mir ein C-Buch besorgen, um mir printf und getf und andere C-Mechanismen beizubringen, die ich nie gelernt hatte. Die Tatsache, dass niemand im Team bemerkte, wie sehr C seinen Code mochte, zeigt, dass dieses "C ++ - Design" vom Fleck gefallen war. Mein damaliges Ziel war es, OO-Entwicklung zu betreiben. Das war also ziemlich abstoßend.
Aber ich bin froh, dass ich am Ende bei der Mannschaft geblieben bin. Sie waren eine dynamische Gruppe sehr kluger Leute und ich hatte viele schwere Probleme. Ich musste den gesamten Lebenszyklus durcharbeiten und das, was ich über die Problemdomäne (PKI) gelernt habe, hat meine Karriere seitdem beflügelt. Die Arbeit, die das Team im Funktionsbereich geleistet hat, war unglaublich und ich denke immer noch sehr gern an dieses Produkt und diese Arbeitserfahrung. Besser noch - ich arbeite immer noch mit einigen dieser Leute (einige Firmen später), sie sind immer noch eine Inspiration und wir leisten immer noch gute Arbeit.
Ich denke nicht, dass die perfekte Umsetzung der Best Practices einer Programmiersprache das Ergebnis einer guten Arbeitserfahrung oder eines guten Teams ist - die Arbeit, die eine Karriere ankurbelt, ist viel mehr als das, und wenn das Produkt anständig ist Qualität, das Team hat anständige Arbeitsbedingungen (wie der Joel-Test) und das Team ist voll von Leuten, die klug sind und Dinge erledigen, dann ist die Perfektion der Implementierung zweitrangig. Nehmen Sie Faktoren wie gute Arbeit, gute Leute, gute Arbeitsbedingungen mit - und es lohnt sich nicht, dabei zu bleiben - ob der Code seltsamerweise zusammengesetzt ist oder nicht.
quelle
Das Wichtigste, woran Sie sich hier erinnern sollten, ist, was Sie vorhaben .
In den meisten Unternehmen besteht Ihr Lebenszweck nicht darin, perfekten Code zu schreiben. Ihr Ziel ist es, einen Mehrwert für den Benutzer zu liefern. Das Schreiben von gutem Code ist normalerweise der beste Weg , um ein gutes Produkt zu liefern, das auch einfach zu warten, Probleme zu beheben und zu entwickeln ist.
Guter Code ist ein Tool, das Sie dort anwenden sollten, wo Sie einen guten ROI erzielen.
Einige Beispiele:
Fazit: Sie müssen Prinzipien haben, aber Sie sollten auch flexibel genug sein, um diese Prinzipien zu brechen, wenn sie mehr Schaden als Wert bringen.
quelle
Ich habe einige Jahre für einen E-Commerce-Händler gearbeitet. Als ich dort anfing, war der Code für ihre internen Anwendungen alle in VB für MS Access geschrieben, und es war, gelinde gesagt, schrecklich. Ich hatte ein Team von 3 Entwicklern und in den nächsten Jahren haben wir dies durch richtige VB.Net-Anwendungen ersetzt.
Da mein Einstellungsbudget jedoch äußerst begrenzt war, konnte ich mir nur Junior-Programmierer leisten. Und natürlich war der Code, den sie produzierten, nicht so toll. Aber es hat funktioniert und das Unternehmen nutzte diese Anwendungen jeden Tag, um Geld zu verdienen.
Und dann habe ich angefangen mit meinen Jungs zu arbeiten. Ein wenig Schulung in OOD, Datenbankdesign, MVC und C #. Und im Laufe der Jahre haben sich die Dinge verbessert. Als ich nach 4 Jahren abreiste, war die Codebasis immer noch nicht großartig, aber 100-mal besser als zu Beginn.
Eine Situation wie die, die Sie beschreiben, ist oft die Folge davon, dass Sie mit verfügbaren Ressourcen auskommen müssen. Wir leben nicht in einer idealen Welt. Gleichzeitig ist dies eine großartige Gelegenheit, tatsächlich etwas zu bewirken.
Übrigens: Einige dieser Anwendungen werden immer noch verwendet, praktisch unverändert seit ungefähr drei Jahren, und sie verdienen immer noch Geld.
quelle
Ich halte es für sehr wichtig, an Ihren Grundsätzen festzuhalten. Sie sollten sich stets bemühen, den bestmöglichen Code innerhalb der angegebenen Einschränkungen zu erstellen. Wenn Sie jedoch zu Ihrer Liste der Prinzipien hinzufügen, dass Sie niemals fehlerhaften Code lesen oder ändern müssen, werden Sie große Schwierigkeiten haben, Arbeit zu finden. Denken Sie daran, dass 50% der Programmierer in der unteren Hälfte ihrer Klasse abschlossen. Selbst in einem Ein-Mann-Team ist "today you" für die Lösung eines Problems besser qualifiziert als "last month you". Die Fähigkeit, mit nicht idealem Code zu arbeiten, ist nur ein Teil der Arbeit.
Viele Arbeitgeber erkennen dies an, so dass sie den Code, den sie Ihnen zum Lesen geben, für den schlechtesten Code in ihrer Codebasis und nicht für den besten Code repräsentieren. Wenn das aus dem Kontext nicht klar ist, sollten Sie fragen. Ein Kollege, mit dem ich manchmal ein Interview geführt habe, hat eine Codepage, die er absichtlich schlecht geschrieben hat, nur um sie als Interviewfrage zu verwenden.
quelle
In 99% der Fälle sollten Sie sich an das «Dogma» halten, wie Sie es nennen. Das Dogma wird von erfahrenen Personen über Jahre hinweg praktiziert, und was irgendwann wirklich oft pragmatisch erscheint, ist es nicht. Dies ist in der Regel relevanter als die Tatsache, dass Sie nicht gut genug sind, um dieses Problem richtig zu behandeln.
Befolgen Sie das Dogma jedoch nicht blind. Denken Sie daran, welche Schlussfolgerungen dazu führen, dass Menschen diesem Dogma folgen. Weil Sie einen winzigen Teil der Fälle finden, in denen dies nicht beachtet werden sollte. Auf jeden Fall werden diese Fälle sehr selten sein und Sie sollten sich immer mit anderen erfahrenen Programmierern besprechen, bevor Sie eine solche Entscheidung treffen.
quelle
Seien Sie streng, wenn es darauf ankommt. Klammerstil (oder andere Kodierungskonventionen)? Es spielt keine Rolle. Verwenden Sie die, die der Shop verwendet. Kapselung (oder andere grundlegende Programmierprinzipien) ohne guten Grund brechen? Nicht so trivial.
Stack Exchange verwendet Tabellen für das Layout (ebenso wie viele andere wichtige Websites, die Geld verdienen ). Kommt dadurch Rauch aus den Ohren der Puristen? Sicher tut es das. Aber der Pragmatismus setzt sich jedes Mal gegen die Reinheit durch. Versandprodukte überzeugen jedes Mal durch Perfektion.
Die gesamte Domänenschicht, die Persistenzschicht, die Präsentationsschicht und die Einheitentestsache sind aus historischer Sicht noch relativ neu. Es gibt eine Menge Software, die immer noch ein Client / Server-Modell verwenden und nicht auf den neuesten Architekturstil umgestellt werden, nur weil es "besser" ist.
quelle