Bin ich zu Blöd dafür

Ich kann Christian Fein voll und ganz zustimmen das man Bücher braucht, ich würde sogar sagen, man kann auf Bücher nicht verzichten.

Wenn man sich durch Bücher erstmal die Grundlagen angeeignet hat, hat man schon die halbe Miete. Danach kann man sich aus dem Internet oder Referenzen einfach immer das Beste rauspicken und verwerten, aber woher soll ich wissen was gut ist und was nicht, wenn ich keine Ahnung von den Grundlagen hab

C++ ist wirklich eine sehr komplexe Sprache, die mit der Zeit sehr unübersichtlich geworden ist, vielleicht solltest du erstmal mit C anfangen und dann an c++ gehen. Es gibt dort ein gutes buch von Willms "c lernen" in einigen Skripten wird das als Basis für C++ vorgeschlagen.
 
Hm Kachelator, sicher hängt es zunächst von den Algorithmen ab, aber auch sehr vom Anwendungsbereich. Wenn du für die XBox schreibst, dann weißt du ja, wie optimiert bspw. 3D Anwendungen sein müssen. Und besonders da mein Rechner nicht mehr der neuste ist, bin ich gezwungen extremen Wert auf Geschwindigkeit zu legen. Selbstverständlich ist dieser Schritt immer der letzte, wenn man weiß, dass man um einen Algorithmus nicht mehr herum kommt und ihn nicht weiter "konventionell" verbessern kann. Wenn man da gut kommentiert und strukturiert (bspw. auch die ersetzten Zeilen auskommentiert stehen lässt), dann lässt sich das auch gut verwalten.
Dieses Denken, dass man das doch lieber den Compiler machen lassen kann etc. ist meiner Meinung nach grundfalsch. Sieh dir mal Spiele wie Duke Nukem 3D an, das war derart hoch optimiert, dass es auf einem 486 lief, heute würde wahrscheinlich nicht mal mehr ein Taschenrechner auf 'nem 486 laufen, weil der schon wieder 10MB im Arbeitsspeicher belegt. Die Ressourcen sind ja da, reicht ja wenn man lieber "von oben" optimiert, damit man selbst es ein bisschen leichter hat. Nur wenn dann mal die Hightechmaschine auch mal nicht mehr kann, dann muss man doch mal "lowlevelig" werden. Alles integriert, alles erweiterbar, alles übersichtlich,... Das ist meiner Meinung nach pures Verschwenderdenken.
 
Schaut mal im masmforum im Laboratory vorbei - ein C und ein ASM programmierer optimieren Code. Es geht um eine Umrechnung ASCII nach Radix40

Starwert: ~7900 cycles
Endwert: ~290 cycles.

Da lohnt es sich schon zu optimieren wenn die Funktion oft genug aufgerufen wird. Aber für solche Analysen hat man ja den Profiler.
 
Original geschrieben von Dudadida

Dieses Denken, dass man das doch lieber den Compiler machen lassen kann etc. ist meiner Meinung nach grundfalsch. Sieh dir mal Spiele wie Duke Nukem 3D an, das war derart hoch optimiert, dass es auf einem 486 lief, heute würde wahrscheinlich nicht mal mehr ein Taschenrechner auf 'nem 486 laufen, weil der schon wieder 10MB im Arbeitsspeicher belegt. Die Ressourcen sind ja da, reicht ja wenn man lieber "von oben" optimiert, damit man selbst es ein bisschen leichter hat. Nur wenn dann mal die Hightechmaschine auch mal nicht mehr kann, dann muss man doch mal "lowlevelig" werden. Alles integriert, alles erweiterbar, alles übersichtlich,... Das ist meiner Meinung nach pures Verschwenderdenken.


Programme die auf einem 486 oder von mir aus realistischer LowEnd Embedded Systeme laufen müssen sind eher die Ausnahme als die Regel.

Softwareentwicklung ist ein kostspieliger Prozess. Das heisst überhöhte Handoptimierungen mögen Spass machen sind aber zumeist vollkommen kontraproduktiv.

