Lang anhaltende, falsche Programmierannahmen [geschlossen]


281

Ich recherchiere nach häufigen Fehlern und schlechten Annahmen von Junior- (und vielleicht Senior-) Software-Ingenieuren.

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

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

Sei ehrlich; Welchen festen Glauben hatten Sie und ungefähr wie lange haben Sie die Annahme beibehalten? Es kann sich um einen Algorithmus, eine Sprache, ein Programmierkonzept, Tests oder etwas anderes handeln, das sich mit Programmierung, Programmiersprachen oder Informatik befasst.


Antworten:


545

Lange Zeit ging ich davon aus, dass alle anderen diese Programmierkonzepte beherrschen (Entwurfsmuster, die neueste neue Sprache, Komplexität der Berechnungen, Lambda-Ausdrücke, wie Sie es nennen).

Das Lesen von Blogs, Stack Overflow und Programmierbüchern schien mir immer das Gefühl zu geben, hinter den Kurven der Dinge zu stehen, die alle Programmierer nur intuitiv wissen müssen.

Ich habe im Laufe der Zeit festgestellt, dass ich mein Wissen effektiv mit dem kollektiven Wissen vieler Menschen vergleiche, nicht mit einer einzelnen Person, und das ist eine ziemlich hohe Messlatte für jeden. Die meisten Programmierer in der realen Welt verfügen über einen Wissensspeicher, der für ihre Arbeit erforderlich ist, und über mehr als einige Bereiche, die sie entweder schwach oder gar nicht kennen.


68
So wahr! Das ist das Problem dieses Zeitalters. Informationen sind auch entmutigend. Ich hatte diese Offenbarung vor ein paar Wochen, als ich mich bei allem, was ich (nicht beim ersten Mal) in Bezug auf Forschung getan habe, als völliger Verlierer fühlte. Leute, die ihre Artikel in IEEE Transactions veröffentlichen lassen, haben nicht unbedingt die gleichen Fähigkeiten wie Leute, die bei Google arbeiten, sich in StackOverflow rühmen, ausgezeichnete Professoren sind oder großartige Programmierblogs schreiben. Natürlich sind die besten Jungs exponentiell cooler als wir, aber sie wissen nicht alles, was Sie wissen, was Sie nicht wissen. Also bleib cool.
Jbasko

40
Es hilft auch zu verstehen, dass diese Blogger auch nicht alles auf den Kopf schreiben. Gute Blogger recherchieren ihre Themen und lernen beim Schreiben von Posts neue Dinge.
JohnFx

47
Ich bin täglich besessen von Dingen, über die ich keine Zeit habe, zu lesen und zu lernen. Manchmal habe ich ein schreckliches Schuldgefühl.
Brad

9
@ Zilupe: Amen dazu. Ich habe einige internationale Konferenzbeiträge und Zeitschriften veröffentlicht. In den Augen einiger Leute klang das cool. Bis Sie feststellen, dass die Veröffentlichung eines Papiers nicht wirklich aufwändig ist. Wir sind kein Genie. Wir sind wie alle anderen auch. Wir haben Fehler gemacht und wir veröffentlichen Mistpapiere. Nun, bis auf eine Minderheit von echten Genies ...
Hao Wooi Lim

4
+1 Gut, dass ich das gelesen habe. Ich dachte, ich sei der Einzige.
Randell

308

Dass die Leute wussten, was sie wollten.

Für die längste Zeit dachte ich, ich würde mit Leuten sprechen, sie würden ein Problem oder einen Workflow beschreiben und ich würde es in Code einfügen und es automatisieren. Es stellt sich jedes Mal heraus, dass das, was sie zu wollen glaubten, nicht das war, was sie wollten.

Bearbeiten: Ich stimme den meisten Kommentaren zu. Dies ist keine technische Antwort und möglicherweise nicht das, wonach der Fragesteller gesucht hat. Dies gilt nicht nur für die Programmierung. Ich bin mir sicher, dass dies auch nicht meine am längsten bestehende Annahme ist, aber es war das Auffälligste, was ich in den 10 kurzen Jahren, in denen ich dies getan habe, gelernt habe. Ich bin mir sicher, dass es meinerseits reine Naivität war, aber die Art und Weise, wie mein Gehirn verdrahtet ist / war und die Lehren und Erfahrungen, die ich vor dem Eintritt in die Geschäftswelt hatte, ließen mich glauben, dass ich tun würde, was ich antwortete; dass ich Code und Computer verwenden könnte, um die Probleme der Leute zu beheben.

Ich denke, diese Antwort ähnelt der von Robin über Nicht-Programmierer, die verstehen / sich darum kümmern, wovon ich spreche. Es geht darum, das Geschäft als agilen, iterativen und interaktiven Prozess zu lernen. Es geht darum, den Unterschied zwischen einem Programmiercode-Affen und einem Softwareentwickler zu lernen. Es geht darum zu erkennen, dass es einen Unterschied zwischen den beiden gibt und dass es nicht nur um Syntax und Schreibgeschwindigkeit geht, um auf dem Gebiet wirklich gut zu sein.

Bearbeiten: Diese Antwort ist jetzt ein Community-Wiki, um Leute zu beruhigen, die sich über diese Antwort aufregen und mir einen Repräsentanten geben.


