Source lesen und verstehen lernen
-
Genau so siehts aus.
Wenn ich mich an meine ersten Versuche erinnere, kommts mir auch hoch ^^
-
sri schrieb:
Die Erfahrung ist halt nicht zu unterschätzen. Man lernt immer wieder neue Sachen dazu. Wenn ich mir heute Code anschaue, den ich vor zehn Jahren geschrieben habe, dann kommt manchmal das blanke Entsetzen. Vermutlich wird es mir in zehn Jahren wieder so gehen.
da kann ich dich berihigen. ich habe heute keine probleme, meinen c++-code von 1998 zu lesen.
-
volkard schrieb:
da kann ich dich beruhigen. ich habe heute keine probleme, meinen c++-code von 1998 zu lesen.
aber vielleicht fällt's dir schwer, deinen code von 1988 zu lesen?
-
+fricky schrieb:
volkard schrieb:
da kann ich dich beruhigen. ich habe heute keine probleme, meinen c++-code von 1998 zu lesen.
aber vielleicht fällt's dir schwer, deinen code von 1988 zu lesen?
Ja. Weil ich damals Scheiß programmiert hatte. Den 90-er Code konnte ich bereits ein halbes Jahr später nicht mehr entziffern. Aber Nicht-Scheiß-Programme (und welche, die nicht betont experimentell sind) bleiben dauerhaft lesbar.
-
Lesbar schon. Aber nicht unbedingt sauber (gemessen an den heutigen Ansprüchen).
-
Es geht mir vor allem auch darum, gerade als anfänger mir mal anzusehen, wie die Könner es so machen.
Anderes Beispiel, beim Gitarre zocken höre ich mir auch lieber an was die Heros so spielen und können, nicht um es dann direkt nachzuahmen, könnte ich ja garnicht. Aber um zu sehen, in welche richtung es gehen kann und wohin ich selbst mal kommen möchte
Ich habe heute meine Tage: Bullshit. Du willst es wohl nicht kapieren. Programmieren ist nicht Gitarre spielen. Genausogut koenntest du dich als Schueler der 7. Klasse in eine Vorlesung fuer hoehere Mathematik setzen und wuerdest trotzdem nicht wissen, in welche Richtung es geht.
Ausserdem gibt es genug Literatur fuer Fortgeschrittene:
http://www.amazon.de/Effektiv-programmieren-Möglichkeiten-Programme-verbessern/dp/3827326907/ref=sr_1_1?ie=UTF8&s=books&qid=1247836856&sr=8-1
http://www.amazon.de/Effektiv-C-programmieren-Scott-Meyers/dp/3827322979/ref=sr_1_3?ie=UTF8&s=books&qid=1247836856&sr=8-3
http://www.amazon.de/Modern-Design-Applied-Generic-Patterns/dp/0201704315/ref=sr_1_14?ie=UTF8&s=books-intl-de&qid=1247836856&sr=8-14
-
knivil schrieb:
Bullshit. Du willst es wohl nicht kapieren. Programmieren ist nicht Gitarre spielen.
natürlich nicht. trotzdem haben programmieren, gitarre spielen, skateboard fahren usw. eins gemeinsam: man muss viel üben und lernen um gut zu werden. und dass man sich von meistern des fachs durchaus was abschauen kann, ist nicht so unwahrscheinlich.
knivil schrieb:
Ausserdem gibt es genug Literatur fuer Fortgeschrittene:
http://www.amazon.de/Effektiv-programmieren-Möglichkeiten-Programme-verbessern/dp/3827326907/ref=sr_1_1?ie=UTF8&s=books&qid=1247836856&sr=8-1
http://www.amazon.de/Effektiv-C-programmieren-Scott-Meyers/dp/3827322979/ref=sr_1_3?ie=UTF8&s=books&qid=1247836856&sr=8-3
http://www.amazon.de/Modern-Design-Applied-Generic-Patterns/dp/0201704315/ref=sr_1_14?ie=UTF8&s=books-intl-de&qid=1247836856&sr=8-14bisschen einseitige buchtips. findeste nicht?
-
bisschen einseitige buchtips. findeste nicht?
Ich bin weder Amazon noch google, auch nicht seine Mutti. Also muss es reichen, nur den Weg zur Toilette zu weisen, anstatt ihm auch noch den Hintern (Arsch wird leider zensiert) abzuwischen.
-
knivil schrieb:
bisschen einseitige buchtips. findeste nicht?
Ich bin weder Amazon noch google
Trotzdem wirkt es ein bißchen seltsam, daß Du bei drei Büchern ecp gleich zweimal nennst.
Ansonsten ist die Buchauswahl für diesen Zweck ideal. Effektiv C++ programmieren und Modern C++ design. Wozu noch mehr?
-
Ok, das eine sollte More Effective C++ ... sein.
-
knivil : hey wie bist du denn drauf ? ^^
musst ja wirklich schlechte laune haben manchmal oder ?
Ich hatte dich ja auch nicht gebeten mir den ... abzuwischen.
Die Buchtips scheinen ja ganz brauchbar, kommt dann bei Zeiten mal.Und dass ich es nicht kapieren will, würde ich nicht behaupten, dann würde ich mir keinen Kopf machen. Das mit der Gitarre war auch nur n beispiel, wenn du von sowas schonmal gehört hast
Hör auf +fricky, der hats verstanden.
Und mit ner Vorlesung für höhere Mathematik würde ich vielleicht wirlich meine Schwierigkeiten haben, aber Code ist Code und ich hab noch keinen gesehen, den ich nicht lesen konnte, an sich kann man das meiste gut nachvollziehen, warum also nicht mal nen Blick drauf werfen.
Wenn du mir mal konkret sagen könntest warum das nen schlechter Ansatz sein sollte, würde ich das vielleicht noch nachvollziehen können, du sagst aber immer nur das is der falsche weg und bringt alles nichts. Das kann ich jetz auf anhieb so nicht bestätigen, mir brachte das schon ein wenig mehr einsicht.
-
Ausgerechnet unser Haustroll hat's verstanden. Da würde ich jetzt ganz vorsichtig sein, ob er Dich nicht nur veralbern wollte.
-
Viel Spass beim Raten: Was macht die Funktion scan? Um es etwas schwieriger zu machen, habe ich mal die Kommentare entfernt. Die grobe Idee als auch deren Umsetzung kann in wenigen Zeilen hingeschrieben werden. Das Lesen und Verstehen dieser Zeilen dauert etwa 5 min (etwas Erfahrung vorausgesetzt). Ich erhebe keinen Anspruch darauf, dass diese Loesung besonders elegant ist. Ich selbst finde sie dennoch schoen. Trivialitaeten habe ich mal weggelassen, falls dir noch etwas fehlt, dann sag Bescheid.
PS: Diese Zeilen sind fuer dich persoenlich zum Testen, wie gut das mit dem Verstehen von Sourcecode klappt. Du brauchst mir nichts zu beweisen. Auch will ich niemanden hier etwas beweisen, nur dass es recht schwierig ist, dem Sourcecode zu Grunde liegende Konzepte zu verstehen.
class Point { public: double m_x,m_y; Point(); Point(double x, double y); Point(const Point& p); Point operator-(const Point& p) const; const Point& operator=(const Point& p); bool operator==(const Point& p) const; bool leftOf(const Point& p1, const Point& p2) const; bool collinear(const Point& p1, const Point& p2) const; }; bool Point::leftOf(const Point& p1, const Point& p2) const { Point r(*this - p1); Point q(p2 - p1); return (q.m_x*r.m_y - q.m_y*r.m_x) > 0; } bool Point::collinear(const Point& p1, const Point& p2) const { Point r(*this - p1); Point q(p2 - p1); return (q.m_x*r.m_y - q.m_y*r.m_x) == 0; } class ScanPred { private: Point a; public: ScanPred(const Point& p); bool operator()(const Point& p1, const Point& p2) const; }; class SortPred { public: bool operator()(const Point& p1, const Point& p2) const; }; ScanPred::ScanPred(const Point& p) { a = p; } bool ScanPred::operator()(const Point& p1, const Point& p2) const { return p1.leftOf(a,p2); } bool SortPred::operator()(const Point& p1, const Point& p2) const { if( p1.y() < p2.y()) return true; if ((p1.y() == p2.y()) && (p1.x() < p2.x())) return true; return false; } void scan(std::deque<Point>& set) { std::sort(set.begin(), set.end(),SortPred()); std::deque<Point>::iterator new_end = std::unique(set.begin(),set.end()); set.erase(new_end,set.end()); if (set.size() < 3) return; Point min = set.front(); Point max = set.back(); set.pop_front(); std::sort(set.begin(),set.end(),ScanPred(min)); set.push_back(min); set.push_front(min); std::stack<Point> conv_stack; conv_stack.push(set.back()); set.pop_back(); conv_stack.push(set.back()); set.pop_back(); while(set.size() > 1) { Point tmpM = conv_stack.top(); conv_stack.pop(); if (tmpM.leftOf(conv_stack.top(),set.back())) { // mache nichts :-) } else { conv_stack.push(tmpM); conv_stack.push(set.back()); set.pop_back(); } } while (conv_stack.size() > 1) { Point tmpM = conv_stack.top(); conv_stack.pop(); if (tmpM.collinear(set.front(),conv_stack.top())) { // mache nichts :-) } else { set.push_front(tmpM); } } if (set.size() == 1) { set.push_front(max); } }
Hör auf +fricky
Da wuerde ich meine Seele der Verdammnis preisgeben.
-
knivil schrieb:
Viel Spass beim Raten: Was macht die Funktion scan?
kommentare raushauen ist unfair, aber grob geraten: punkte aussortieren die nicht auf einer geraden liegen.
-
Naja, man mag streiten, ob Kommentare Teil des Quelltextes sind. Mit Kommentaren braeuchte man sich den Quelltext nicht mehr ansehen, um zu verstehen. Ich bin da immer recht grosszuegig. Auch hat die Funktion scan einen treffenderen Namen im Original. Ansonsten falsch geraten.
-
ZSchneidi schrieb:
Und mit ner Vorlesung für höhere Mathematik würde ich vielleicht wirlich meine Schwierigkeiten haben, aber Code ist Code und ich hab noch keinen gesehen, den ich nicht lesen konnte, an sich kann man das meiste gut nachvollziehen, warum also nicht mal nen Blick drauf werfen.
Knivil hat ja schon ein schönes Beispiel gezeigt. Deine Technik funktioniert nur bei Trivialprogrammen, bei Software die auch etwas tut hat man selbst mit ordentlicher Kommentierung noch ordentlich Hirnschmalz zu investieren.
-
knivil : nette Idee, werd mich mal daran versuchen, momentan is nur schlecht, da ich noch auf Arbeit sitze ^^
Werd bei gelegenheit mal versuchen das zu analysieren.
Ui so eindeutige Meinungen zu +fricky, sollte ich da was wissen ?
-
Wenn der Erfinder des Algos zu Halloween Geburtstag hat, dann weiß ich, was die Funktion scan macht. Eigentlich kam ich durchs Lesen von leftOf drauf und weil ich sowas auch mal gebaut habe (aber naiv) und gar nicht so durchs Lesen des Hauptcodes.
-
Ok, ich konnts nicht lassen und habs mir doch mal angesehen.
Und muss sagen is ziemlich simple ... ^^
Ne spaß beiseite, ich konnte damit jetzt nicht wirklich viel anfangen.Hab mir die Referenz zur Hand genommen, aber selbst die konnt mir jetzt nicht wirklich weiter helfen. Es ist noch nichtmal unbedingt das semantische, sondern geht schon beim Syntaktischen los.
void scan(std::deque<Point>& set) { std::sort(set.begin(), set.end(),SortPred()); std::deque<Point>::iterator new_end = std::unique(set.begin(),set.end());
Hier beispielsweise : "deque<Point>" hab ich auch noch nicht gesehen sowas.
Mir fehlt auch noch der Ansatz was set an dieser stelle ist. Kann kann ich alles noch nicht so ganz nachvollziehen.Was würdest du selbst sagen, welchen grad an Schwierigkeit die Source aufweist ?
Wenn du mir jetz sagst, das is Kinderkram und sollte keine Probleme machen, sollte ich mir ernsthaft gedanken machen
-
ZSchneidi schrieb:
Ui so eindeutige Meinungen zu +fricky, sollte ich da was wissen ?
wegen dem werden die c++ flamethreads immer so lang.