Wie Kachalator schon gesagt hat, eine gute Software bietet Stabilität, Hohewartbarkeit und erweiterbarkeit.

Insbesondere bei der Wartbarkeit sind selbstgeschriebene ASM Algorythmen alles andere als erwünschenstwert.
Zumal der Flaschenhals bei modernen Anwendungen ganz wo anders liegt als in der Durchfühung von z.b Sotieralgorythmen. Der Flaschenhals liegt in Persistenzmodelle, in schlechtem Anwendungsdesign, IO Zugriffe allgemein.
Gutes Anwendungsdesign lässt sich nicht durch ausprobieren lernen, das kann ich dir garantieren. Es gibt Design Patterns die grosse Teile designtechnischer Probleme durch
Musterlösungen abdecken.
Kein Mensch wird ein Erbauer Pattern eben neu Erfinden. Programmieren ohne Bücher, ohne vom Wissen anderer zu lernen ist demnach das Rad immer wieder neu erfinden.

Dieses Denken, dass man das doch lieber den Compiler machen lassen kann etc. ist meiner Meinung nach grundfalsch.

Wenn ich mich auf Algorythmen vertraue die in der J2SE API mitgeliefert werden, dann überlasse ich nicht dem Compiler das denken sondern dem Programmierer der diese Methode geschrieben hat.
Das nennt sich Arbeitsteilung und das ist in der modernen Programmierung das A & O.
Zurückgreifen auf bestehenden Code, und diesen nutzen ist das beste Mittel gegen zu hohen Entwicklungskosten. Nur damit kann dem gut entgegen gewirkt werden.
Wenn ich ein Haus baue, will ich nicht selber einen Zement erfinden, sondern ich greife
auf den Zement zurück der für mein Haus die besten Eigenschafften hat.
Genauso wie ich als Zimmermann dem Mauerer das Mauerwerk überlasse und meine Dachstuhl auf dessen Mauern aufsetze, in dem Vertrauen das er was von seinem Job versteht.
Das Hintergrundwissen in Bücher, das wirklich recht üppig ist, ist aber extrem wichtig.

Ein Beispiel für Hintergrundwissen, welches auf den ersten Blick überflüssig scheint,
wie bei mir immer in Java.
Die VM speichert, zu optimierung, Strings in einem StringPool.
Das erklärt wieso:
Code:
   String a = "bla";
   String b = "bla";
   if(a==b) return true;
mannchmal false und mannchmal true, zurück gibt. Eigentlich vergleicht == die Referenzen und nicht den Inhalt. Da aber a und b Referenzen auf einen String in diesem Stringpool sind ist das ergebnis oftmals true. Wird aber aus irgendeinen Grund ein neuer String im Stringpool angelegt, dann ergibt dies false.
Das verwirrt und erscheint als Bug, ist es aber nicht aufgrund der internen Eigenschafft wie die VM vorgeht.
Wenn ich das weiss werde ich mich viel eher bereierlären grundsätzlich Strings mit der dafür vorgesehenen Methode a.equals(b) zu vergleichen welche mir in diesem Fall immer das gewünschte Ergebnis true zurückgibt.
PS: Die Frage kam schon mehrfach in verschiedenen Foren, Usenetgroups zu Java vor.
Es gibt noch sehr viele Beispiele. Und Bücher haben noch einen ganz entscheidenden Vorteil. Der Code in guten Büchern (ich vertraue OReillys) ist immer etwas an den mann
sich stilistisch halten kann. Ein gutes Beispiel wie ein Code auszusehen hat, wie er designed werden soll.
Das sind Dinge die in Tutorien oftmals komplett ausser acht gelassen werden. Sprich:
Hauptsache es funktioniert und zeigt die Methode.

Das ist das selbe wie in der Schule. Auch gute Schüler aus der 10. 11. könnten einen aus der 8. Klasse in Mathe unterrichten. Das Ergebnis wird unter garantie nicht genauso gut sein wird mit einem ausgebildeten Pädagogen.