9
Oder ändern Sie, was sie wollen, nachdem Sie gesehen haben, was sie zuvor wollten. Die Leute ändern gerne ihre Meinung. Ich weiß, weil ich ein Volk bin.
J. Polfer

13
Sie gaben ihnen, was sie verlangten, nicht was sie wollten.
Brent Baisley

47
Warum werden langweilige, unumstrittene Nein-Antworten so übermäßig hochgestimmt?!
nes1983

39
Beeindruckend. Klingt so, als ob jemand eine Umarmung braucht.
bzlm

24
Mein Gott @ Leute beschweren sich, Stackoverflow Rep ist kein Wettbewerb. Upvote Wenn Ihnen die Antwort gefallen hat, stimmen Sie nicht ab, weil Sie eifersüchtig sind, dass Sie sie nicht zuerst veröffentlicht haben.
Dmitri Farkov

292

Dass ich ohne Profilerstellung weiß, wo das Leistungsproblem liegt


10
Ich denke, deshalb ist vorzeitige Optimierung so verbreitet.
Hao Wooi Lim

10
+1 Wow, jemand hat eine Antwort hinzugefügt, die nicht trivial oder nicht zum Thema gehört.
Mark Rogers

3
Ich habe einige Tablets, die bei der vorzeitigen Optimierung helfen sollen ...
AndyM

232

Dass ich nur einen Austrittspunkt von einer Funktion / Methode haben sollte.


91
Hervorragende Realisierung; Beenden Sie so oft wie nötig. Man sollte aus einer Funktion aussteigen, sobald es keinen Sinn macht, weiter in sie hineinzugehen. Dies kann die Komplexität verringern und die Lesbarkeit verbessern, indem beispielsweise tief verschachtelte Bedingungen vermieden werden, wenn dies Voraussetzungen für die ordnungsgemäße Ausführung der Methode sind. In modernen Sprachen mit Speicherverwaltung und Ressourcenkonstrukten wie using / finally macht es keinen Sinn, bis zum Ende einer Methode dogmatisch fortzufahren.
Triynko

24
Wer hat das übrigens erfunden? Es ist wie eine programmierende urbane Legende.
Brad

49
Leute, die den Code anderer Leute debuggen müssen, haben sich das ausgedacht.
Gatorfax

23
Ich denke, diese weit verbreitete, aber falsche Idee basiert auf einem Missverständnis. Wenn Sie eine Funktion verlassen, sollten Sie immer zurückkehren auf den gleichen Punkt. Dies war eine wichtige Regel in Sprachen wie BASIC, die sie nicht erzwangen: Die Regel bedeutete beispielsweise, dass Sie GOSUB anstelle von GOTO verwenden sollten. In Sprachen wie C # oder Java, die Methoden aufrufen, erfolgt dies automatisch. Aber weil es automatisch ist, hat es sich meiner Meinung nach vom logischen "nur ein Rückkehrpunkt" zum unsinnigen "nur ein Austrittspunkt" gewandelt.
Ryan Lundy

35
Aus Sprachen wie C, in denen Sie Ressourcen manuell freigeben müssen. Mehrere Austrittspunkte waren eine gute Chance für undichte Ressourcen. IMO macht es in Sprachen mit Ausnahmen keinen Sinn, da Sie Ihre Austrittspunkte oft nicht mehr kennen oder sich mitten in einer Anweisung befinden. - In diesen Sprachen bleibt nur "Struktur für Lesbarkeit".
Peterchen

228

Dass Nichtprogrammierer verstehen, wovon ich spreche.


243
verstehen / pflegen ..
nickf

8
Ich habe diese manchmal immer noch ... Ich dachte, zumindest meine Frau hätte inzwischen richtig verstanden: P
workmad3

3
Oh je, ich fürchte, ich muss das noch lernen!
Thatismatt

3
Ja, manchmal vergesse ich mein Publikum und lande mit ein paar Leuten mit leeren Blicken auf ihrem Gesicht, die mich anstarren. Es ist schön, wenn die Leute Interesse zeigen
Petey B

3
Dies ist meine größte Frustration mit dem Beruf.
Andres Jaan Tack

219

Diese fehlerfreie Software war möglich.


35
+1, obwohl die NASA es fast geschafft hat
Patrick McDonald

55
Ja, aber das "fast" hat ein paar Millionen Dollar gekostet :)
Jem

15
@Triynko dein "möglich" und @ JaredPars "möglich" sind nicht dasselbe. Theorie und Praxis mögen theoretisch gleich sein, sind aber in der Praxis sehr unterschiedlich.
Wilhelmtell

13
@ Joseph, ein Teil des Problems ist, dass die Leute denken, dass Hello World-Programme fehlerfrei sind. Sie sind nicht. Die meisten suchen beispielsweise nicht nach Fehlern in printf und berücksichtigen keine anderen fehlgeschlagenen E / A-Versuche.
JaredPar

9
@ RussellH, nein. Sie haben keinen Rückgabewert angegeben, und der resultierende Prozess gibt zufälligen Garbage Memory zurück.
JaredPar

199

Diese privaten Mitgliedsvariablen waren für die Instanz und nicht für die Klasse privat.


192
Ich hielt diese Annahme bis ... gerade jetzt.
TheMissingLINQ

