Wie man trotz hoher Fristen effizienten Code schreibt


28

Ich arbeite in einem Umfeld, in dem wir viele Projekte mit strengen Lieferfristen haben. Wir sprechen sogar direkt mit den Kunden, so dass es ein Muss ist, die Aufgaben schnell zu erledigen.

Mein Problem ist, dass ich immer Code für die erste Lösung schreibe, die mir in den Sinn kommt, was ich in diesem Moment natürlich für die beste hielt. Es endet immer hässlich, und ich habe später gemerkt, dass es bessere Möglichkeiten gibt, aber ich kann es mir nicht leisten, aus zeitlichen Gründen Änderungen vorzunehmen.

Gibt es Tipps, mit denen ich meinen Code effizienter gestalten und dennoch pünktlich liefern kann?


11
Konzentrieren Sie sich nicht auf effizienten Code, sondern auf korrekten Code. Das geht noch viele Meilen weiter. Speichern Sie Ihre Effizienz für die nachfolgenden Releases.
Jesse C. Slicer

Antworten:


23

Wenn der Code gewartet werden muss, erklären Sie, dass zusätzliche Zeit erforderlich ist, um den Code wartungsfreundlicher zu machen, wodurch Geld für das Backend gespart wird. Mit anderen Worten, machen Sie wartbaren Code zu einer Anforderung.

Wenn sie sich nicht darum kümmern, müssen Sie meines Erachtens nichts anderes tun, als immer besser zu werden und das Beste zu tun, um, wann immer möglich, Best Practices zu integrieren.


3
Richtig, ich stimme dem zu, außer dass es in der Realität selten so funktioniert. Ihr Chef möchte, dass bis zum X-Date etwas erledigt wird, ohne sich zu rühren? Schade, Sie müssen es noch erledigen, oder vielleicht finden Sie Arbeit woanders, was oft keine Option ist.
Ed S.

4
@EdS. Woanders Arbeit zu finden ist immer eine Option ... es heißt "Karriere machen" und es braucht Zeit und Mühe, um dies zu tun.
Spoike

17

Okay, das klingt vielleicht ein bisschen verrückt, aber ich schwöre, es funktioniert. Es ist nicht nur zum Programmieren gedacht, sondern ein Rezept für mehr Kreativität, Konzentration und Gedächtnis:

  • Gut essen
  • Meditieren
  • Holen Sie sich viel Schlaf (7-9 Stunden je nach Person)
  • Nickerchen, wenn dein Gehirn verschwommen ist
  • Geh schlafen mit einem ungelösten Problem. Beende deinen Tag nicht mit allem was komplett ist. Lassen Sie eine schwierige Aufgabe offen - Ihr Unterbewusstsein ist bemerkenswert effektiv.
  • Tragen Sie bequeme Kleidung
  • Übung
  • Nehmen Sie sich Zeit für mentale Übungen - Sudoku (nicht programmiert), Kreuzworträtsel, Mathematikübungen, räumliche Rätsel usw
  • Führen Sie objektive Experimente an sich selbst durch, um festzustellen, welche Verhaltensweisen sich auf die Leistung auswirken (Sie benötigen eine zuverlässige Methode zum Testen der Leistung, damit dies funktioniert).
  • Kümmere dich um deine geistige Gesundheit
  • Unterhose aus Baumwolle
  • Achten Sie auf Ihre sexuelle Gesundheit
  • Nehmen Sie sich Zeit für Ihre Familie und Freunde
  • Beherrsche etwas außerhalb deines Berufs (Musik, Kochen, Sport usw.) und knüpfe Kontakte zu anderen Menschen, die das Gleiche tun
  • Für manche Menschen ist ein Haustier ein Muss

Bevor Sie es bemerken, werden Sie eine deutliche Verbesserung Ihrer Programmierproduktivität und der Qualität der Lösungen feststellen (ganz zu schweigen von Verbesserungen in anderen Bereichen).

Quellen:

  1. Ihr Wundergehirn: Maximieren Sie Ihre Gehirnleistung, steigern Sie Ihr Gedächtnis, heben Sie Ihre Stimmung, verbessern Sie Ihren IQ und Ihre Kreativität, verhindern Sie geistiges Altern und kehren Sie es um
  2. Das quantifizierte Selbst
  3. Seth Roberts - in Scientific American

