Konzentriert bleiben bei automatischen Prozessen, „It’s compiling“

Ich bin kürzlich in eine ziemlich ironische Situation geraten. Nachdem ich einen kleinen Teil in einem Code geändert und meinem Computer gesagt hatte, er solle mit dem Kompilieren beginnen, wechselte ich zu einer Website und stieß auf Folgendes:

Die beste Programmierer-Entschuldigung für legitimes Nachlassen: das Kompilieren meines Codes.  Von xkcd 303 von Randall Munroe per https://creativecommons.org/licenses/by-nc/2.5/

[xkcd-Comic 303 von Randall Munroe]

In meiner Firma arbeiten sie mit einem Tool, das notorisch langsam beim Kompilieren von Programmen ist. Es wurde wegen der einfachen Implementierung von Programmen ausgewählt, sie sind es gewohnt, mit dieser Sprache zu arbeiten.

Ich ertappe mich oft dabei, wie ich auf den Compiler-Button drücke und entweder etwa 30 Sekunden warte oder abgelenkt werde. Nach diesen 30 Sekunden mache ich mich wieder an die Arbeit, nur um festzustellen, dass ich einen kleinen Fehler gemacht habe, und muss innerhalb von zwei Minuten erneut auf Kompilieren klicken.

Einmal 30 Sekunden zu warten ist nicht allzu schrecklich, aber es ungefähr 15 Mal pro Stunde tun zu müssen, ist mühsam. Nach diesen 30 Sekunden wieder an die Arbeit zu kommen, wird von Tag zu Tag schwieriger.

Wie kann ich produktiv bleiben?

Bearbeiten:

Anscheinend war die Art von Fehlern, auf die ich stoße, nicht klar. Ich spreche nicht von Fehlern, die vom Compiler abgefangen werden. Es sind meistens Fehler, die ich erst entdecke, wenn das Programm läuft, für das es kompilieren muss. Zum Beispiel das Austauschen von zwei (schlecht dokumentierten) Ausweisen. Die Fehler sind im Code schwer zu erkennen, aber leicht am Verhalten zu erkennen.

Aktualisieren:

Ich habe viele der vorgeschlagenen Antworten übernommen, und keine davon ist "die richtige", da sie alle unterschiedliche Ideen und Meinungen bieten. Einige sind großartige Möglichkeiten, um das Kompilieren zu beschleunigen, aber leider trifft keine davon auf mich zu. Ich arbeite auf einem schnellen System mit 2 SSDs, aber der Engpass ist, dass ich auf Android arbeite, das über USB hochgeladen werden muss. Da das Kompilieren nicht beschleunigt werden kann, muss ich meinen Workflow anders am Laufen halten.

Die Antwort von @Coteyr ist großartig, aber leider ist dies so ziemlich mein einziges Projekt. Das erlaubt mir zwar, mich besser auf dieses Projekt zu konzentrieren, aber da ich ansonsten nicht viel zu tun habe, kann ich diese Antwort nicht auf mich selbst anwenden. Ich hoffe, andere finden es trotzdem nützlich.

Die von Dennis und Иво Недев haben mir sehr geholfen. Ich habe begonnen, meinen Code während des Kompilierens durchzugehen und bei Bedarf Kommentare hinzuzufügen. Es ist jedoch schwierig, damit anzufangen, da die Idee "meh, jeder, der das liest, wissen sollte, was es bedeutet". Vorzugeben, dass Leute, die meinen Code lesen, dumm wären, hat sehr geholfen, eine angemessene Dokumentation hinzuzufügen.

Was meiner Meinung nach die größte Änderung hatte, wurde in diesem Thread jedoch nicht erwähnt, da ich nicht die spezifischen Details für eine solche Antwort angegeben habe. Als ich noch einmal durch meinen Prozess ging und die Kompilierzeit tatsächlich zeitlich festlegte (stellt sich als 1 Minute 15 heraus), wurde mir klar, dass das größte Problem darin bestand, dass ich während des Kompilierens eigentlich nichts tun konnte. Visual Studio hat die unangenehme Angewohnheit, Ihre Dateien zu sperren ... Dank https://stackoverflow.com/questions/3123624/visual-studio-locking-files-while-debugging habe ich es geschafft, das zu ändern, und ich kann es Sagen wir, es hilft sehr, Ihren Code berühren zu können, während er ausgeführt wird.

Ein großes Dankeschön an alle, die geantwortet haben, es ist für mich viel einfacher geworden, mich 8 Stunden am Tag zu konzentrieren.

(Wenn Sie weitere Vorschläge haben, können Sie diese gerne als Antworten hinzufügen, sie könnten für zukünftige Passanten sehr hilfreich sein.)

Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben .
Die Frage wurde geschützt, daher kann ich keine neue Antwort hinzufügen, aber ich denke, es gibt eine bessere Antwort als die bereits gegebenen: Unit-Tests besser nutzen. Sie können die Klasse erstellen und ihr Verhalten in Einheitentests testen, die Sie in Ihrer IDE ausführen können. Es wird Ihnen wahrscheinlich auch ermöglichen, einen bestimmten Komponententest auszuführen, um zu überprüfen, ob Ihre Änderungen das Problem behoben haben. Auf diese Weise müssen Sie es viel seltener bereitstellen.
Amüsanterweise bin ich hierher gekommen, während mein Latexdokument kompiliert wurde ...
...But the bottle neck is that I'm working on Android, which has to upload via an USB. So as the compiling can't be sped up...- Dann ist Ihr Engpass nicht der Kompilierungsschritt. Es ist der Upload - Schritt.

