it-swarm.com.de

Lang gehegte, falsche Programmierannahmen

Ich recherchiere nach allgemeinen Fehlern und schlechten Annahmen, die von jungen (und vielleicht älteren) Software-Ingenieuren gemacht wurden.

Was war Ihre am längsten gehegte Annahme, die schließlich korrigiert wurde?

Ich habe zum Beispiel falsch verstanden, dass die Größe einer Ganzzahl kein Standard ist, sondern von der Sprache und dem Ziel abhängt. Etwas peinlich zu sagen, aber da ist es.

Sei ehrlich; Welche feste Überzeugung hatten Sie und wie lange haben Sie diese Annahme in etwa aufrechterhalten? Es kann sich um einen Algorithmus, eine Sprache, ein Programmierkonzept, ein Testen oder irgendetwas anderes über Programmierung, Programmiersprachen oder Informatik handeln.

281
Demi

Dass ich alle Variablen definieren muss, die ich in meiner Funktion am Anfang verwenden werde (Pascal-Stil).

Früher glaubte ich, ich müsse über ALLE Ressourcen nachdenken, die von meiner Funktion verwendet werden sollen, und sie definieren, bevor ich mit dem Codieren beginne. Dies liegt wahrscheinlich daran, dass meine Muttersprache Pascal war, wo dies die Voraussetzung ist. Wenn ich dann zu C wechselte, definierte ich temporäre Variablen, die nur innerhalb von Schleifen außerhalb dieser Schleifen verwendet werden, wobei der Gültigkeitsbereich in der Schleife außer Acht gelassen wurde, nur damit "alles am Anfang definiert wird".

Ich habe mehrere Jahre gebraucht, um zu verstehen, dass das Definieren aller Ressourcen im Voraus keine Stechpalmenkuh ist und das Scoping für sich genommen für die Lesbarkeit des Codes von größter Bedeutung ist.

4
Roee Adler

Diese Programmierung ist für Junioren gedacht und die besten Projektmanager sind Leute, die nicht programmieren können.

4
Kdeveloper