6
Sie haben vergessen: Kein Koffein.
Christopher Mahan

Sie haben vergessen: Sehen Sie beim Codieren nicht auf PORN! Danke dir!
AmirHossein

9

Es ist nicht intuitiv, aber Sie müssen wahrscheinlich langsamer fahren. Wenn Sie die erste Lösung implementieren, die Ihnen in den Sinn kommt, müssen Sie sich später viel zusätzliche Arbeit leisten. Mit "die Straße runter" meine ich noch am späten Nachmittag. Die Probleme, die Sie für sich selbst erstellen, entwickeln sich in wenigen Monaten. Betrachten Sie Ihre Optionen. Geben Sie weniger ein und überlegen Sie mehr. Sogar in einem kurzen Projekt werden Sie feststellen, dass weniger Codierung Sie tatsächlich beschleunigen kann.

Versuchen Sie, Projekte mit wiederverwendbaren Komponenten zu erstellen, wenn sich Ihre Kunden in bestimmten Branchen zusammenfinden. Code nicht zu schreiben ist schneller als ihn zu schreiben.

Aus Sicht Ihres Kunden riecht dies ein wenig nach " Schnell, gut und billig, wählen Sie zwei ". Klar, wir alle wollen sofort, was wir wollen, aber Ihre Kunden müssen sich überlegen, ob dies auf lange Sicht das Beste ist. Versuchen Sie, die Kompromisse zu artikulieren und ihnen dabei zu helfen, gute Entscheidungen zu treffen.


Ich stimme dem zu. Überlegen Sie sich zwei oder drei mögliche Ansätze, bevor Sie mit dem Code beginnen. Treffen Sie dann Ihre Wahl, basierend auf einer Kombination aus einfacher Implementierung, einfacher Prüfung, Effizienz und Erweiterbarkeit.
Omega Centauri

8

Suche einen anderen Job.

Sie werden feststellen, dass nach ca. 6 MOS. bis zu einem Jahr, in dem Sie keinen Stolz auf Ihre geleistete Arbeit haben werden. Außerdem haben Sie keine Zeit damit verbracht, sich mit neuen Techniken, Technologien oder Frameworks vertraut zu machen. Nach einem Jahr waren Sie also nicht in der Lage, mit den neuen Technologien Schritt zu halten. Nach einem Jahr sind Sie im Vergleich zum Markt ein schlechterer Programmierer als zu Beginn.

Wenn zu viel Zeit vergeht (sagen wir, ein paar Jahre oder länger), fällt es Ihnen sehr schwer, irgendwo eingestellt zu werden, außer bei solchen schnellen Jobs, bei denen Qualitätscode nicht geschätzt wird, sondern nur Geschwindigkeit.

Das heißt, als eine "reale Welt" Lernerfahrung, gibt es etwas zu sagen für die schnelle Umgebung, aber ich würde sagen, dass etwa 6 Monate. ist genug. Darüber hinaus sollten Sie sich mit ein paar Personalvermittlern treffen und einen besseren Ort suchen. Sie werden viel glücklicher sein, ehrlich.


2
Was meinst du mit "mos"? ?
Darius.V

mos. = Monate. Noch zwei Charaktere ...
gnasher729

Ich kenne dich nicht, aber "mos" auf Persisch hat eine schlechte Bedeutung. es bedeutet Hintern. ;)
AmirHossein

3

Aus Sicht Ihrer Kunden ist die Codeeffizienz möglicherweise nicht so kritisch und kann recht teuer sein. Heutzutage muss beim Erstellen von Code Stunden an CPU-Zeit gespart werden, um eine Stunde Ihrer Zeit zu rechtfertigen. Für die meisten Programme ist die Effizienz nicht so kritisch. Sogar für diejenigen, wo es ist, muss der größte Teil des Codes nicht so effizient sein. Angesichts der Auswahl würde ich lieber eine einfach zu wartende Lösung als einen effizienteren, schwieriger zu wartenden Code bevorzugen.

Wenn Sie sich Zeit nehmen, um Ihre Codierung zu planen, bevor Sie beginnen, haben Sie möglicherweise Zeit, Lösungen zu bewerten und alternative Ansätze in Betracht zu ziehen. Dies sollte Ihnen Zeit beim Codieren und Testen sparen. Ich habe festgestellt, dass oft einfacher Code effizienter ist.