Antworten (14)

Ein langer Build lähmt den gesamten Softwareentwicklungsprozess. Sie sollten dies nicht als Tatsache hinnehmen, ohne vorher Schritte zur Verkürzung der Bauzeit zu unternehmen. Hier sind einige Möglichkeiten, wie Sie das tun können:

  1. Kaufen Sie eine SSD .
  2. Fügen Sie mehr RAM hinzu.
  3. Wenn Sie eine Web-App entwickeln: Verwenden Sie Browserify , um Ihren clientseitigen Code im laufenden Betrieb neu zu laden.
  4. Erstellen Sie während der Entwicklung nur die Teile der Codebasis, die sich ändern.
  5. Untersuchen Sie den Buildcode und schließen Sie den Build auf Ihrem lokalen Computer kurz, sodass nur die Teile der Codebasis erstellt werden, die sich ändern.
  6. Erwägen Sie, automatisierte Komponententests nur vor dem Einchecken auszuführen.
  7. Arbeiten Sie mit Teammitgliedern und Managern zusammen, um die Build-Zeit dauerhaft zu verkürzen.

Mehr zu #1 und #2: Diese sind besonders effektiv. Sie sollten dies auch tun, wenn Sie Geld aus Ihrer eigenen Tasche ausgeben müssen, da dies Ihre allgemeine Zufriedenheit am Arbeitsplatz erhöht. Ein guter Schreiner würde keine stumpfe Säge vertragen, und Sie sollten keine langsame Festplatte oder eine Workstation mit zu wenig RAM vertragen. Sie möchten abends zu Hause sein, mit Ihrer Familie zu Abend essen oder Netflix schauen. Sie möchten keinen elenden "Tod durch tausend Schnitte" erleiden, indem Sie auf langsame Builds warten.


BEARBEITEN:

  1. An die Leute, die sagten, dass ich die Frage des OP nicht beantwortet habe: Bitte beachten Sie diese Meta-Antwort .
  2. Ein langsamer Aufbau kann den Arbeitsplatz lahmlegen. Es ist sehr wichtig, alle Optionen zu prüfen, bevor Sie die Tatsache akzeptieren, dass der Build langsam ist.
Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben .
Ich würde auch hinzufügen, mir andere Tools anzusehen. Ich erinnere mich, dass ich mit Sharepoint arbeiten musste und es 15 Minuten gedauert hat, eine JavaScript-Änderung bereitzustellen und zu testen! Am Ende habe ich Fiddler verwendet, um Aufrufe von JS-Dateien an lokal gespeicherte Dateien umzuleiten, die ich schnell ändern konnte.
Kann bestätigen. Hatte ziemlich lange ein altes Gerät und es war wirklich ärgerlich. Nachdem ich einen mit mehr RAM bekommen hatte, war die Arbeit viel besser als zuvor.
Benchmarken Sie auch Ihren Virenprüfer und sehen Sie, wie stark der Build verlangsamt wird. Ändern Sie bei Bedarf den Virenprüfer.
Nur um zu Nr. 1 und Nr. 2 hinzuzufügen, wenn Sie genug RAM dafür haben, versuchen Sie vielleicht, Ihre gesamte Entwicklung auf einer RAM-Disk zu speichern (viele Ressourcen, wie Sie eine auf Ihrem System erstellen können). Stellen Sie einfach sicher, dass Sie etwas Unterstützung haben es alle paar Minuten im Falle eines Stromausfalls, unerwarteten Herunterfahrens usw. hochfahren. Ich habe dies selbst mit großer Wirkung genutzt, indem ich meine gesamte Entwicklungsumgebung darin platziert habe (Java-Instanz, Ameise, Eclipse, Quellcode usw.).

Ein Schwertkampf ist eine großartige Übung. Benutze es.

Um ehrlich zu sein, kann man beim Kompilieren nicht viel mit dem Code machen. Sie können versuchen, die Kompilierzeit zu verkürzen, aber manchmal ist das einfach nicht möglich. Sie können versuchen, die Anzahl der Kompilierungen zu reduzieren, aber manchmal ist es einfach scheiße.

Also ... um die Produktivität zu verbessern, müssen Sie nur besser werden als ein Stuhl- und Schwertkampf. Ich würde vorschlagen:

  • E-Mails beantworten
  • Dokumententickets
  • Bewerbung dokumentieren
  • Verpflichten Sie sich zu SCM, wenn Sie können
  • Machen Sie eine legitime Pause.
  • Behandeln Sie andere nicht verwandte Codeaufgaben
  • Meetings mit Teammitgliedern haben
  • ein Nickerchen machen

