C für Dummies

Mit dem guten Gewissen, dass ich gerade jede Menge Trollfutter produziere, lege ich mal trotzdem offen, dass wir gerade so etwas wie eine Krise hatten bei FLP. Mal wieder. Daher auch der etwas lange Abstand zwischen diesem und dem vorherigen Post.

Der Anfang von unserem C-Abschnitt des Jahresplans begann zwar holprig aber ich hatte schon nach der zweiten Session das Gefühl, dass unser Konzept, mit etwas absurd Schwerem anzufangen, damit alles danach umso leichter erscheint, aufgeht. Das Gefühl hielt etwa eine Woche an und verschwand vor der vierten Session komplett.

Die ersten Programme erschienen mir noch relativ eingängig und ich war überrascht, wie lesbar der Code im Vergleich zu Assembler-Programmen ist. Aber die Konzepte, die ich nach einem geschriebenen oder optimierten Programm verstanden hatte waren nicht so tief verankert, wie es nötig gewesen wäre um das Buch stringent durchzuarbeiten. Die nächste Session war entsprechend zäh und anstrengend, weil die Konzepte in einer komplexeren Form angewandt wurden, ohne dass ich die simpleren Anwendungen verinnerlicht hatte. Das frustrierte ganz schön und machte das Programmieren langwierig, anstrengend und spaßfrei. Vor der letzten Session wurde mir klar, dass die Lust aufs Programmieren völlig verflogen war. Ich wusste gar nicht mehr so richtig, wieso ich das noch mache und dachte, ich könnte jetzt genauso gut auch aufgeben und würde nicht wirklich drum trauern.

Aber das war für mich kein Grund aufzuhören, sondern ein Signal dafür, dass sich etwas ändern musste. Also sprach ich Plom darauf an und teilte meine Sorgen so offen wie nur möglich mit. Ich glaube ich konnte das Problem darauf runterbrechen, dass ich mich unter Druck gesetzt fühlte. Irgendwie war das Ziel, Programmieren zu lernen dem Ziel, das Buch durchzuarbeiten gewichen. Zur Erklärung vielleicht einfach das Chatlog vom 12.Juni:

18:54 <Fotografiona> ich steh gerade vor dem ziemlich großen Problem, dass ich absolut keine Lust aufs Programmieren habe, weil ich bis jetzt an einer Unisache verzweifelt bin. Und irgendwie den ganzen Tag nur gestresst war. Und jetzt müsste ich zum Programmieren. Was ich aber immer weniger als eine schöne Sache sondern immer mehr als eine
18:54 <Fotografiona> ziemliche Herausforderung empfinde
18:55 <Fotografiona> unter Anderem weil wir einen Zeitplan haben
18:55 <Fotografiona> ich weiß selbst nicht genau was jetzt das beste wäre
18:55 <Fotografiona> einfach trotzdem zum Programmieren treffen?
18:55 <Fotografiona> hoffen, dass es gut läuft? kurze pause?
18:56 <Fotografiona> aber irgendwas läuft schief. irgendwie
18:56 <Fotografiona> vielleicht auch nur bei mir
18:57 <Fotografiona> ich hab seit Sonntag so viel drüber nachgedacht
18:58 <Fotografiona> und ich merke, dass es immer weniger das ist, was ich mir darunter vorgestellt habe. Oder dass es immer weniger in mein leben passt. Wie rum weiß ich nicht. Aber ich wünschte, manchmal, wir würden uns zum Programmierenlernen treffen und nicht zum Buch-schaffen
18:58 <Fotografiona> es ist einfach zu viel
18:58 <Fotografiona> es brauchte nur zwei Sitzungen bis ich wieder das Gefühl hatte, den Faden zu verlieren
18:59 <Fotografiona> Und ich glaube ich hab nur zugestimmt, sich so schnell wieder zu treffen, um dich zufriedenzustellen oder zu beruhigen
19:05 <plomlompom> Oh! Verstehe.
19:05 <plomlompom> Na was hältst du davon, wenn wir den Rest der vier Monate “C” einfach ohne das Buch machen?
19:06 <plomlompom> Hab zwar keinen Plan, was wir dann genau machen sollten in der Zeit, aber wir können ja auch einfach improvisieren.
19:06 <Fotografiona> puh. klingt nach ner guten Idee
19:06 <plomlompom> Denn das “zum Programmierenlernen treffen und nicht zum Buch-schaffen” klingt nach einem sehr guten Punkt.
19:07 <Fotografiona> ist ja an sich vielleicht gar nicht dumm, die Programme aus dem Buch zu nehmen. aber vielleicht verstehe ich mehr, wenn du es mir einfach erklärst
19:07 <plomlompom> Wollen wir uns trotzdem heute treffen?
19:08 <plomlompom> Dann können wir ja statt Übungen machen einfach überlegen was wir die restlichen zweieinhalb Monate “C” machen ;)
19:08 <Fotografiona> ich bin ziemlich im eimer und abgenagt. ich hab einfach angst, dass es blöd werden könnte
19:08 <Fotografiona> und reizbar bin ich leider auch :/ wie du vielleicht schon gemerkt hast ;)
19:08 <plomlompom> Ach naja wir können einfach entspannt beisammen sitzen und mit erlehmann rum-improvisieren, ohne Druck.

So weit die Vorbesprechung. Lustigerweise änderte sich an dem Abend absolut gar nichts. Wir programmierten wieder fast zweieinhalb Stunden am Stück an einem Programm aus dem Buch rum, lasen den Text dazu und ich verstand so gut wie gar nichts. Also naja, ich verstand schon die Funktionsweise aber konnte nicht vorausschauend das Programm beschreiben und auch nicht alle Details der Funktionsweise verinnerlichen und abrufen. Plom gab sich durchaus Mühe dabei, mir das Programm nahezubringen und erlehmann redete einen Tick mehr topic-related dazwischen als sonst. Zum Einen war ich aber etwas abgelenkt von einem bunten Menschen-Auflauf aus KünstlerInnen mit Trompeten und Nerds in Feuerwehranzügen, zum Anderen war ich wie im Chatlog beschrieben schon total ausgebrannt, bevor ich dort ankam. Und darüber hinaus hatte ich mich kein Stück auf den Abschnitt aus dem Buch vorbereitet. Meine Augenringe hängten gefühlt bis zum Boden und danach war ich nur noch viel frustrierter und erschöpfter.  Wenn diese Session etwas gebracht hat, dann die Erkenntis, dass wir dringend etwas ändern mussten.

Wir sprachen auch darüber, als ich schon mit dem Kopf auf der Tischkante lag. Wie können wir die zukünftigen Sessions gestalten? Wir wollten auf jeden Fall das Buch kicken. Unsere Technik, dass ich einfach das Buch vorlese und wir nach jedem Abschnitt Fragen klären klingt zwar plausibel aber war so dröge wie ineffektiv (und anstrengend!) Darüber hinaus ist das Buch von Kernighan und Ritchie einfach nicht für AnfängerInnen gedacht. Es scheint eher für Leute zu sein, die entweder den Vorgänger B oder Fortran oder *hust* Assembler oder Anderes beherrschen. Ich hätte, um dabeizubleiben immer wieder das Erlernte wiederholen müssen, damit die Session effizient und lehrreich waren. Ich hätte mich auch vorbereiten sollen, damit wir nicht immer nur 5 Seiten in drei Stunden schaffen. Aber zum Wiederholen fehlt mir momentan einfach die Zeit. Zwischen Unitexten am Fließband, Seminaren, Musik, Herzmschmerz, Forschung, wenig Schlaf und Freunden blieb bisher wenig Platz und Nerv dafür, sich nochmal ein paar Stunden mit dem Buch und den Programmen auseinanderzusetzen. Aber darin lag wohl auch das weitere Problem – ich konnte das Buch eh nicht alleine bearbeiten. Dafür ist es einfach nicht Anfänger-freundlich genug. Der einzige Lernfortschritt musste also in den Sessions stattfinden und das mit teilweise zwei Wochen Abstand.

