Meist unterschätztes Programmiertool [geschlossen]

35

Wir haben viele großartige Tools, die beim Programmieren sehr hilfreich sind, z. B. gute Programmierer, Texteditoren, IDEs, Debugger, Versionskontrollsysteme usw. Einige der Tools sind mehr oder weniger "Muss" -Tools, um die Arbeit zu erledigen (z. B. Compiler). .

Es gibt immer noch Tools, die viel helfen, aber immer noch nicht so viel Aufmerksamkeit bekommen, aus verschiedenen Gründen, zum Beispiel als sie veröffentlicht wurden, waren sie ihrer Zeit voraus und sind jetzt mehr oder weniger in Vergessenheit geraten.

Welche Art von Programmierwerkzeug ist Ihrer Meinung nach das am meisten unterschätzte? Motivieren Sie Ihre Antwort.

Anto
quelle
3
Unsere Gehirne? - -
Trufa
Okay, wer möchte den Lisp-Eintrag hinzufügen? * grins *
Mark C

Antworten:

70

Eine Gummiente. Ja wirklich.

http://en.wikipedia.org/wiki/Rubber_duck_debugging

Rubber-Duck-Debugging , Rubber-Ducking und der Rubber-Duckie-Test sind informelle Begriffe, die in der Softwareentwicklung verwendet werden, um auf eine Methode zum Debuggen von Code zu verweisen. Der Name ist ein Hinweis auf eine wahrscheinliche apokryphe Geschichte, in der ein ungenannter Experte immer eine Gummiente an seinem Schreibtisch hatte und seinen Code debuggte, indem er sich zwang, sie der Ente Zeile für Zeile zu erklären.

Um diesen Prozess zu verwenden, erklärt ein Programmierer einem unbelebten Objekt, wie z. B. einer Gummiente, den Code mit der Erwartung, dass der Programmierer den Fehler bemerkt, wenn er einen falschen Code erreicht und versucht, ihn zu erklären. Wenn beschrieben wird, was der Code tun soll, und beobachtet wird, was er tatsächlich tut, wird jede Inkongruenz zwischen diesen beiden offensichtlich ...

Andiaz
quelle
6
Ich mache das die ganze Zeit mit meinem Mann. Als Technischer Supporter mit ein bisschen Programmierkenntnissen versteht er ungefähr 60% meiner Aussagen, zwingt mich jedoch, die 40% zu erklären, die ich nicht so gut verstehe. Die Anzahl der Fälle, in denen es funktioniert, ist wirklich beeindruckend.
Ethel Evans
1
Sie lachen. Ich hatte eine Kollegin, die tatsächlich eine Gummiente auf ihrem Schreibtisch hatte.
Berin Loritsch
57
Ich habe es versucht, aber meine Gummiente schien sich nicht auf das Problem zu konzentrieren. Wo finde ich eine richtig qualifizierte Gummiente mit echtem Programmierinteresse?
Steve314
3
Ich benutze mein Tagebuch dafür. Ich habe manchmal ziemlich lange Diskussionen mit mir darüber. Ich wünschte, ich könnte mich manchmal verständlich machen, was ich meine. Das in ein Tagebuch zu schreiben hilft manchmal viel später, wenn ich mich frage, was der Idiot, der den Code geschrieben hat, an dem ich arbeite, gedacht hat.
Lars Wirzenius
1
@Steve: Japanische Forscher arbeiten daran, aber ich glaube nicht, dass sie irgendwo in der Nähe sind: youtube.com/watch?v=3g-yrjh58ms
Rei Miyasaka
42

Stift und Notizbuch.

  1. Funktioniert ohne Strom.
  2. Tragbar.
  3. Doodle on / in, wenn Sie sich in Meetings langweilen
  4. Speichern Sie nützliche Informationen.
  5. Wenn es aufgeschrieben ist, legen die Leute mehr Wert darauf.
  6. Andere können es lesen und lernen.