9
@ebrown Ich finde es normalerweise nur nützlich, wenn ich eine equals () -Methode schreibe
Dave Webb

12
Sie sind in Ruby.
Mike Kucera

17
Das ist für mich so normal, dass diese Antwort beim ersten Lesen keinen Sinn ergab. Jetzt möchte ich Ruby lernen, damit es mich in die andere Richtung verwirrt. :)
jmucchiello

16
@Kiewic Wenn Sie eine private Mitgliedsvariable namens myVar in Ihrer Klasse haben, können Sie other.myVar direkt in Ihrem Code referenzieren, wenn other eine Instanz dieser Klasse ist. Ich hatte angenommen, weil es "privat" war, musste man other.getMyVar () sogar innerhalb der Klasse verwenden.
Dave Webb

166

Ich dachte, dass statisches Tippen sehr still an Ihrer Tastatur sitzt.


53
Aufrichtig oder nicht, das brachte mich am Ende eines langen Arbeitstages zum Lachen. : P
Olivier Tremblay

5
++ für ein gutes Lachen. klingt nach etwas, das sich mein (nicht technischer) Ehemann einfallen lassen würde.
Jess

11
+1! Ich dachte, das Tippen mit Enten beinhaltet auch das Tippen. Oder Enten. Oder beides.
SqlACID

162

Dass Sie ein Problem vollständig verstehen können, bevor Sie mit der Entwicklung beginnen.


32
Dies, mein Freund, sollte sein: "Dass Sie ein Problem vollständig verstehen können." Aber es ist so wahr. Und anscheinend ein schwer zu verstehendes oder sogar zu akzeptierendes Konzept.
KarlP

4
Sie können das Problem nicht "vollständig" verstehen, aber Sie MÜSSEN das Problem (bis zu einem gewissen Grad) verstehen, bevor Sie mit der Entwicklung beginnen. bit.ly/kLXgL
OscarRyz

Manchmal muss man anfangen, sich zu entwickeln, um das Problem zu verstehen. Und / oder das Problem ändert sich, je mehr Sie sich entwickeln.
Evan Plaice

158

Kluge Leute sind immer schlauer als ich.

Ich kann mich wirklich verprügeln, wenn ich Fehler mache und oft wegen Selbstironie angeklagt werde. Ich habe viele Entwickler ehrfürchtig angesehen und oft angenommen, dass sie, da sie auf X mehr wussten als ich , mehr wussten als ich.

Da ich immer mehr Erfahrungen gesammelt und mehr Menschen getroffen habe, wurde mir klar, dass sie in einem bestimmten Fach zwar mehr wissen als ich, aber nicht unbedingt schlauer als ich / Sie.

Moral der Geschichte: Unterschätzen Sie niemals, was Sie auf den Tisch bringen können.


Gut! Ich arbeite derzeit mit einem Kollegen zusammen, der sehr viel über die .NET-Entwicklung weiß. Ich habe einige Zeit gebraucht, um festzustellen, dass ich besser verstehe, was die Kunden brauchen.
Treb

58
Und andererseits, dass ich mehr weiß als andere Leute. Es stellt sich heraus, dass sie nur verschiedene Dinge wissen. Die andere Moral: Unterschätze niemals, was jemand anderes auf den Tisch bringen kann.
Donnerstag,

1
Hier ist wieder das alte Ding "Anderen etwas antun" ... Ich präge einen neuen Satz: Tech-Mobbing ~ Der Zustand, sich überlegen zu fühlen, weil man einige Dinge kennt und den Fehler macht, alle anderen davon in Kenntnis zu setzen. @seealso: smartass.
Corlettk

1
Hervorragende Beobachtung - meine Version ist negativer "Jeder macht ab und zu dumm". Etwas verwandt mit "Flip the Bozo Bit nicht umdrehen".
Peterchen

2
Sie müssen sich nur Sorgen machen, wenn dumme Leute schlauer sind als Sie.
Brad Gilbert

131

Am längsten dachte ich, dass schlechtes Programmieren etwas ist, das am Rande passiert ist. Dass es die Norm ist, Dinge richtig zu machen. Ich bin heutzutage nicht so naiv.


30
Früher dachte ich, dass schlechte Programmierung nur von anderen Programmierern durchgeführt wurde, bis ich von einem meiner schlechten Programme durchgeführt wurde. Jetzt mache ich die Dinge richtig! (Sie glauben mir diesmal, richtig?)
Jared Updike

2
Total. Ich bin von "Das passiert nie" zu "Das passiert nur bei diesem Job" zu "Jeder Ort hat schlechten Code" übergegangen .
Ryan Lundy

1
Hacking ist die Norm. Engineering ist die Aufgabe des wirklich kompetenten. Wenn Sie jemals einen Softwareentwickler treffen, werde ich Sie wissen lassen.
Corlettk

3
@corlettk: Du meinst, Affencodierung ist die Norm, nein? Hacking ist eine Kunst, wohlgemerkt ein hohes Maß an Kunst, von der ich weit entfernt bin.
Hasen