Ehrlich gesagt ist das einer der Gründe, warum ich die Sprachen mag, die ich mag. Keine Kompilierzeit. Wenn Sie eine so lange Kompilierzeit haben, müssen Sie sich damit befassen, vorausgesetzt, Sie können es nicht ansprechen.

Beispielsweise könnten Sie in .NET große Logikblöcke in DLLs aufteilen. Dann müssen Sie nur noch häufig Codeabschnitte kompilieren.

Sie können sich auch die Compileroptionen ansehen und Optionen auswählen, die "nach dem ersten Fehler abbrechen".

Hinweis Ich habe gerade bemerkt, dass Ihre Bauzeit 30 Sekunden beträgt. Das ist keine lange Bauzeit. Wenn Sie in dieser Zeit etwas tun möchten, dann machen Sie Fingerübungen oder stehen Sie auf und atmen Sie tief durch. Lange Bauzeiten sind 10 Minuten. oder mehr.

Sie sollten lesen, wie schlecht es ist, immer wieder Aufgaben zu wechseln, um die Produktivität zu steigern. So etwas funktioniert nicht wirklich. Er wird noch mehr an Produktivität verlieren und noch mehr Stress bekommen
Nun, als ich die Frage zum ersten Mal las, nahm ich an, dass ein 30-Menuett bis zu einer Stunde ein langer Bau war. Wenn Sie eine halbe Stunde totschlagen müssen, während Sie auf den Compiler warten, füllen Sie diese am besten mit zumindest halbverwandten Aufgaben. Wenn Sie von 30 Sekunden sprechen ... Nun, es ist so gut wie jede andere Zeit, eine Art Augen- oder Fingerbelastungsübung zu machen. Dort einfach und schnell und EXTREM wichtig.
Nun, dann stimme ich dem zu.
Erwägen Sie, einen Aufzählungspunkt hinzuzufügen: "Check StackExchange Hot Network Questions list" ;-)
@DigitalTrauma Das muss einer der schlechtesten Produktivitätstipps aller Zeiten sein ;) Fast so schlimm wie "Lesen Sie einen Wikipedia-Artikel und versuchen Sie, keinen Links zu folgen" (funktioniert nie so).
Dank des Overheads des Kontextwechsels und des begrenzten Platzes im eigenen mentalen Stack ist der Versuch, nicht relevante Arbeiten während dieser Wartezeiten zu blockieren, wahrscheinlich weniger produktiv, als an die Decke zu starren.
@NathanCooper Fingerübungen oder Augenübungen erfordern nicht viel geistiges Vermögen. Vor allem, wenn Sie sich daran gewöhnen. „F5“ 1-2-3-4-5 1-2-3-4-5 Aufbau prüfen. Code-Code-Code. „F5“ 1-2-3-4-5 1-2-3-4-5 Aufbau prüfen. Und es ist viel weniger Overhead als Augenbelastung oder RSI.
Ich lese das, während die Dinge installiert werden, aber sie wurden vor Minuten erledigt :)
Ich denke, eine Microsoft-Studie hat ergeben, dass das Beantworten von E-Mails 30 Minuten Produktivität kostet? Diese Antwort ist ein aktiv schädlicher Rat. Ich weiß nicht, warum 14 Personen den Kommentar positiv bewertet haben, was so viel vorschlägt, aber die Antwort nicht negativ bewertet haben.
30 Sekunden ist direkt im Bad Valley. Zu lange, um konzentriert zu bleiben, wenn Sie sehr oft bauen müssen, aber zu kurz, um auf etwas anderes umzusteigen.
„Verpflichten Sie sich zu SCM, wenn Sie können“, bevor ein Build abgeschlossen ist?
@StuperUser Vielleicht hängt es von der Sprache, dem SCM und Ihren Ignorierungen ab. Sie checken die binären Objekte nicht ein, warum also nicht festschreiben? Wenn Sie in einem Feature-Zweig alle gewünschten Fehler begehen, entstehen einige der besten Ideen aus Fehlern. Sie werden fusionieren/squashen, bevor Sie mit dem Master-/Hauptzweig fusionieren, richtig? Der Punkt ist, dass jedes Setup anders ist. Es gibt keinen Grund, warum Sie sich beim Erstellen nicht verpflichten können, wenn Sie sich in einer Umgebung befinden, die dies unterstützt.

Etwas aus eigener Erfahrung:

Versuchen Sie, mehrere Fehler gleichzeitig zu beheben.

Sicher, es ist sehr schnell, zwei Spalten zu vertauschen, nachdem Sie bemerkt haben, dass sie vertauscht sind. Stellen Sie jedoch sicher, dass Sie nicht mit der Überprüfung aufhören, nachdem Sie einen Fehler gefunden haben.

Beispielsweise könnten Sie die Anzahl der Zyklen reduzieren, indem Sie andere Dinge überprüfen:

  • Sind die Spalten zumindest richtig formatiert?
  • Enthalten alle anderen Spalten, was sie sollten?
  • ...