Layouten Sie den Code sauber und verwenden Sie so viele Zeilen wie nötig. Komplexer Code kann den Optimierer verwirren und zu langsamerem Code führen. Moderne Compiler sind sehr gut darin, den Code zu optimieren und darauf zu vertrauen, dass er seine Aufgabe erfüllt.

Akzeptiere, dass gut genug gut genug ist. Wenn Sie effizientere Ansätze finden, machen Sie sich eine Notiz. Wenn Sie etwas Zeit haben, vergleichen Sie einige Ihrer effizienteren Designs mit denen, die Sie implementiert haben. Probieren Sie sie im kleinen (nur der betroffene Code) sowie im großen (das Programm, das sie verwendet). Dies gibt Ihnen ein Gefühl dafür, wann ein effizienterer Ansatz angemessen ist.

Viele Leute halten vorzeitige Optimierung für einen schlechten Ansatz. Die Implementierung kann kostspielig sein. Leider sind viele vorzeitige Optimierungen nicht so effizient wie der Code, den sie optimiert haben. Um den Code richtig zu optimieren, müssen Sie ihn vor und nach der Änderung instrumentieren, um festzustellen, ob Sie die Effizienz wirklich verbessert haben.

Studiertechniken, mit denen Sie saubereren Code mit geringer Kopplung und hoher Kohäsion schreiben können. In vielen Fällen erhöht die Reduzierung der Komplexität die Effizienz. Techniken, die Ihnen helfen, die Fehler zu minimieren, die Sie während der Entwicklung beheben müssen, helfen Ihnen dabei, schneller zu liefern. Dadurch haben Sie möglicherweise mehr Zeit, um alternative Ansätze zu testen.


1

Robert behandelte die wichtigsten Aspekte.

Ich habe in solchen Umgebungen gearbeitet, in denen der Code nicht länger als sechs Monate gültig ist (sein kann). Es gibt ein paar Daumenregeln, die ich mir vorstellen kann:

  1. Verwenden Sie Open Source - Bibliotheken, Lösungen von Drittanbietern usw. Das damit verbundene Lernen zahlt sich durch weniger Wartung und Fehlerbehebung aus. Wenn Sie jedoch in einer Buggy-Bibliothek stecken bleiben, sind Sie zum Scheitern verurteilt.
  2. Stellen Sie sicher, dass Ihr Design erweiterbar ist. Eine zwingende Anforderung: Der Großteil der Arbeit kommt als Verbesserung, nicht als Erstellung neuer Funktionen.
  3. Erstellen Sie strenge Testpläne. Erhalten Sie eine Qualitätssicherung oder automatisieren Sie Tests, um Regressionstests sicherzustellen.
  4. Verwenden Sie intelligente Tools - IDEs, Dienstprogramme zur Codegenerierung usw.,.
  5. Halten Sie die Dinge so konfigurierbar wie möglich. (Kehrseite ist erhöhte Testbemühungen)
  6. Verbessere deine Tippgeschwindigkeit :-)

1

Sprechen Sie in der Entwurfsphase mit Kollegen .

Besprechen Sie Ihr Design und wie Sie es tun möchten, und lassen Sie sie Ihre Entscheidungen hinterfragen. Wenn Sie sich alle einig sind, was schlau ist, haben Sie ein viel solideres Design.


1

Trainieren. Üben Sie, guten Code zu schreiben, bis er zur zweiten Natur wird. Dann übe das Codieren schneller. Üben Sie dann das Codieren besser. Und wenn Sie fertig sind ... üben Sie noch etwas.


0

Mein Problem ist, dass ich immer Code für die erste Lösung schreibe, die mir in den Sinn kommt, was ich in diesem Moment natürlich für die beste hielt.

Nein, das ist nicht dein Problem. Das ist eine Tugend. Es ist das Einfachste, was funktionieren könnte. Dies funktioniert jedoch nur in Kombination mit Refactoring. Es ist ein kontinuierlicher Prozess: Machen Sie die nächst einfachere Sache, die möglicherweise immer wieder funktionieren könnte, so dass Ihr System immer ein Ausdruck Ihres aktuellen Verständnisses des Lösungsraums ist.