2
@Hasen: Nein, Hacking ist eine Analogie dazu, eine Axt ungeschickt an einen Baum zu bringen, winzige Stücke in einer wahnsinnigen Panik ohne wirklichen Plan abzumeißeln und ein blutiges Durcheinander zu verursachen, bis der Baum schließlich auf deinen Kopf fällt. Ein "Hack" ist "einer, der banale und mittelmäßige Arbeit in der Hoffnung auf kommerziellen Erfolg produziert". Warum das Computerfeld "Hack" in "erfahren" geändert hat, werde ich nie erfahren.
Lawrence Dol

113

Ich dachte, ich sollte so viel wie möglich abstrahieren. Ich wurde dabei im Hauptfach getroffen, weil zu viele kleine Funktionen miteinander verflochten waren.

Jetzt versuche ich, die Dinge so einfach und entkoppelt wie möglich zu halten. Refactoring, um etwas abstrakt zu machen, ist viel einfacher als vorherzusagen, wie ich etwas abstrahieren muss.

Daher bin ich von der Entwicklung des Frameworks, das sie alle regiert, zu Funktionsausschnitten übergegangen, mit denen die Aufgabe erledigt werden kann. Ich habe nie zurückgeschaut, außer wenn ich an die Zeit denke, in der ich naiv dachte, ich wäre derjenige, der das nächste große Ding entwickelt.


26
Entkoppelt = wahre Abstraktion. Abstrakt um seiner selbst willen ist ... vorzeitige Optimierung.
Jared Updike

1
Dies stimmt mit dem überein, was ich bei der Leistungsoptimierung festgestellt habe. Es kann ein schönes Programm mit mehreren Abstraktionsebenen geben. Dann wird die Arbeitsbelastung hoch und raten Sie mal, was die ganze Zeit kostet ... alle Abstraktionen. Computer führen Anweisungen aus, keine Abstraktionen.
Mike Dunlavey

5
Abstraktion und Generalisierung sind leistungsstarke Tools, die leider verwendet werden, um einen abstrakten Anwendungsfall mit einer einzigen Implementierung zu verallgemeinern. Das Lustige ist, dass sich immer dann, wenn die Implementierung geändert werden muss, auch die Abstraktionen und Verallgemeinerungen ändern müssen ...
KarlP

Ich stimme Jared voll und ganz zu ... wenn Sie es geschafft haben, "einfach und entkoppelt" zu werden, haben Sie eine echte Abstraktion erreicht. Wie können Dinge entkoppelt werden, wenn Sie sie nicht in Schnittstellen und Fabriken usw. abstrahiert haben? Wie kann es einfach sein, wenn Sie nicht alle "Wenn Typ = dies dann tun Sie dies, oder wenn der Typ das ist, dann tun Sie etwas anderes Code" entfernen?
Richard Anthony Hein

Hier gilt das gleiche. Ich glaube, ich habe etwas über Abstraktion gelernt, bevor ich eine Menge Spaghetti-Code erstellt habe. Sie hätten lehren sollen, wie man Dinge erledigt, selbst wenn der Code Spaghetti ist, und uns dann etwas über OO und Abstraktion beibringen sollen.
Hasen

103

Dass Frauen Computerprogrammierer sexy finden ...


70
Einen Augenblick???
Çağdaş Tekin

4
er er er er .. okey, ich suchte nach etwas, um mein Lächeln für den Rest des Tages zu behalten. Ich glaube ich habe es gefunden !!! :)
OscarRyz

17
"Ooh, Baby! Ja, sag 'wenn' - wirf mir ein paar Ausnahmen zu. Ja, du weißt wie ich es will": P
cwap

5
Was? Programmierer sind reich? Wann ist das passiert?
Filip Navara

3
Einige Frauen (die richtige Art) fühlen sich von aufschlussreichen intelligenten Männern angezogen. Was, abzüglich des prototypischen Halsbartes und des Wurstdarms, ziemlich häufige Merkmale von Programmierern sind. Wenn Sie sich ein wenig um Ihr Selbstbild / Ihre Hygiene und den gelegentlichen Nervenkitzel / die Aufregung bei Extremsportarten kümmern, sind Sie auf einem guten Weg.
Evan Plaice

100

Dass die Qualität der Software zu mehr Umsatz führen wird. Manchmal schon, aber nicht immer.


37
Software verkaufen? Das ist so 1999.
bzlm

Viele abonnementbasierte Websites werden jetzt ...
cgp

11
Microsoft macht sicher einen Mord daran.
Bill Martin

Ich muss diesen lieben, so wahr.
dr. böse

18
Ich wünsche mir, dass die Verbesserung der Qualität / Leistung unserer Software als Feature gilt
Tom Leys

82

Dass alle Sprachen (meistens) gleich sind.

Lange Zeit stellte ich fest, dass die Sprache der Wahl keinen großen Unterschied in der Schwierigkeit des Entwicklungsprozesses und dem Potenzial für den Projekterfolg machte. Das ist definitiv nicht wahr.

Die Auswahl der richtigen Sprache für den Job ist genauso wichtig / kritisch wie jede andere einzelne Projektentscheidung, die getroffen wird.


13
Ich denke, dass es darauf ankommt, die richtigen Bibliotheken auszuwählen. Es kommt einfach so vor, dass es oft eine 1-zu-1-Korrespondenz zwischen Sprachen und Bibliotheken gibt ...
Kevin Montrose

