Zum Inhalt springen

C / C++ - Muss ich beides lernen?


RobbyLee

Empfohlene Beiträge

Moinsen,

Ich hoffe ich kann zum kommenden Wintersemester den Bachelorstudiengang Informatik antreten. Unter anderem erwartet mich dort Software-Engineering.

Um schonmal einen Überblick über Browser-unabhängige Programmierung zu kriegen, wollte ich C++ lernen. Ich habe nicht viel Ahnung von richtigen Programmiersprachen, bislang habe ich im Webbereich mit PHP gescriptet.

Ich habe diverse C++ Tutorials gefunden, aber in vielen die mir empfohlen wurden, wird erst C behandelt, Unterschiede zu C++, und dann erst C++.

Meine Frage ist nun: Sollte ich zuerst C lernen, um dann C++ zu lernen, oder sollte ich es ignorieren wenn C erwähnt wird, und mit dem C++ Tutorial fortfahren?

MfG

Robert

Link zu diesem Kommentar
Auf anderen Seiten teilen

Meine Frage ist nun: Sollte ich zuerst C lernen, um dann C++ zu lernen, oder sollte ich es ignorieren wenn C erwähnt wird, und mit dem C++ Tutorial fortfahren?

Vielleicht etwas flach formuliert, C++ ist C mit der Objektorientierung. Ich denke diverse Grundlagen, wie Zeiger, call-by-ref und call-by-value, sowie den grundlegenden Syntax kann man schon mit C lernen, wenn das dann sitzt würde ich nach C++ wechseln und mir hier die OOP und Metaprogrammierung anschauen

Letztendlich sollte Dir aber bewusst sein, dass ein Studium nicht "programmieren" ist, sondern Du vielleicht eine oder zwei Veranstaltungen hast, in denen programmiert wird und dort wird das, was Du brauchst beigebracht. Ich würde Dir eher raten Dich auf die mathematischen Fächer zu konzentrieren, da das für die meisten zu Beginn die schweren Fächer sind

Link zu diesem Kommentar
Auf anderen Seiten teilen

Letztendlich sollte Dir aber bewusst sein, dass ein Studium nicht "programmieren" ist, sondern Du vielleicht eine oder zwei Veranstaltungen hast, in denen programmiert wird und dort wird das, was Du brauchst beigebracht. Ich würde Dir eher raten Dich auf die mathematischen Fächer zu konzentrieren, da das für die meisten zu Beginn die schweren Fächer sind

So ist es ... Programmieren macht vielleicht 20% vom Studium aus .. mehr nicht. War für mich zum Glück recht einfach, weil ich schon vor gut programmieren konnte ... es sind aber viele andere daran gescheitert, weils doch viel Aufwand ist und das Tempo recht hoch ist.

Aber die Mathe war für mich auch ein harter Brocken ...

... aber das ist schon längst alles wieder Geschichte :cool:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja, ob es nicht sinnvoller ist, erst mit OOP zu beginnen und dann prozedual zu programmieren,

Um Gottes willen.

Ein einmal erlerntes "falsches" Paradigma wieder zu korrigieren, kann sehr schwierig werden.

Eben.