Dies ist besonders wichtig in den ersten 1 oder 2 Zyklen und könnte Ihnen helfen, von 15 auf 5 Verzögerungen von 30 Sekunden zurückzugehen (und wahrscheinlich auch ein besseres Ergebnis).

Oh Mann, das ist so kritisch. Wir konzentrieren uns so sehr auf die Reduzierung der Zykluszeit ... Gesamtzeit = Zykluszeit * Anzahl der Zyklen. Die Reduzierung der Anzahl der Zyklen ist genauso wichtig wie die Reduzierung der Zykluszeit!!
Ich denke, dies übersieht die Kosten für die Behebung zu vieler Dinge in einem einzigen Zyklus - dies macht es sehr schwierig, die Auswirkungen einzelner Änderungen zu isolieren. Aus diesem Grund liegt der Schwerpunkt auf der Zykluszeit – die Verringerung der Anzahl der Zyklen führt zu anderen nachteiligen Effekten
@Dancrumb Es muss nicht sein, wenn Sie es schaffen, was zu beheben ist, insbesondere in der Phase, in der alles „gebaut“ ist und Sie testen. Erstellen Sie beim Testen eine gute Liste aller Probleme, die Sie beheben müssen. Versuchen Sie herauszufinden, was Sie reparieren müssen, damit Sie später kein Trial-and-Error brauchen. Testen Sie so viele neue/behobene Funktionen wie möglich. Beenden Sie dann das Programm, gehen Sie in Ihre IDE und reparieren Sie diese alle. Markieren Sie in der Liste, welche Sie behoben haben. Führen Sie dann Ihren Build durch und testen Sie alle Ihre Korrekturen – streichen Sie durch, wenn Sie fertig sind. Auf diese Weise können Sie problemlos Zyklen von 10-20 Korrekturen gleichzeitig durchführen, bevor Sie neu erstellen müssen.
Das ist was ich mache. Genauer gesagt versuche ich, an zwei unabhängigen Themen gleichzeitig zu arbeiten. Ich arbeite an Aufgabe Nr. 1, drücke auf Kompilieren, wechsle zu Aufgabe Nr. 2, bei der es sich um E-Mail oder eine andere Codebasis handelt. Wechseln Sie dann zurück zu Aufgabe Nr. 1, testen Sie und wiederholen Sie.
Bei einer Bauzeit von 30 Sekunden ist das eigentlich keine große Sache. Im schlimmsten Fall beginnen Sie mit dem Kompilieren und überprüfen den Code in der Zwischenzeit doppelt. Wenn Sie nichts gefunden haben, haben Sie 30 Sekunden gespart. Wie auch immer, es lohnt sich nicht, 30 Sekunden lang zu viel über den Code nachzudenken.
Sie müssen immer testen, was Sie tun. Andernfalls können Sie Fehler oder andere Fehler verursachen, die möglicherweise schwer zu beheben sind, da Sie nicht wissen, welche Ihrer Änderungen diesen Fehler verursacht haben
Habe das verpasst. Es ist nicht so gut wie die Kompilierzeit tatsächlich zu verkürzen, aber für diejenigen, die nicht die Möglichkeit haben, die Kompilierzeit zu verkürzen, ist es eine hervorragende Nutzung der eigenen kognitiven Fähigkeiten - da Sie alles auf einmal tun.
Ich habe aufgehört zu zählen, wie viele Programmierer ich getroffen habe, die es eilig hatten, nur den ersten gefundenen Fehler zu debuggen und zu lösen, ohne den Rest der Änderungen zu testen. Dies ist eine ausgezeichnete Antwort.

Versuchen Sie, ein Skript zu erstellen, das das tut, was Sie tun müssen, und dann ein hörbares Ding-Geräusch und/oder ein Popup erzeugt. Wenn Sie also Ihren Fokus ablenken möchten, brauchen Sie sich keine Gedanken darüber zu machen, ob Sie komplett abschalten und vergessen, zu überprüfen, ob Sie fertig sind. Für mich ist es in Ordnung, sich "ablenken" zu lassen, indem man sich andere Dinge wie anderen Code ansieht, aber das Problem ist, wenn man "zu weit in den Kaninchenbau geht" und vergisst zu überprüfen, ob der Prozess abgeschlossen ist.

Ich werde mich nicht darum kümmern, einen Vorschlag zu machen, wie dies zu tun ist, da dies je nach Betriebssystem, Kompilierungsmethode und anderen Faktoren variieren wird. Ich würde einfach so etwas wie "Sound und Popup in (Betriebssystem hier einfügen) machen, wenn der Befehl ausgeführt wird" oder ähnliches googeln.


Update: Wie in einigen Kommentaren angemerkt wurde, gibt es möglicherweise Möglichkeiten, dies in bestimmten Programmen mit GUIs zu tun, nicht nur über die Befehlszeile. Wie zuvor werde ich hier nicht die Mühe machen, Vorschläge zu machen, da es sehr unterschiedlich sein wird, um welches Programm es sich handelt und was eine Weile dauert.