7
Aber wenn zwei Programmiersprachen beide vollständig sind, was ist dann der Unterschied? Sie können jedes Programm in jeder Sprache schreiben! ;)
Bill the Lizard

8
Ich bin anderer Meinung, die Entscheidung, welche Sprache verwendet werden soll, ist weitaus weniger wichtig als die, wer das Projekt tatsächlich umsetzt. Als nur ein Beispiel für viele andere wichtigere Entscheidungen.
Boris Terzic

13
BrainFu ** ist so vollständig wie Python.
Hasen

9
Dass Turing-Vollsprachen irgendwie gleichermaßen anwendbar sind, ist ein weit verbreitetes Missverständnis. Eine vollständige Turing-Sprache kann alles berechnen, was eine Turing-Maschine kann (und oft auch umgekehrt). Es gibt absolut keine Auswirkungen auf die Leistung. Eine Operation, die in einer Sprache lineare Zeit benötigt, kann in einer anderen sehr gut exponentielle Zeit in Anspruch nehmen, und beide können immer noch vollständig sein. Es gibt einen großen Unterschied zwischen dem, was theoretisch berechenbar ist und dem, was in der Praxis machbar ist.
TrayMan

81

Dass ein großes Kommentar / Code-Verhältnis eine gute Sache ist.

Es dauerte eine Weile, bis mir klar wurde, dass Code sich selbst dokumentieren sollte. Klar, ein Kommentar hier und da ist hilfreich, wenn der Code nicht klarer gemacht werden kann oder wenn es einen wichtigen Grund gibt, warum etwas getan wird. Im Allgemeinen ist es jedoch besser, diese Kommentarzeit damit zu verbringen, Variablen umzubenennen. Es ist sauberer, klarer und die Kommentare sind nicht "nicht synchron" mit dem Code.


1
Ich stimme in dem eigentlichen Code ... ohne javadoc Kommentare (oder gleichwertig).
Corlettk

11
+1,
lass

Hinzu kommt, dass eine assert () - Anweisung besser ist als die Dokumentation einer Vor- / Nachbedingung. Auch .NET 4-Codeverträge können automatisch in Dokumentation umgewandelt werden!
Robert Fraser

66

Diese Programmierung ist unmöglich.

Kein Scherz, ich dachte immer, Programmieren sei unmöglich zu lernen, und ich hielt mich immer davon fern. Und als ich mich dem Code näherte, konnte ich ihn nie verstehen.

Dann setzte ich mich eines Tages einfach hin und las einige grundlegende Anfänger-Tutorials und arbeitete mich von dort aus vor. Und heute arbeite ich als Programmierer und ich liebe jede Minute davon.

Außerdem denke ich nicht, dass das Programmieren einfach ist, es ist eine Herausforderung und ich liebe es, mehr zu lernen, und es gibt nichts Schöneres, als ein Programmierproblem zu lösen.


7
Amen! Aber hey, verkünden Sie diese Ansicht nicht von den Dächern. Wir wollen nicht, dass jeder weiß, dass Programmieren Spaß macht, oder? ;); P
Peter Perháč

9
MasterPeter: Es würde uns mehr Futter geben, um unsere Repräsentanz zu erhöhen, wenn sie hierher kommen und Fragen stellen.
TheTXI

4
Ich würde sagen, dass es schwierig ist , richtig zu programmieren . Es ist jedoch möglich, was Ihr Punkt zu sein scheint.
Steve S

4
@Olafur: Warum soll die Frage ein Wiki sein, aber nicht deine Antwort?
Gnovice

2
Dies spiegelt genau meine Erfahrung wider. Ich wünschte, ich hätte jetzt früher angefangen: P
Skilldrick

65

"On Error Resume Next" war eine Art Fehlerbehandlung


6
Ich fühle dich ... aber in vbscript (insb. Asp) war es die EINZIGE verfügbare Option zur "Fehlerbehandlung", kombiniert mit einer sorgfältigen Überprüfung, ob tatsächlich ein Fehler aufgetreten ist, und einer angemessenen Menge an Gebeten.
Flatline

2
Ja ... es ist eine Art ... nur eine Art, von der wir froh sind, wegzukommen
Matthew Whited

6
Gut?! aber es ist. Sie starten Ihren Fehlerbehandlungsblock mit On Error Resume Next, versuchen Sie etwas und dann If (err.number <> 0) then
jpinto3912

Ist dies nicht das einzige vbscript, das einem try catch entspricht?
James

-1: Es ist eine Art Fehlerbehandlung. Es ist einfach nicht so elegant.
JohnFx

64

Diese Programmiersoftware erfordert eine solide Grundlage in der höheren Mathematik.

Jahrelang, bevor ich mit dem Codieren anfing, wurde mir immer gesagt, dass man in fortgeschrittener Algebra, Geometrie, Analysis, Trigger usw. gut sein muss, um ein guter Programmierer zu sein.

Zehn Jahre später musste ich nur einmal etwas tun, was ein Achtklässler nicht konnte.


5
Sehr richtig. In den meisten Fällen müssen Sie kein Mathe-Experte sein. Das einzige Mal, dass ich wirklich etwas über fortgeschrittene Mathematik wissen musste, war, als ich 3D-Programmierung als Hobby machte. Tatsächlich war es die 3D-Programmierung während der High School, die mich dazu inspirierte, in Trig- und Pre-Cal-Klassen besser aufzupassen. Davon abgesehen ist eine sehr einfache Mathematik normalerweise alles, was Sie brauchen.
Steve Wortham