Ihr Problem ist, dass Sie ein Management haben, das die tatsächlichen Lebenszykluskosten von Softwaresystemen nicht kennt. 90% dieser Kosten entfallen auf die Wartung und nicht auf die Erstimplementierung. Testen und Refactoring sind unsere besten Werkzeuge, um die Gesamtlebenszykluskosten eines Softwaresystems zu senken . Wenn Ihre Manager Sie diese Dinge nicht tun lassen, sind sie unverantwortlich und müssen umgeschult werden. Oder Sie müssen einen neuen Job finden.

Zum Schluss: Wie ich bereits sagte *, müssen Sie lernen, wie man nein sagt .

* Wie programmiere ich nach einem sehr engen Zeitplan?


0

Wenn sie den Umfang und die Zeit festsetzen, können Sie nur die Drop-Qualität festlegen, um die Frist einzuhalten.

Wenn möglich, lassen Sie die externe Qualität fallen, die für die Stakeholder sichtbar ist, und machen Sie keine Kompromisse bei der internen Qualität, die Ihre Habitabilität in der Codebasis beeinträchtigt.

Ich glaube wirklich nicht, dass Selbstverbesserung Ihnen in dieser Situation helfen wird. Wenn überhaupt, dann ist es normalerweise Durchsetzungsvermögen.

Versuchen Sie, einen Fuß in die Tür zu bekommen, wenn die Arbeit geschätzt wird. Wie kann Ihr Chef abschätzen, wie lange Sie brauchen, um etwas zu tun?

Treffen Sie Ihrem Chef und / oder Kunden eine Auswahl. Zu oft entscheiden sich Entwickler selbst dafür, die Qualität zu reduzieren, ohne etwas zu kommunizieren. Verspätete Projekte / Arbeiten sind sehr verbreitet und werden in der Regel „verwaltet“. Handeln Sie rechtzeitig und warnen Sie die Leute, wenn Sie eine versäumte Frist sehen.

Sie können den Rahmen nicht kürzen oder die Frist verschieben, wenn Sie ihnen nichts mitteilen.

Wenn Sie bei der Qualität in irgendeiner Form Kompromisse eingehen wollen, lassen Sie es ihre Entscheidung sein. Geben Sie ihnen Sachen gegeneinander ab.

Einige Dinge, die nur DU entscheiden kannst. Wenn Sie es gerade zum Laufen gebracht haben. Aber es ist sehr unerreichbar. Vielleicht sind Sie sich nicht sicher, ob es in allen Fällen funktioniert. Sagen Sie niemandem, dass Sie fertig sind. Mach es nochmal. Sehr oft ist es eine Entscheidung, die nur Sie treffen können. Entweder weil das Problem sehr zeitaufwendig ist, oder weil Sie einen nicht-technischen Manager haben.

Manchmal ist das Teil Ihrer Arbeitsmoral. Würden Sie einfach einen Patienten zusammennähen, ohne sich die Hände zu waschen, weil Sie keine Zeit haben?

Denken Sie vor allem daran: Es gibt kein späteres.


0

Ich bin ein .NET-Entwickler und arbeite an Webanwendungen.

Ich habe angefangen zu tun:

Wenn es sich um C # -Code handelt, versuche ich, diesen Code zuerst in LinqPad zu schreiben (falls möglich).

Wenn es sich um Javascript handelt, schreibe ich diesen Code zuerst und teste ihn in jsfiddle / jsbin (falls möglich).

Ich stellte fest, dass dies die Qualität des Codes verbessert, mich aber nicht verlangsamt (und in einigen Fällen stellte ich fest, dass er schneller ist).


Dieser Beitrag ist ziemlich schwer zu lesen (Textwand). Hätten Sie etwas dagegen bearbeiten sie in eine bessere Form ing?
gnat

@gnat - danke für den Vorschlag. Es hilft, Vorschläge mit dem Downvote zu erhalten. Ich hoffe die Formatierung ist jetzt besser.
User637563

Eine Lösung außerhalb der gesamten Umgebung zu finden, kann seine Vorteile haben. Sie haben etwas, das funktioniert, sodass Sie wissen, dass das Problem ein Konflikt mit dem Rest des Systems sein muss, wenn es nicht im gesamten System funktioniert. Sie können dann versuchen, die Lösung zu ändern, um den Konflikt zu beseitigen, während Sie feststellen können, ob die Lösung auch außerhalb der vollständigen Umgebung funktioniert. Ihre Vernunft könnte Ihnen dafür auf der ganzen Linie danken.
Bent
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.