Slack-Integrationen oder ähnliches eignen sich dafür gut
+1; Verzögerungen passieren, und wenn Sie sich beim Multitasking nicht genügend Platz auf dem Monitor lassen, um die Ergebnisse zu sehen, können Sie das menschliche Äquivalent des "Polling" am besten vermeiden. Es kann auch einfach sein, den Compilerbefehl so zu umschließen, dass eine Meldung angezeigt wird. Ich verwende ein sehr kurzes notifyShell-Skript, das kurz gesagt "$@"; notify-send "$1 is done."( docs )
Tangential zum Thema lange Prozesse: Wenn Sie routinemäßig lang andauernde SQL-Abfragen durchführen, können einige SQL-Clients auch einen Ton nach Abschluss liefern.

Meine Antwort hängt vom Compiler ab, aber versuchen Sie Folgendes:

Wenn der Compiler es Ihnen ermöglicht, den Code anzuzeigen und im Hintergrund kompiliert wird, können Sie Ihre eigene Version von RDD ausführen . Während der Compiler seine Arbeit erledigt, gehen Sie einfach den Code durch, den Sie gerade geschrieben haben, kompilieren Sie ihn in Ihrem Kopf, überprüfen Sie ihn und versuchen Sie, Fehler zu finden.

Du wirst:

  1. Lassen Sie sich nicht ablenken und verlieren Sie den Fokus.
  2. Wenn ein Fehler auftritt, dauert es nicht zwei Minuten, ihn zu beheben und erneut zu kompilieren, sondern viel weniger.

Zum Beispiel das Austauschen von zwei (schlecht dokumentierten) Ausweisen.

Ich habe dieses Problem in vielen Programmen gesehen, die Intoder Stringfür jede einzelne ID verwenden; In diesem Fall ist es leicht, versehentlich eine ID anstelle einer anderen zu übergeben und es lange Zeit nicht zu bemerken.

Wenn Sie eine Hühner-ID an den Getränkeautomaten weitergeben können, hat Ihr Code ein Problem (*).

Der Trick besteht also darin, IDs zu markieren . Da Sie von langen Kompilierzeiten sprechen, gehe ich davon aus, dass Sie über eine statisch typisierte Sprache verfügen, in diesem Fall sollten Sie diese Typen nutzen. A ChickenIdist nicht gleich a DrinkId. A DrinkIdist nicht gleich a FuelId.

Machen Sie sie zu unterschiedlichen Typen, und der Compiler zeigt Ihnen gerne Ihre Fehler, was die Fix-Compile-Test-Schleife beschleunigt (indem der Test-Schritt ausgelassen und der Compile-Schritt unterbrochen wird).

Dies ist die statisch typisierte Version des Fail-Fast - Prinzips: Es geht kaum schneller, als wenn der Compiler (oder sogar die IDE, wenn sie im Hintergrund kompiliert) Fehler anzeigt.

Als Bonus können Sie sogar eine Validierung in dasselbe System einführen. In meinem Teil der Welt sind zum Beispiel nur wenige IDs jemals negativ ... oder wenn Sie eine Stringhaben, ist eine ID von 2 KB gelinde gesagt überraschend.

(*) Was weiß ich, es sei denn, das Trinken von Hühnerblut ist bei Ihnen Standardpraxis?