29
Ich denke, Sie wurden falsch informiert. Sicher, um ein guter Programmierer zu sein , müssen Sie nicht wirklich viel höhere Mathematik verwenden, aber um bestimmte Informatikkonzepte wirklich zu verstehen und anzuwenden, benötigen Sie mehr als nur Mathematik der achten Klasse.
hbw

12
Ich denke, der Schwerpunkt auf Mathematik liegt darauf, kritisches Denken und Problemlösen zu vermitteln, nicht als etwas, das Sie in der täglichen Computerprogrammierung verwenden würden.
Zack

14
Die Art der Abstraktion, die Sie benötigen, um fortgeschrittene Mathematik zu verstehen, ist der Abstraktion, die Sie zum Erstellen von Software benötigen, sehr ähnlich.
OscarRyz

6
Ich denke, funktionale Programmierkonzepte sind viel einfacher zu verstehen, wenn Sie eine stärkere Grundlage in der Mathematik haben, einfach weil Sie nicht so sehr von der Syntax abgeschreckt sind. Es kommt mir bekannt vor. Ich habe den Fehler gemacht, einfache mathematische Funktionen zu verwenden, um die für C # neuen funktionalen Programmierkonzepte zu demonstrieren. Einige Leute erklärten sofort, dass es zu komplex sei.
Richard Anthony Hein

63

Das Optimieren == Umschreiben in Assemblersprache.

Als ich Assembly (von BASIC) zum ersten Mal wirklich verstand, schien es, dass die einzige Möglichkeit, Code schneller auszuführen, darin bestand, ihn in Assembly neu zu schreiben. Es hat einige Jahre gedauert, bis klar wurde, dass Compiler sehr gut optimieren können, und insbesondere mit CPUs mit Verzweigungsvorhersage usw. können sie wahrscheinlich einen besseren Job machen als ein Mensch in angemessener Zeit. Wenn Sie Zeit für die Optimierung des Algorithmus aufwenden, erzielen Sie wahrscheinlich einen besseren Gewinn als wenn Sie Zeit für die Konvertierung von einer Sprache in eine Sprache auf hohem Niveau aufwenden. Auch diese vorzeitige Optimierung ist die Wurzel allen Übels ...


8
Peek und Poke sind deine Freunde :)
Matthew Whited

4
Pervers! Sag das dem Richter!
Shalom Craimer

1
Hier kommt die Komplexitätstheorie ins Spiel. Die Montage ist im Allgemeinen eine Mikrooptimierung. Wenn Sie die Zeitkomplexität Ihrer Algorithmen verringern, gewinnen Sie an Geschwindigkeit.
PeteT

@ Scraimer: Lust dich hier zu sehen, ich hätte es nie erwartet ;-)
Robert S. Barnes

@ Matthew - "Peek und Poke sind deine Freunde :)": ** EXTREM eifersüchtig, dass ich das nicht zuerst geschrieben habe.
FastAl

63
  • Dass sich die Führungskräfte des Unternehmens um die Qualität des Codes kümmern.
  • Dass weniger Zeilen besser sind.

2
Sie kümmern sich zwar darum, aber Sie müssen Künstlerfähigkeiten mit Arbeiterfähigkeiten kombinieren. Jedes Stück Algorithmus kann auch kein Kunstwerk sein. Einiges davon wird praller, also verwenden Sie das "weniger benutzte" wieder. Denken Sie an die alte 80/20-Regel. 80% des Programms werden 20% der Zeit verwendet. Konzentrieren Sie sich also zu 80% auf 20% des Codes und machen Sie dieses ECHTE STÜCK KUNST! : OP
BerggreenDK

71
weniger Zeilen sind besser! Ein Grund, warum ich Java als Sprache nicht mag, ist, dass alles so viele Codezeilen beansprucht. Weniger Codezeilen bedeuten, dass es einfacher ist, Ihren Code zu ändern.
Claudiu

7
Es hängt davon ab, was Sie entfernen, um weniger Zeilen zu erhalten. Wenn der Code immer noch mit weniger Zeilen lesbar ist, ist er gut. Es gibt jedoch viele Möglichkeiten, die Anzahl der Codezeilen zu verringern, die den Code verschlechtern.
Herms

2
Außer wenn die Leute mit verketteten Methodenaufrufen 7 die Mentalität "Weniger Zeilen sind besser" zu weit bringen, haben Sie keine Ahnung, um welche es sich handelt, wenn einer von ihnen einen Nullzeiger wirft. Oder sie verdichten so viele Aktionen in einer Zeile, dass sie 150 Zeichen lang sind und 4 Operationen ausführen. Dies macht es sowohl schwieriger zu lesen als auch schwieriger zu debuggen, ist jedoch weder schneller noch verbraucht es weniger Speicher während der Ausführung.
Trampas Kirk

17
Wenn Ihre Zeile mit)))) endet und Sie nicht Lisp schreiben, haben Sie zu wenige Zeilen.

58