Sparky
quelle
In den alten Zeiten großer Unternehmen bekamen Ingenieure und Techniker leere Notizbücher, in die sie all die Dinge schrieben, die wir normalerweise in verschiedenen Dateien auf unseren Festplatten ablegen. Wenn die Notizbücher gefüllt waren, wurden sie an einen sicheren und feuersicheren Aufbewahrungsort geschickt. Wenn jemand Zugriff auf diese Notizen benötigt, kann er die Notizbücher überprüfen.
Osterwal
3
Die Russen benutzten einen Bleistift.
Job
@Job Hah, ich benutze immer noch eine Flasche Tinte! (... Naja, nur für die Kalligraphie, aber trotzdem :))
Mateen Ulhaq
Was ist mit Tablet PCs?
Mateen Ulhaq
1
@Job:… und Wodka!
Spoike
38

Diff-Werkzeuge scheinen beim Vergleich von Protokollausgaben oder Daten in flachen Textdateien zu wenig genutzt zu werden. Oder ist das vielleicht nur eine Nische? Ich finde es sehr nützlich und hilfreich für das Debuggen, große Protokolle der Programmausführungen zu vergleichen und ein oder zwei Details zu identifizieren, die sich geändert haben.

Tools zur Leistungsprofilerstellung sind auch sehr gut, besonders wenn Sie einen kritischen Engpass haben, aber es scheint, dass nur sehr wenige Leute mit ihnen vertraut sind (und ich gebe mich in dieser Kategorie zu).

Gute XML-Tools sind von entscheidender Bedeutung - wenn Sie mit XML-Dateien arbeiten, die mehr als ein Dutzend Zeilen oder Mehrfachschemata enthalten. Manchmal benötigen Sie mehr als nur eine grundlegende Syntax, die andere Editoren zur Verfügung stellen. Auch beim Arbeiten mit XML kann das Erlernen von XSL sehr nützlich sein. Oft sehe ich, was mit einer einfachen XSL-Transformation erreicht werden kann, die in vielen Zeilen im Programmcode ausgeführt wird. Zur Klarstellung: Ich behaupte nicht , dass XML selbst ein "unterschätztes Programmiertool" ist. Ich schlage vor, dass der Wert guter XML-Editoren nach dem, was ich gesehen habe, unterschätzt wird.

FrustratedWithFormsDesigner
quelle
1
++ diffWird absolut unterschätzt. In Bezug auf die Profilerstellung sind Sie nicht der einzige, der denkt, dass sie nützlich sein müssen, aber Sie selbst wissen nicht, wie. Überprüfen Sie dies.
Mike Dunlavey
Ja, ich habe darüber nachgedacht, ein Profiling-Tool zu lernen, bin aber nie dazu gekommen
Anto,
23
+1 für die Profilerstellung, +1 für Diff-Tools, -1 für XML-Tools. Einige Leute denken, wenn sie mit einem Problem konfrontiert werden: "Ich weiß, ich werde XML verwenden." <Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription></ProblemWorsening>
Mason Wheeler
2
@Mason: Süßes XML.
Mike Dunlavey
10
@Mason Wheeler: Ich habe nicht XML vorschlagen als Werkzeug Probleme zu lösen, schlug ich vor gut XML - Tools - wenn Sie müssen zur Arbeit mit XML, stellen Sie sicher , haben Sie einen Editor / Tool , das es sehr gut. Etwas, das Xpath-Abfragen, Schemavalidierung, Transformation, Vergleich von Wert und Struktur (eine besondere Art von Diff-Tool, denke ich) usw. ausführen kann. Einfache Editoren mit Hervorhebungen können es einfach nicht schneiden, wenn die Dinge chaotisch werden - sie machen oft Dinge Schlimmer (übrigens mag ich Ihren XML-Code;)).
FrustratedWithFormsDesigner
37

Reguläre Ausdrücke

Sie sind einfach so nützlich. Sie helfen beim Durchsuchen von Protokolldateien, beim Analysieren von Text usw. Sie sind nur äußerst nützlich.