Zu Beginn meiner C++ - Tage (vor vielen Haaren) war ich von Java= Akademikern umgeben. Als ich nach einem Vorteil von C++ gegenüber Java ( In der Regel eine Frage, die ich als erfundene Frage abzulehnen versuche, aber los geht's), würde ich in meine Antwort aufnehmen, dass C++ Ihnen Verweise gab nd Zeiger. Die Java Jungs Ich würde ungläubig aussehen und vorschlagen, dass Referenzen sind Zeiger, und mich aus dem Raum lachen. Ich bestand darauf, dass Referenzen und Zeiger in C++ unterschiedlich sind.

Und um fair zu sein, hatte ich recht. Referenzen und Zeiger unterscheiden sich semantisch und syntaktisch. Leider habe ich meine Behauptung mit einem Trugschluss untermauert: Die zugrunde liegende Implementierung war anders.

Ich war der festen Überzeugung, dass Referenzen standardmäßig Namensaliase in der Syntax enthalten sind, genauso wie ein typedef ein Typalias ohne Speicher ist.

Ich war mir sicher, dass Referenzen keine Objekte waren und keinen Speicher hatten, sondern lediglich mehrere Zuordnungen von "Name" zu "Objekt" auf oberster Ebene lieferten. In dieser Hinsicht dachte ich, dass sie wie Soft-Links in einem Dateisystem waren:

Code: int a = 3; int& b = a;

 Names          Objects           Memory

+-----+     +-------------+     +-------+
|  a  |---->|             |     |       |
+-----+     |             |     |       |
            |     int     |---->|   3   |
+-----+     |             |     |       |
|  b  |---->|             |     |       |
+-----+     +-------------+     +-------+

Obwohl Optimierungen dazu führen können, haben Referenzen natürlich Speicherplatz. Sie sind verschiedene Objekte, auch wenn die Syntax ihr Bestes tut, um dies vom Programmierer weg zu abstrahieren.

Es genügt zu sagen, dass ich enttäuscht war zu erfahren, dass ein Compiler mit deaktivierten Optimierungen eine Referenz als Zeiger implementieren kann, was eine Dereferenzierungsoperation erfordert: Ich habe tatsächlich die Analogie zu einem hard-link in erstellt ein Dateisystem:

Code: int a = 3; int& b = a;

 Names          Objects           Memory

+-----+     +-------------+     +-------+
|  a  |---->|     int     |---->|       |
+-----+     +-------------+     |       |
                                |   3   |
+-----+     +-------------+     |       |
|  b  |---->|     int&    |---->|       |
+-----+     +-------------+     +-------+

Standard C++ spezifiziert eigentlich nicht, wie Referenzen implementiert werden sollen, so dass meine Theorie für einige Toolchains gelten könnte, aber in keinem Mainstream-Compiler ... und es ist sicherlich nicht im Standard angegeben.

Dass Entwickler/Programmierer von Prozeduren, die mit SQL und relationalen Datenbanken nicht vertraut sind, keine formale Schulung oder Kenntnisse im Umgang mit SQL benötigen und dass ein schnelles Lesen von etwas wie SQL For Dummies ausreicht, um in der Arbeit mit relationalen Datenbanken wie Oracle & SQL Server ausreichen.

Viel zu oft werden Fehler in Anwendungen, die sich mit Daten befassen, die in einer relationalen Datenbank wie Oracle und SQL Server gespeichert sind, durch das Unverständnis oder die Verwendung der Sprache relationaler Datenbanken verursacht. [~ # ~] sql [~ # ~] .

Früher arbeitete ich für einen Softwareanbieter, der die Einstellung hatte, dass ein Entwickler nur das SQL For Dummies-Buch oder etwas Ähnliches benötigte, und der für alle relationalen Datenbankprobleme bestens gerüstet war. Jetzt, da die Kunden dieses Anbieters Datenbanken mit einer Größe von Hunderten von Gigabyte haben, kommt dieser Mangel an SQL-Kenntnissen negativ zurück. Es ist nicht nur die schlechte Ausführung von Suchvorgängen und/oder Aktualisierungen und Einfügungen, die ein Problem darstellen, sondern das eigentliche Design der Datenbank selbst, das das eigentliche Hindernis darstellt.

All dies hätte vermieden werden können und zu weitaus geringeren Kosten geführt, wenn der Entwicklungsleiter zu diesem Zeitpunkt SQL- und relationale Datenbanken mit dem gleichen Respekt behandelt hätte, den sie mit der Sprache hatten, mit der sie die Anwendung erstellt hatten.

Entlassen Sie SQL nicht als unwichtig, da es Sie irgendwann verfolgen wird. Möglicherweise können Sie eine Weile damit durchkommen, selbst nach Jahren, aber irgendwann erreichen Sie den Bruchpunkt, an dem Sie ohne eine vollständige Neugestaltung Ihrer Datenbank keine Fortschritte mehr erzielen können. In diesem Fall sind die Kosten am höchsten.

4
user337500

Dass du das Projekt nie beendet hast, hast du nicht begonnen.

Scheint wirklich dumm, aber ich habe so viele Projekte verschoben, weil der Umfang einfach überwältigend war. Nachdem ich gerade ein Monster eines Projekts beendet hatte, wurde mir klar, dass ich nie begonnen hätte, wenn ich den Umfang des Projekts erkannt hätte. In Wirklichkeit ist sogar das komplexeste System ziemlich einfach, wenn es in diskrete und definierte Teile zerlegt wird. Auf der Makroebene ist es jedoch schnell überwältigend.

4
Serapth

Dass es immer eine "richtige" Art gibt, Dinge zu tun. Ich habe diese Annahme viel zu lange nach dem Verlassen der Universität beibehalten.

Natürlich wurde mir klar, dass es immer viele Möglichkeiten gibt, eine Aufgabe zu erledigen. Jede Methode hat immer Vor- und Nachteile. Schauen Sie sich die verfügbaren Informationen an, entscheiden Sie, und stellen Sie dann sicher, dass Sie es Ihrem Chef gegenüber rechtfertigen können.

4
Phil Hale

Ich dachte, "duck typing" sei eigentlich "duct typing", als ich das erste Mal davon hörte, ähnlich wie die Leute oft "duck tape" sagen. "Duck typing" klang einfach falsch, während "duct typing" einen seltsamen Sinn ergab (Typen mit Kopfsteinpflaster).

4
Chinmay Kanchi

Dass sich die Leute für Best Practices oder sogar Konsistenz interessieren würden.

4
l0b0
4
Chris S

Wenn Sie reguläre Ausdrücke lernen, sparen Sie Zeit

3
rjdevereux

Meine längste (und daher teuerste) falsche Annahme lautete: "Die Anforderungen des Unternehmens sind vernünftig und vernünftig, ich verstehe sie nur noch nicht."

100 grüne Annahmen an der Wand sitzen,
und wenn eine grüne Annahme versehentlich fallen sollte,
Es würden 99 grüne Annahmen an der Wand sitzen.

Abwechselnd:

Humpty Dumpty saß an der Wand.
Humpty Dumpty hatte einen großen Sturz,
und alle Könige Pferde und alle Könige Männer,
sagte Effim, er ist nur ein Techniker.

3
corlettk

Dass andere Leute von bekannten Fehlern genauso betroffen wären wie ich, und es ihnen vorrangig vor der Projektarbeit gestatten würden, diese zu beheben.

3
MartW

Ich bin immer davon ausgegangen, dass jeder, der Code für eine Sprache schreibt, ein Bearbeitungsprogramm verwendet.

Ich arbeitete mit einem meiner Kunden zusammen, der mich hauptsächlich als Unterstützung hatte und einige der komplexeren Dinge für ihn schrieb. Nun, eines Tages hat er eine Akte durcheinander gebracht, große Zeit. Er hat versehentlich über drei Stunden seiner eigenen Arbeit gespart, und als ich ihn fragte, warum er nicht öfter gespart habe, antwortete er mit "weil ich nicht fertig war". Dies war natürlich keine akzeptable Antwort, und ich stupste und stupste ein wenig weiter. Ich habe schließlich herausgefunden, dass er noch nie ein Schnittprogramm verwendet hat, NIE! Nicht einmal notepad.exe! Er hatte einen Online-CPanel-Editor für Dateien verwendet! Es hatte nicht einmal eine Suchfunktion. Er konnte nie speichern, bis er fertig war, weil er die Live-Datei auf der Site bearbeitete!

Unnötig zu erwähnen, dass ich verblüfft war und er bis heute den CPanel-Editor verwendet ...

3
MajorVictory

Seit meiner College-Zeit dachte ich, ich sei ein Meister der Programmierung. da konnte ich codieren aber andere nicht. Aber als ich einer Firma beitrat, war ich von meiner Unkenntnis der Grundlagen beeindruckt. Alle meine Annahmen über mich erwiesen sich als falsch! Jetzt weiß ich, was ich wissen muss und was ich nicht weiß!

3
Manohar

Dass der Vorteil von OOP) darin besteht, dass Sie das Objekt wiederverwenden können, während es in Wirklichkeit die Wiederverwendung des Rest des Codes durch ist Erstellen eines neuen Objekts mit derselben Schnittstelle.

In Wirklichkeit kann das Objekt 2% des Codes ausmachen, so dass Sie durch die Wiederverwendung nur 2% des Codes erhalten. Der eigentliche Vorteil besteht darin, dass 98% des Codes wiederverwendet werden, indem ein neues Objekt erstellt wird, das dem gesamten anderen Code ermöglicht, etwas völlig anderes zu tun. Jetzt haben Sie 98% des Codes wieder verwendet. Es lohnt sich die 3x längere Zeit, um etwas als Objekt zu schreiben.

Wenn Sie beispielsweise über ein Zeichenprogramm verfügen und plötzlich eine neue Form zum Zeichnen vorhanden ist, ändern Sie einfach das ShapeObject (wobei die Benutzeroberfläche unverändert bleibt). An dem Programm muss sich nichts ändern.

3
Clay Nichols

Die Auswertungsreihenfolge von if-Anweisungen in C/C++ war compilerspezifisch. Also schreibe:

if (Zeiger! = NULL) && (Zeiger-> doSomething ())

War nicht sicher, da die Auswertungsreihenfolge vertauscht werden konnte. Ich habe kürzlich herausgefunden (nach vielen Jahren, in denen ich diese Lüge geäußert habe), dass sie Teil der ANSI-C-Spezifikation ist und dass Sie die Bestellung garantieren können und absolut sicher sind.

James

3
James Norris

Als sie Mitte der 90er Jahre am College waren, hatten sie nur Windows 3.11-Computer im Computerraum (ich weiß, komisches College).

Für eine Weile dachte ich dass nur die Windows-Plattform für mich als professioneller Programmierer relevant war und dass alle anderen Plattformen nur aus historisch-akademischer Sicht interessant waren.

Nach dem Schulabschluss und dem Erlernen moderner Unix- und Linux-Umgebungen war ich über meine lahme Schule wütend und enttäuscht.

Ich kann noch nicht glauben, dass ich meinen Abschluss als Computeringenieur gemacht habe, ohne jemals eine Bash-Shell gesehen oder überhaupt von Emacs oder Vim gehört zu haben.

3
Sergio Acosta

Ich habe mir C beigebracht, indem ich K & R gelesen habe. Leider habe ich es nicht Wort für Wort gelesen und muss ein paar Dinge verpasst haben. Ich habe meine eigenen Versionen von malloc und calloc geschrieben, die ich von Job zu Job mit mir herumgetragen habe, weil mir nicht klar war, dass man sich einfach in vorhandene Bibliotheken einbinden kann. Ich habe das mehrere Jahre lang gemacht, bis mich endlich jemand gefragt hat, warum ich das Zeug herumgekarrt habe.

3
elbillaf

Dass ich in der Programmierung für die Karnaugh-Karten , die ich in meinem Informatik-Lehrplan unterrichtet habe, niemals eine praktische Verwendung finden würde.

3
schemathings

Dass es so wichtig war, effiziente Programme zu erstellen, ohne ein Byte oder einen CPU-Zyklus zu verschwenden.

Aber mit mehr Erfahrung geht es nicht um Bytes oder um CPU-Zyklen, sondern um Ihren Gedankenfluss, kontinuierlich, ununterbrochen, ähnlich einem Gedicht.

Versuchen Sie es im Wesentlichen nicht zu sehr.

3
Lakshman Prasad

Diese Tests waren nur eine andere Methode des Aufschubs.

3
Macha

Dass ich durch das Erlernen einer exakten Wissenschaft meine eingeschränkten sozialen Fähigkeiten nicht verbessern müsste.

3
Rômulo Ceccon

Dass ich meinen objektorientierten Code nicht schnell umgestalten müsste. Martin Fowler öffnete endlich meine Augen.

3
Ritesh M Nayak

Das Python war eine unpraktische, nervige Sprache (ich kann immer noch einige Kommentare zu meinem frühen Code lesen und mich darüber beschweren) und C++, was die einzig wahre objektorientierte Sprache ist.

Ich habe mich so geirrt, dass ich mich immer noch schäme.

3
Stefano Borini

Dass ich jemals eine wohlhabende Programmiersoftware für jemand anderen werden würde

3
slf

In der Schule wird Ihnen beigebracht, dass die Programmierung "Eingaben lesen, Daten verarbeiten, Ausgaben schreiben" ist. In der Realität gibt es selten einen Verarbeitungsschritt - die meisten Codierungen bestehen nur aus "Eingabe lesen, Ausgabe".

Im Allgemeinen ist es entweder "vom Benutzer lesen, in die Datenbank schreiben" oder "von der Datenbank lesen, auf dem Bildschirm anzeigen". Diese beiden Fälle decken etwa 95% der Arbeit ab, die Sie jemals erledigen werden.

3
James Curran

Stellen Sie einen Kunden zufrieden, indem Sie implementieren, was er will - dies impliziert leider, dass ein Kunde weiß, was er will.

3
tanascius

Je weniger Code desto besser. Jetzt weiß ich, dass es manchmal wert ist, mehr Codezeilen zu haben, wenn es das Lesen/Verstehen erleichtert

3
Sergio

Mysql_fetch_row von PHP war die einzige Möglichkeit, Daten aus einer ausgeführten SQL-Abfrage abzurufen.

Ehrlich gesagt - ich habe eine gesamte Webanwendung programmiert, ohne mysql_fetch_array zu verwenden, und musste jedes Mal die Zahlenbündel ändern, wenn ich die Funktion ändern wollte, um eine zusätzliche Spalte hinzuzufügen.

3
Julian H. Lam

Es stellt sich heraus, dass es keine Rolle spielt, ob Sie unter Linux prüfen, ob die Speicherzuordnung einen Verweis zurückgibt oder nicht, da sie Ihnen tatsächlich lügt und entweder den Speicher zu einem späteren Zeitpunkt tatsächlich zuweist oder Ihre Zuordnung abbricht Programm insgesamt, wenn es nicht den Speicher hat, den Sie benötigen.

3
zaratustra

Das .... wer braucht JUnit-Tests, wenn Haltepunkte wirksam sind? (beim Testen von Anwendungen im Debug-Modus). Später wurde mir klar warum ....

2
Buhake Sindi

Dass eine für die Systemprogrammierung geeignete Sprache muss [veränderbare] Variablen unterstützt.

2
james woodyatt

Die Marketing-Leute kümmern sich darum, was Sie tun.

2
crauscher

Allgemeine schlechte Annahmen: "Die Qualität des Codes ist zweitrangig". Noch schlechtere Annahme: "Die Qualität des Codes ist überhaupt nicht wichtig."

Die Qualität des Codes kann ein sehr umfassendes Konzept sein. Ich habe es ziemlich gründlich aufgeschlüsselt hier .

2
Daniel Ribeiro

Diese Einfachheit schlägt fast immer die Komplexität. KISS - Mach es einfach Dumme Regeln.

Edit: Wie Georg weiter unten feststellt, habe ich dies rückgängig gemacht. Mein Verstand muss in den Antworten verloren gegangen sein. Durch die Einfachheit wird Ihr Code bei richtiger Verwendung fast immer besser.

2
mwgriffith

Ich habe immer geglaubt, dass man, um ein guter Programmierer zu sein, alle inneren Funktionen des Systems kennen muss. Ich schämte mich für die Tatsache, dass ich nicht alles wusste, was man über die Sprache wissen muss, wie Bibliotheken, Muster, Schnipsel, bevor Sie mit dem Codieren beginnen. Nun, ich bin nicht mehr so ​​naiv.

2
lune

Dass Sie eine Kundenspezifikation benötigen, um ein Projekt abzuschließen. Oft fängt man mit einem Verkaufsgespräch und einem Notizblock an. Am Ende des Treffens wünschen sie sich natürlich eine Frist, "einfach Baseball spielen".

2
threadhack

Dass alle OOP Sprachen das gleiche Konzept der Objektorientierung haben.

  • A Java interface! = Schnittstelle einer Methode.
  • Eine Java Schnittstelle ist eine sprachspezifische Lösung für das Erfordernis der Mehrfachvererbung. Rubys Mixins versuchen, dasselbe Problem zu lösen.
  • Die in Javascript standardmäßig bereitgestellte Vererbung unterscheidet sich stark davon, wie Java die Vererbung implementiert.
2
Alan

Diese Programmier-Eleganz in Kombination mit Automatisierung war ein adäquater Ersatz für ein altmodisches Testen.

2
ep4169

Damit immer nicht genug Zeit bleibt, um es vor dem Abgabetermin zu beenden.

2

Früher dachte ich, ich werde niemals so gut programmieren wie der MS-Entwickler, aber jetzt denke ich, ich kann denselben sauberen Code oder noch besser schreiben.

2
Fred Yang

Dass eine WTF immer ein Beweis für einen schlechten Fachmann ist.

Tatsächlich habe ich in letzter Zeit festgestellt, wie viele WTFs ich im Laufe meiner Karriere eingesetzt habe, aber ich war getröstet, als StackOverflow mir zeigte das ist nur eine andere Software-Metrik .

2
Rômulo Ceccon

Wenn Sie meinen Code nicht lesen können, kennen Sie die Sprache einfach nicht. Ich hatte ein paar Code-Reviews, bei denen ich versuchte, dem entgegenzuwirken.

Es hat noch ein paar Jahre gedauert, um zu lernen, dass es eine Zeit und einen Ort gibt, um mit Ihrem Code zauberhaft umzugehen, und es befindet sich in den Bibliotheken, nicht in der Anwendung. Die App dient der Übersichtlichkeit und Lesbarkeit. Magic wird am besten verwendet, wenn es sich hinter Erweiterungsmethoden und Frameworks verbirgt.

2
Ball

Das Erstellen einer erfolgreichen Anwendung kann auf einfache Weise nur von Programmierern durchgeführt werden. Bei Software geht es auch um Benutzerfreundlichkeit, gutes Aussehen, Dokumentation und ordnungsgemäße Vermarktung. Die Softwareentwicklung ist multidisziplinär und wenn eine Disziplin nicht erfolgreich ist, schlägt die Anwendung wahrscheinlich fehl.

2
Tarscher

Ich dachte, Windows 3.1 sei nur eine Plattform, um Solitaire zu spielen. Und DOS ist eine Plattform für BASICA.

2
henry

Eine Fehlerbehandlung ist nicht erforderlich, wenn Sie Ihren Code gründlich getestet haben.

2
too much php

Diese Variablen sind eigentlich nur Namen für bestimmte Bereiche im Speicher.

2
Gumbo

Das habe ich programmiert. Als ich das SICP-Buch studierte, sah ich, dass ich nichts wusste. Zumindest beschäftige ich mich jetzt mehr mit dem Programmieren.

2

Das Java übergibt Kopien von Objekten an Funktionen, nicht an Referenzen.

Mit anderen Worten, ich dachte, wenn Sie ein Objekt an eine Methode übergeben und dann das Objekt auf irgendeine Weise ändern, ändert dies das Objekt im aufrufenden Bereich nicht. Ich habe immer Objekte in Methoden übergeben, sie manipuliert und sie dann zurückgegeben!

2
DisgruntledGoat

Dass Sie ein C++ - Objekt in seinem Konstruktor ohne negative Konsequenzen festlegen können (this, 0, sizeof (TheObject))

2
bobobobo

Nicht am längsten gehalten, aber irgendwann und seit mehreren Jahren:

  • Dachte, Microsoft Windows sei das einzige Betriebssystem der Welt (es war 1992)
  • Die Kenntnis von DOS war mehr als genug, um über "fortgeschrittene" Betriebssystemkenntnisse zu verfügen.

Deshalb habe ich in der High School keinen "Computerkurs" gewählt. Ich dachte, ich wüsste schon genug über Computer.

Später an der Universität und aus meinem Fehler heraus:

  • Ich dachte, dass UNIX-Betriebssysteme/-Programme perfekt sind und DOS/Windows nie in die Nähe kommen werden (damals sah es so richtig aus, ich denke, Linus dachte das auch und deshalb ist Linux sooo ähnlich wie UNIX und nicht. auch andere Betriebssysteme)

Schließlich dachte ich lange, dass:

  • Nur meine Software war zum Kotzen und kommerzielle Software war einwandfrei, weil ... es sich um "COMERCIAL" -Software handelte
  • USA-Software/Ingenieure/Produkte waren Synonyme der hervorragenden Leistung und alles, was draußen war, waren nur schlechte Versuche.
2
OscarRyz

Je mehr Codezeilen, desto besser die Software.

2
Nowhere

die Annahme, dass wenn ich Code wirklich gut und so fehlerfrei wie möglich schreibe, und das das Beste ist, was ich tun kann. Es stellt sich heraus, dass die Manager manchmal Leute bevorzugen, die versuchen, ihr Favorit zu werden, anstatt gute Arbeit zu leisten.

Ich hätte nie gedacht, dass ich ein professioneller Programmierer sein würde. Ich dachte, ich würde mit Elektronik arbeiten. Aber am Ende ist das Programmieren so viel einfacher und zahlt sich so viel besser aus, dass das, was als Nebenjob begann, zu meiner Hauptsache wurde.

2
Otávio Décio

Mein größtes Vorurteil war, dass ich so programmieren durfte, wie ich es wollte. Dann verließ ich natürlich die Universität und wurde von einer Firma angestellt, die lächerliche Rahmenbedingungen, Regeln und Verfahren hatte, die nicht nur bedeuteten, dass ich nicht so programmierte, wie ich wollte, sondern auch, dass ich programmierte schlecht .

2
Barry Gallagher

Das ist peinlich, aber ich hatte lange Zeit geglaubt, es sei speichereffizienter, meine Methodenaufrufe zu verschachteln oder mehrere Methodenaufrufe durchzuführen, als eine Variable zu erstellen, um den Wert für jeden Methodenaufruf in C # zu speichern.

2

dass temporäre Lösungen keine dauerhaften Lösungen sind
oder mit anderen Worten: Workarounds sind nicht für immer :)).