Ich würde sagen, dass das Speichern des Jahreselements eines Datums als zweistellige Zahl eine Annahme war, von der eine ganze Generation von Entwicklern betroffen war. Das Geld, das auf Y2K geblasen wurde, war ziemlich schrecklich.


1
Dies ist die einzige Antwort, die ich positiv bewerten werde, obwohl es ein CW ist, also spielt es keine Rolle ...
Dan Rosenstark

4
IIRC Einige Systeme in den 60er und vielleicht 70er Jahren verwendeten nur eine Ziffer, weil sie weniger Speicher verwendeten. Ich habe sogar Papierformulare gesehen, auf denen "196_" und "197_" vorgedruckt waren.
einige

3
Ich sehe immer noch Formulare mit 200_ und vermutlich gibt es jetzt einige mit 201_ gedruckt.
Macha

5
Der traurige Teil ist ... Unix wird seine zweite Runde in diesem im Jahr 2038 haben
Evan Plaice

4
@Billy Nur weil sich die Maschinenarchitektur ändert, bedeutet dies nicht, dass das Datenformat dies tut. Das Speichern von 2 Stellen Auflösung im int-Format würde ein Byte-Datumsformat (8 Bit) ergeben, und dennoch waren Tonnen von 32-Bit-Hardwarearchitekturmaschinen in 2 KB betroffen. Dies ist nur ein weiteres Beispiel dafür, warum Sie nicht zulassen, dass Hardware-Leute auf niedriger Ebene Datenformate angeben. Sie kneifen mit dem Wissen, dass es in ferner Zukunft eine geplante SNAFU geben wird.
Evan Plaice

57

Dass alles andere als das Einfügen / Blasen-Sortieren ganz einfach dunkle Magie war.


Haha, ich mag dieses hier, da es in der Nähe von zu Hause ankommt. Schneller sortieren als im n-Quadrat? Unmöglich!
Ross

Es ist erstaunlich, wie einfach und offensichtlich die meisten Sortieralgorithmen erscheinen, wenn Sie ein starkes Gefühl für Rekursion und Teilen und Erobern haben. Bis dahin fühlen sich die meisten von ihnen wie schwarze Magie.
Brian

74
Ich bin ein FORSCHER in Sortieralgorithmen! Und sie fühlen sich immer noch wie dunkle Magie an.
SPWorley

14
Ich hatte einmal eine Codezeile in meinem Programm, die lang und kompliziert war, und ich hatte keine Lust, sie aufzubrechen oder zu erklären (es war eine komplizierte Beleuchtungsformel), also habe ich alles in eine Zeile gesetzt und #define ' d es sollte DARK_MAGICK sein, und der einzige Kommentar war eine Warnung vor dem Versuch, die Geheimnisse der dunklen Magie zu enträtseln
Alex

2
Bogosort ist das mysteriöseste von allen.
Alex Beardsley

50

Dieses XML wäre ein wirklich interoperables und für Menschen lesbares Datenformat.


7
XML ist kein Allheilmittel, aber ich möchte nicht zu den Tagen zurückkehren, in denen ich regelmäßig Anwendungen sah, die versuchten, relationale Daten in einzelne CSV-Dateien zu komprimieren.
Tony Edgecombe

4
Es ist eine interoperable Syntax, daran besteht kein Zweifel. Es ist nur so, dass die Syntax oft der am wenigsten wichtige Aspekt einer Lösung ist.
Simon Gibbs

2
+1, Sie können auch klein und schnell zur Wunschliste hinzufügen.
MarkJ

1
Richtig, aber eine Verbesserung gegenüber CSV und fester Länge, wenn Sie ohne die Dokumentation geschraubt sind.
PeteT

7
Ich liebe XML für die Standardisierung von Datenformaten und für den korrekten Umgang mit Zeichencodierungen. Ich hasse es jedoch, was manchmal mit XML gemacht wird.
Joachim Sauer

48

Das C ++ war an sich irgendwie besser als alle anderen Sprachen.

Dies erhielt ich von einem Freund ein paar Jahre vor mir im College. Ich habe es für eine peinlich lange Zeit bei mir behalten (ich werde gerade rot). Erst nachdem ich ungefähr 2 Jahre damit gearbeitet hatte, konnte ich die Risse für das sehen, was sie waren.

Niemand - und nichts - ist perfekt, es gibt immer Raum für Verbesserungen.


5
"besser" bringt Ihnen Tonnen von weniger als hasserfüllten Kommentaren. Aber ich würde sagen, es ist eines der am schnellsten ausgeführten, flexibelsten und hürdenfreiesten. Es ist auch eine, die Ihre Jugend dazu bringt, es richtig zu lernen, nur um herauszufinden, dass Sie mehr oder weniger dieselbe App machen können. (obwohl ein oder zwei zusätzliche Tonnen Strom erzeugende Kohle erforderlich sind) mit Java oder C #.
jpinto3912

@ JP: Ich bin zufrieden mit meiner Wortwahl :)
Binary Worrier

Produktivität ist in der Welt der Geschäftsanwendungen wichtiger. Natürlich gibt es einige Nischen, in denen C ++ erforderlich ist, und die einzige Option.
Shaw