Zumal haben Bücher noch einen ganz entscheidenden Vorteil, mann kann sie mit in die Badewanne, Baggersee, Zug, Adriastrand, Puff :-) nehmen.
 
man muss ja nicht gleich mit der Asm-Keule schlagen aber es gibt auch einfache Beispiele wie man die Prozessorarchitektur besser ausnutzt um mehr Performanz zu bekommen.

Beispiel:

Code:
for (int i=0; i<128; i++) {
   sum+=x[i];
}


Code:
for (int i=0; i<128; i+=4) {
   sum+=x[i];
   sum+=x[i+1];
   sum+=x[i+2];
   sum+=x[i+3];
}
(nützt die Parallelisierbarkeit von additionen aus, ausserdem weniger Sprünge)

desweiteren sind auf dem PIV z.B. sprünge Rückwärts günstiger als vorwärts (wegen der branch prediktion), bei If-Abfragen in Schleifen kann man erwägen (falls möglich) umzubauen, so daß die Schleifen in den Abfragen stehen und nicht umgekehrt, bei Switchanweisungen die Wahrscheinlichsten Sprungmarken zuerst, floatingpoint-Befehle so einbauen, dass sie paralell ausgeführt werden können (der Compiler darf sie aus Genauigkeitsgründen nicht anfassen), float statt double verwenden wenn möglich, da float mittels MMX verarbeitet werden kann ...

der C-Mensch hatte in dem Thread seine Version von über 7000 cycles auf 700 gebracht. Faktor 10! Ohne ein Wort ASM!
Klar, bei simplen Sachen bzw. Dingen die auf Userinput warten lohnt es sich nicht. Aber es gibt immer vielgebrauchte Subrutinen die es sich lohnt zu optimieren.
 
Original geschrieben von squeaker
man muss ja nicht gleich mit der Asm-Keule schlagen aber es gibt auch einfache Beispiele wie man die Prozessorarchitektur besser ausnutzt um mehr Performanz zu bekommen.

Es spricht nichts gegen Optimierung wenn sie
a) den Code wartbar halten
b) nicht zu teuer sind
 
Weißt du Christian, das mag ja alles gut und schön sein und tatsächlich hat irgendwer meistens schon den perfekten Algorithmus für eine bestimmte Anwendung geschrieben und man braucht ihn nur noch kopieren. Und das ist ja auch gut so und das kann man ja auch nach belieben machen und spart Zeit und im professionellen Bereich auch viel Geld. ABER es ist viel befriedigender wenn man eben das Rad mal neu erfindet. Ich habe schon binäre Bäume benutzt, bevor ich wusste was das ist, ebenso ging es mir mit unzähligen anderen Standardalgorithmen, die ich mir selbst aus den Fingern gesogen habe. Von der pädagogischen Seite ist das zehnmal mehr Wert als irgendeinen vorgekauten Code abzupinseln, weil man selbst gezwungen ist zu denken und nicht nur "wie passe ich Standard X an mein Problem an" sondern "wie löse ich das Problem"! Und guten Stil gewöhnt man sich schon zwangsläufig an, wenn man die Übersicht waren will und sich Gedanken über das macht, was man schreibt und versucht es zu verbessern (wobei es da auch einige Ausnahmen zu geben scheint, ok).
Wenn man es dann kann, gut und schön, aber ich finde es verwunderlich, dass ich teilweise immer noch von Freunden die Informatik studieren die Programmieraufgaben löse und das obwohl sie ihre teuren Bücher zu Hause haben und voll sind, von theoretischem Fachwissen, es aber nicht umsetzen können.
Dass die IT-Branche da anders denkt und lieber Wert setzt auf billig und billig und billig ist klar, schließlich ist man ja nicht mehr gezwungen mit langsamen Systemen zu arbeiten und man kann vollkommen in Richtung Wartbarkeit und Kostenersparnis denken, aber das ist meiner Meinung nach von der programmiertechnischen Seite her nicht der beste Weg, weil so nach außen hin nicht die beste Software produziert wird, damit hat's nur der Programmierer leichter.

