Forum: PC-Programmierung C programmieren lernen


von Max N. (krachi)


Lesenswert?

Hi!

Folgendes, ich wollte im Hinblick auf mein Studium (Elektro- und 
Informationstechnik) schonmal ein bisschen das Programmieren üben, um 
nicht ne totale Bruchlandung hinzulegen, wenn es losgeht.

Mich interessiert sowohl was man an Software damit basteln kann, als 
auch die Beeinflussung von Mikrocontrollern.

Anfangen wollte ich mich C, im Studium kommt dann C++ und Java.
Habe mir "C - Programmieren von Anfang an" gekauft und die ersten 
Kapitel durchgearbeitet. Hab z.B. ein simples Umrechnungsprogramm 
geschrieben. Habe die Funktionen scanf, printf und ein Additionsprogramm 
verinnerlicht.

So jetzt meine Frage: wie kann man C besonders gut lernen? Reicht es, 
sich mit nem Buch hinzusetzen und ein bisschen was zu üben? Ich mach 
bald mal Praktikum und werde auch dort ein bisschen Programmieren. 
Sollte man das lieber unter Zuhilfenahme eines Tutors lernen, oder gehts 
auch gut alleine?
Hatte die Idee, mal nen Primzahlenfinder zu programmieren, sobald ich 
Strings und true-false-Befehle kann.

Wie finde ich den Einstieg in die Mikrocontrollerprogrammierung?
Habe mir das:
http://www.amazon.de/Lernpaket-Mikrocontroller-programmieren-Burkhard-Kainka/dp/3645651357/ref=sr_1_4?ie=UTF8&qid=1367670870&sr=8-4&keywords=mikrocontroller

bestellt. Meint ihr, das nützt?

von mikro (Gast)


Lesenswert?

Max Nit schrieb:
> Wie finde ich den Einstieg in die Mikrocontrollerprogrammierung?
> Habe mir das:
> http://www.amazon.de/Lernpaket-Mikrocontroller-pro...

Das hat mit programmieren wie in C nix zu tun. Da wird per Tasten ein 
Programm programmiert.



Denke du wärst mit einem Steckboard, einen Programmer, einen 
Mikrocontroller und dem AVR Studio besser aufgehoben. Gibt auch viele 
Tutorials im Internet (z.b. 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial)

von Garden (Gast)


Lesenswert?

Wenn Du nach z.B. "Mikrocontroller-Kurs" googelst, wirst Du sicher 
fündig.

von Brater (Gast)


Lesenswert?

Das kommt auf dein Studium an. Wir hatten zwar viel Programmierung aber 
auch viel Softwareentwicklung. Bei einem Mikrocontroller hast du eher 
übersichtliche Programme am Anfang. Außerdem hast du immer noch die 
"Unsicherheitsquelle" Hardware beim uC. Daher: lerne C erstmal normal 
auf dem PC und dann später uC.

Wie ein Lehrer mal zu uns sagte: schwimmen lernt man nur, wenn man ins 
Wasser springt und nicht durchs Zuschauen. Daher meine Meinung: viele 
Aufgaben machen! Damit bekommst du ein Gefühl für die Sprache und übst 
gleichzeitig das Denken zum Lösen von Aufgaben. Denn das fehlt vielen! 
Das Programmieren ist eher Mittel zum Zweck. Allerdings braucht man 
erstmal einen Lösungsansatz bevor man etwas programmieren kann. Wenn man 
bereits programmieren gelernt und schon etwas Erfahrung hat, sollte dies 
jedoch nicht so schwer fallen und man kommt auch leichter in eine neue 
Sprache.