Ich finde es seltsam, wie viele Leute ich kenne, die sie nie benutzen, weil mit ihnen eine gewisse Lernkurve verbunden ist. Oft sehe ich Leute, die Dinge auf die harte Tour machen (Hinweis: Vor dem regulären Ausdruck habe ich Dinge auf die harte Tour gemacht), wenn ein einfacher regulärer Ausdruck sie schnell zum Erliegen bringen konnte.

barrem23
quelle
8
Denken Sie daran, dass reguläre Ausdrücke kein Schweizer Taschenmesser sind, auch wenn sie bei korrekter Anwendung großartig sind.
Anto
10
Extrem nützlich - aber oft missbraucht, was zu kryptischem, nicht zu wartendem Code führt. Das alte Sprichwort "Jetzt hast du zwei Probleme" hat in der Realität eine gewisse Grundlage.
Steve314
4
RegExes sind ein Schweizer Taschenmesser: Ein adäquates Werkzeug für viele schnelle Arbeiten, obwohl es wahrscheinlich nicht das richtige Werkzeug für den Bau eines ganzen Hauses ist.
JasonTrue
4
Hmm, aus irgendeinem Grund hatte ich immer den Eindruck, dass Regex keineswegs unterschätzt wurde. Zu oft sehe ich Leute, die nach einem regulären Ausdruck greifen, bei dem ein einfaches Teilen / For-Loop ausreichen würde, oder wenn reguläre Ausdrücke einfach nicht die Antwort sind (z. B. Analysieren von xml / html).
MAK
Ich habe beide Phänomene gesehen: Regex? Das Zeug ist unlesbar / langsam / abwertend hier einfügen und "Was ist der beste Weg, um eine Regex zu analysieren (völlig unregelmäßige Grammatik einzufügen)?"
JasonTrue
24

Deine Teamkollegen. Wenn Sie sich auf eine heiße Idee begeben und vergessen, Ihr Team einzubeziehen, werden Sie nie die Bedenken oder Ideen hören, warum es nicht funktioniert oder warum es noch besser sein könnte.

Ich sage das, weil es leicht zu glauben ist, dass das Programmieren etwas unsoziales ist, das die Leute mit ihren brillanten Ideen in den Ecken tun. Menschen, die glauben, dies unterschätze den Wert von Teams und ihren Teamkollegen, wenn es darum geht, Ideen / Projekte zum Sinken zu bringen.

Doug T.
quelle
Gute Teamkollegen können niemals überbewertet werden. Die meiste Software und Hardware kann.
Anonym Typ
19

Google. Es gibt sehr wenige Probleme, die noch nicht gelöst und dokumentiert wurden. Eine gut abgestimmte Google-Abfrage kann jedem viel Zeit sparen.

Adam Crossland
quelle
13
Ein gutes Werkzeug, aber ich bin mir nicht sicher, ob ich es unterschätzt nennen würde, zumindest nicht mehr (vielleicht hätte ich vor 9 oder 10 Jahren zugestimmt).
FrustratedWithFormsDesigner
12
Es tut mir leid, aber Google unterschätzt? Zumindest wird Google überschätzt :)
eestein
2
Ich weiß, ich weiß! Aber ich vermute, Sie stimmen dem zu, wenn ich behaupte, dass es unterschätzt wird: Mindestens 75% der Fragen, die bei StackOverflow gestellt werden, lassen sich mit Google leicht beantworten, ja? Es ist klar, dass es zu einem gewissen Grad unterschätzt wird, wenn so viele Menschen es nicht benutzen. Wenn meine Begründung fehlerhaft ist, werde ich meine Antwort löschen.
Adam Crossland
3
@Adam Crossland: 75% sind nett. Ich denke, es ist höher als das.
S.Lott
1
@adam @ s.lott also ich vermute der punkt ist, dass google nicht richtig eingesetzt wird. Dem stimme ich zu. So viele Fragen könnten beantwortet werden (müssten nicht gestellt werden), wenn die Leute wissen, wie man richtig googelt. Grüße.
Eestein
16