7
Ich habe immer angenommen, dass C ++ schlechter ist als normales ANSI C, einfach weil die Art von Schwierigkeiten, in die C ++ - Programmierer geraten sind, so viel komplizierter ist als die Art von Schwierigkeiten, in die C-Programmierer geraten sind.
Nosredna

1
Die Sprache, die besser ist als alle anderen, ist Common Lisp. C ++ ist jedoch nicht schlecht.
David Thornley

47

Ich glaubte, dass das Erstellen von Programmen genau dem entsprechen würde, was im Unterricht gelehrt wurde ... Sie setzen sich mit einer Gruppe von Menschen zusammen, gehen ein Problem durch, finden eine Lösung usw. usw. Stattdessen lautet die reale Welt "Hier ist" Mein Problem, ich muss es lösen, los "und zehn Minuten später erhalten Sie ein weiteres, sodass Sie keine Zeit mehr haben, Ihre Lösung effizient zu planen.


24
Ich denke, das nennt man Leben.
Robin Day

9
hmmm .. es ist Zeit, dass Sie diese Firma retten. ..
jpinto3912

8
@ jpinto3912: Nein. Weil das nächste Unternehmen auch ein Teil des Lebens sein wird (siehe vorherigen Kommentar).
Treb

42

Ich fand Mainstream- Designmuster großartig, als sie in einer CS-Klasse eingeführt wurden. Ich hatte vorher ungefähr 8 Jahre als Hobby programmiert und hatte wirklich kein solides Verständnis dafür, wie man gute Abstraktionen erstellt.

Designmuster fühlten sich wie Magie an; Sie könnten wirklich ordentliche Sachen machen. Später entdeckte ich funktionale Programmierung (über Mozart / Oz, OCaml, später Scala, Haskell und Clojure), und dann verstand ich, dass viele der Muster nur Boilerplate oder zusätzliche Komplexität waren, weil die Sprache nicht ausdrucksstark genug war.

Natürlich gibt es fast immer Muster, aber sie sind in Ausdruckssprachen auf einem höheren Niveau. Jetzt habe ich einige professionelle Codierungen in Java durchgeführt, und ich fühle wirklich den Schmerz, wenn ich eine Konvention wie Besucher- oder Befehlsmuster anstelle von Mustervergleich und Funktionen höherer Ordnung verwenden muss.


"Viele der Muster waren nur Boilerplate oder zusätzliche Komplexität, weil die Sprache nicht ausdrucksstark genug war." Ausdruckskraft ist einfach ein in die Sprache fest verdrahteter Code.
Unbekannt

4
Nicht wahr, wie ist es, erstklassiges Zeug zu haben, anstatt die Fähigkeiten eines Programmierers einzuschränken, wie im Fall von Funktionen höherer Ordnung. Lisps sind ein schönes Beispiel dafür.
Egaga

38

In den ersten Jahren, in denen ich programmierte, habe ich nicht verstanden, dass 1 KByte technisch gesehen 1024 Bytes und nicht 1000 Bytes sind. Ich war immer ein wenig ratlos darüber, dass die Größe meiner Datendateien etwas von meinen Erwartungen abwich Sein.


114
Festplattenhersteller haben noch nicht verstanden ...
Michael Myers

10
@mmyers Ich denke du meinst Festplattenvermarkter oder? Oder sind die Laufwerke tatsächlich so gebaut?
Instantsoup

16
Hey, hör auf mit dem Kibi-Hass. MeBi und KiBi sind zumindest unbambiguobus.
Bzlm

21
Kilo bedeutet 1000, Mega bedeutet 1000000, Giga bedeutet 1000000000. Es sind die RAM- und Betriebssystemhersteller, die das falsch verstanden haben, nicht die Laufwerkshersteller.
Mark Ransom

39
Niemand wird es tun? Ernsthaft? Okay, ich werde es tun ... xkcd.com/394
Erik Forbes

36

Dieser Zustand prüft wie folgt:

if (condition1 && condition2 && condition3)

werden in einer nicht festgelegten Reihenfolge durchgeführt ...


15
In welcher Sprache? Sprachen wie C / C ++, Java und Python garantieren, dass die Bedingungen von links nach rechts ausgewertet werden und dass die Auswertung bei der ersten Bedingung endet, die false zurückgibt. Es ist Teil der Sprachspezifikation. Ich gehe davon aus, dass die meisten anderen Sprachen die gleiche Garantie geben.
Clint Miller

44
@Clint: Ja, daher "stellte sich heraus, dass das falsch war".
Bzlm

Ja, das ist cool. es macht das Schreiben von Sachen wie if (myList! = null && myList.Count> = 0) {do stuff ();} viel einfacher
Zack

4
Tatsächlich hängt dieser von der Sprache ab und & bewertet alle Bedingungen (keine Verknüpfung). Und ich habe viele Leute gesehen, die And (&) in VB anstelle von AndAlso (&&)
Lucas

2
. . . Tatsächlich wird es auch in VB.net abstürzen, wenn Sie nicht AndAlso re Lucas 'Kommentar
Binary Worrier

35

Dass meine Programmierung schneller und besser wäre, wenn ich sie alleine ausführen würde.


Aber es kann nicht so hässlich werden wie Pair-Programming :-) außer vielleicht Ihrem Code
Ei

33
Das hängt alles von der anderen Person ab. =)
JohnFx
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.