PS.: Oh Mann, wer nimmt denn ein C++ Buch mit an den Strand... das lenkt doch nur vom wesentlichen ab... *g*

@Squeaker: Aber eben solche Optimierungen sind vielen Leuten ein Dorn im Auge, denn wenn es mal nicht mehr eine derart triviale Operation ist, die man durchführt und kompliziertere Anweisungen viermal schreibt, wird es verständlichweise wieder schwerer wartbar...
 
@Christian Fain:
Ich bin der Chor, und ich stimme zu! Ich stimme zu, ich stimme zu, ich stimme zu! Besonders bei den Büchern. Ich bin ganz definitiv ein Buch-an-den-Strand-Mitnehmer.

@Dudadida:
Da bereits verheiratet, gibt es bei mir nicht so das Problem mit der Ablenkung, Dudadida. Kann mir jetzt denken, woher dein Nickname kommt. ;)

ABER es ist viel befriedigender wenn man eben das Rad mal neu erfindet.
Ja, das ist auch lehrreich, aber wie du selber weisst, gilt im Job die Befriedigung nicht so viel. Ich bin ein begeisterter Programmierer, aber ich bin auch bewusst "faul" und versuche immer wieder, neue Möglichkeiten zu finden, mir weniger Arbeit zu machen -- in der Hoffnung, dass der ganze Low-End-Kram mal irgendwann wirklich nicht mehr berücksichtigt werden muss. Ab und zu macht es mir auch Spass, zum Beispiel einen Screensaver mit lustigen Pixeleffekten zu bauen (in meiner Freizeit!) und da kommt dann auch einiges an Optimierungsaufwand zusammen. Das ist aber Hobby, kein Beruf, und hat nicht unbedingt was mit Professionalität zu tun. Vielleicht bin ich aber auch einfach aus dem Alter raus, wo mir das Bit-Verbiegen als Selbstzweck noch Spass macht. Ich mache mir lieber Gedanken über Algorithmen.

Wenn man es dann kann, gut und schön, aber ich finde es verwunderlich, dass ich teilweise immer noch von Freunden die Informatik studieren die Programmieraufgaben löse und das obwohl sie ihre teuren Bücher zu Hause haben und voll sind, von theoretischem Fachwissen, es aber nicht umsetzen können.
Ich finde es eher bedenklich als verwunderlich und ich muss sagen, dass es mir auch ziemlich auf den Keks geht, dass dann solche Leute mit ihrem Diplom auf dem Arbeitsmarkt herumstolzieren und den wirklich fitten und ambitionierten Autodidakten und Quereinsteigern "die Jobs wegnehmen". Das klingt jetzt hart (ich habe stark übertrieben) und ich will auch wirklich nichts gegen deine Freunde sagen, die ich ja nicht kenne. Ich will auch um Gottes willen nicht alle studierten Informatiker vergraulen! Ich bin in der Beziehung nur inzwischen etwas empfindlich geworden.

(Oh Mann, in diesem Thread tun sich ja Abgründe auf! :-) )

So wie es aussieht, tut sich in dem Bereich allerdings wohl einiges. Industriezertifikate scheinen ja Wert zu verlieren, und mit cert-it werden neue Standards geschaffen, um auch die berufliche Fitness von Quereinsteigern zu bewerten.

Ich zwinge mich mal, hier zu schliessen... :-)

---
Edit: Habe ein 'e' durch ein 'a' ersetzt. Rache an Christian für's "Kachalator"... ;)
 
Zuletzt bearbeitet:
Auch mal mitreden