Mit einem Buch kann man bis zu einem gewissen Grad die Grundlagen gut 
aneignen. Das Problem ist jedoch, dass dabei trotzdem irgendwann 
Spaghetticode rauskommen KANN. Daher ist es auch immer sinnvoll, wenn 
man jemand Erfahrenes fragen kann, wo sich die Codequalität verbessern 
lässt. Das kann ein Tutor sein (allerdings bringt das nichts, wenn er 
ein Semester mehr Erfahrung hat als du...).
Ansonsten kann ich aus persönlicher Erfahrung sagen, dass Lernen ohne 
größere Zuhilfenahme zwar anstrengender und zeitaufwändiger ist aber der 
Lerneffekt für mich war immer größer gewesen als wenn der Tutor/Prof 
alles erklärt (z.B. bei mir bei Mathe oder Grundlagen E-Technik).

Persönlich kann ich die Bücher von Herold empfehlen. Das C-Buch ist sehr 
gut und es gab/gibt? auch ein Buch mit Aufgaben samt Lösungen.

Am Anfang am schwierigsten sind wahrscheinlich Zeiger. Diese solltest du 
dir genau zu Gemüte führen und damit viel experimentieren. Das Ganze in 
Verbindung mit Arrays und Zeiger-Zeiger... wenn das sitzt, ist C 
eigentlich kein Problem mehr. Der Rest mit Klassen und Referenzen von 
C++ kriegt man eigentlich ohne größere Probleme drauf, wenn man gut C 
kann. So Geschichten wie Vererbung, Polymorphie wird sich wahrscheinlich 
niemand freiwillig über ein Buch anarbeiten. Und dafür gibt es ja auch 
noch Vorlesungen ;)

von Dennis S. (eltio)


Lesenswert?

Was willst du überhaupt erreichen?

Du sagst, du willst dich auf das Studium vorbereiten in dem C++ und Java 
gelehrt wird. Warum machst du das dann nicht sondern willst dich mit C 
"belasten"? Nichts gegen deine Entscheidung, aber sehr zielgerichtet ist 
das nicht.

Du wirst (mindestens) zwei Sachen im Studium merken:
1) Du hast keine Zeit ALLES zu machen.
2) Die Programmiersprachen C / C++ / Java werden dein kleinstes Problem! 
;-)

Gruß Dennis

von eule (Gast)


Lesenswert?

project euler

von Rolf M. (rmagnus)


Lesenswert?

Dennis S. schrieb:
> Warum machst du das dann nicht sondern willst dich mit C "belasten"?

Die "Gelehrten" streiten sich noch darüber, ob es, wenn man C++ lernen 
will, sinnvoll ist, vorher C zu lernen oder nicht.

von Dennis S. (eltio)


Lesenswert?

Rolf Magnus schrieb:
> Die "Gelehrten" streiten sich noch darüber, ob es, wenn man C++ lernen
> will, sinnvoll ist, vorher C zu lernen oder nicht.

Das mag sein und wollte ich auch nicht diskutieren! Fakt ist: wenn er 
sich für das Studium vorbereiten will, dann sollte er das zielgerichtet 
tun.

Gruß
Dennis

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dennis S. schrieb:
> Fakt ist: wenn er sich für das Studium vorbereiten will,
> dann sollte er das zielgerichtet tun.

Und das bedeutet für Dich jetzt genau was?

Ist es nicht "zielgerichtet", wenn man sich mit C beschäftigt, um sich 
danach mit C++ zu beschäftigen?

von Alexander F. (alexf91)


Lesenswert?

eule schrieb:
> project euler

Ist zum Programmiereinstieg eher weniger geeignet. Besonders spätere 
Aufgaben benötigen zum Teil relativ umfangreiche Kenntnisse im Bereich 
Algorithmen und Mathematik.

von Dennis S. (eltio)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Und das bedeutet für Dich jetzt genau was?
>
> Ist es nicht "zielgerichtet", wenn man sich mit C beschäftigt, um sich
> danach mit C++ zu beschäftigen?

Nein, ist es nicht. Wer die zeitliche Strukturierung eines Studiums 
heutzutage kennt, kann das nachvollziehen. Das Ziel und damit auch die 
Erklärung was "zielgerichtet" ist steht ja im ersten Post des TO.