Obwohl es möglicherweise nicht direkt auf die Frage des OP eingeht, ist dies kein schlechter Rat. Vergleichen Sie Falschen Code falsch aussehen lassen auf Joel auf Software oder Wie lässt man falschen Code falsch aussehen? Welche Muster verwenden Sie, um semantische Fehler zu vermeiden? auf Stapelüberlauf .
@MichaelKjörling: In der Tat; es ist keine neue Idee :) Folgt auch dem Prinzip von Daniel J. Bernstein, Fehlerklassen statt Fehlervorkommen zu beseitigen .
Ich verstehe den Geist dieser Antwort, aber ich verstehe nicht, wie Sie das tatsächlich auf so etwas wie eine ID anwenden können. Es gibt zunächst nur eine begrenzte Anzahl statischer Typen zur Auswahl, und viele sind austauschbar. Wenn Sie beispielsweise eine id erstellt longhaben, könnten Sie trotzdem versehentlich eine int. Außerdem wäre das in der Praxis einfach nur verrückt.
@ChrisPratt Einige Sprachen machen so etwas lächerlich einfach (z. B. F # und OCaml). Die Idee ist, dass selbst wenn zwei IDs denselben primitiven Typ haben ( intsagen wir ), Sie einen Typ intfür jeden ID-Typ haben (ChickenID, DrinkID). Obwohl sie die gleiche Funktionalität haben, bedeutet die Semantik des Typsystems, dass Sie sie nicht falsch herum verstehen können. Wenn Code Vergleiche und dergleichen auf der ID durchführen muss, können die entsprechenden Methoden entweder pro Typ implementiert werden, oder der typspezifische Code kann sie zerlegen, wo nichts schief gehen kann.
@ChrisPratt: Um den Kommentar von VisualMelon zu erweitern, wäre die Verwendung verschiedener integrierter Typen eine schreckliche Idee, da viele Sprachen sowieso eine implizite Konvertierung haben, sodass nichts gewonnen würde. Stattdessen benötigen Sie für jede Geschäftseinheit einen Geschäftstyp mit der entsprechenden Funktionalität; Sie vermeiden nicht nur, eine Entität mit einer anderen zu verwechseln, sondern Sie vermeiden auch den Aufruf unsinniger Funktionen (selbst wenn eine ID numerisch ist, 2+ID, 2*ID usw. machen einfach keinen Sinn!).

Der offensichtliche Weg, dies zu mildern, besteht darin, von vornherein damit aufzuhören, zahlreiche kleine Fehler zu machen. Hier würde ich sowieso ansetzen.

Wenn der Compiler 30 Sekunden benötigt, dauert der Compiler 30 Sekunden. Wir alle machen Fehler, aber 15 Mal pro Stunde wäre für mich ein Signal, um eine robustere Fehlerprüfmethode zu haben.

Es gibt wahrscheinlich so viele Möglichkeiten, dies zu tun, wie es ihre Mitarbeiterprogrammierung gibt. Was auch immer für dich funktioniert. Beheben Sie das Problem an seiner Quelle.

Ich bin kein Programmierer, also muss ich ziemlich viel herumspielen, damit die Dinge manchmal funktionieren. Ich bleibe produktiv durch Multitasking, wenn eine Sache nicht bearbeitet werden kann, arbeite ich an etwas anderem.

Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben .

Ich ertappe mich oft dabei, wie ich auf den Compiler-Button drücke und entweder etwa 30 Sekunden warte oder abgelenkt werde. Nach diesen 30 Sekunden mache ich mich wieder an die Arbeit, nur um festzustellen, dass ich einen kleinen Fehler gemacht habe, und muss innerhalb von zwei Minuten erneut auf Kompilieren klicken.

Einmal 30 Sekunden zu warten ist nicht allzu schrecklich, aber es ungefähr 15 Mal pro Stunde tun zu müssen, ist mühsam.

Wenn Sie 15 Mal pro Stunde neu kompilieren müssen, weil Sie so viele kleine Fehler gemacht haben, dann ist Ablenkung offensichtlich nicht Ihr Problem - Sie sind einfach nicht vorsichtig genug.

Und wenn Sie kleine Fehler machen, die vom Compiler abgefangen werden, ist das wahrscheinlich ein Zeichen dafür, dass Sie auch logische Fehler machen, die nicht abgefangen werden.

Bemühen Sie sich, sich Ihres Codes bewusster zu sein, bevor Sie ihn kompilieren.

Schau es dir an, schreibe ein paar Kommentare, schau es dir noch einmal an. Dann kompilieren.

Wenn Sie feststellen, dass Sie immer wieder dieselben kleinen Fehler machen, müssen Sie vielleicht mehr Zeit damit verbringen, Ihre Programmiersprache zu verstehen. Eine kleine Investition in das Lernen kann sich langfristig auszahlen.

Entschuldigung für die Unklarheit, ich spreche nicht von Fehlern, die vom Compiler abgefangen wurden. Es sind meistens Fehler, die ich erst entdecke, wenn das Programm läuft, für das es kompilieren muss. Zum Beispiel das Austauschen von zwei (schlecht dokumentierten) Ausweisen. Die Fehler sind im Code schwer zu erkennen, aber leicht am Verhalten zu erkennen.
@DaniëlvandenBerg Wenn diese Situation häufig vorkommt, können Sie auch die Integration von TDD (Test-Driven Development) in Betracht ziehen.
@Brandin TDD ist stark auf kurze Zyklen und sehr, sehr häufiges Neukompilieren angewiesen. Während TDD nett ist, wird es sicherlich sein Problem verschlimmern .
Und TDD ist eine gute Praxis. Es ist, als müssten die Dinge erledigt werden. „Konzentriere dich mehr und mache weniger Fehler“ ist Wunschdenken von Menschen, die die Natur des Jobs ignorieren. Wie das OP sagte, ist es WEIT MEHR (wie das Zehnfache oder mehr) Aufwand, einen Fehler im Code zu erkennen als bei der Ausführung. Und viele Fehler sieht man sowieso nie.
@nvoigt: Nein, da eine sehr häufige Neukompilierung den Umfang möglicher Gründe für das Fehlschlagen der Kompilierung (und des automatisierten Tests zur Erstellungszeit) einschränkt. Wenn Sie zwischen den Builds nur kleine Änderungen vornehmen und immer noch feststellen, dass Sie 15 Versuche benötigen, um es richtig zu machen, dann macht der Programmierer ( trotz Ablehnungen) einfach zu viele Fehler (wird sich aber hoffentlich mit der Zeit verbessern, wenn er Erfahrung sammelt). . In jedem Fall wird TDD den angerichteten Schaden begrenzen.
@LightnessRacesinOrbit Der "angerichtete Schaden" ist die verlorene Zeit, weil das Neukompilieren unangemessen lange dauert. Das mit TDD zu beantworten und "einfach öfter neu kompilieren" geht über mein Verständnis hinaus. Wenn etwas lange dauert und ich das nicht ändern kann, muss ich die Notwendigkeit minimieren, es zu tun. TDD macht sehr viele Dinge, aber es minimiert nicht die Notwendigkeit einer Neukompilierung. Das Neukompilieren in kleinen, häufigen Schritten ist das Herzstück von TDD.
@nvoigt: Wenn Sie 50 wesentliche Codeänderungen vornehmen, bevor Sie eine Kompilierung versuchen, müssen Sie mehr beheben und mehr erneut kompilieren, bevor Sie Ihr Ziel erreichen. Jede Korrektur/Änderung kann sich auf die 49 von Ihnen vorgenommenen Änderungen auswirken. Wenn Sie stattdessen eine wesentliche Codeänderung vornehmen und diese sofort testen und feststellen, dass Sie versagt haben, ist der durch diesen Fehler verursachte Schaden wahrscheinlich weitaus geringer. Obwohl ich das Ganze ehrlich gesagt strittig finde, da das OP sagt, dass die Kompilierung nur 30 Sekunden dauert, was nichts ist! :D

Investiere die Zeit in dich selbst.

10 Sekunden frei: Liegestütze machen.
60 Sekunden kostenlos: Stack Exchange Hot Network Questions durchsuchen.
120 Sekunden gratis: Steh auf und trink etwas Wasser.

Ich bin gerade von 20 Liegestützen aufgestanden, während ich darauf gewartet habe, dass ein Kollege mir auf Slack antwortet. Jedes Mal, wenn ich sehe, dass ich 10 < seconds < 120auf etwas warten muss, nutze ich die Zeit, um mich zu verbessern . Seit ich vor ein paar Wochen damit angefangen habe, fühle ich mich gesünder, energiegeladener und weniger müde. Ich sehe, dass meine Produktivität in die Höhe geschossen ist. Und ich fühle mich großartig.

Seien Sie vorsichtiger / Holen Sie sich bessere Software

Ist das eigentliche Problem, dass Sie warten müssen, bis der Build abgeschlossen ist, um zu wissen, ob Sie einen Fehler gemacht haben, oder dass Sie genügend kleine Fehler durchgehen lassen, sodass die sehr kurze Build-Zeit (30 Sekunden!) zu einem Problem wurde?

Nicht alle Probleme werden sofort offensichtlich sein; Aus diesem Grund ist versehentliches Programmieren eine schreckliche Idee, und es klingt nach dem, worauf Sie sich einlassen.

Ihre Bearbeitung schlägt vor, dass Sie dies tun, weil die von Ihnen verwendete Software keine Dokumentation enthält. Das ist ein Problem mit der Software und sollte behoben werden. Dokumentation ist kein nettes Extra, sondern Kernfunktionalität. Wenn Sie genug Zeit damit verbracht haben, über die API zu raten, um diese Frage zu stellen, ist es wahrscheinlich an der Zeit zu diskutieren, ob diese Software zu einer Belastung geworden ist.

Nutzen Sie die Zeit für kleine einmalige Aufgaben

30 Sekunden scheinen die perfekte Zeit zu sein, um mehrere kleine Aufgaben zu erledigen, die Sie wahrscheinlich nicht ganz ablenken werden. Die besten Beispiele, die mir einfallen, sind das Abspielen/Ändern eines Musiktitels und das Abrufen Ihrer offiziellen E-Mail. Während der zweite Sie ablenken könnte , ist das an sich vielleicht keine schlechte Sache.

Multitasking

Wie in meinem Kommentar zu der Frage angegeben, bin ich an Builds gewöhnt, die viel länger als 30 Sekunden dauern. Wenn Ihre Builds länger dauern, sollten Sie sicherstellen, dass Sie während dieser Zeit immer eine zweite Aufgabe haben, zu der Sie wechseln können.

Ich versuche, eine Aufgabe A und eine Aufgabe B zu haben – Aufgabe B hat nichts mit kompilierten Programmen zu tun, an denen ich arbeiten kann, während Aufgabe A fast alle meine Festplatten-E / A erstellt und aufsaugt.

Dies ist ein normaler Ablauf für TDD, Little bit of test little bit of code. Nicht aus Versehen programmiert. Wenn Sie aus Versehen programmieren, kümmern Sie sich nicht um Ihre Tests

Implementieren Sie einen Continuous Integration/Build Server und automatisierte Tests.

Sobald Sie einen Commit durchführen, sollte Ihr Build-Server dies bemerken und einen automatisierten Build starten. Dadurch können Sie sofort weiterarbeiten.

Wenn der Build abgeschlossen ist, sollte Ihr Server einige automatisierte Tests ausführen, um allgemeine Probleme wie die von Ihnen beschriebenen (gemischte Spalten usw.) zu erkennen. Der Server sollte Ihnen eine E-Mail senden, wenn er Kompilierungs- und/oder Testfehler findet.

Der Vorteil dieses Workflows ist, dass Sie nie aus dem Fokus geraten. Sie arbeiten weiter an Ihrer aktuellen Aufgabe und erhalten asynchron Feedback zum Build. Auf diese Weise können Sie einen Gedanken vervollständigen und dann zurückgehen, um Fehler zu beheben, ohne ständig hin und her zu springen, was zu vielen Kontextwechseln führt.

Bitte verwenden Sie nicht den Build-Server als Compiler. Ihre Kollegen werden schnell lernen, Sie zu hassen.
Das ist zwar ein guter Ratschlag, aber falsch. Sie sollten vor dem Festschreiben Komponententests lokal kompilieren und ausführen. CI-Server geben Ihnen die Garantie nur bei faulen oder weniger erfahrenen Mitarbeitern, die sich verpflichten, ohne diese Dinge zu tun. Außerdem ist Ihre Argumentation fehlerhaft, wenn Sie sagen, dass Sie mit dieser Methode an Ihrer Aufgabe weiterarbeiten können, da Sie an Ihrer Aufgabe weiterarbeiten können, wenn Sie auch lokal bauen.

(Dies ist eine Antwort auf die Bearbeitung der ursprünglichen Frage, die besagt, dass es sich bei den fraglichen Fehlern nicht um Kompilierungsfehler handelt, sondern um solche, die Sie erst erkennen, wenn das Programm ausgeführt wird.)

Die Zeit, die mit Verhaltens- oder Laufzeitproblemen verbracht wird, kann durch das Schreiben von Komponententests drastisch reduziert oder eliminiert werden. Sie sparen nicht nur Zeit, da Sie nicht nach jeder Iteration dieselben Schritte manuell ausführen müssen (lassen Sie die Maschine die niedere Arbeit für Sie erledigen), sondern das Schreiben von Code, um sicherzustellen, dass Sie ihn überhaupt testen können, hilft Ihnen beim Durchdenken Ihren Code besser und zwingen Sie, über den Datenfluss nachzudenken und Grenzfälle zu berücksichtigen.

Da es sich bei den Fehlern hier nicht um schlechte Codierung, sondern um schlechte Dokumentation handelt, ist es möglich, (1) viele IDs in einem Kompilierlauf abzufangen, anstatt sie einzeln zu beheben, dann können Sie möglicherweise produktiver arbeiten, wenn Sie Ihr Build-System verwenden, oder (2 ) verschieben Sie die IDs, mit denen Sie ein Problem haben, in eine Textdatei, die zur Laufzeit gelesen werden kann. Dann werden Sie in Ordnung kompilieren und Ihre Zeit in einer Run-Edit-Run-Schleife verbringen, die in Ihrem Fall möglicherweise schneller ist.

Bessere Hardware

Bevor Sie irgendetwas ändern , haben Sie versucht, mehr/bessere Hardware auf das Problem zu werfen? Eine aufgerüstete Workstation ist nicht nur ein nettes Extra, sondern spart dem Unternehmen sogar Geld. Jedes Mal, wenn Sie abgelenkt werden, verliert das Unternehmen Geld (für die Zeit, die Sie damit verbringen, sich wieder zu konzentrieren).

Besserer Bauprozess

Wenn mehr/bessere Hardware das Problem nicht löst, versuchen Sie, den Build-Prozess zu rationalisieren, um schneller zu sein, oder ändern Sie sogar die Toolchain für eine schnellere.

Besser selbst

Der Grund, warum ich diese beiden Ansätze zuerst vorschlage, ist, dass dies die Ablenkungszeit für alle Entwickler in Ihrem Unternehmen und nicht nur für Sie verringert. Wenn beide Ansätze das Problem nicht beseitigen, dann bleibt tatsächlich nur eine Variable übrig, und das sind Sie.

Wenn ich an einem Problem arbeite, plane ich, wie ich etwas in mehreren Schritten lösen kann. Ein Beispiel wäre die Implementierung einer Anmeldeschaltfläche. Dies ist ein mehrstufiger Prozess.

- Find the appropriate button icon and place it in the index.html file.
- Make the button call something on the backend, usually an API
- Make the API call the appropriate service.
- Let the service call the appropriate DataAccess methods
- Create tests for valid and invalid logins (backend)
- Create tests for valid and invalid logins (integration)
- Add these tests to automated test repo
- Commit code
- proceed to next task

Beachten Sie, dass alle Aufgaben in einer logischen Reihenfolge sind (zumindest für mich), aber sie sind nicht in dem Sinne abhängig, dass die Änderung des Codes an verschiedenen Stellen stattfinden würde. Auf diese Weise kann ich meine nächste Aufgabe planen , während meine aktuelle Aufgabe darin besteht, Tests zu kompilieren und/oder auszuführen.

Dieser Ansatz erfordert jedoch, dass Ihre Fähigkeit zum Kontextwechsel zwischen zwei Aufgaben auf dem neuesten Stand ist. Ist dies nicht der Fall, ist dieser Ansatz für Sie nicht geeignet. Andere Ansätze (oben erwähnt) wie Stretching, Fingerübungen könnten ebenfalls funktionieren.