Wie lernt man Programmcode lesen

  • Gerade wird ja der nächste stable vdr 2.2.0 eingepackt. Wenn ich dann so einen Thread wie diesen hier lese, dann werde ich schon neidisch:
    Da lesen die Forenhelden einfach mal den Programmcode wie einen Krimi und können dann sagen, ob ihnen die Handlung nicht ganz plausibel vorkommt. Oder es gibt so einen "einfachen" Rat wie hier und zwei Post weiter läuft eine DVB-Karte, weil man Quellcode rumgeschraubt hat. Wow !!! :respekt


    Als ich vor Jahrzehnten meinen ersten VC-20 hatte, habe ich mir selbst BASIC beigebracht. Und nach ebenso nun sicherlich schon zweistelligen Jahren mit Linux reicht es auch für das eine und andere Shell-Script zum Eigengebrauch. Immerhin kann ich beispielsweise jetzt die Schnittmarken einer vdr-Aufnahme auslesen und die Aufnahme mit ffmpeg schneiden. Aber beim C++ Buch bleibe ich meist in Kapitel drei hängen, nach hello world noch eine Variante eines Programmes zur Verwaltung meiner CDs ... das ist schon arg trocken in der knappen Freizeit. :doof


    Tatsächlich würde ich aber gerne mal einen Schritt weiter kommen - und die coolen Sachen wie Kernel, ffmpeg, vlc oder vdr sind halt c oder c++. Kann man als Freizeit-Pinguin-Fan irgendwie in diese Geheimsprache c/c++ mit learning by doing hineingleiten? Oder anders gesagt: Haben die Coder-Helden pädagogisch wertvolle Tipps, wie ein Linux-User ein nützlicheres Mitglied der Community werden könnte - bevor der Tod uns scheidet?

  • berndb


    Hast Du Dir diff-Datei auch mal angeschaut? Nimm die ganzen Übersetzungen raus und das ist wirklich "eine Kleinigkeit" mit kaum bzw. keinem Code.


    Guck Dir zum Vergleich mal den Gesamtcode des VDR oder auch Plugins an ... ^^ ... da sehe ich auch wirklich schöne Dörfer im Landstrich Böhmen ... :P


    Regards
    fnu

    HowTo: APT pinning

  • [...] Tatsächlich würde ich aber gerne mal einen Schritt weiter kommen - und die coolen Sachen wie Kernel, ffmpeg, vlc oder vdr sind halt c oder c++. Kann man als Freizeit-Pinguin-Fan irgendwie in diese Geheimsprache c/c++ mit learning by doing hineingleiten? Oder anders gesagt: Haben die Coder-Helden pädagogisch wertvolle Tipps, wie ein Linux-User ein nützlicheres Mitglied der Community werden könnte - bevor der Tod uns scheidet?


    Ich bin sicher kein Coder-Held (was auch immer das genau ist), trotzdem:


    Wenn du keine Schulung für den Einstieg machst oder Jemanden kennst, der dir da ein paar Stunden spendiert, wirst du dich - so trocken es ist - an dein Buch (oder noch ein oder zwei weitere) halten müssen. Und dann musst du selber viel Code produzieren - für verschiedene Zwecke. Und dann kannst du zwar evtl. selber programmieren, aber das heißt noch lange nicht, dass du anderer Leute Code lesen und verstehen kannst. Jeder hat seinen eigenen Stil.
    Das ist wie mit einer Fremdsprache: Ein Kurs an der FHS und ein Aufenthalt im passenden Land mit viel Üben als Einstieg. Dann evtl. Lesen entsprechender Bücher in der Sprache.
    Und dann kannst du mit Mühe die "reine Lehre", verstehst aber den Typen im kleinen Dorf in der Winzprovinz des fremden Landes trotzdem kein bisschen.


    Ich will dir weder Mut noch Motivation nehmen, aber es bedarf viel Zeit und Willen, dahin zu kommen, wo du hin möchtest.


    Ciao.
    Michael.

  • Ich habe viel Gutes über das Buch "C++ Primer" gehört/gelesen. http://www.amazon.de/dp/0321714113


    Selbst habe ich mich aber noch nicht drangetraut.


    Edit: Ich lese gerade, das im C++ Primer das Threading nicht behandelt wird. Eine bessere Wahl, oder als Ergänzung zum C++ Primer scheint "The C++ Standard Library" zu sein. http://www.amazon.de/dp/0321623215


    Vielleicht kann ja mal jemand etwas über die Bücher sagen. Möglicherweise hat die ja schonmal jemand in der Hand gehabt.

  • Gerade wird ja der nächste stable vdr 2.2.0 eingepackt. Wenn ich dann so einen Thread wie diesen hier lese, dann werde ich schon neidisch:
    Da lesen die Forenhelden einfach mal den Programmcode wie einen Krimi und können dann sagen, ob ihnen die Handlung nicht ganz plausibel vorkommt.


    Na ja, das würde ich jetzt erst mal nicht überbewerten. Speziell bei diesem .diff, geht es darum wie gut man einen "Filter-Blick" entwickelt hat. Also die Fähigkeit unwichtiges schnell zu überfliegen und das Wichtige herauszupicken. Diese Fähigkeit bekommst du nicht aus einem Buch, das muss man trainieren. Learning by doing, Damit kannst du jetzt schon anfangen. Dann merkst du ganz schnell, dass das Meiste in diesem .diff nur geänderte Language-Dateien sind die man als nicht nativ speaker der Sprachen sowieso ignoriert.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Moin!


    Ich hab mit einem C-64 angefangen, also eine (Computer-)Generation später. Erst natürlich Basic, dann aber auch bald 6502-Assembler. Irgendwann kam dann in Schule und Studium etwas (Turbo-)Pascal hinzu, aber dann hatten wir in der FH Kisten mit HP-Unix drauf, da wurde dann C geschrieben. Richtig beigebracht wurde es mir nicht, aber ich dann neben dem Studium schon in der kleinen, netten Firma angefangen zu arbeiten, bei ich heute immer noch bin (mit einem zweijährigen Exkurs bei debis, also "Enterprise"-Level). Insgesamt bestreite ich also schon über 20 Jahre meinen Lebensunterhalt mit C/C++, in den letzten Jahren auch C# - ist aber nach einer gewissen Zeit eh' alles ein und dasselbe. :)
    Das einzige, was beim Lesen von fremden Code hilft, ist lesen, lesen, lesen und Schritt für Schritt im Kopf mitspielen, was das Programm wohl gerade macht, dazu merkt man sich dann ein bisschen die Variableninhalte nebenbei oder man lässt das Programm im Debugger laufen und lässt sich die wichtigsten Variablen anzeigen. Was aber noch viel wichtiger ist, ist, selber Unmengen von Code zu schreiben. Denn jeder macht Fehler, und man lernt am besten aus den eigenen. Und wenn man die dann häufig genug gemacht hat (das hört ja leider auch nie auf mit den Fehlern), fängt man an, die "Matrix nur noch codiert" zu sehen. Letztendlich gibt es nur eine handvoll verschiedener Algorithmen, mit denen ein Großteil der meisten Programme arbeiten. Die hat man alle schon diverse male selbst implementiert.


    Irgendwann hab ich mal "Effective C++" gelesen (und wieder vergessen), "Large scale C++" ist auch so ein Klassiker, den ich mal lesen möchte, aber das meiste weiß ich nebenbei aus Blogs oder ich such mir was zusammen, weil eine gewisse Umsetzung mich einfach interessiert. Außerdem hab ich viel von meinem Kollegen gelernt, der den ganzen Kram schon eine Weile länger macht als ich. Wir haben uns häufig zusammen hingesetzt und über Konzepte debattiert, verschiedene Implementierungen zusammen durchgespielt und immer wieder großzügig ganze Bereiche von Quellcode über den Haufen geworfen und neugeschrieben. Er muss meinen Code lesen, ich muss seinen lesen, viel schlimmer, manchmal muss ich meinen Code lesen, den ich vor 10 Jahren geschrieben habe - gruselig. :)


    Ein anderes nettes Buch rund ums Programmieren soll "Think Python" sein, das gibt's im Original auf Englisch umsonst. Da geht es nicht so sehr um die Sprache, sondern um allgemeine Konzepte.


    Ansonsten wie bei jedem Hand- oder Kunstwerk auch: üben, üben, üben... Und keine Angst davor haben, sondern machen.


    Was den vdr betrifft: Ich hab einfach irgendwann angefangen, Plugins zu schreiben, die ich selbst brauch(t)e bzw. vorhandene verbessert. Und das ganze so lange, bis es läuft...


    Lars.

  • Moin,


    ich würde dir raten, dir ein definiertes Ziel zu setzen.


    Was willst du machen?
    Vielleicht ein VDR Plugin programmieren?
    Was fehlt dir denn am VDR?


    Mir hat ursprünglich am VDR eine meinen Wünschen entsprechende zweidimensionale EPG Ansicht gefehlt. Deshalb habe ich irgendwann mal angefangen, den TV Guide zu programmieren. Bzw. ich habe es versucht, damit anzufangen ;) Ich hatte zwar aus Informatikstudium und diversen Jobs Erfahrung in PHP und Java, C/C++war für mich Neuland. Und dann noch in die bestehende VDR Struktur reinkommen, das war schon etwas anstrengend. Ich kann mich noch gut an einen Augenblick erinnern, als ich mir dachte "wenn du das jetzt nicht in einer Stunde zum Laufen bekommst, dann schmeisst du den ganzen Scheiss hin und versuchst es nie wieder". Zum Glück habe ich es in ca. 45 Minuten zum laufen bekommen :D


    Was ich sagen will...der Anfang ist steinig, aber wenn du am Ball bleibst bekommst du es bestimmt irgendwann auf die Reihe. Und dann macht es Spass ;)


    Bücher...naja, das ist Ansichtssache. Wichtig ist insbesondere bei C++ ein gutes Klassendesign, Spaghetticode produzieren kann man auch prima mit C++.


    Ciao Louis

  • Hi Bernd.
    Ich stecke in ner ähnlichen Situation wie du ;)
    Ich habe vor etlichen Jahren mit nem C64 angefangen und mir selbst BASIC beigebracht. Danach hab ich noch etwas PHP und BASH eingesaugt.
    Würde auch gerne in die Materie von C++ eintauchen. Ich hatte mir mal vor einiger Zeit im Internet "Jetzt lerne ich C++" heruntergeladen. Da wird von Null auf für völlige Anfänger das Grundgerüst erklärt. Immer schön mit Beispielcode. Das hat mich schonmal einen Schritt weiter gebracht. Zum schreiben eines eigenen VDR Plugins reicht es bei mir zwar noch lange nicht, aber so einige Codezeilen lesen klappt jetzt schon prima ;)


    Vielleicht wäre es für den Anfang ja auch was für dich.


    Gruß Patrick

    Gruß Patrick


    [size=8]* Meine NeverEndingProjects ;-)*


    vectra --- glasslike ---

  • Ich behaupte einfach mal ohne selbst ein wenig zu programmieren, wirst du nicht in der Lage sein fremden Code einfach zu "lesen". Programmiersprachen sind letztendlich alles das selbe, andere Syntax aber IF THEN ELSE, LOOPS, etc. haben alle. Man muss die "Logik" hinter dem Quellcode lesen können der Rest kommt dann von alleine.
    Ich weiß das sind alles nur tolle Sätze hier und das hilft dir nicht weiter. Aber letztendlich kann es dir niemand abnehmen, endweder du setzt dich hin und fängst an zu Programmieren oder du lässt es :P


    Grüße
    Martin

  • Naja, wenn ich da an Pointer und solche Dinge denke....so richtig warm bin ich mit C nie geworden.

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Muss ja auch nicht C sein. Gibt genug andere Programmiersprachen, mit denen sich Probleme lösen lassen, die man ohne Computer überhaupt nicht hätte. Programmiersprachen sind fast wie richtige Sprachen - wenn man sie nicht rechtzeitig lernt, hat man keinen Bezug dazu. Es spricht trotzdem nichts dagegen, auch mal eine Fremdsprache kennenzulernen.

  • Da lesen die Forenhelden einfach mal den Programmcode wie einen Krimi und können dann sagen, ob ihnen die Handlung nicht ganz plausibel vorkommt.


    Wohl kaum. Gerade hier liest jeder einen/seinen Teil, den Rest eher nicht.


    Wenn Du einmal programmierst, wirst Du feststellen, dass das Lesen fremder Code mit das schwierigste ist. "Was hat er nur dabei gedacht!?" Wenn Du genau weißt was Du willst, dann bist Du auf dem eigenen Weg meistens schneller am Ziel.


    Albert

  • Quote

    pädagogisch wertvolle Tipps


    :D
    Wenn du nicht gerade vorhast als Programmierer/etc. Geld zu verdienen oder VDR dein Lebensinhalt ist, dann
    widme dich einem spannenderen Hobby.
    Denn um das einigermassen zu beherrschen wirst du sehr viel Zeit investieren muessen.
    Bei knapper Freizeit kannst das eh vergessen.
    Das Coden alleine wird dir ja auch nicht weiterhelfen, du musst auch Ahnung von der Materie/Standards/etc. haben (s. ATD)

  • Ich glaube nicht, dass man fremden source code mal einfach so liest.


    Der code von VDR selbst ist außerordentlich gut lesbar, so dass einige wenige hier u.U. den Sinn von kleineren Änderungen ohne test nachvollziehen können.
    Aber schon wenn man in einige Plugins hinein schaut, wird man schnell merken wie unterschiedlich auch programmiert wird.


    Was das Programmieren selbst betrifft, ohne eigene Praxis nützen dir Bücher nichts und schrecken mehr ab.
    Such dir ein konkretes, aber einfaches Beispiel, welches echten Nutzen für dich selbst abwirft. Am besten erst einmal ohne Abhängigkeiten von anderen Bibliotheken und kein Plugin.
    Versuch zu verstehen, welchen Zweck Präprozessor, Compiler und Linker erfüllen und wie man Fehlermeldungen beim compilieren als Hilfe zu Lösen des Problems nutzen kann.


  • :D
    Wenn du nicht gerade vorhast als Programmierer/etc. Geld zu verdienen oder VDR dein Lebensinhalt ist, dann
    widme dich einem spannenderen Hobby.


    Was ist denn das für ein Tipp... Ich finde programmieren kann durchaus auch spannend sein und man freut sich letztlich auch über das Ergebnis.


    ... und "Geld verdienen mit programmieren" ist eine ganz andere Schiene. Viele programmieren gerade deshalb in der Freizeit umsonst weil das Programmieren an sich durchaus eine spaßige Angelegenheit sein kann. Die oft sehr starren Regeln beim "Programmieren für Geld" sind dagegen nicht immer spaßig. Außerdem kann man sich in seiner Freizeit die Projekte aussuchen die einen interessieren.


    Quote


    Bei knapper Freizeit kannst das eh vergessen.


    Falsch. Ich habe mir alles selbst in der Freizeit beigebracht. Ich war schon immer gerne "handwerklich tätig" und da war es für mich selbstverständlich, dass ich Computerprogramme nicht nur benutzen sondern auch erstellen können will. Angefangen habe ich mit Q-Basic. Nicht weil das modern gewesen wäre sondern weil wir das im Informatik-Unterricht gelernt haben. Später Visual Basic bis Version 6.0. Von dem .NET-Kram habe ich nie viel gehalten und seit >9 Jahren nutze ich privat garkein Windows mehr womit sich VB erledigt hatte. Meine primäre Scriptsprache ist seitdem schon einige Zeit Perl 5. Wo nötig schreibe ich in C kleine Module selbst um die Sprache zu erweitern.


    Für C(++) finde ich vor allem wichtig, dass man die wesentlichen Grundlagen aus passender Lektüre entnimmt. Grundlegende Syntax für Routinen, Schleifen, Verzweigungen. Wie werden Variablen deklariert und definiert. Was sind Pointer und wie funktionieren sie. Wie wird Speicher reserviert und freigegeben, .... Weiter bin ich in meinem C++-Buch nie vorangeschritten weil mir das ganze irgendwann zu langweilig wurde. Mit den Grundlagen kann man aber schon erste Zusammenhänge in existierendem Code verstehen und erste Versuche machen, eigene Änderungen durchzuführen. Wenn es dabei Probleme gibt hilft zum einen oft eine Suche im Netz oder eine Frage in passenden Foren.

  • ... und "Geld verdienen mit programmieren" ist eine ganz andere Schiene. Viele programmieren gerade deshalb in der Freizeit umsonst weil das Programmieren an sich durchaus eine spaßige Angelegenheit sein kann. Die oft sehr starren Regeln beim "Programmieren für Geld" sind dagegen nicht immer spaßig. Außerdem kann man sich in seiner Freizeit die Projekte aussuchen die einen interessieren.


    Full ACK!


    Falsch. Ich habe mir alles selbst in der Freizeit beigebracht.


    Als ich mit meinem ersten IT-Job anfing konnte ich schon 5 Programmiersprachen und musste dann gleich mit einer anfangen, die ich noch nicht konnte ;). War aber kein Problem.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Quote

    Was ist denn das für ein Tipp... Ich finde programmieren kann durchaus auch spannend sein und man freut sich letztlich auch über das Ergebnis.


    Eigentlich sollte da an meinem Posting doch nichts misszuverstehen sein.


    Zitat <- Smiley -> meine Meinung


    Quote

    Falsch. Ich habe mir alles selbst in der Freizeit beigebracht. Ich war schon immer gerne "handwerklich tätig" und da war es für mich selbstverständlich,
    dass ich Computerprogramme nicht nur benutzen sondern auch erstellen können will. Angefangen habe ich mit Q-Basic.............


    Ne finde ich nicht , du liegst falsch.
    ..oder hast du bzw. ich doch nur eine "andere" Auffassung..


    Weitere Diskussion eruebrigt sich ja bei der Toleranz ;)


    Ps.: Ich koennte ja jetzt drauf rumreiten , dass gda mit seinem letzten Satz meine Meinug bestaetigt
    aber sie ist ja letzendlich auch nur (s)eine von vielen.