Gruß Dennis

von Alex (Gast)


Lesenswert?

Für dieses Studium brauchst du weniger Programmierbücher sondern 
gaaaaaaaaanz viele Mathematikbücher, speziell höhere Mathematik.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Dennis S. schrieb:
> Rufus Τ. Firefly schrieb:
>> Und das bedeutet für Dich jetzt genau was?
>>
>> Ist es nicht "zielgerichtet", wenn man sich mit C beschäftigt, um sich
>> danach mit C++ zu beschäftigen?
>
> Nein, ist es nicht

Da C im Wesntlichen eine Untermenge von C++ ist und praktisch jedes
C++-Lehrbuch sowieso mit dieser Untermenge beginnt, ist es kein
zusätzlicher Zeitaufwand, erst C und dann den Rest von C++ zu lernen.

Wenn man diese beiden Lernabschnitte klar voneinander trennt, indem man
bspw. zwei Lehrbücher (eins für C und eins für C++) nacheinander
durcharbeitet, kann man am Ende beide Sprachen. Leute, die von Anfang
auf C++ getrimmt wurden, haben erfahrungsgemäß Schwierigkeiten, wenn sie
später reine C-Programme schreiben sollen.

Deswegen ist das Vorgehen von Max meiner Ansicht nach völlig in Ordnung.

> So jetzt meine Frage: wie kann man C besonders gut lernen? Reicht es,
> sich mit nem Buch hinzusetzen und ein bisschen was zu üben?

Ohne Buch geht fast gar nichts. Und wie so oft macht auch beim
Programmieren erst die Übung den Meister. Der ganz wichtige dritte
Punkt: Schau dir Programmcode von anderen (erfahreneren Programmierern)
an und versuche die Art und Weise zu verstehen, wie dort ein Programm
strukturiert und umgesetzt wird. Da wirst du viele Aha-Erlebnisse
haben.

von Paul Baumann (Gast)


Lesenswert?

Yalu schrob:
>Schau dir Programmcode von anderen (erfahreneren Programmierern)
>an und versuche die Art und Weise zu verstehen, wie dort ein Programm
>strukturiert und umgesetzt wird. Da wirst du viele Aha-Erlebnisse
>haben.

Ich habe beim Betrachten von C-Quelltexten immer ein 
"Oh,oh,oh..."-Erlebnis
statt eines Aha-Erlebnisses.

;-)
MfG Paul

von Yalu X. (yalu) (Moderator)


Lesenswert?

Paul Baumann schrieb:
> Ich habe beim Betrachten von C-Quelltexten immer ein
> "Oh,oh,oh..."-Erlebnis
> statt eines Aha-Erlebnisses.

Vielleicht, weil du über die beiden anderen genannten Schritte
(Durcharbeiten eine C-Buchs und Üben, Üben, Üben) etwas schnell
hinweggegangen bist? ;-)

von Stefan R. (srand)


Lesenswert?

Yalu X. schrieb:
> ist es kein
> zusätzlicher Zeitaufwand, erst C und dann den Rest von C++ zu lernen.

Naja, man sollte dann halt sehr früh im Buch aufhören. Sobald die 
C-Standardbibliothek eingeführt wird (und printf kommt doch 
typischerweise ganz vorne), ist man mit einem C++-Buch besser bedient.

von troll (Gast)


Lesenswert?

Paul Baumann schrieb:
> Ich habe beim Betrachten von C-Quelltexten immer ein
> "Oh,oh,oh..."-Erlebnis
> statt eines Aha-Erlebnisses.
Das ist doch kein Wunder. Ein Dichter braucht Text, Text, C ist (für 
Lowlewelkram) ja auch eher eine Zeichensprache. Bascom rulez! scnr :-)

von Paul Baumann (Gast)


Lesenswert?