Also dann möchte ich auch mal meinen Standpunkt vertreten.
Da ich auch beruflich Programmiere und doch einiges an Erfahrung mitbringen kann denke ich ebenso wie Christian.
Nein ich will ihm hier nicht nur einfach nachreden, denn das wäre ja langweilig, vielmehr will ich die wirtschafliche Effiziez von Programmiermethoden noch mehr untermauern. Denn die Wartbarkeit und skalierbarkeit von Softwareprodukten ist nun mal heutzutage wesentlich wichtiger als die Perfromance, dabei meine ich das ganz Allgemein, denn bestimmte Spezialfälle sind natürlich davon ausgeschlossen.
Denn wie schnell geht es heutzutage, daß bei einem Projekt mal schnell jemand abgezogen wir und dafür 2 andere Programmierer nahtlos weiter machen müssen. Da zählen kurze Einarbeitungszeiten strukturierter Aufbau und Dokumentation.
Klar das sind Theorien, in der Praxis sieht es meist schlimm aus (kenn das aus Erfahrung), aber eben diese Theorien (um Christian nochmals zu zitieren) werden einem eben nicht aus einem Forum oder Tutorial gelehrt, die kann man aber auch nicht allein aus Büchern lehrnen, sondern natürlich auch durch Erfahrung.

Die Problematik, mit teilweise unqualifizierten Informatik-Studenten (bitte Niemand böse sein), die Dudadida und Kachelator angesprochen hat, ist mir auch bekannt und davon kann ich auch ein Lied singen. Woran das liegt, ist mir auch nicht bekannt, aber es gibt mit Sicherheit einige Gründe dafür.
Einer der Gründe ist auf alle Fälle die sog. "Lernresistenz" mancher Leute. Ein anderer ist meiner Meinung nach auch, dass viele Leute, im Zeitalter von Computer & Co nichtmehr wissen dass es Literatur gibt, egal ob in gedruckter oder digitaler Form.
Ob Buch oder eBook, das soll derjenige selbst entscheiden, denn wie Christan schon gesagt hat haben Bücher (obwohl sie schon so alt sind) doch gewisse Vorteile.

Gruß Homer

P.S. An den Adriastrand nehm ich lieber nen Roman mit als ein C++-Buch
:-)
 
Hehe, sorry Kachelator, den Nickname habe ich nur, weil ich irgendwann festgestellt habe, dass den sonst nie irgendjemand hat, so kann ich immer den gleichen Nick nehmen (aber interessante Schlussfolgerung, die werde ich wohl übernehmen, wenn du erlaubst ;), falls mich mal wer nach dem Namen fragt... :D).
So langsam decken sich auch die Ursachen der unterschiedlichen Ansichten auf, ich habe halt stets nur als Hobby programmiert, strebe ja auch einen anderen Beruf an, mal intensiv, mal für lange Zeit gar nicht und da legt man dann halt mehr Wert auf die lieben Details, es hängt einem ja keine Deadline im Nacken oder ein verärgerter Chef oder was auch immer und da hält man sich halt schonmal gern an 'nem Algorithmus auf, der woanders schon besser vorliegt. (Halt die üblichen Sinnlosprogramme, ich glaube JEDER hat schonmal nen Taschenrechner programmiert...) Mittlerweile versuche ich aber schon, wenn ich denn was mache, irgend etwas zu programmieren, das mir weiterhilft und das noch nicht überall zu finden ist.
Was die Info-Studs betrifft, muss ich sagen, dass man da sehr differenzieren muss. Es gibt sicherlich genug, die ihr Fach wirklich beherrschen, aber es gibt auch (wie immer) einige, die sich so durchdrücken, wie auch schon in der Schule und dann irgendwann auf den Arbeitsmarkt losgelassen werden (die Lern- oder vielleicht besser Verständnisresistenz eben - lernen können die meisten ja ganz gut, nur verstanden wird nix).
Aber ich glaube das ist in jedem Fachbereich irgendwo ähnlich. In Medizin ist es bspw. ganz krass, da werden ja bewusst Theorieroboter herangezogen, die das ganze 1500 Seiten Innere Medizin Buch auswendig hervorbeten können. Und ohne wirklich praktisch tätig geworden zu sein werden die Studenten so auf die unvorbereiteten Patienten losgelassen werden, die sogar noch Vertrauen aufbringen, weil auf dem Namensschild schließlich "Arzt" steht.

P.S.: Ja der Roman wirkt am Adriastrand auch viel cooler...
 
Zurück