Unterhalte dich mal mit Menschen (plural), die erst Java und dann C gelernt haben. Wir lehren grundsätzlich in der Reihenfolge C->(C++/C#/Java)->PLSQL. Hätte ich genügend Zeit, würde ich noch Assembler an den Anfang schieben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um Gottes willen.

Eben.

Unterhalte dich mal mit Menschen (plural), die erst Java und dann C gelernt haben. Wir lehren grundsätzlich in der Reihenfolge C->(C++/C#/Java)->PLSQL. Hätte ich genügend Zeit, würde ich noch Assembler an den Anfang schieben.

Anwesend.

2 Semester Objektorientierte Programmierung am Bsp. von Java

1 Semester Interprozesskommunikation mit C

geplant: noch 2 Semester aufbauend auf java (teilweise, mit studienarbeiten etc), 2 Semester mit C (teilweise, mit studienarbeiten etc).

Ich persönlich denke die Objektorientierung ist sehr angenehm und ich programmiere deutlich lieber in Java als in C. Aber der Fakt, dass bisher fast alle Funktionen, die ich brauchte (haben z.B. ein chat-programm geschrieben [startprogramm -> Sende, Empfangsprogramm]) waren schon 'vorgefertigt', was ich so von java nich wirklcih gewöhnt bin (klar gibt es bibliotheken etc, aber ein programm, dass nur aus bereits bestehenden funktionen besteh? =D)...

Also ich würde nicht sagen dass die Reihenfolge java->C schlimm ist. Lishkovshes Substitutionsprinzip, dynamische Polymorphie etc. sind Dinge, die einem beim C Programmieren nicht wirklich fehlen.. wenn man sie nicht brauch :P

Bearbeitet von T0ken
Link zu diesem Kommentar
Auf anderen Seiten teilen

Unterhalte dich mal mit Menschen (plural), die erst Java und dann C gelernt haben. Wir lehren grundsätzlich in der Reihenfolge C->(C++/C#/Java)->PLSQL.

So kenne ich das auch, wobei ich mit Pascal bzw Basic (C64) noch begonnen habe. Pascal halte ich für die Lehre ganz gut, da es wirklich sehr strukturiert ist.

Letztendlich ist eine Methode in einer Klasse bzw dann in einem Objekt immer noch ein eine Funktion/Prozedur, die sequentiell abgearbeitet wird. Wenn man direkt mit der OOP beginnt, dann fehlt einem einfach diese Denkstruktur, dass auf Maschinenebene alles sequentiell verarbeitet wird. Selbst wenn man sich das Pipelining bei den modernen Graphikkarten anschaut, die Befehle werden auf der GPU einzeln verarbeitet, auch wenn man eben durch die Pipelines den Datenfluss besser gestalten kann.

Ich denke ein Anfänger sollte wirklich einmal lernen, was Zeiger und einfache Datentypen sind, wie man aus denen dann komplexere Structs baut, denn Structs sind ja schon so etwas wie "sehr einfache" Klassen. Wenn man sich dann z.B. mal mit void* Zeigern beschäftigt, dann kann man so etwas wie "generische Strukturen" erschaffen. Hat man das gemacht, darf man sich dann den Schritt in die OOP wagen und sieht, dass man dort so etwas schon fertig bekommt.

Hätte ich genügend Zeit, würde ich noch Assembler an den Anfang schieben.

Ist zwar nicht direkt Maschinencode, aber für einen Anfänger durchaus gut:

Visual X-TOY

Die Toymaschine ist eine in Java geschriebene kleines System, auf dem man eben lernt wie man mit einfachen und beschränken Sprachbefehlen arbeitet. Was z.B. ein Programcounter ist, was Register sind usw.

Link zu diesem Kommentar
Auf anderen Seiten teilen

C oder C++ zuerst, spielt meiner Meinung nach kaum eine Rolle. Ich habe mit C im privaten angefangen, bekam dann im Rahmen der Ausbildung eine richtige C-Schulung und letztendlich C++.

Der unterschied besteht quasi nur darin, ob man die Objektorientierung verstanden hat, was sich ja nichtmal auf die Sprache C beschränkt, sondern ein allgemeines Konzept ist.

Zu Anfang meiner C Zeit hatte ich allerdings unbewusst mir schon ein C-"Framework" gebaut, dass schon ansatzweise objektorientiert war. :D Ich hab mir damals z.B. Strukturen mit Datenmembern und Funktionspointern gebaut, die dann die Daten manipuliert haben. Im Prinzip schon die Objektkapselung. Polymorphie und so Zeug war dabei natürlich noch nicht enthalten.

Insofern finde ich eine objektorientierte Sprache für den Anfang eigentlich sogar leichter, da das Objektorientierte eher dem menschlichen Vorstellungsvermögen entspricht und allgemein eher überschaubarerer und verständlicher Code dabei rauskommt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wir lehren grundsätzlich in der Reihenfolge C->(C++/C#/Java)->PLSQL.

Und genau das ist der grund, weshalb man regelmäßig gruseligsten C/C++ mischmasch code zu sehen bekommt, der einen nur noch ****en lässt. Von modernem C++ oftmals keine spur zu sehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und genau das ist der grund, weshalb man regelmäßig gruseligsten C/C++ mischmasch code zu sehen bekommt, der einen nur noch ****en lässt.

Das hast Du auch bei anderen Sprachen. Ordentlicher Quellcode ist immer von demjenigen abhängig, der ihn programmiert. Ich kenne auch ganze Module, bei denen alle Variablen global deklariert sind, von einer sinnvollen und konsequenten Benennung mal ganz zu schweigen.

Ein Programmierer, der sich Gedanken über den Code macht, braucht eben auch Zeit dafür. Mal etwas Quick 'n' Dirty hinzucoden ist heute aber üblich, Hauptsache man kann ein Ergebnis vorweisen, ob es nun auch 100%ig läuft, steht auf einem anderen Blatt.

C zu lernen und ann C++ für die OOP ist durchaus sinnvoll, sofern man dem "Schüler" auch klar macht, wie man dann OOP auch richtig anwendet

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und genau das ist der grund, weshalb man regelmäßig gruseligsten C/C++ mischmasch code zu sehen bekommt,

Dann habe entweder ich etwas falsch gemacht oder der Azubi etwas falsch verstanden und muss zurück auf Los. Nur Syntax zu vermitteln ist durchaus suboptimal. Zur Softwareentwicklung gehört auch eine gehörige Portion Disziplin. Genau aus diesem Grund würde ich gerne zuvor Assembler lehren. Jedoch reichen dazu 3 Jahre Ausbildung nur bedingt. Außerdem ging es hier nicht darum, welche Programmiersprache die bessere Wahl ist, sondern welche zum Erlernen besser geignet ist.

Wie flashpixx schon schrieb, ist es ungeheuer spannend das klickern der Gehirnzellen der Azubis förmlich zu hören, wenn Klassen anhand von struct aufgebaut werden. Langsam Schritt für Schritt. Von nativen bis zu zu komplexen Datentypen. Danach Kapselung usw. herrlich.

Davon ab, ist es mir wichtig, dass Azubis die unser Unternehmen, aus welchen Gründen auch immer, verlassen und in ein anderes Umfeld gelangen, wo sie zum Beispiel alten C-Code vorfinden, professionell damit umgehen können.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...