2
user171910

Das irgendwie eine Firma, die eine große Anzahl von ziemlich hochkarätigen/stark frequentierten Websites betreibt, wusste tatsächlich, was zum Teufel sie taten. Es endete damit, dass sie größtenteils ahnungslos und äußerst glücklich waren, in der Position zu sein, in der sie sich befanden.

solides Software-Engineering & Best Practices! = Geschäftserfolg

oder....

kritischste Software-Systeme == Mist

2
Tom Willis
  • Ich dachte, ich würde 8 Stunden hintereinander programmieren. Realistisch gesehen bekomme ich 4 Stunden pro Tag für das Programmieren, 1 Stunde für das Mittagessen, 1 für die Kaffeepause und 2 Stunden für das Herumschrauben/Plaudern/Stapeln über und unter dem Fließen.

  • Vor meiner Arbeit dachte ich, dass alle Kunden Idioten sind und keine zwei Scheiße über Computer wissen. Junge, habe ich mich geirrt? Manchmal bekommen wir Projekte von Leuten, die es besser können als wir, sie haben einfach keine Zeit dafür.

  • Ich dachte, Kabinen wären schlecht. Im Moment liebe ich sie: D Ich bin tatsächlich von einem Büro mit Tür in eine Kabine umgezogen. Ich mag die Offenheit.

  • Alle Programmierer sind nicht sportlich. Ich dachte, dass ich der einzige bin, der ins Fitnessstudio geht. Wenn ich arbeite, gehen mindestens 10 von uns jeden Tag um 5 Uhr morgens ins Fitnessstudio.

  • Ich dachte, es gäbe keine weiblichen Programmierer. Einige unserer Leads sind Damen.