Das bei weitem am meisten unterschätzte Werkzeug, um "Engpässe" zu finden, ist Ctrl+C oder die Schaltfläche "Pause" in einem Debugger.

Überprüfen Sie den letzten Absatz dieses Beitrags und diesen Beitrag und diesen Beitrag für den Anfang.

So oft sehe / höre ich von Leuten, die sagen: "Das Programm ist zu langsam! Was kann ich dagegen tun? Ich habe einen Profiler ausprobiert (wenn sie es getan haben), aber ich verstehe nicht, was darauf steht. Hat jemand irgendwelche Vermutungen? Hilfe! " Nun, Vermutungen sind genau das. Was ich schon immer getan habe und andere auch, ist, es in Gang zu bringen, es zu unterbrechen und den Aufrufstapel zu untersuchen. Wenn das Problem wirklich schlimm ist, Bingo , ist es direkt vor Ihnen. Wenn das Problem nur geringfügig ist, tun Sie es mehrmals. Alles, was bei mehr als einer Probe auftaucht und das Sie vermeiden können, ist ein Engpass, den Sie beheben können.

Ja, das ist ein Downvote-Köder, aber es funktioniert.

Mike Dunlavey
quelle
Man sollte stumpfe Instrumente nicht unterschätzen. Offensichtlich ist dies nicht immer die richtige Antwort, aber es kann sein. Nennen wir es eine Annäherung erster Ordnung, die bei Bedarf von einem echten Profiler verfeinert werden kann.
Kristof Provost
@Kristof: Es ist verlockend, so zu denken, und es gibt Probleme, mit denen es nicht umgehen kann, und es gibt Fälle, in denen die Beispiele nicht leicht zu bekommen sind, aber Profiler können diese Fälle auch nicht behandeln, mit Ausnahme einer bestimmten Art, wie Zoom und selbst dann sind sie nicht besser im Sinne, Sie direkt zum Problem zu führen.
Mike Dunlavey
@Kristof: Hier ist die Art von Problem, bei dem das zufällige Anhalten nicht gut ist. Wenn Sie einen Schnappschuss rechtzeitig machen und ihn studieren, können Sie den Grund dafür nicht nennen. Beispiel: Nachrichtengesteuerte Verarbeitung, bei der Sie nicht feststellen können, von wo die Nachricht gesendet wurde, warum oder wie oft. Ein weiteres Beispiel: Asynchrone Protokolle, bei denen Nachrichten ausgetauscht werden und es so aussieht, als würden wir immer auf den anderen warten. Für synchrone Verarbeitung, bessere Profilometer messen können, aber zufall Pausieren ist besser Befund .
Mike Dunlavey
14

Welche Art von Programmierwerkzeug ist Ihrer Meinung nach das am meisten unterschätzte? Motivieren Sie Ihre Antwort.

Der Compiler.

Die meisten Leute nehmen sich keine Zeit, um zu verstehen, was der Compiler ihrer Wahl tut. Sie haben einfach das Gefühl, dass es den Code zu einem ausführbaren Programm macht, und das ist so weit wie sie gehen. Bei den meisten modernen gibt es mehrere Konfigurationen, die Sie eingeben können, damit sie genau das tun, was Sie brauchen. Hier ist ein Beispiel: Ich wette, die Hälfte der Entwickler in Ihrem Büro hat keine Ahnung, wie die Warnung als Fehlerstufe festgelegt werden soll (vorausgesetzt, sie hat tatsächlich eine). Welche Möglichkeiten haben Sie, um Debug-Symbole auszugeben? Welche Optimierungen (oder welche Stufe) möchten Sie vornehmen? Die Liste geht weiter.