Ich schiebe rechts, ich schiebe links
und verknote noch mit "UND"
dann stürzt mir meine Kiste ab
-ich seh's mit off'nem Mund...

"Ich möchte keine Typen casten!"
schlag ich mit Mühe in die Tasten
Setze alles "volatile"
Trotzdem gibt's der Fehler viele...

Ein Sammelsurium von Sonderzeichen
kann nur zum Mitleid mich erweichen
und nach einer kurzen While
schmeiß' ich vom Rechner diese Teile...

Ich kann mich nicht an "C" gewöhnen,
lieber nehm' ich PureBasic
..und ich will's auch nicht beschönen:
Auch der Berliner sagt: "Dit weeß ick!"


In diesem Sinne
Paul

von Dussel (Gast)


Lesenswert?

Paul Baumann schrieb:
> Ein Sammelsurium von Sonderzeichen
> kann nur zum Mitleid mich erweichen
Es gibt eine Lösung: 
http://de.wikipedia.org/wiki/Shakespeare_Programming_Language

Auch für alle, die lieber Texte schreiben, als programmieren.

von Paul Baumann (Gast)


Lesenswert?

@Dussel

Das ist ja noch einen Zacken schärfer als C, aber es ist in C 
geschrieben.
Insofern wundert mich überhaupt Nichts daran...
;-)
MfG Paul

von Klaus I. (klauspi)


Lesenswert?

troll schrieb:
> Paul Baumann schrieb:
>> Ich habe beim Betrachten von C-Quelltexten immer ein
>> "Oh,oh,oh..."-Erlebnis
>> statt eines Aha-Erlebnisses.
> Das ist doch kein Wunder. Ein Dichter braucht Text, Text, C ist (für
> Lowlewelkram) ja auch eher eine Zeichensprache. Bascom rulez! scnr :-)

Endlisch normale Leute! SCNR

Aber jetzt ernsthaft, lerne Programmieren egal mit welcher Sprache. Da 
Du ja anscheinend sehr proaktiv bist und die Ergebnisse noch lieber vor 
dem steinigen Weg siehst.

Lese einfach mal locker über die hier veröffentlichten 
Projektbeschreibungen drüber und überlege, wie Du ein für Dich 
interessantes Projekt selbst machen würdest.

Jetzt weißt Du z.B. wie ich persönlich am besten etwas neues lernen 
kann. Wie lernst Du eigentlich am besten?

von Diodenes (Gast)


Lesenswert?

Hi Paul,

wenn Du's etwas ästhetischer magst als C, dann schau Dir doch mal 
"INTERCAL(-72)" an.

Ich kenne keine weitere Sprache, in der so wunderhübsche Befehle wie 
IGNORE, FORGET, TRY AGAIN oder GIVE UP zur Verfügung stehen. Und in der 
zur Vermeidung von derbem GOTO ein liebenswürdiger COME FROM-Befehl 
implementiert ist - alles übrigens gerne mal mit einem freundlichen 
PLEASE garniert ;-)

Wenn INTERCAL aber doch zu prosaisch ist, dann wirst Du vielleicht eher 
mit dem doch sehr puristischen "Brainf*ck" glücklich :-)

http://de.wikipedia.org/wiki/Brainf*ck

von Paul Baumann (Gast)


Lesenswert?

@Diodenes

Ne, laß mal gut sein....
;-)
Ich komme gut mit Bascom für AVR-Kontroller und mit Pure-Basic für
den "Großrechner" aus.

MfG Paul

von Paule H. (stk500-besitzer)


Lesenswert?

Programmieren heisst doch nicht einfach mal loscoden.
Programmieren ist mMn das Umsetzen einer Problemlösung in einen 
Algorithmus.
Die Programmiersprache ist da erst mal nebensächlich.
Das ist dann nur noch Vokabel- und Grammatik lernen.
Und dann gibt es da noch die unretgelmäßigen Verben, also Besonderheiten 
der einzelnen Programmiersprachen, die man auswendig lernen muss.