2
dassouki

Dass ich traditionelle prozedurale Programmierer davon überzeugen konnte, warum OOP oft eine bessere Lösung bietet.

Das heißt, eine Sprache, die die Welt beschreibt, braucht die Fähigkeit, komplexe Objekte und ihre Beziehungen zu beschreiben.

Zu den Argumenten gehörten normalerweise Unsinn über abstrakte Klassen, auf die ich mit "Nicht alle OOP Programmierer sind frisch aus der Uni und immer noch von Abstracts besessen" antwortete OOP das konnte ich nicht mit streng prozeduraler Programmierung machen ", worauf ich normalerweise antwortete:" Es ist nicht so, dass du könntest, es ist, ob du würde wenn Sie ein umfangreicheres Toolset hätten ".

Ich habe gelernt, einfach zu akzeptieren, dass sie die Welt nicht durch dasselbe Objektiv sehen wie ich.

2
Evan Plaice

Diese Laufzeitleistung war wichtig. Oft kommt es auf die Gesamtlösungszeit an.

Seit ich Python lerne, habe ich mich von meinem Eigensinn auf statisches Tippen verabschiedet.

1
Andrej Panjkov

Dass Softwareingenieure immer ehrlich sind, was sie jetzt oder in der Vergangenheit mit Ihrer Software machen.

