fat-lobyte hat geschrieben:Die Aufgabe eines Programmierers ist Meinermeinung nach primär das *verhalten* eines Programms zu definieren, und nicht jedes Bit seiner Ausführung - das ist Aufgabe des Compilers.
Zu einer akzeptablen Ausbildung gehört, dass der Programmierer Entscheidungen treffen kann. Dafür bedarf es einem guten Verständnis, was da eigentlich passiert.
fat-lobyte hat geschrieben:In diesem Sinne ist übrigens auch der C und C++ Standard zu lesen, er soll ein Verhalten, ein Interface garantieren - aber nicht was genau zu jeder Zeit im Speicher steht.
Das ist übrigens die Stärke von C! Wer weiß, ob deine Anweisungen auf einer anderen CPU auch noch Schneller sind? Oder überhaupt das gleiche Ergebnis liefern?
Wenn wir uns nicht darauf verlassen können, dass die abstrahierte Verhalten eines Wertes auf allen Rechnern identisch ist, dann gibt es auch keine Grundlage auf der man etwas Programmieren könnte.
Die Integerdarstellung ist auf verschiedenen CPUs unterschiedlich und trotzdem ist das Ergebnis identisch. Die &-Verknüpfung ist eine klar definierte Sache und keine Frage, ob sie in Zukunft ein anderes Ergebnis liefern wird.
Das ist genauso wenig fraglich, wie die +-Verknüpfung. Wenn wir die Mathematik an den Nagel hängen - und die &-Verknüpfung ist nichts anderes als ein mathematischer Operator - dann kannst Du auch nichts zuverlässig ausrechnen.
Nichts für ungut, aber Deine Argumentation ist hier nicht an den Haaren herbeigezogen, sondern Humbug.
fat-lobyte hat geschrieben:Anscheinend glauben Leute oft, dass man für die "Performance" jedes Bit, jede Schleife, jede Operation definieren muss, weil sie denken, dass Bibliotheken (wie zum Beispiel die STL oder std::string) nur High-Level und langsam sind und man am besten sowieso alles selbst machen muss. Dabei besteht kein Interesse tatsächlich nachzumessen.
Du steigerst Dich gerade in etwas hinein. Es geht um die Anwendung eines Operators, der eindeutig definiert ist.
fat-lobyte hat geschrieben:Ich sehe es als Falsch (und eben als schlechten Stil) an, junge Programmierer erst dazu zu erziehen dass sie kompliziert, und um Ecken, und über jedes Bit nachdenken und dann erst sagt "ach ja, da gabs ja noch was, womit all das was du bis jetzt geschrieben hast obsolet wird."
Das meinst Du nun in einem anderen Zusammenhang, aber ich sage Dir ganz klar, dass ich einen Programmierer, der nie eine Liste oder ein Array (einen String) selbst verwaltet hat, keine kompliziere Datenstruktur zutraue. Was einfacheres wird man allerdings nicht finden.
Ergebnis: Ich bringe den Leuten bei, einfache Datenstrukturen zu verwalten, die dann irgendwann obsolet werden. Nicht unbedingt über die std-Lib, denn ich benutze auch eigene Arrays und eigene Strings.
Weil die Datentypen der Std-Lib mir nicht reichen.
fat-lobyte hat geschrieben:In diesem kontext möchte ich erwähnen, dass ich es für Blödsinn halte, C++-Anfängern zu sagen, dass sie erst C lernen sollen, da es die "Grundlage" bildet. Das ist Unfug! Sie ähneln sich in der Syntax, aber wenn man C++ programmiert, dann braucht man gewisse (veraltete) Konzepte aus C nicht.
Und das wären genau genommen dann welche?
Nebenher solltest Du Dir bewusst sein, dass eine Ausbildung nichts taugt, wenn man Projekte nur neu erstellen kann, aber kein vorhandenes Projekt versteht, weil man die angeblich "veralteten", aber weiterhin praktizierten Konzepte nicht versteht.
Um zu verstehen, was C++ macht, macht man es am besten mal selbst. Beim Erlernen von Konzepten geht es viel weniger darum, das Konzept zu lernen, sondern zu verstehen, warum man ein Konzept lernt.
Den Talk werde ich mir ansehen, sobald ich Zeit habe.
----------------------------
Panke hat geschrieben:Gewagte These: Die Anzahl der Leute, die meine Definition mit ca. 8 Jahren gelernt haben, ist größer als die Anzahl der Leute, die folgende Definition in der Grundschule lernten:
Eine Zahl ist genau dann gerade, wenn ihre Binärdarstellung in der kleinsten Stelle eine 0 besitzt.
Die meisten lernen in der Grundschule auch, dass wenn man einer Zahl mit 1 addiert, dass dann eine größere Zahl herauskommt. Von der These sollte man als Entwickler aber Abschied nehmen, denn ich kann Dir auch zeigen, dass i + 1 kleiner als i ist oder auch i+1 == i ist. Da hilft leider auch kein intelligenter Compiler.
Wer also Programmieren lernen will, lernt entweder programmieren oder lässt es bleiben. Wer allerdings darauf besteht, erlerntes Wissen beizubehalten und sich weigert dazuzulernen, der wird eine Menge Müll produzieren.
Informatik ist gewissermaßen "praktische Mathematik". Das lernt niemand in der Schule.
Rechne doch mal:
Ein Bauarbeiter soll ein Loch von 1m mal 1m genau 1m tief in die Erde schaufeln. Er braucht 5 Stunden. Wie lange brauchen 2 Bauarbeiter? Wie lange brauchen 5 Bauarbeiter und wie lange brauchen 25 Baubarbeiter?