von Paul Baumann (Gast)


Lesenswert?

Stk500-Besitzer schrub:
>Programmieren ist mMn das Umsetzen einer Problemlösung in einen
>Algorithmus.
>Die Programmiersprache ist da erst mal nebensächlich.

Da gebe ich Dir vollkommen Recht.

>Das ist dann nur noch Vokabel- und Grammatik lernen.

"Nur noch" ist das Problem....
Eine Sprache ist m.E. umso leichter zu lernen, je mehr sie einer
"natürlichen" Sprache enspricht. Man hat schon genug mit dem Finden
des Algorithmus zu tun und will sich dann nicht zum Dank mit der
abartigen Syntax einer der "modernen" Sprachen herumschlagen müssen.

MfG Paul

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Paul Baumann schrieb:
> Eine Sprache ist m.E. umso leichter zu lernen, je mehr sie einer
> "natürlichen" Sprache enspricht.

Gibts denn sächsisch als Programmiersprache für dich ?

von Simon B. (nomis)


Lesenswert?

Paul Baumann schrieb:
> Eine Sprache ist m.E. umso leichter zu lernen, je mehr sie einer
> "natürlichen" Sprache enspricht. Man hat schon genug mit dem Finden
> des Algorithmus zu tun und will sich dann nicht zum Dank mit der
> abartigen Syntax einer der "modernen" Sprachen herumschlagen müssen.

Hrm - ich zweifele.

Alle gesprochenen Sprachen haben eine unglaubliche Flexibilität, wie man 
gewisse Dinge ausdrücken kann, was aber gleichzeitig die Schwierigkeit 
erhöht, die Semantik eines Satzes zu erkennen.

Versuche mal einen mathematischen Text zu lesen und zu verstehen, der 
vor der Erfindung der mathematischen Notation geschrieben wurde. Obwohl 
das viel näher an der gesprochenen Sprache ist, ist es quasi unmöglich, 
dass man ohne Erfahrung mit solchen Texten erkennen kann, was da 
eigentlich gemeint ist.

Ich glaube bei Programmiersprachen ist das ganz ähnlich: Wenn nicht ganz 
klare Strukturen vorgegeben sind, wie gewisse semantische Ideen 
hinzuschreiben sind, landet man schnell in einer 
Programmiersprachenhölle. Siehe PHP und (in geringerem Maße) Perl.

Natürlich sind diese klaren Strukturen zu lernen und erhöhen den 
Lernaufwand. Aber dafür werden Programme von anderen Programmierern 
lesbar...

Viele Grüße,
         Simon

von Paul Baumann (Gast)


Lesenswert?

Wegstaben Verbuchsler schrabte:
>Gibts denn sächsisch als Programmiersprache für dich ?

Ja, das wäre eine Idee, obwohl ich nicht in Sachsen bin. Versuchen 
könnte
ich es im Nordthüringer Dialekt...

Beispiel:
Horche_mal_druff (Befehl wartet auf Eingabe des Benutzers)
Wamse_mal_den Waaren_zerück_und_huppe (Wagenrücklauf+Zeilenschaltung)
Mache_mal_en_Schachbrett (Dimensioniere ein 2-dimensionales Array 8x8)
Hör_uff_jezzz (Programmende)

Das wäre so ungefähr das, was ich mir vorstelle.
saublöde grins

Simon schrub:
>Wenn nicht ganz
>klare Strukturen vorgegeben sind, wie gewisse semantische Ideen
>hinzuschreiben sind, landet man schnell in einer
>Programmiersprachenhölle.

Eben das ist es, was man zum Bleistift bei C-Quelltexten hier auch im 
Forum
immer mal wieder sieht: Jeder Compiler versteht nicht jeden Quelltext.
Dann ärgert man sich die Schwindsucht an den Hals....

MfG Paul

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.