1
u07ch

Dass unsere Entwicklungsmethoden ausgewählt und angewendet wurden, weil sie die besten ihrer Art waren.

Dann stellte ich fest, dass die Werkzeuge, die wir verwenden, einen viel größeren Einfluss darauf haben, was wir getan haben, wann wir es getan haben und wie wir es getan haben, als ich dachte.

1
Karen Lopez

Das Verstehen von Zeigern und Rekursivität wäre verdammt schwer.

Diese Ganzzahlen in VB6 haben eine andere Größe als .Net.

Dieser VB6 könnte Operationen auf Bitebene ausführen.

Professionelle Programmierer machen Fehler lose Software.

1
Broken_Window

Das, weil ich die Software auf meiner "Standard" -Umgebung baute, würde es auf jedem Rechner/Server funktionieren. Nur um herauszufinden, dass ich einige obskure Bibliotheken und Dienste installiert hatte, die tatsächlich verwendet wurden. Und dann stellen Sie fest, dass ich einen Fehler ausnutzte, der anschließend behoben wurde.

1
Bluephlame

Die Angaben sind vollständig und ausreichend

1
SeanX

Diese Profilerstellung und Leistungsanalyse waren dasselbe.

Dann fand ich heraus, dass Profiler, obwohl sie besser als nichts sind, fehlerhafte Annahmen enthalten, wie zum Beispiel:

  • es kommt nur auf Aggregate an, nicht auf Details
  • bei der Lokalisierung von Leistungsproblemen ist statistische Genauigkeit erforderlich
  • zeitmessung und das Auffinden unnötiger zeitaufwändiger Vorgänge sind dasselbe
1
Mike Dunlavey

Dass eine Identitätsspalte keine doppelten Werte enthalten darf: Identitätsspalte in SQL Server

1
Justin Ethier

In den frühen achtziger Jahren, als ich anfing, mit Computern herumzuspielen (ZX81 mit 1K Speicher), habe ich Stunden damit verbracht, Unmengen von Maschinencode (Bytes, nicht von Menschen lesbare Assemblersprache) für Spiele aus Magazinen einzugeben, im Wesentlichen unter Verwendung von BASIC Poke-Anweisungen.

Ich glaubte, wenn ich jemals eine Anweisung falsch eingegeben hätte, müsste ich zum Anfang zurückkehren und den Maschinencode von Anfang an erneut eingeben.

1
Damian

Dass ich weiß, dass ich eine richtige Webanwendung schreiben muss, und alles klar war, als ich Sachen entwerfen musste, die in allen Browsern funktionieren, die es mir schwergetan hat.

1
Pranali Desai

Ich wusste nicht, dass etwas geteilt durch 0 in Javascript Unendlich ist (IEEE 754-Arithmetik). Ich habe es kürzlich auf die harte Tour gelernt.

1
Chetan Sastry

Dass die Leute sich tatsächlich für die verwendeten Technologien interessierten (Open Source/Closed Source).

1
Ritesh M Nayak

Dass Threads in Windows billig sind.

Es stellt sich heraus, dass dies nur etwas wahr ist. Ein Thread hat einen gewissen Overhead und benötigt einen eigenen Adressraum, in dem er leben und glücklich sein kann. Wenn ich mich also mit Dutzenden von Threads in einer einzigen Anwendung befasse, frage ich mich, wie ich alles vereinfachen und in weniger Threads zusammenfassen kann.

1
Steve Wortham

Diese vollständige Unicode-Unterstützung war eine Voraussetzung für die erfolgreiche Bereitstellung von Software in asiatischen Regionen.

1
user34411

Sie können keine "zeitweiligen Fehler" in der Produktion diagnostizieren. Ein Neustart des Servers ist die einzige Möglichkeit, dies zu beheben.

Vielleicht war ist zutreffender in meinen frühen Tagen von ASP Codierung. Aber es gibt viele gute Werkzeuge Profilierung zu Speicherlecks und andere seltsame Probleme zu finden. Perfmon auch viele gute Diagnosedaten zur Verfügung stellt. Und dazu Sie sollten die Diagnoseprotokollierung in Ihrer Anwendung codieren.

1
russau

Diese 640K sollten für jeden reichen (DOS). Viele Leute haben das jahrelang geglaubt.

Als ich zum ersten Mal ein System mit 8 MB RAM hatte, dachte ich, das wäre weit mehr, als ich brauchte. Damit liefen das Betriebssystem (Mac) und alle von mir verwendeten Anwendungen (Word, E-Mail, Firefox usw.).

1
Brent Baisley

Dass eine HTML-Element-ID und ein Namensattribut austauschbar waren.

Es stellt sich heraus, dass Elemente mit 'name'-Attributen verwandt/verwendet werden. Für POSTs usw. wird auf sie verwiesen, und' id'-Attribute werden für die DOM-Referenz verwendet.

1
Mark Redman

Dass alles, was ich schrieb, irgendwann in absehbarer Zeit scheitern würde.