Kevin
quelle
3
@ Kevin: und ich würde Möglichkeiten hinzufügen, Code zu schreiben, damit der Compiler tatsächlich Prüfungen für Sie durchführt (für statisch typisierte Sprachen). Die meisten Entwickler verwenden Standardtypen (z. B. Zeichenfolgen), um Informationen jeglicher Art darzustellen, in denen sie einfache, aber nicht kompatible Typen für nicht verwandte Daten definieren können.
Matthieu M.
@ Matthieu M Das ist auch ein guter Punkt. Viele Menschen vergessen die einfachen Möglichkeiten, wie sie Ihnen helfen können.
kemiller2002
3
Jede Compiler-Warnung ist ein wertvolles Geschenk. Ignoriere sie nicht! Frage nach mehr! -Fehler sollten obligatorisch sein.
Kristof Provost
@Kristof: -pedantic -Wall -Wextra -Werror... obwohl es dann schwierig werden kann, etwas zu bauen: p
Matthieu M.
Vielleicht bin es nur ich, aber wenn "die Hälfte der Entwickler" nicht weiß, was mit Debug-Symbolen zu tun hat ", ist dies keine Übertreibung.
kizzx2
10

Dein Gehirn. Andere Werkzeuge hätten ohne sie keine große Bedeutung.

jnevelson
quelle
4
Ich habe meine gelegentlich größtenteils unbrauchbar gemacht.
David Thornley
3
"mehr oder weniger vergessen": -S
5
Ich würde sagen, es ist unterschätzt. Zu viele Leute suchen immer nach Abkürzungen, damit sie nicht nachdenken müssen. Es gibt keinen Ersatz für gesunden Menschenverstand und Logik, und Werkzeuge können dies einfach nicht ersetzen.
Jnevelson
2
Ich stimme Jonathan zu, das Gehirn wird oft unterschätzt. Tatsächlich verlassen sich zu viele Programmierer auf die wenigen Tricks, die sie kennen, anstatt aus dem Rahmen zu treten und gelegentlich einen maßgeschneiderten Testfall (billig und schmutzig, Klasse wegzuwerfen) und ein Testwerkzeug zu schreiben, um das vorliegende Problem zu untersuchen. Ich habe Entwicklern bei vielen Gelegenheiten die Mittel gegeben, über ihren Denkzustand hinauszugehen und ihre Probleme mit nicht viel mehr als ein paar Fragen zu lösen.
Asoundmove
1
Einige Kommentare haben mich dazu gebracht, meine Meinung zu ändern, +1 :)
Anto
10

Gute alte:

print

Manchmal ist ein Debugger oder Profiler oder ein UML-Flussdiagramm hilfreich. Und manchmal machen sie dich verrückt. Ich greife immer wieder auf print-Anweisungen (oder trace oder NSLog oder what-have-you) zurück, um sicherzustellen, dass mein Code das tut, was ich denke, dass er tut, wenn ich denke, dass er es tut.

JRW
quelle
Ich denke, das hängt von der Sprache und dem Debugger ab. Die Arten von Debuggern, die heutzutage von den meisten anständigen IDEs für beliebte Sprachen angeboten werden, ermöglichen es Ihnen, Dinge viel einfacher zu tun als Anweisungen auszudrucken.
Billy ONeal
8

Einfache alte Skripte ... Unabhängig von der Anzahl der Sprachen der nächsten Generation, die wir entwickeln, verlassen wir uns immer noch stark auf Skripte. Die meisten alltäglichen Aufgaben können durch das Schreiben einiger weniger Skripte erledigt werden.

Gaurav Sehgal
quelle
1
Sehen Sie .. Ich würde mit diesem nicht einverstanden sein. Ja, Skripte können einige Aufgaben automatisieren. Aber oft werden sie weit über den Sinn hinaus bis zu dem Punkt gebracht, an dem sie zu einem großen Hecht von Spaghetti werden.
Billy ONeal
1
Richtig, große Skripte sind grausam anzusehen und man könnte Perl oder Python dafür verwenden. Obwohl sie immer noch großartig darin sind, kleine Aufgaben zu erledigen.
Gaurav Sehgal
@ Billy Verwenden Sie Python. Spaghetti-Problem gelöst :)
Evan Plaice
7

Stift und Whiteboard.

Sie können Low-Tech nicht schlagen, wenn Sie versuchen, etwas zu erklären.

