Bitte bleiben Sie bei technischen Fragen , vermeiden Sie Verhaltens-, Kultur-, Karriere- oder politische Probleme.
Bitte bleiben Sie bei technischen Fragen , vermeiden Sie Verhaltens-, Kultur-, Karriere- oder politische Probleme.
Antworten:
Der Fehler befindet sich in Ihrem Code, nicht im Compiler oder in den Laufzeitbibliotheken.
Wenn Sie einen Fehler sehen, der möglicherweise nicht auftreten kann, überprüfen Sie, ob Sie Ihr Programm ordnungsgemäß erstellt und bereitgestellt haben. (Insbesondere, wenn Sie eine komplizierte IDE oder ein Build-Framework verwenden, das versucht, die unübersichtlichen Details vor Ihnen zu verbergen ... oder wenn Ihr Build viele manuelle Schritte umfasst.)
Gleichzeitige / Multithread-Programme sind schwer zu schreiben und schwerer zu testen. Es ist am besten, so viel wie möglich an parallele Bibliotheken und Frameworks zu delegieren.
Das Schreiben der Dokumentation ist Teil Ihrer Arbeit als Programmierer. Überlassen Sie es nicht "jemand anderem".
BEARBEITEN
Ja, meine Nummer 1 ist übertrieben. Sogar die am besten entwickelten Anwendungsplattformen haben ihren Anteil an Fehlern, und einige der weniger gut entwickelten sind mit ihnen weit verbreitet. Aber auch so ist , sollten Sie Ihren Code immer den Verdacht zuerst , und starten Sie nur Compiler / Bibliothek Fehler Schuld , wenn Sie haben klare Hinweise darauf , dass der Code nicht fehlerhaft ist.
In den Tagen, in denen ich C / C ++ - Entwicklung durchgeführt habe, erinnere ich mich an Fälle, in denen vermeintliche Optimierungsfehler darauf zurückzuführen waren, dass ich / ein anderer Programmierer Dinge getan hatte, von denen die Sprachspezifikation sagt, dass sie undefinierte Ergebnisse haben. Dies gilt auch für vermeintlich sichere Sprachen wie Java. Schauen Sie sich beispielsweise das Java-Speichermodell (JLS, Kapitel 17) genau an.
Gleitkommaberechnungen sind nicht präzise.
Hör nicht auf zu lernen.
Das Wichtigste, was Sie tun können, um die Qualität und Wartbarkeit Ihres Codes zu verbessern, ist REDUCE DUPLICATION.
Fähigkeiten zur Fehlerbehebung und zum Debuggen
Sie verbringen kaum Zeit mit diesem Thema in einem der von mir belegten Programmierkurse, und meiner Erfahrung nach ist dies einer der wichtigsten Faktoren für die Produktivität eines Programmierers. Ob es Ihnen gefällt oder nicht, Sie verbringen viel mehr Zeit in der Wartungsphase Ihrer App als in der neuen Entwicklungsphase.
Ich habe mit soooooo vielen Programmierern zusammengearbeitet, die nach dem Zufallsprinzip Änderungen vorgenommen haben, ohne die Strategie, das Problem überhaupt zu finden. Ich habe dieses Gespräch Dutzende Male geführt.
Anderer Programmierer: Ich denke, wir sollten versuchen, zu sehen, ob es das behebt.
Ich: Okay, vorausgesetzt, das behebt es. Was sagt Ihnen das darüber, wo die Ursache des Problems liegt?
Anderer Programmierer: Ich weiß es nicht, aber wir müssen etwas ausprobieren .
Die Grundlagen. Derzeit lernen Programmierer Technologien und keine Konzepte. Es ist falsch.
Its wrong
sollte it's wrong
zum Beispiel sein.
Jeder Programmierer sollte wissen, dass er ständig Annahmen in den Code einfügt, z.
Und er sollte wissen, dass er sich darauf vorbereiten sollte, wenn diese Annahmen brechen.
assert()
angeben - überall. assert()
wird Ihnen helfen, Ihre Annahmen zu dokumentieren und Sie zu retten, wenn Sie sich irren.
Jeder Programmierer sollte über das Testen Bescheid wissen.
Konzepte lernen . Sie können die Syntax googeln.
Kritisches und logisches Denken. man kann nichts Gutes ohne es tun.
Das ist schwieriger als du denkst.
Während es einfach ist, etwas zusammenzustellen, das bei normaler Verwendung funktioniert, ist die Bewältigung fehlerhafter Eingaben, aller Rand- und Eckfälle, möglicher Fehlermodi usw. zeitaufwändig und wird wahrscheinlich der schwierigste Teil der Arbeit sein.
Dann muss die Anwendung auch noch gut aussehen.
Fachwissen. Die Spezifikation ist nie 100%; Die Kenntnis der tatsächlichen Domäne, für die Sie sich entwickeln, wird IMMER die Qualität des Produkts verbessern.
Big O-Notation und ihre Auswirkungen.
Einige nützliche Hinweise
Zeiger natürlich. :)
Code Complete 2 - Deckblatt zu Deckblatt
Daten sind wichtiger als Code.
Wenn Ihre Daten intelligent sind, kann der Code dumm sein.
Dummer Code ist leicht zu verstehen. Das gilt auch für intelligente Daten.
Fast jede algorithmische Trauer, die ich jemals hatte, war darauf zurückzuführen, dass Daten am falschen Ort waren oder ihre wahre Bedeutung missbraucht haben. Wenn Ihre Daten eine Bedeutung haben , geben Sie diese Bedeutung in das Typensystem ein .
Teilen und Erobern. In der Regel ist dies der beste Weg, um alle praktischen Probleme von der Planung bis zum Debuggen zu lösen.
Echte Fähigkeiten spiegeln sich in der Fähigkeit wider, ein einfaches Design gut auszuführen, und nicht in der Fähigkeit, ein kompliziertes Design überhaupt zum Laufen zu bringen.
Diese Fähigkeit beruht auf einer größeren Beherrschung der Grundlagen, nicht auf der Beherrschung des Arkanen. Ein hochkarätiger Programmierer zeichnet sich nicht durch seine Fähigkeit aus, das zu codieren, was andere nicht können (mit Funktionen höherer Ebene, erweiterter funktionaler Programmierung, What-Have-You), sondern durch seine Fähigkeit, die profane Codierung perfekt zu verfeinern. Auswahl der geeigneten Aufteilung der Funktionalität zwischen Klassen; in Robustheit bauen; mit defensiven Programmiertechniken; und mit Mustern und Namen, die zu einer größeren Selbstdokumentation führen, sind dies die Basis für eine hochkarätige Programmierung.
Es ist von entscheidender Bedeutung, guten Code zu schreiben, auf den Sie oder eine andere Person in einer Woche pro Monat oder Jahr zurückgreifen können, um zu verstehen, wie dieser Code verwendet, geändert, erweitert oder erweitert wird. Das spart Ihnen Zeit und Mühe. Es schmiert die Räder der Produktivität, indem es Straßensperren beseitigt, über die Sie zuvor gestolpert wären (möglicherweise unterbricht es Ihren Gedankengang oder nimmt Ihnen Stunden oder Tage der Anstrengung von anderen Arbeiten usw.). Es erleichtert die Konzentration auf die schwierigen Probleme und manchmal lassen die schweren Probleme nach.
Mit einem Wort: Eleganz. Jede Klasse, jede Methode, jede Bedingung, jeder Block, jeder Variablenname: Streben nach Eleganz.
Beschuldigen Sie niemals den Benutzer, was mit einer saubereren Benutzererfahrung oder einer besseren Dokumentation behoben werden könnte. Oft nehmen Programmierer automatisch an, dass der Benutzer ein Idiot ist, der nichts richtig machen kann, wenn das Problem eine schlechte Gesamterfahrung oder mangelnde Kommunikation ist. Programme sind dazu gedacht, benutzt zu werden, und um den Benutzer mit Verachtung zu behandeln, ist es an erster Stelle, den Programmierpunkt zu verfehlen.
Jeder Programmierer sollte wissen, wie man den Debugger benutzt und wie man ihn gut benutzt .
Kurzschlussauswertung, obwohl sie eines der ersten Dinge ist, die Sie über boolesche Operatoren lernen.
Wie Sie genau abschätzen können, wie lange die Implementierung eines Features dauern wird. Noch wichtiger ist, wie Sie vermitteln können, dass Sie nicht blödsinnig sind, wenn Sie diese Schätzung einreichen.
Auf den Codierungsstil kommt es an:
... und gutes Design ist wichtig.
Idealerweise lernt der Programmierer diese Dinge vor (oder während) seiner ersten Codeüberprüfung. Im schlimmsten Fall lernt der Programmierer sie, wenn der Chef ihn / sie auffordert, in Eile einige nicht triviale Änderungen an einem schrecklichen Code vorzunehmen.