Nicht, dass irgendwann alles nicht mehr auseinanderfallen würde, aber als ich zu Beginn meiner Programmierausbildung try..catch blocks fand ... habe ich ALLES in sie eingewickelt ... Dinge, die, wenn sie fehlgeschlagen wären, viel größer gewesen wären Probleme, als meine Programme behandeln würden (zB Nord- und Südpol haben Plätze getauscht)

1
Pete H.

Ich nahm an, dass es eine Achterbahnfahrt mit schnellen Autos, lockeren Frauen, Privatjets und gewagten Eskapaden werden würde. Warten Sie einfach, bis ich diesen Karriereberater in den Händen habe ...

1
PaulJWilliams

Wenn ich ein leistungsfähiges statisches Typsystem wie das in ML oder Haskell habe, sollte ich es verwenden, um so viele Invarianten wie möglich zu codieren. Erst mit der Erfahrung habe ich gelernt, dass es manchmal besser ist, die Invarianten dynamisch sein zu lassen.

1
Norman Ramsey

Das Erlernen einer ganz neuen Sprache wäre wirklich sehr, sehr schwer.

1
too much php

Das OOP war veraltet :( Ich bedaure es immer noch, dass ich das bis heute gedacht habe.

1
Leo Jweda

thread = prozess

1
Radi

Ich dachte, gut genug Software zu schreiben, ist eine leichte Aufgabe

1
Upul Bandara

Als ich in meiner Mittelschule Algorithmen lernte, dachte ich, NPC= nur nichtpolynomielle Probleme, was bedeutete, dass die Komplexität dieses Problems nicht einfacher als polynomiell war. Ich erkannte i nicht war falsch bis ich rechentheorie in meinem college gelernt habe -_- b

0
ZelluX

Dass Verkäufer die Kundenerwartungen realistisch handhaben. (Ausgebildet in vielversprechenden und überbietenden)

Diese Softwareanforderungen stammen im Allgemeinen aus der Marktforschung.

0
Maltrap

Diese Dimension n ist eine Instanz der Dimension (n + 1), wenn sie äquivalent sind.

0
Larsson

das:

for (int i = 0; i < myObj.variable; i = i + 1)

wird optimiert auf:

int j = myObj.variable; 
for (int i = 0; i < j; i = i + 1)

wow, ich habe aufgehört, Funktionsaufrufe anstelle von j einzufügen, als mir klar wurde, dass sie JEDES Mal ausgeführt werden!

Grund:

for (int i = 0; i < myObj.variable; i = i + 1){ 
    if (function_argument == NULL){ 
        myObj.variable++; 
    } else { 
        printf("%d", myObj.variable);
    }
}

ist nicht dasselbe wie:

int j = myObj.variable;
for (int i = 0; i < j; i = i + 1){ 
    if (function_argument == NULL){ 
        myObj.variable++; 
    } else { 
        printf("%d", myObj.variable);
    }
}

beliebiges Beispiel, aber Sie können sehen, wie die Optimierung die Ausführung ändern würde.

0
chacham15

Natürlich können Sie sich FindBugs und PMD ansehen, aber das sind meine Lieblingsfälle und -tricks (alle Java):

Felder werden nicht überschrieben, sondern beschattet.

Es gibt keinen expliziten Super-Super-Zugriff.

Klassen ohne definierte Konstruktoren haben einen Konstruktor mit impliziten Nullargumenten. Ich habe in diesem Jahr einen praktischen Fehler gemacht.

Um einen Verweis auf das übergeordnete Element einer inneren Klasse zu erhalten, können Sie die Syntax "Outer.this" verwenden, um Methodenaufrufe zu disambiguieren oder zu synchronisieren.

Klassen sind in C++ "Freunde ihrer selbst". Private Methoden und Felder jeder Instanz dieser Klasse können von jeder Methode derselben Klasse referenziert werden, auch von statischen Methoden. Dies hätte einige meiner frühen Konstruktoren clone () und copy viel einfacher gemacht.

Auf geschützte Methoden und Felder kann in einem statischen Kontext von Erweiterungsklassen zugegriffen werden, jedoch nur, wenn sich diese Klasse im selben Paket befindet. Ich bin froh, dass flex.messaging.io.amf kein versiegeltes Paket ist.

0
Karl the Pagan

Er sagte, er kenne sich mit Programmierung aus, es muss wahr sein!

0
Alfre2

Ein Programm kann schließlich alle seine Probleme ausgebügelt haben.

0
HalliHax

Ich denke, ich bin die einzige Person, die einen Teil des Codes erstellt. Wenn ich diese Routine benötige, kann ich mich nicht erinnern, was ich getan habe, und einfach meinen eigenen Code kopieren/einfügen.

Jetzt weiß ich, dass das jeder tut.

0
Broken_Window