Andy Lowry
quelle
Möglicherweise handelt es sich um eine doppelte Antwort, für die ich jedoch gesondert für das Whiteboard stimmen muss.
Carson Myers
Hmm, ziemlich sicher, dass es kein Duplikat war, als ich es erstellt habe, sehr seltsam. Ich werde es in Stift und Whiteboard ändern.
Andy Lowry
6

ack . Es ist wie grep -r, aber es ist für das Durchsuchen Ihres Quellcodes konzipiert.

Peter Mortensen
quelle
5

Perl und andere Skriptsprachen. Ideal für Aufgaben, die für GUI-Tools wie Agent Ransack etwas zu kompliziert sind.

Kevin Cline
quelle
1
Ich bin nicht sicher, ob sie unterschätzt werden ...
Anto
3
Auf jeden Fall unterschätzt ... vor allem Perl. Es ist eine Sprache. Sehr gut gestaltet mit dem Motto "Keep Things Simple". Als solches ist es von unschätzbarem Wert für schnelle Aufgaben, die nur erledigt werden müssen.
Turm
@Rook: Ich bin mir nicht sicher, wie eine Sprache mit mehr als 100 Operatoren als "einfach" angesehen werden kann. Möglicherweise nützlich. Aber nicht "einfach".
Billy ONeal
@ Billy - Einfach schließt mächtig nicht aus. Ich finde Taschenrechner einfach. Ich weiß nicht, was die Hälfte der 300 Funktionen in meinem macht, aber das mindert die Einfachheit nicht.
Turm
4

Tastaturkürzel, die ein schnelles, häufiges und sicheres Refactoring ermöglichen. Das Erlernen des Extrahierens (oder Inline-Extrahierens usw.) von Variablen, Methoden, Konstanten oder Klassen beim Drücken einiger Tasten hat die Codierung grundlegend geändert. Sie werden nur häufig umgestalten (dh genug), wenn die Kosten minimal sind. Daher ist es für mich von wesentlicher Bedeutung, diese Verknüpfungen zur zweiten Natur zu machen, um guten Code zu schreiben und zu pflegen.

Verwenden Sie daher im Allgemeinen gute Tools (IDE / Editor) und lernen Sie, wie Sie die darin enthaltenen Funktionen optimal nutzen können.

Als Nächstes folgen Unit-Tests und TDD, um den Code testbar zu halten und die Angst vor Umgestaltungen zu vermeiden.

Wenn Sie diese verwenden, können Sie problemlos korrekten wartbaren Code schreiben, der dem DRY-Prinzip entspricht und selbstdokumentierend ist.

Alb
quelle
4

Unit Testing bietet folgende Vorteile:

  • Entwickler werden die ersten Kunden des Codes. Je schneller ein Fehler entdeckt wird, desto günstiger ist die Behebung. Möglicherweise werden Fehler vor dem Erstellen, Installieren oder Bereitstellen abgefangen .
  • Testen ändert Ihre Sicht auf den Code. Ist das Design klar? Behandelt es Eckfälle?
  • Der Hawthorne-Effekt verbessert die Qualität, indem einfach angekündigt wird, dass ein Team Qualitäts- / Testmetriken veröffentlicht.
  • Auch wenn Tests nicht in der Quellcodeverwaltung aktiviert sind, können sie eine großartige Möglichkeit sein, neues Terrain zu erkunden und zu erlernen.
  • Eine hohe Wahrscheinlichkeit für weniger Bugs!
Michael Easter
quelle
4

Codegeneratoren

Codegeneratoren können aus einer einfachen Definition eine große Menge an effizientem und fehlerfreiem Code erstellen. Die Verwendung von ORM- Typen ist für die Erstellung von Datenzugriffsklassen am offensichtlichsten, es gibt jedoch noch viel mehr Verwendungsmöglichkeiten.

Die Unterstützung für die Codegenerierung steckt aus Sicht des Programmierers und des Frameworks noch in den Kinderschuhen, aber ich glaube, wir werden mehr und mehr davon sehen. In .NET können Sie anfangen, mit dem CodeDOM- Zeug zu experimentieren .

konrad
quelle
Ich schreibe gerne Code-Generatoren, nicht die einfachste Sache, aber so nützlich.
Zachary K
3

Ich benutze AgentRansack stark. Dies ist eine enorme Hilfe beim schnellen Durchsuchen von Tausenden von Dateien. Es hat mir so viel Zeit gespart, aber ich kenne nicht viele Programmierer, die es kennen oder verwenden.

JakeRadakovich
quelle
3

Formale Methoden.

http://www.amazon.com/Discipline-Programming-Edsger-W-Dijkstra/dp/013215871X

http://www.amazon.com/Science-Programming-Monographs-Computer/dp/0387964800/ref=pd_sim_b_1

Es ist schwer, ihre Bedeutung zu übertreiben. Jede Schleife und jede if-Anweisung beginnt als eine Idee, die eine Art "Beweis" erfordert. Die meisten Programmierer machen diesen Beweis die meiste Zeit in ihren Köpfen. Sie fragen, was die if-Anweisung bewirkt und was die Auswahlmöglichkeiten sind und warum die Auswahlmöglichkeiten vollständig, konsistent und exklusiv sind.

Aber manche scheinen zufällig zu raten. Sie brauchen mehr Hilfe und formale Methoden könnten die Art von Hilfe sein, die sie brauchen.

Es ist nur Algebra (und Kalkül) für Code. Nichts zu komplex oder raffiniert.

S.Lott
quelle
Ich fand sie häufig nützlich, um die einfachen Dinge richtig zu machen, damit ich mich beim Debuggen der komplizierteren Dinge darauf verlassen kann. Ich habe die Erfahrung gemacht, dass formale Methoden subtile Fehler ziemlich gut eliminieren und nur die offensichtlichen zurücklassen, die beim Testen leicht aufgefangen werden können.
David Thornley
3

Physische Designmuster wie das Verlassen des Stuhls für ein schnelles Joggen im Sonnenlicht und frische Luft halten unser Gehirn auf Hochtouren.

Joe Chrysler
quelle
3

Nun, es ist Half Life 2 (fügen Sie hier Ihr Lieblingsspiel ein). Wenn ich ein Problem habe, das ich nicht lösen kann, höre ich einfach auf und spiele mit meinem Lieblingsspiel, und plötzlich kommt mir die Lösung in den Sinn. Um ehrlich zu sein, ist es kein Spiel oder so, sondern etwas anderes . Ich sehe oft Leute, die stundenlang an einem Problem sitzen, ohne es zu lösen, und alles, was sie tun sollten, ist, ihr Gehirn für kurze Zeit auszuschalten.

Adam Arold
quelle
3

Stapelüberlauf - schnelle Hilfe von Experten, wenn Sie nicht weiterkommen

Frage- und Antwortseite für professionelle und begeisterte Programmierer. Es wird von Ihnen als Teil des Stack Exchange-Netzwerks von Q & A-Sites erstellt und ausgeführt. Mit Ihrer Hilfe arbeiten wir zusammen, um eine Bibliothek mit detaillierten Antworten auf alle Fragen zur Programmierung zu erstellen ...

Mücke
quelle
+1, aber nicht mehr wirklich unterschätzt
MAK
4
vielleicht sogar überschätzt oder zumindest überbeansprucht
Anto
3

Ich denke, es ist Notepad / TextPad / einfache Textbearbeitungsprogramme. Jeder hat eine Zeit, in der er eine schnelle Lösung benötigt, die kein Öffnen einer IDE und nur eine schnelle Bearbeitung erfordert. Und alle Computer haben eine Art einfaches Textbearbeitungsprogramm.

Peter Mortensen
quelle
2

Behauptungen und eine gute alwaysAssert() Funktion. IMHO sind diese wichtiger als Unit-Tests, da Unit-Tests Fehler nur in den speziellen Fällen finden können, die Sie zu testen dachten. Wenn derselbe Programmierer den Code und die Tests schreibt, wird er wahrscheinlich die gleichen Randfälle in beiden Fällen verpassen. Darüber hinaus ist das Testen von Einheiten manchmal unpraktisch, da die Umgebung, in der die Komponente funktioniert und / oder die Daten, mit denen sie arbeitet, zu kompliziert ist, um einen erfundenen Testfall für zu erstellen.

Die Schönheit von Behauptungen liegt in ihrer Fähigkeit, Annahmen zu dokumentieren und sie an nicht erfundenen Eingaben zu testen . Wenn eine dieser Annahmen falsch ist, schlägt Ihr Code laut fehl, anstatt zu "funktionieren", erzeugt aber subtil falsche Ergebnisse. Es scheitert auch näher an der Wurzel des Problems als ohne die Behauptungen. In der Praxis ist der Code normalerweise korrekt, wenn Sie explizit genügend Annahmen zu einem Codeteil angeben und alle diese Annahmen korrekt sind.

Ein häufiger Kritikpunkt an Asserts ist, dass sie deaktiviert werden können. IMHO sollte jede Sprache oder Standardbibliothek eine alwaysAssert()Funktion oder ein grobes Äquivalent haben, das dasselbe tut, assertaber nicht ausgeschaltet werden kann. Dies kann zum Überprüfen von Annahmen in nicht leistungskritischen Codebereichen verwendet werden, in denen die Vorteile des Deaktivierens von Asserts vernachlässigbar sind.

Dsimcha
quelle
Einverstanden. Leider werden solche einfachen und dennoch effizienten Tools oft unterschätzt.
Peter Mortensen
2

Die F1-Taste. - Nützlich für Programme, die Sie nicht kennen, und für Programme, an denen Sie arbeiten. (Angenommen, es ist eine große Anwendung.)

Ein Benutzer konnte Probleme herausfiltern, indem er Fehler auf der Grundlage seiner Interpretation der Funktionsweise der Software meldete. Natürlich könnte es sein, dass das Design selbst fehlerhaft war. Aber das ist eine andere Geschichte.

Jeremy Edwards
quelle
2
Sowohl unterschätzt als auch unterschätzt.
Anonym Typ
Sehr unterschätzt von den Entwicklern der Anwendung, die Sie gerade verwenden. Daher enthält die Hilfe nur wenige bis gar keine nützlichen Informationen.
Poke
2

Verschiedene UNIX-Kerndienstprogramme, aber in erster Linie findund gelegentlich grepoder ed. Die Fähigkeit, Dinge in tiefen Nestern von Dateien zu finden, ist von unschätzbarem Wert, insbesondere wenn Sie plötzlich eine Codebasis erben und diese reparieren müssen. Selbst wenn der Code gut dokumentiert ist, müssen Sie wahrscheinlich nach etwas suchen, und Sie müssen genau wissen, wie man es findtötet.

Kojiro
quelle
2

Neugierde

Nennen wir es das "Rätsel der Programmierung". Was ist ein Werkzeug im Vergleich zu der Person, die es benutzt? Der Wunsch zu wissen, wie und warum etwas funktioniert oder nicht, erweitert das Wissen mehr als jedes andere Tool, und das geht über die Programmierung hinaus.

Thomas
quelle
2
Ctrl + C    
Ctrl + V

Unzählige Stunden weltweit gespart!

gAMBOOKa
quelle
1

Schwanz

Tail kann verwendet werden, um die Ausgabedatei des Programmprotokolls in Echtzeit zu überwachen. Es war eine große Hilfe bei der Entwicklung von Systemen, die keine anderen Möglichkeiten zum Lesen des Protokolls bieten.

Beispielprogramme sind;

Aussage
quelle
Mac OS X ist ein UNIX-System. Keine Notwendigkeit, es separat zu erwähnen.
Rightfold
0

Ich habe einmal einen Perl Call Graph Generator zusammengeschoben. Es war äußerst nützlich, fiel aber bei nicht prozeduralem Code oder Out-of-File-Routinen schwer.

Paul Nathan
quelle