Das klingt jetzt alles so furchtbar, wie ich es aus Mitleidsgründen beabsichtigt habe. Aber nicht zu vergessen bleibt, dass wir nicht ohne Grund eine kleine Lerngruppe haben und dafür werben, es uns gleichzutun. Denn ich muss jetzt nicht anfangen, das Assembler-Seminar zu schwänzen, mich nicht darauf einstellen, den Kurs nächstes Jahr nocheinmal zu besuchen und mich auch nicht hinterklemmen, und tagein tagaus versuchen, wieder aufzuschließen, um doch nen Schein abzugreifen und in der Regelstudienzeit zu bleiben. Denn dank unseres überlegenen Lernkonzeptes sind wir ja flexibel! \o/

Also haben wir beschlossen, in Zukunft nicht mehr mit dem Buch “C” zu arbeiten. Denkbar ist es, weiterhin Struktur und evtl. Beispielprogramme zu übernehmen, aber in einer anderen Geschwindigkeit und mit mehr Zwischenstufen. Vielleicht auch mal mehr eigene Programmierideen umsetzen. Weniger Zeitdruck. Und überhaupt. Ich glaube ich sollte mich mal wieder in der Uni blicken lassen.

Das letzte Mal als ich da war, hab ich z.B. auch endlich das für mich hinterlegte Buch  “C Programmieren von Anfang an” abholen können das mir ein Freund leihte, der die Leidenschaft für’s Schädelvermessen mit mir teilt. Das war gestern und es hat mich über ein vierstündiges Kulturtheorien-Seminar gerettet! Es ist tatsächlich ein sehr hilfreiches, gut geschriebenes Buch, mit vielen Erklärungen, für AnfängerInnen, mit ganz ganz kleinen Schritten. Das erste Programm wird Schritt für Schritt erklärt, das nächste hat nur ein paar kleine Zusätze u.s.w. Ich kann es nur empfehlen, für alle, die mit C anfangen wollen.
Ich weiß ehrlich gesagt nicht, weswegen alle einem das Buch von Kernighan und Ritchie ans Herz legen. Weil es so… authentisch ist? Immerhin haben die Beiden C erfunden. Aber im Gegensatz zu dem neuen Buch war “C” weitgehend wertlos.

Jetzt freue ich mich jedenfalls wieder aufs Programmieren und bin sehr zuversichtlich. Ich habe auch plötzlich Lust, die 20 Seiten die ich in 10 Minuten Ubahnfahren durchgelesen hab so bald wie möglich nachzuprogrammieren. Und extra ein paar Stunden meines Tages dafür zu investieren. Ich bin wieder neugierig und zuversichtlich und der so fatale wie ausdauernde Gedanke, es hätte was mit mir und irgendwelchen grundlegenden, unveränderlichen Charaktereigenschaften (zu dum) zu tun, dass ich keine nennenswerten Fortschritte mehr gemacht habe, ist wie verflogen.

Um meine (und unsere) aus dem Scheitern gewonnenen Erkenntnisse mal kompakt zu formulieren:

Es ist definitiv von Vorteil, das Lernformat flexibel zu gestalten.
Es hilft nichts, sich oder anderen zu hohe Lernziele zu stecken. Dabei geht nur der Blick dafür verloren, was man tatsächlich für Fortschritte macht.
Anfänger werden Anfängern.
Probleme beim Lernen sollten sofort angesprochen werden, damit zeitnah Lösungen gefunden und Frustrationen auf beiden Seiten vermieden werden.
Das C-Buch ist kacke. Das Neue ist cool.

Und noch eine Sache. Dass ich diesen Artikel verfasst habe ist auch ein wenig befreiend für mich. Wenn ich offen damit umgehe, dass mir das Programmierenlernen nicht ganz so leicht fällt heißt das für mich persönlich auch, es zu akzeptieren. Und für die LeserInnen womöglich auch. Manchmal habe ich den Verdacht, dass ein falscher Eindruck in diesem Internet von mir kursiert. Mir fällt das mit dem Programmierenlernen wirklich verdammt schwer. Ich kann ne Menge Dinge. Ich kann wenige Dinge gut und nichts wirklich richtig gut. Außer Tofu braten vielleicht.

Mir fällt das Programmieren nicht zu. Keineswegs. Es ist anstrengend, immer wieder eine ziemliche Herausforderung und schwierig. Klar, ich hab mit Assembler angefangen. Aber ich bin keine Assemblerprogrammiererin. Ich weiß, was Assembler ist und kann kompilierten Code einigermaßen nachvollziehen. Ich wende es aber nicht an und ich verstehe fremden Assemblercode nicht ohne Weiteres. Ich habe dafür ne Menge über Computerarchitektur und -funktionsweise gelernt. Das heißt aber nicht, dass ich alles verstanden habe, was mir beigebracht wurde. Ich habe auch oft Konzepte verstanden, könnte sie aber vermutlich nicht korrekt und ohne Verwechslungen wiedergeben.
Klingt komisch, ist aber so. Und völlig in Ordnung. Ich habe von Januar bis April mehr gelernt bei FLP als ich ohne FLP gelernt hätte. So einfach ist das.
Aber mir ist zuletzt bei der Sigint, wo wir ein wenig über unsere Vorgehensweise und Motivation sprachen, aufgefallen, dass sich das Bild, das wahrgenommen wird und wie es tatsächlich läuft nicht ganz entsprechen. Bei dem Vortrag schien ich mehrere Menschen damit zu irritieren, dass ich immer wieder auf meine Unfähigkeiten hinwies. Ich glaube, sie haben einfach etwas Anderes erwartet. Und das hat mich sehr nachdenklich gemacht.
Ich will keinesfalls den Eindruck erwecken, dass mir das alles leicht fällt. Das wäre die falsche Botschaft und würde nicht stimmen. Wenn ich in diesem Blog zum Programmierenlernen motivieren möchte, ist es nicht zielführend wenn ich vorgebe, das wäre eine einfache Angelegenheit. Das kann es für manche sein, für mich gilt das nicht. Ich habe andere Stärken. Ein Musikinstrument lerne ich im Nullkommanichts. Eine neue Programmiersprache – das dauert.
Ich will keinesfalls Leute vom Programmieren abschrecken. Und auch wenn es vielleicht so wirkte, empfinde ich mich ja keinesfalls als scheiternd. Denn meine eigentliche Leistung ist für mich total offensichtlich – War sie aber nicht für das Publikum: Ich habe durchgehalten! Ich habe nicht den Mut verloren und beiße mich eben dadurch. Ich finde das gerade weil es so schwer ist gar nicht mal so übel.

Und so wie es mir zuletzt mit C ging wäre ein Aufgeben verdammt naheliegend gewesen. Aber ich möchte weitermachen und mich lieber mit dem Lernprogramm auseinandersetzen als aufzuhören. Die Motivation ist ja – spätestens jetzt – wieder da. Nicht zuletzt, weil das Blog auch oder vor allem dazu dienen soll Andere zum Programmierenlernen zu ermutigen. Und jetzt freu ich mich wie ein junges Reh auf die Arbeit mit dem neuen C-Buch!
(Und das trotz vier Stunden Schlaf, Rückenschmerzen, Konzert heute Abend und Semesterendspurt ;)

About these ads
Getaggt mit

45 Gedanken zu “C für Dummies

  1. LeSpocky sagt:

    Also nochmal, nachdem der erste Versuch eines Kommentars scheiterte …

    Der Vergleich mit dem Lernen eines Musikinstruments ist gut, auch wenn Du das vielleicht gar nicht beabsichtigt hast. Am Anfang sieht man faszinierende Ergebnisse (Musik, Programme) und wie man das selbst macht, ist irgendwie Magie. Dann zeigt einem wer so die ersten Schritte und man leckt Blut. Danach folgen lange Jahre Üben, Frustration und Lichtblicke bevor man das Instrument oder das Programmieren beherrscht. Beides lernt man nicht in zwei Wochen und es macht auch nicht immer Spaß, bevor man nicht ein gewisses Skill-Level erreicht hat. Aber auch danach kann man immer noch neue Dinge lernen und sich weiter verbessern.

    Zu den Büchern ist zu sagen, dass es einfach verschiedene Bücher für verschiedene Stände des Lernens und Beherrschens gibt. Ich persönlich finde beispielsweise C in a Nutshell ist das überhaupt beste C-Buch. Aber: programmieren lernt man mit dem Buch nicht, man muss es schon können um den Wert des Buches zu erkennen. Was Du brauchst ist halt kein Buch, das eine Referenz darstellt oder Feinheiten der Sprache C erklärt, sondern eins, was Dir Programmieren erklärt am Beispiel von C. Die Programmiersprache ist für das Ziel nämlich eigentlich gar nicht so wichtig. Die Konzepte könntest Du ebenso mit Perl oder Java lernen.

    Der dritte Punkt ist: wenn Dir die akademischen Beispiele im Buch zu blöde oder nutzlos vorkommen, such Dir ein Problem, wo Du gern ein Programm hättest, was das löst und dann schreib Dir das Programm. Im Gegensatz zu den Beispielen aus den Büchern kannst Du dann hinterher auch noch was damit anfangen. Das hält die Motivation höher und programmieren lernst Du praktisch nebenbei. ;-)

    • Ja, ich denke, das ist etwas was ich gerne mal aus dem Auge – dass auch ich Fortschritte mache. Wenn auch scheinbar klein, so doch beständig. Ich habe ja auch nach 10 Jahren Geigenunterricht und danach immer wieder Momente gehabt wo die Erkenntis, einen Fortschritt gemacht zu haben sehr plötzlich kam. Das ist beim Programmieren womöglich sogar etwas besser zu bemerken als beim Musizieren.

      Hmmm ich bin mir beim zweiten Punkt nicht so sicher. Ich habe ja mit Assembler angefangen, denn das Ziel war bspw. Grundlagen der Prozessorarchitektur zu verstehen. Und ja, jetzt lerne ich C aber nicht for the heck of C sondern um weiter Programmieren zu lernen (und zu verstehen). Und zwar jetzt mit einer Abstraktionsschicht mehr. Der Plan ist, danach Python zu erlernen. Das gibt mir gute Werkzeuge in die Hand, mit denen ich selbstständig neue Sprachen dazulernen oder erlernte ausbauen kann. Also ja, du hast einerseits Recht, andererseits gibt es eben verschiedene Konzepte des Programmierens, insofern ist die Sprache die ich erlerne nicht ganz zu vernachlässigen ;)

      Jetzt lerne ich erstmal mit dem Buch von Erlenkötter. Das ist grad passend und einfach aus dem Grunde, dass es
      a) C behandelt
      b) auch für Nulpen ist
      c) langsame Schritte geht.

      Oh und danke für deine doppelte Mühe

      • Jürgen A. Erhard sagt:

        Ich finde ja die Reihenfolge exakt komplett falsch, aber… wer Schmerzen mag :D
        Was ich aber auf jeden Fall raten würde: selber Ziel setzen (“Ich würde gern lernen, $SOWAS zu programmieren”). Wegen der Erfolgserlebnisse, die schaffen Motivation.

    • japetos sagt:

      Hi,

      kann da LeSpocky nur zustimmen. Es ist völlig “wurscht” mit welcher Programmiersprache man anfängt. Im Prinzip reicht es sich das gewünschte Programm als Pseudocode vorzuschreiben und man muss dann nur noch in der gewünschten Sprache die Funktionen suchen.

      Also nicht anderes, als von einer Sprache in die andere zu übersetzen.
      Viel Spaß noch. Euer Ansatz gefällt mir.

  2. Dentaku sagt:

    Das ist der richtige Weg. Programmieren lernen ist eben nicht ganz einfach — aber eben auch nicht unmöglich (oder magisch oder eine Geheimwissenschaft).

    • Oh, danke für den Link. Ja, ich kann auch einfach 10 000 Stunden investieren zum ultimativen Erfolg. So machen das wohl die Erfolgreichen hab ich gehört.

      • Marc van Woerkom sagt:

        Kommt auf dein Ziel an. Willst Du Orchestermusiker werden, oder gar Komponist oder reicht es Dir am Lagerfeuer ein Lied erkennbar spielen zu können?

        Die Aussage von dem Norvig Text ist insofern tröstlich, dass man kein Genie sein muss, insofern ernüchternd, dass halt höhere Level mit viel Arbeit verbunden sind.

  3. gabriel sagt:

    Gute Entscheidung das K&R-Buch wegzuschmeißen. Das ist sicherlich eines der schlechtesten C-Bücher für Anfänger. Ich hatte vor Schätzungsweise 14 Jahren mal angefangen mir das zu gemüte zu führen, um C zu lernen und habs auch recht bald wieder weggelegt. Zu dem Zeitpunkt konnte ich wohlgemerkt schon etwas Programmieren (Basic, Pascal) und fand es trotzdem zu schwierig…

    Aus dem Stehgreif könnte ich leider kein Buch für Anfänger empfehlen, weil ich C/C++ rudimentär in der Schule gelernt hab, und es dann erst später durch learning by doing richtig verstanden hab.

    Ich persönlich hätte auch jemandem, der Programmieren zum Spaß lernt, sicherlich nicht C empfohlen, sondern eher erstmal eine Sprache mit etwas flacherer Lernkurve — aber ich würde ja auch nicht mit Assembler anfangen ;-)

    ciao,
    Gabriel

    • Oh, schön zu hören :)
      Ja, keine Ahnung weswegen alle immer so dafür schwärmen. Konnte mir noch keineR wirklich beantworten.
      Aber mit dem Buch von Elrenkötter fahre ich ganz gut derzeit.

      • Marc van Woerkom sagt:

        Kerningham und Richie sind Wissenschaftler der Bell Labs in New Jersey gewesen.

        http://de.wikipedia.org/wiki/Bell_Laboratories

        Ein Kollege von mir war dort zu Gast, er hat mir die Einrichtung als Uni ohne Studenten beschrieben. Dort wird geforscht. Die Jungs schreiben dann halt im wissenschaftlichen Stil, wie er in der Informatik und Mathematik üblich ist.

        Das liegt leider nicht jedem. Hat aber grosse Vorteile, wenn man es beherrscht, deswegen wird der Stil ja so praktiziert.
        Leider wird die naturwissenschaftlich/technische Literatur ja nicht als Literatur öffentlich geschätzt. Aber das ist ne andere Diskussion.

        Wenn man die Denkart und auch den Formelapparat beherrscht, wird vieles einfacher. Aber ist eine Investition, ähnlich wie ein Musiker in die Beherrschung der Schreibweise von Noten, Partituren etc. investieren muss, um eine dem Problemgebiet besser geeignete “Sprache” zu beherrschen, als die Alltagssprache.

  4. Anne sagt:

    Ich mag ja die Head First Bücher von O’Reilly, weil die nicht so verbohrt sind und einen anderen didaktischen Ansatz haben.

    Würd ich mir mal angucken. Allerdings muss man das auch mögen und über die Qualität der einzelnen Bücher kann ich auch nichts sagen, da sie ja auch von unterschiedlichen Autoren geschrieben wurden.

    • Wu Chuyun sagt:

      Ich hab vor 10 Jahren mal mit new Java-Buch angefangen. Hab kürzlich mit “Head First Java” angefangen und mag es wegen seines kreativen Ansatzes sehr. Ich bin ein sehr visueller Typ und kann so auch sehr abstrakte Aspekte gut verstehen, wenn sie mit nem Bild gekoppelt werden. Evtl. gilt das auch für dich, Fiona? Schau dir mal deren Serie an… Liebgruss

  5. DVC sagt:

    Kleiner Tip für einen mehr spielerischen Zugang zum Programmieren: MUDs (Multi User Dungeon)s. Das sind Multiuser Online-Rollenspiele*, textbasiert und meisst in einem sehr leicht verständlichen, objektorientierten C-Dialekt (LPC) programmiert. Das gute daran ist wie gesagt der spielerische Zugang: Man schreibt etwas Code, läd ihn und springt hinein, probiert es aus, riecht und fühlt dran etc. Weil im Hintergrund die Spielerfahrung steht und so eine direkte Rückkopplung zur Fantasie hergestellt wird, verliert das Programmieren an sich den “Horror vor der reinen Abstraktion”, meint: das verkopfte Kombinieren, Durchdenken und Herleiten von Lösungswegen für Probleme, die man sich auch erstmal dafür ausdenken muss (was zugegeben für manche Nerds gerade das Reizvolle darstellt ;-) ).

    * Ein Bsp. zum antesten wäre http://ff.mud.de (Final Frontier, deutschsprachige SF-Welt, besteht seit 1996 oder so, ist frei und kostenlos). Mehr Infos allgemein zu MUDs und/oder Zugang zu alternativen Welten findest du u.a. hier: http://www.mud.de/

    Weiterhin viel Erfolg!

  6. Stefan sagt:

    Ich war bisher ja schon erstaunt, dass Du solange die Motivation hast hoch halten können. Mich würde niemand freiwillig dazu bringen Monate lange Übungsaufgaben ohne größeren Nutzen einzutippen. Ich denke, wenn es nicht so viele Möglichkeiten geben würde, kleine Programme zu schreiben, die nützlich sind, hilfreich oder einfach nur Spaß machen, hätte ich das Programmieren nach der Schulzeit aufgegeben. Insofern bin ich ganz bei Spocky, dass man sich eine Aufgabe suchen sollte, die man versucht zu Programmieren.

    Außerdem kann ich nur empfehlen sich ein Internet-Forum zum Thema programmieren in C. Ich glaube ich hab nirgends so viel gelernt wie in solchen Foren. In einem guten Forum werden täglich diverse Programmierprobleme besprochen von einfachen Anfängerproblemen über besondere Spezialfälle, bis zu kniffligen Aufgaben. Und selbst nach Jahren erlebt man es, dass jemand eine besonders raffinierte Lösung kennt, auf die man selber noch nicht gekommen ist.

    Leider kann ich hier kein solches Forum empfehlen. Das Forum in dem ich zuletzt beteiligt war hat sich leider aufgelöst und ich hab noch kein neues gefunden. Gut ich hab auch nicht allzu intensiv gesucht. Leider musste ich feststellen, dass viele Foren sehr Anfänger unfreundlich sind. Bei einfachen Problemen wird da nicht mehr geholfen, obwohl das für die Profis sehr leicht möglich wäre. Ich mag solche Foren nicht. Ich denke dass man dort nichts lernen kann.

    • Ich schau mal auf krautchan.net/prog nach :3
      Dich würde wahrscheinlich niemand dazu bringen, weil du andere Absichten hättest als ich. Für mir gab es immer wieder Motivationsschübe, weil ich dieses oder jenes Hintergrundwissen gelernt, verknüpft, angewendet oder verstanden habe. Ob ich meine eigenen kleinen Programmierideen umsetze oder nicht ist wirklich erstmal unwichtig. wertvoller ist für mich derzeit Erkenntnisse über Prozessorarchitektur und Funktionsweise zu gewinnen.

      Btw. So ein Blog das Tausende lesen ist eine ganz gute Motivation. Oder sagen wir – das Aufhören wird nicht sehr niedrigschwellig gestaltet.

  7. Björn sagt:

    Also Du willst es sicher nicht hören, aber ich finde den Ansatz falsch. Ich kann mich z.B. nicht erinnern jemals Programmierkonzepte “gelernt” zu haben in dem Sinne, daß ich sie auswendig lernen oder wiederholen musste. Und ich denke das liegt wirklich an der vorgehensweise: wenn das Ziel ist den Inhalt eines Buches zu lernen, läuft es wohl zwangsläufig auf wiederholen und auswendiglernen hinaus. Ich würde stattdessen echte Programmieraufgaben empfehlen die ihr euch selber setzt. Dann schaut man im Buch nach, was man dafür braucht. So lernt man die Konzepte ganz nebenbei.

    Das ist auch nicht Programmierspezifisch, ich hatte z.B. beim Photoshop den Eindruck es ist genauso: einfach Funktionen pauken bringt gar nichts, erst bei einem richtigen Projekt lernt man ein paar Dinge dazu.

    Oder das Musikbeispiel: immer nur Tonleitern üben bringt denke ich auch nicht viel.

    Notifikationen für Antworten schalte ich mal ab weil wahrscheinlich sowieso nur genervte Reaktionen kommen. Bin nur zufällig wegen dem SPON-Artikel nochmal vorbeigesurft.

    • Du nervst nicht. Dein Kommentar ist einfach egal, ich kann keinerlei Nutzen daraus ziehen. Du argumentierst mit “ich lernte so und so” und dann mit “so lernt man”. Und beides nicht besonders stichhaltig erklärt.

      Ich kann dir aber gerne nochmal erklären wie es ist – mich interessierte der Kram, den ich mit Assembler gelernt habe. Bspw. Fetch-Execute-Cycle. Deswegen bin ich noch hier, falls dir das nicht aufgefallen ist. Ich werde schon noch ein paar Dinge lernen, sobald ich eigene Projekte verwirkliche. Aber das hat Zeit. Und in Assembler hätte es einfach keinen Sinn ergeben. Bei C ist das anders. C will ich lernen und anwenden. Dafür musste ich allerdings ein geeignetes Buch finden, das systematisch vorgeht und mir die Grundlagen beibringt, denn -nicht vergessen- ich besitze keinerlei Programmierkenntnisse außer der wenigen Programme die ich in Assembler las und umschrieb.
      Wenn ich in drei Monaten immer noch hier bin, kannst du es auch einfach als Gewinn abstempeln, dass ich noch hier bin. Denn dann interessiert mich der Scheiß höchstwahrscheinlich noch.

  8. Marc van Woerkom sagt:

    1. Ich habe bisher sehr gute Erfahrungen damit gemacht, die Bücher der Erfinder der jeweiligen Sprache zu lesen. Pascal von Wirth, C von K&R, C++ von Stroustrup, Java von Gosling et al, Erlang von Armstrong (altes Buch) usw.
    2. Ich habe oben Kritik zum K&R gesehen. Es ist ein super Buch, aber zweifellos auch von dem Stil, wie er bei einem mathematisch/naturwissenschaftlichen/ingenieurtechnischen Werk üblich ist. Dieser Stil liegt leider nicht jedem. Das ist schade. Es hat ja seinen Grund, warum Mathematiker und Informatiker so schreiben. Sie sind in den Grundlagen gut trainiert und einen knappen, sachlichen Stil gewöhnt. Da nutzt man den Platz zwischen den Buchdeckeln schon anders.
    3. Es gibt eine enge Beziehung zwischen Mathematik und Informatik. Wir haben gerade Turings 100., er war der erste, der einen universellen Computer (also eine programmierbare Maschine, die alle berechenbaren Programme berechnen kann) mathematisch modelliert hat. Einmal in dieses Model gegossen, wurde dadurch der Computer und die Programmierung mit den Mitteln der Mathematik analysier- und beweisbar. Dieses Know-How ist einer der wesentlichen Unterschiede zwischen Programmierern und Informatikern. Interessanterweise beschreiben diese mathematischen Modelle sehr einfache Maschinen, z.B. die Registermaschinen eine ganz simple Assemblersprache (Register hochzählen, runterzählen, Vergleich mit Sprung je nach Ausgang). Da seid ihr dann wieder beim Assembler.
    4. Ich empfehle die Auseinandersetzung mit LISP in der Gestalt des Buches Structure and Interpretation of Computer Programs (SICP), das geht in die o.g. Richtung, bei der das Programmieren sehr mathematisch wird, bis hin zu PROLOG, wo die Berechnung nur ein Seiteneffekt eines automatischen Beweises ist.

    Falls ihr Euch langweilt. :-)

    • Das Problem mit K&R war nicht der Stil sondern dass sie Vorkenntnisse voraussetzten, die ich nicht hatte. Sicherlich ist das Buch daher auch knapper.
      Das neue Buch das ich jetzt verwende geht kleinere Schritte und orientiert sich am Wissensstand von AnfängerInnen, die höchstens mal etwas Fortran programmiert haben.
      Über Lisp haben wir auch schon nachgedacht und werden evtl. ein paar Sessions dazu einplanen, wenn es die Zeit hergibt. Aber vermutlich erst nach Python. Langeweile haben wir keineswegs :) Nur Interesse.

  9. laihro sagt:

    Hi, bin über den Spiegelartikel auf diesen Blog gekommen und selbst Softwareentwickler. Leider habe ich den Zweck dieses Unterfangens noch nicht ganz verstanden. Im Prinzip ist doch jede Sprache gleich und es wäre empfehlenswert mit den einfachsten Sprachen anzufangen, wenn man Programmieren lernt, damit man erstmal die Konzepte und den Datenfluss versteht. (Gut wäre z.B. Java, Pascal, Labview, Python oder eine der diversen Skriptsprachen) Ich kann jedenfalls keine Bevormundung durch Kompiler erkennen und sehe auch keinen Sinn darin, zuerst die physikalischen und elektronischen Grundlagen zu lernen, bevor ich eine Mikrowelle benutze. Assembler braucht man heute nur noch für Reverse Engineering. Generell ist die Frage, ob euer Endziel Reverse Engineering sein soll oder nicht. Wenn es darum geht, die Kontrolle über die eigenen Daten zu behalten, sollte die Antwort ja lauten. Leider fallen dann alle Webanwendungen für euch aus, da Ihr da keinen Zugriff auf den Code habt. Wenn es darum geht die Kontrolle über die Interpretation von Daten zu erhalten, lautet die Antwort nein. In diesem Fall muss das Ziel zunächst freier Informationsfluss (Zugang zu ‘Rohdaten’) sein. Welche Programmiersprache dann für die Aufbereitung und Analyse der Daten verwendet wird ist egal.
    Ansonsten finde ich den Tip gut, mit einer praktischen Anwendung anzufangen. Wenn es unbedingt Assembler sein muss, bietet sich die Programmierung eines Embedded Systems an, dass dann irgendwas Nützliches macht (Messen, Steuern, Regeln). Ansonsten würde ich eine Webanwendung programmieren. Das geht schnell und ist einfach. Schnell und einfach ist sowiso das Stichwort. Die meisten Programmierprojekte scheitern am Ende daran, dass der Code zu komplex wurde und man zulange daran herumwurschtelt. Programmierung ohne automatisierte Tests und Refactoring sind heute nicht mehr zeitgemäß und genau damit würde ich anfangen.

    • Marc van Woerkom sagt:

      Wenn man jetzt einfach nur eine Programmiersprache lernt begibt man sich nur auf eine Ebene tiefer, ist aber immer noch abhängig, diesmal von den Paradigmen und Designentscheidungen der Entwickler der Programmiersprache und des verwendeten Entwicklungs- und Betriebssystems. Man hat dann mal einen Weg der Programmierung gelernt, es fehlt aber das Wissen um z.B. einen Compiler zu realisieren oder ein Betriebssystem oder ein Netzwerkprotokoll oder einen Rechner zu realisieren. Es ist ein notwendiger Schritt, aber für ein tieferes Verständnis wird man wohl Zeit in der Größenordnung eines Studiums investieren müssen. Da sind wir dann wieder bei der Frage nach dem erreichbaren Ziel unter der Maßgabe eines begrenzten Zeitrahmens.

      • laihro sagt:

        Reverse Engineering, Compilerbau, die Entwicklung von Betriebssystemen oder die Implementierung eines Netzwerkstacks sind letzlich nur spezielle Programmieraufgaben und zwar so spezielle, dass es z.T eigene Studienrichtungen in der Informatik dafür gibt. Sowas muss und will man in 99,99999999% der Fälle nicht machen. Man könnte es aber tun, wenn man schon programmieren kann und sich dann noch die theoretischen Grundlagen aneignet, wie bei jeder anderen Programmieraufgabe auch.
        Es ist für einen Anfänger nicht wichtig, wie Maschinencode aussieht oder wie ein Kompiler diesen erzeugt. Für einen Anfänger ist wichtig, die Konzepte hinter Variablen, Prozeduren und Schleifen zu verstehen. Und diese Konzepte untescheiden sich nicht, egal ob man mit Assembler, C, Java oder einer Skriptsprache programmiert. Lediglich die Umsetzung der Konzepte unterscheidet sich zwischen diesen Sprachen.
        Wenn es darum geht programmieren zu lernen, fällt es den meisten Anfängern schon schwer zu erfassen, wie man seinen Quellcode sinnvoll strukturiert, was Datentypen sind, wie man Daten strukturiert ablegt und wie man sie von einem Ausführungsschritt zum nächsten ‘transportieren’ kann. C ist was das angeht eine der unintuitivsten Sprachen der Welt. Mein Spruch zu C und C++ ist immmer: In C gibt es 100 verschiedene Wege ein und dieselbe Sache zu implementieren, aber nur einen richtigen Weg. Als Anfänger ist es wie ein Labyrinth und nach Murphy probiert man zuerst die 99 falschen Wege. Bis man das raus hat, ist die Motivation wahrscheinlich flöten gegangen.
        Jede Sprache hat ihr Anwendungsgebiet, für das sie geeignet ist. Der Unterschied in der Eignung liegt aber, von Sprachen wie LISP und PROLOG abgesehen, meist nur in den mitgelieferten Bibliotheken. Auf abstrakter Ebene bleibt es bei allen Sprachen gleich, wie man programmiert und welche Konzepte man erfassen muss, um programmieren zu können. Ich denke nicht, dass es wirklich darauf ankommt, eine Sprache zu wählen, die einem Kontrolle über jedes kleinste Detail bietet, weil man sich dann auch um jedes Detail kümmern muss und die großen Konzepte nicht mehr erfassen kann.

        • Marc van Woerkom sagt:

          Das hört sich jetzt aber sehr nach

          “Kennt man eine imperative objekt-orientierte nicht-nebenläufige Sprache, kennt man alle”

          an. :-)

          Vergleich mal Java mit Erlang. Auf dem ersten Blick kleine Sprachen, mit jeweils einer VM und einer großen Bibliothek jeweils. Aber was für Unterschiede in der Ausgestaltung, nur weil das Designziel ein anderes war

  10. 1. April sagt:

    Mir wurden die augen geöffnet. Ich habe mein auto verschenkt weil ich nicht von einem hersteller bevormundet werden möchte und gehe seitdem nur noch zu fuss. Das gleich gilt für mein fahrrad. Morgen mache ich mich auf den weg in den urlaub nach neuseeland. Natürlich überwiegend schwimmend.

  11. CCoder sagt:

    Hi,

    bin ebenfalls über den Spon-Artikel hergekommen und finde die Idee sehr gut. Ich hoffe sie wird von Erfolg gekrönt ;) !

    Ich finden den Ansatz den ihr fahrt sehr sinnvoll. Über Assembler zu C, zu ggf. Skriptsprachen und von da aus den Rest bewerten. Nun ist natürlich die Frage ob man sich da wirklich tief in Assembler einsteigen muss oder ob da nicht ein paar “Skizzen” reichen. Aber im Prinzip ist es eine gute Idee.

    Bei einer Sache möchte ich aber dem Artikel widersprechen: K&R “The C Programming Language” ist das beste Buch dazu. Nicht für richtige Anfänger selbstverständlich. Aber es ist und bleibt das beste C-Buch, wenn man es “richtig” lernen will. Vermutlich ist es das beste wenn man C lernt mit einem “Anfängerbuch”, ein wenig Praxis erlangt und dann das Buch noch einmal in die Hand nimmt.

    Ausserdem freue ich mich jetzt schon über den vermutlich in 2 Monaten hier erscheinenden Artikel über Zeiger und dynamische Arrays. Ich gehe von einigen Schimpfworten in der Überschrift aus :D .

    Der Autorin möchte ich aber ans Herz legen, vorerst bei C zu bleiben und sich von den “einfachen” Skriptsprachen fernzuhalten. Sie vernebeln nur den Blick auf die wirkliche Funktionalität, was ja der Idee der Aktion hier widersprechen würde. Es gibt einen schönen Satz dazu: “Skriptsprachen machen triviale Aufgaben noch trivialer, und schwere Aufgaben noch schwerer” ;)

    Den “Helfern” der Autorin möchte ich vielleicht noch den Tip geben, auch mal über Haskell oder Erlang zu reden. Nur um den Horizont zu erweitern ;) . Und am Ende sollte natürlich eine “Unterrichtsstunde” über YACC/LEX (bzw. BISON/FLEX) stehen.

    Lasst euch nicht entmutigen und viel Glück für die Zukunft.

    • Marc van Woerkom sagt:

      Wer C lernt, sollte sich auch mal einen Blick auf das UNIX Betriebssystem gönnen. Die stehen ja in einem direkten Zusammenhang.

      Dazu würde ich empfehlen, mal ein BSD Unix, z.B. FreeBSD in einer virtuellen Maschine zu installieren oder gleich auf einen freien PC.

      Dort kann man dann die Erfahrung machen, dass man den gesamten Quellcode des Betriebsystems (Kernel, Unix Programme wie cp und mv etc.) sowie aller Anwendungsprogramme auf der Maschine hat und daraus eine neue Version bauen kann. Also von hinten bis vorne, wirklich alles. Wer mag kann dann auch ändern.

    • Hi, Danke für die Tips. Gut mal zu hören, weswegen weiterhin K&R empfohlen wird. Mir wurde bisher nur erklärt, dass ich vermutlich an ihrem wissenschaftlichen Stil gescheitert bin. Naja.
      Aber kannst du nochmal erläutern, weshalb man es damit “richtig” lernt?

      • CCoder sagt:

        K&R stellen C auf eine sehr einfache Art dar, was C im Kern ist. Eigentlich gibt es nur sehr sehr wenig Konstrukte in dieser wunderbaren Sprache, die man dann eben miteinander kombiniert. “Höhere Sprachen” haben viel mehr Konstruktionen, viel mehr Sonderfälle, Ausnahmen und Standardbibliotheken. C ist einfach und gradlinig. Und das macht das Buch auf einfache Weise klar.

        Beispiel: Es gibt Pointer, man kann dereferenzieren, und es gibt verschiedene Zuweisungsoperatoren und Inkremetierungen.

        Das Zitat aus dem Buch dazu: “‘*ip += 1′ increments what ip points to, as do ‘++*ip’ and ‘(*ip)++’” …. und fertig. Kein Schnickschnack eben. Und man sieht sofort was man tun kann, und was man lieber lassen sollte.

        Weiterhin ist anzumerken, dass K&R sofort auf das Unix-Interface eingehen. Wie “Marc van Woerkom” sehr schön angemerkt hat, ist C untrennbar mit Unix verbunden und man erkennt die Stärke durch Einfachheit von C eben vor allem auf diesem System. Es gibt Files … und das war’s eigentlich auch schon. Und ergo wird in K&R auch nicht über mehr gesprochen.

        Ich hoffe mein obiger Post ist klarer geworden. Nichtsdestotrotz bleibt der Punkt bestehen, dass man ggf. nicht damit “Programmieren an sich” lernen sollte.

        Viel Glück weiterhin und nicht vergessen … everything is a file ;)

  12. vandyk sagt:

    Nettes Projekt…

    1. Laß dich nicht “bequatschen” ;-) , wenn es in Richtung hardwarenahe bzw. Systemprogrammierung geht, ist C die Sprache der Wahl. (Mit Java kannst du weder die CD Schublade öffnen, noch auf irgendwelche Adressen zugreifen usw. ) Übrigens kann man in C immer noch Inline Assembler oder “wie das heißt” programmieren.

    2. Der K&R ist “SCHROTT” ;-) . Damit bin ich auch nicht klar gekommen (und das ging nicht nur mir so! Wissen haben und Wissen vermitteln sind ebend 2 Paar Schuhe!).
    Hier mal etwas für den “Hausgebrauch” und zum Studententarif: http://openbook.galileocomputing.de/c_von_a_bis_z/
    Nicht unbedingt das akademische Standardwerk aber es hilft Code ” erst einmal zum laufen zu bringen” und darauf kommt es an. Im übrigen finden sich jede Menge Tutorials oder Scripte (auch von mehr oder weniger verständlichen Hochschuldozenten…) im Netz.

    3. Kleines (mini) Projektchen suchen iss gut, so was zum hegen und pflegen und zum dranrumspielen, aus- und umbauen… zum wachsen lassen. Man könnte ja alles was man so dazu lernt, mit einfließen lassen…

    4. LERNE DURCH “KLAUEN”! Schau dir offenen Quellcode von anderen an (und gerade dafür gibt es für C reichlich!). Was einfaches, kein riesen Projekt … Nutze ihn für das kleine Projektchen! Assimilier es, füge das Wissen dem deinen hinzu…

  13. 1. April sagt:

    Sehr empfehlenswert ist auch das buch “Code: The Hidden Language of Computer Hardware and Software”. Uhhh! Ahhh! Nein! Charles Petzold! Windows! Das Böse!

    Mir Übrigens völlig unverständlich wieso das Buch nie auf deutsch erschienen ist

  14. Lu sagt:

    Richard Buckland. IMHO didaktisch der beste Prof der Welt.
    Falls ihr dem Englischen mächtig seid. Viel Spass

  15. Jon sagt:

    Ich hab auch bei SPON von eurem Experiment, so will ich es mal nennen, gelesen und find das sehr interessant – auch wenn ich persönlich bezweifel, dass das Nicht-Verständnis von Computerinnereien und Programmieren in eine fatale Abhängigkeit führt, zumindest nicht mehr als die Unkenntnis von Wirtschaft (ich bin selbst Wirtschaftswissenschaftler und kann über die Vorstellung vieler zu diesem Thema nur den Kopf schütteln), Ingenieurwesen oder der Juristerei (für die Letzteren fehlt mir leider auch jegliches Verständnis).

    Meinen tiefsten Respekt hast du jedenfalls für die Entscheidung bottom-up mit Assembler zu starten, das tun die wenigstens, auch wenns eigentlich der beste Weg ist – Hut ab.

    Zum Thema Bücher: Ich kann nur aller wärmsten empfehlen englischsprachige Literatur zu verwenden, die meisten deutschen Bücher bzw. Übersetzungen können mit diesen schlicht nicht mithalten – was nicht heißen soll, dass alle englischsprachigen Bücher unbedingt gut wären. Und wie laihro schon schrieb, wenn es um etwas mehr als das Verstehen rudimentärer Programme und Funktionsweisen gehen soll und du einen Einblick in die Arbeitsweise von guten (professionellen) Programmierern (professionell heißt nicht unbedingt gut) erlangen wollt, kann auch ich nur wärmsten Clean Code empfehlen, außerdem Martin Fowler und etwas spezieller die Gang of Four.

    Wie einige Vorredner schon schrieben, programmier unbedingt etwas das dich motiviert, egal obs ein Programm zum Auffinden doppelter Dateien, ein Tool zum Anlegen von iTunes-Bibliotheken entsprechend der Ordnerstruktur, in die man die Musik mühevoll einsortiert hat, Vier Gewinnt auf der Konsole oder was auch immer ist. An dieser Stelle will ich auch mal auf Arduino und Netduino hinweisen, zwei Plattformen die ideal sind um das Programmieren zu erlernen und mit denen sich selbst kleine Spielkonsolen u.ä. basteln lassen (so zum Beispiel: http://nwazet.com/pix6t4).

    Falls du nach C immer noch nicht aufgeben magst, dann solltest du dir unbedingt eine funktionale oder objektorientierte Sprache ansehen, zum Beispiel Haskell, OCaml bzw. die OCaml-Kopie von Microsoft namens F# (Informatiker sollten niemals(!) Dogmen befolgen ;-) ) und für die objektorientierte Seite C# (das (inzwischen) bessere Java und die wohl im Moment beste objektorientierte Programmiersprache, allerdings auch von Microsoft, gibts aber auch für Linux/Mac). Hauptsache du kommst nicht auf den schrägen PHP-Pfad.

    PS: Entschuldigung, das mit Python hatte ich irgendwie überlesen, mir gefällt die Sprache (ziemlich subjektiv) gar nicht, aber als Multiparadigmen-Sprache als nächster Schritt sicherlich keine ganz falsche Wahl, eigentlich ziemlich gut. :)

    Auf jeden Fall weiterhin viel Erfolg und mehr Spaß als Frust beim Lernen (ich frage mich bis heute, wie ich die ersten zehn Jahre überstanden habe).

    Beste Grüße

    Jon

  16. [...] Vorgaben aus irgendwelchen Büchern oder Anleitungen abgetippt. Eine Zeile aus einem Chat-Protokoll in einem Artikel von Fiona zeigt das beispielhaft: Hab zwar keinen Plan, was wir dann genau machen sollten in der Zeit, aber [...]

  17. tabf sagt:

    Ich bin auch über den Spiegel auf euch aufmergsam geworden. Erstmal Hut ab das Ihr euch das selbst beibringen wollt.

    Ich habe vor ein paar Jahren auch mit programmieren angefangen. Einfach aus Interesse. Als Hintergrund habe ich eine naturwissenschaftliche – technische Ausbildung. Allerdings ohne Programmierkenntnisse. Ich habe mir das Programmieren dann autodidaktisch aus Büchern beigebracht. Dafür habe ich lange überlegt und im Internet geschaut, womit ich anfangen soll. Letztendlich habe ich mich dann für C zum Anfangen entschieden. C ist eigentlich die Mutter vieler höher Programmiersprachen und deshalb findet man in vielen anderen Sprachen Konzepte aus C wieder. Außerdem wenn man sich den TIOBE Index anschaut: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html findet man C immer recht weit oben.

    Zuerst muß ich mal sagen, was beim Programmiern lernen am wichtigsten ist, ist Praxis. Programmieren lernt man nur durch Programmieren. Einfach mit kleinen Übungsaufgaben anfangen. Dann kleine eigene Projekte realisieren, auf der Konsole. Das wird dann schon von selbst immer anspruchsvoller.

    Als erstes Buch habe ich auch den Erlenkötter durchgearbeitet. Das war ein sehr guter Einstieg. Danach habe ich mir “C als erste Programmiersprache” vorgenommen. Ich finde ein sehr gutes Buch in deutscher Sprache. Das Buch geht sehr stark auf die Zeiger in C ein. Ein unglaublich wichtiger Teil der Sprache C. Eigentlich geht in C ohne Zeiger gar nichts. Außerdem sind die Zeiger ein Grund warum C so effektiv ist. Kurzum man muß Zeiger verstanden haben um mit C was anzufangen. Aber keine Angst jeder Neuling braucht da eine Weile zu. Und dieses Buch geht da sehr gut drauf ein. Außerdem gibt es in dem Buch Übungsaufgaben um das gelernte umzusetzten und das Verständniss zu vertiefen. Mir haben solche Programmieraufgaben immer sehr geholfen.

    Das bereits Empfohlende “C von A bis Z” habe ich dann auch nochmal gelesen. Auch ein gutes Buch. Allerdings fehlen mir da die Übungsaufgaben. Ich fand es ganz gut zur Ergänzung für Netzwerkprogrammierung und cgi. Das sind Themen die sonst nur selten oder gar nicht in deutscher Lit angesprochen werden.

    Danach habe ich mich dann C++ zugewand. C++ erweitert C um einige Konzepte. Das wichtigste ist die Objektorientierung (kurz OOP). Ohne OOP geht in moderner Softwareentwicklung fast gar nichts. Alle höheren Programmiersprachen (Java, JavaScript, Phyton, Ruby….) sind Objektorientiert. Man wird also, wenn man ernsthaft programmieren will nicht um OOP rumkommen. Wenn man C ein bischen kann und vielleicht schon kleinere Konsolenprogramme mit C realisiert hat, kommt einem C++ bei der OOP bischen entgegen, weil man sich nicht gleich mit einer komplett neuen Sprache und Syntaks auseinandersetzten muß. C++ ist halt einfach eine Erweiterung von C. Für C++ gibt es auch viele Bücher. Ich habe das Buch: “C++ von A bis Z” gelesen. Fand es leider nicht so gut wie das entsprechende Buch für C. Es fehlen wieder Übungsaufgaben. Dafür deckt das Buch fast alle wichtigen Konzepte der Sprache C++ ab und gibt, meiner Meinung nach, eine gute Einführung in die OOP. Für die Praxis habe ich mir ein Buch mit Übungsaufgaben für C++ besorgt.

    Wenn Ihr dann einigermassen C++ könnt (Um es wirklich zu beherschen, braucht man vermutlich Jahrzehnte). Habt ihr eine wirklich mächte Programmiersprache zur Hand zu der es viele frei Zusatzbibiotheken gibt und mit der sich fast alles vernünpftig realisieren läst. Außerdem ist mir aufgefallen, daß mir die Einarbeitung in Java relativ leicht gefallen ist wenn ich an C und C++ gedacht habe. Einige Konzepte ähneln sich.

    Ich wünsche euch weiterhin viel Erfolg beim lernen und werde euren Blog interessiert weiterverfolgen.

    Grüße
    tabf

  18. c3p sagt:

    Das Buch habe ich damals auch benutzt ist eigentlich ganz cool, aber man will schnell mehr. Für den Anfang aber ganz gut denke ich mal.

  19. Ulf sagt:

    Erschreckend, mit wieviel Halbwissen und völlig vorbei an allen didaktischen Faustregeln hier die örtliche Kellerbevölkerung “argumentiert”.

    F#? Lisp? Haskell? GoF und Clean Code? OCaml? BSD Code angucken? Was zum Teufel! Schon C (mal von Assembler ganz abgesehen) ist für fachfremde Einsteiger meiner Meinung nach nicht die richtige Wahl. Wie Fiona selbst bemerkt hat, macht es sehr schnell keinen Spaß mehr, weil es (trotz mäßig hoher Abstraktion) kompliziert ist und jeden Fehler gnadenlos bestraft.

    Generationen von Informatikstudenten wurden und werden an deutschen Unis erfolgreich mit Pointern, Arrays of Pointer of Pointer, typedef und pulsierenden Speichern gequält mit dem exzellenten (haha) Ergebnis, dass die meisten mit horrenden oder gar keinen Programmierkenntnissen die Uni verlassen.

    Wenn dann alle keine Lust mehr haben, wird dann mit Prolog, Lisp, Haskell und Konsorten auch noch das letzte bißchen Lust gekillt.

    Wer ohne jede Vorkenntnis Programme verstehen und selbst schreiben möchte, wird mit Clean Code, GoF und co. genau nichts anfangen können. Das Gleiche gilt für funktionale Sprachen wie Haskell oder Exoten wie F#, deren hoher Abstraktionsgrad sogar die meisten studierten Informatiker überfordert.

    Wichtig ist genau eine Sache: Spaß haben!

    Einigen Leuten macht es Spaß, sich zu quälen oder wahnsinnig (bis unsinnig) kniffelige Rätsel zu lösen. Die können gern mit C beginnen. Softwareentwickler und Informatiker sind für ihre Leidensbereitschaft bekannt, weshalb sie sich früher oder später auch mit C auseinandersetzen werden.

    Für alle anderen dürfte eine zeitgemäße, vor allem objektorientierte Sprache die richtige Wahl sein. Das hat vor allem den Vorteil, das man von Anfang an in Objekten denkt und nicht durch die Imperativität von C und Konsorten “versaut” wird. Das Fehlen einer manuellen Speicherverwaltung, von Adressen, Pointermagie und co. ist dabei keine “Schwäche”, sondern eine Stärke. Es hilft, sich auf das Anwendungsgebiet dieser Sprachen konzentrieren zu können: Ein Problem schnell und einfach zu lösen.

    Das Lösen von Problemen macht Spaß und genau darum geht es. Wenn du Programme schreiben lernen und Wissen über die Vorgänge in deinem Rechner lernen möchtest, dann nimm, was dir Spaß macht.

    Falls du faustischen Wissensdurst entwickelst, dann nimm C, aber beschwere dich nicht darüber, dass es kompliziert ist. Es gibt einen Grund, warum man Informatik studieren kann und die meisten Entwickler diese oder eine ähnliche Ausbildung genossen haben. Softwareentwicklung ist, wie jedes andere Handwerk auch, nichts für Laien.

    Natürlich kann jeder irgendwie kochen oder backen, das macht die meisten Leute aber noch lange nicht zu Köchen oder Bäckern. Trotzdem haben viele Spaß beim Hobbykochen. Dafür braucht es einen Herd, einen Topf und eine Pfanne, keinen Salamander, keinen Konvektiomaten und kein Bonbrett.

    • Marc van Woerkom sagt:

      Ich finde Deinen Beitrag sehr unsachlich bis beleidigend.
      .
      Der Hinweis auf den BSD Quellcode (oder den von einem anderen UNIX) an einen C Lernenden, ist durchaus vergleichbar mit dem Hinweis auf Goethes Faust an jemanden, der die deutsche Sprache lernt.

      • Ulf sagt:

        Da hast du absolut Recht. Gleichzeitig ist es die wohl ungeeigneteste Methode, um Deutsch zu lernen. Es lernt auch niemand Englisch mit Originaltexten von Shakespeare.

        • Marc van Woerkom sagt:

          Selbstverständlich sind Klassiker Bestandteil des jeweiligen Unterrichts, bei mir persönlich Kafka statt Goethe, Shakespeare kam aber vor.

          Natürlich lernt niemand ausschliesslich daraus. Das ist ein Element in einer umfassenden Ausbildung.

          Aber das ist vermutlich ein kritischer Punkt hier. WIll jemand ein Sujet in 30 Tagen lernen, oder in 5 Jahren, oder in 10.000 Stunden. Sieht ja eher nach einem begrenzten Zeitbudget aus.

    • CCoder sagt:

      > Erschreckend, mit wieviel Halbwissen und
      > völlig vorbei an allen didaktischen
      > Faustregeln hier die örtliche Kellerbevölkerung
      > “argumentiert”.

      na dann werde ich doch mal im selben Tonfall antworten …

      > Generationen von Informatikstudenten wurden
      > und werden an deutschen Unis erfolgreich mit
      > Pointern, Arrays of Pointer of Pointer, typedef
      > und pulsierenden Speichern gequält

      … und zwar frei nach Theo de Raadt: “gtfo, learn coding and come back” :D

      Einer Sprache die für mehr oder weniger jedes Betriebssystem, einer riesigen Anzahl von Servern und noch mehr Userland-Programmen eingesetzt wird, irgendwie “zu komplizierte” oder “unsinnige” Konstrukte vorzuwerfen ist eine interessante Realitätsverweigerung. Vielleicht liegt es nicht an der Sprache, sondern an den Lehrern oder sogar dem Lernenden ;) .

      Viele Grüße

  20. Dirk Moebius sagt:

    ich gebe ulf teilweise recht.
    Es ist auch eine Frage der Motivation, des “was will ich damit”. Und auch mir haben solche “C/Java/ALGOL in 30 Tagen”-Buecher bisher nur wenig gebracht.
    Der K&R ist gut als ein Nachschlagewerk, aber nicht als Lehrbuch. Er ist ein Werkzeugkasten – und Werkzeugkaesten nutzen einem nur dann was, wenn man weiss, was man bauen will. Der Zange ist es egal, ob Du an einem Bett baust oder an einer Latrine. Und C ist das Werkzeug, mehr nicht.
    Programmieren gelernt habe ich weniger durch Lehrbuecher als durch Neugier. WIe zum Geier bilde ich das, was ich selber denke, ab in Code – um ein Sudoku zu loesen, ein Mastermind. Klingt einfach, ist es auch.
    Irgendwann lief mir eines dieser Zeitungsraetsel ueber den Weg
    _ lotto +
    boccia =
    spiele
    und mein erster Versuch belegte alle Buchstaben gleichermassen mit Null und war fertig :-)

    Aber wenn man sich in sowas erst mal festbeisst… dann lernt man auch den Werkzeugkaten zu nutzen. Weil man was bauen will.

  21. Michael sagt:

    Hej Fiona, tolles Projekt, jetzt nicht aufgeben!

    Ich hatte (und habe) beim programmieren lernen praktisch vor jedem größeren Fortschritt ein totales Tief und eine Sinnkrise. Und wenn ich an meine Erfahrungen mit C und C++ denke, da war das Tief bodenlos. Das hab ich auch so versucht wie Du, aus einem Lehrbuch und mit den darin enthaltenen Beispielen.

    Und deshalb, auch wenn es hier schon oft stand und Du das nicht so richtig annehmen magst: ich könnte mir ebenfalls vorstellen, dass Du neue Motivation aus einem größeren Programmierprojekt ziehen könntest, vielleicht zusammen mit deinen Mitstreitern. Ein Spiel (wie ein MUD) kann eine tolle Motivation sein, wenn einem so etwas liegt, aber eigentlich entscheidend ist, dass das Projekt mit einem ganz persönlichen Sinn ausgestattet ist. Ich kenne auch keinen Programmierer, der nicht unterschreiben würde, dass man Programmieren erst beim programmieren lernt. Und die richtige Sprache ergibt sich dann auch aus dem konkreten Projekt.

    Aber egal wie, bleib dran, Du bist schon so weit gekommen! Schlimmer als C wirds nicht. ;)

Kommentar verfassen... (Verschwörungstheoretiker, Flauscher und Paternalisten bitte draußen lassen)

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Verbinde mit %s

Follow

Bekomme jeden neuen Artikel in deinen Posteingang.

Schließe dich 74 Followern an

%d Bloggern gefällt das: