Empfehlungen für C-Anfänger

Meiner

Well-Known Member
Moin!

Ich hab vor einiger Zeit mit C angefangen. Kann nun die Grundlegenden Sachen wie Umgang mit Zeigern, Struckturen, Arrays, Kontrollstruckturen, Ein/Ausgabe, grundlegende dynamische Speicherverwaltung und ähnliches.
Würde nun gerne weitermachen und habe das jetzt so verstanden das ich mich für eine art von Libarys entscheiden muss um Grafische Programmierungen machen zu können.
Kenne nur die GTK und die QT libs und weiss nicht was gut/schlecht ist. Hab gehört das ich für QT z.b. c++ noch lernen sollte. Wie ist das? Was würdet ihr mir empfehlen um mich weiterzubilden?

Bin um jeden Rat froh :)

MfG Meiner
 
Wie hast du die "Basics" gelernt?
Ich versuch das schon seit einem Jahr aber ich verstehs nicht.
 
Danke! @tschepe

@sleipnir + marty Hab mehrere tutorials durchgekaut und immer schön die beispiele abgeschrieben, verändert und geschaut wie es sich auswirkt, ausserdem kann ich schon php --> hatte es leichter mit dem lernen weil die syntax und die logik doch sehr ähnlich sind (und php ist irgentwie viel leichter!)
Aber richtig kann ich ja kein C, nur halt die Basics, siehe beitrag oben :)

Wenn noch jemand weitere Tipps hat bin ich sehr dankbar, auch wenn tschepes links schon super hilfreich sind :)
 
öhm, ok :)

ich hab mir mal die ersten seiten über GTK+ durchgelesen, werde es damit versuchen :)
vielen Dank für die vielen Antworten und Tutorialtipps

Gruß Michael
 
Meiner schrieb:
Kenne nur die GTK und die QT libs und weiss nicht was gut/schlecht ist.

Beides sind gute Bibliotheken; ohne allerdings hier Glaubenkriege vom Zaun zu brechen, würde ich eher Qt empfehlen; es ist meiner Meinung nach sauberer konzeptioniert und angenehmer (was u.a. Übersichtlichkeit, Dokumentation und den notwendigen Quellcode betrifft) zu programmieren.

Es gibt noch eine ganze Reihe anderer grafischer Bibliotheken (u.a. Tk, wxWidgets, FOX, Motif, usw.), Qt dürfte aber momentan wohl die beste Wahl sein.

Meiner schrieb:
Hab gehört das ich für QT z.b. c++ noch lernen sollte. Wie ist das? Was würdet ihr mir empfehlen um mich weiterzubilden?

Die Empfehlung bezüglich C++ ist zweifelsohne deshalb erfolgt, weil C++ eine objektorientierte Programmiersprache ist und Objektorientierung und GUI-Programmierung ideal zusammen passen. Ferner sind viele grafische Bibliotheken in C++ programmiert (unter anderem auch Qt).

Man kann zwar auch in prozeduralen Sprachen grafische Oberflächen programmieren, aber mit objektorientierten Sprachen macht es um Größenordnungen mehr Spaß.

Allerdings würde ich - wenn du noch keine anderen objektorientieren Sprachen kennst - erstmal einen weiten Bogen um C++ machen. C++ ist zwar eine sehr mächtige Sprache, aber bedingt durch seine Entstehungsgeschichte hoffnungslos überfrachtet und mit so vielen Fein- und Gemeinheiten versehen, dass sie nur mit sehr viel Erfahrung wirklich produktiv zu nutzen ist.

Wenn du dich weiterbilden möchtest, würde ich bezüglich C eher in Richtung Unix-Programmierung schielen (Stichwort Signale, Prozesse, IPC, usw.).

Für GUI-Programmierung würde ich mir eher eine "ordentliche" objektorientierte Sprache aneignen (meine Empfehlung wäre Python) und damit in die GUI-Programmierung einsteigen. Für den Einstieg gibt es auch ein erstklassiges Buch, "GUI Programming with Python: Qt Edition" von Boudewijn Rempt, kostenlos online zu lesen.

Mit dieser Strategie hättest du zwei Welten abgedeckt:
Auf der einen Seite die systemnahe Programmierung mit C, bei der du fast alles händisch machen musst, und auf der anderen Seite Python, die wesentlich höher angesiedelt ist, dir viel Handarbeit abnimmt und durch ihre objektorientierte Natur ideal zur GUI-Programmierung passt.

Für einen abschließenden und wesentlich umfangreicheren Überblick über verschiedene Programmiersprachen und warum sie für welche Zwecke eingesetzt werden sei auf das entsprechende Kapitel aus "The Art of Unix Programming" von Eric Steven Raymond verwiesen. Dort findet man einen exzellenten Überblick über die verschiedenen im Unix-Umfeld eingesetzen Sprachen mit ihren Vor- und Nachteilen sowie jeweils einem Beispiel, warum sie für dieses oder jenes Projekt eingesetzt wurden und die Wahl nicht auf eine andere Sprache fiel.
 
Hi,

zu QT sollte man noch die Lizenz erwähnen. QT steht unter GPL und man braucht eine kommerzielle Lizenz, wenn man Programme kommerziell vertreiben will.


CU

Martin
 
GTK ist auch Objektorientiert, allerdings in C.
Für die C++ Leute gibt es GTKmm, auch für sehr viele andere Sprachen gibt es Bindings (oder wie man das nennt), du bist also viel flexibler.
Außerdem macht GTKmm sehr starken Gebrauch von der STL, wohingegen du bei QT ständig die Daten konvertieren musst, wenn du sie mit STL oder anderen Libs verwenden willst. QT ist halt eine Insellösung.

@Maledictus: Ja, aber dann musst du deine Programme auch mit GPL infizieren...

auf bald
oenone
 
oenone: nö, man kann auch z.B. sein Programm unter BSD-Lizenz kommerziell vertreiben :)

Und wenn man sich das kommende QT4 anschaut wird auch die STL schön integriert.
Und Bindings gibt es für Qt ebenfalls en masse.
 
wenns komerziell ist brauchste dann aber wieder ne kostenpflichtige lizenz bei qt AFAIK
 
öhm, jetzt muss ich nochmal nachfragen wie das python aussieht, seit ihr alle der meinung das es ein guter schritt wäre bevor ich an die oop rangehe? dann kann ich auch das zuerst lernen.....
bin ja nur hobby programmierer :)

MfG Meiner
 
@ouTi: Nein, denn man kann auch Programme die unter einer FOSS Lizenz stehen kommerziell vertreiben, so wie es z.B. RedHat, SuSE und auch andere tun.
Wenn du das Programm selber allerdings nicht unter eine der bestimmten Lizenzen stellen (und ja, das sind mehr als nur die GPL!!) willst hast du recht, dann musst du die kostenpflichtige Lizenz kaufen.
 
Meiner schrieb:
öhm, jetzt muss ich nochmal nachfragen wie das python aussieht, seit ihr alle der meinung das es ein guter schritt wäre bevor ich an die oop rangehe? dann kann ich auch das zuerst lernen.....
bin ja nur hobby programmierer :)
Ja, ja, nochmals ja. Ich wuerde freiwillig kein Projekt mehr in C angehen, da Python flexibler ist, mehr kann und klarer sowie einfacher zu programmieren ist.
Desweiteren bietet es nahezu volles OOP, gute Fehlerbehandlung und erzieht einen zu sauberem Code (bedingt durch die Einrueckung).

Alles andere wurde schon hinlaenglich erwaehnt.

gruss
 
Hi,

Meiner schrieb:
öhm, jetzt muss ich nochmal nachfragen wie das python aussieht, seit ihr alle der meinung das es ein guter schritt wäre bevor ich an die oop rangehe? dann kann ich auch das zuerst lernen.....

Nö, sehe ich anders. Mit C bekommst du IMHO erst mal eine unersetzliche Basis über Programmiersprachen.

Der beste Schritt, oop zu lernen ist in meinen Augen smalltalk.
Das hat allerdings den Nachteil, dass die Sprache sehr selten genutzt wird und auch sicher Schwächen hat. Allerdings hat man dann eine enorme Basis um c++, python und sowas zu lernen.

Mein Vorschlag ist allerdings der "von der Pike auf" Vorschlag - eher ein kleines Studium. Wenn du den learning by doing Weg gehen möchtest empfehle ich C, C++.

CU

Martin
 
troll schrieb:
Nö, sehe ich anders. Mit C bekommst du IMHO erst mal eine unersetzliche Basis über Programmiersprachen.

Ich sehe es genau umgekehrt. Ich würde erstmal mit einer sauberen, höheren Sprache anfangen und die Programmierung lernen; danach kann man sich damit vertraut machen, wie es eine Ebene tiefer (z.B. in C) realisiert ist und anschließend kann man sich in Assembler anschauen, was der Prozesser letzten Endes wirklich macht.

troll schrieb:
Der beste Schritt, oop zu lernen ist in meinen Augen smalltalk.

Das hat allerdings den Nachteil, dass die Sprache sehr selten genutzt wird und auch sicher Schwächen hat. Allerdings hat man dann eine enorme Basis um c++, python und sowas zu lernen.

An Smalltalk habe ich in meinem ursprünglichen Posting auch zuerst gedacht, mich dann aber doch für Python als Empfehlung entschieden.

Nachdem Python ursprünglich als Lehrsprache konzipiert wurde, es um Größenordnungen mehr Resourcen für Python gibt und einem auch in der Praxis mehr Python als Smalltalk begegnet, würde ich nicht mehr zu Smalltalk greifen.

Mit Smalltalk als erster OO-Sprache würde man aber beileibe nichts falsch machen, es ist letzten Endes Geschmackssache. Ich persönlich fand die Sprache selbst exzellent, allerdings haben mir Teile des Umfelds (Image statt Dateien; Verquickung Sprache und IDE) nicht gefallen.

troll schrieb:
Mein Vorschlag ist allerdings der "von der Pike auf" Vorschlag - eher ein kleines Studium. Wenn du den learning by doing Weg gehen möchtest empfehle ich C, C++.

Die Empfehlung bezüglich C kann ich noch nachvollziehen, es ist eine sehr überschaubare Sprache und gerade durch ihre Schlichtheit als erste Sprache nicht die schlechteste Wahl. Außerdem begegnet einem unter Unix früher oder später zwangsläufig C-Code, man sollte es also früher oder später lernen.

C++ als erste objektorientierte Sprache halte ich jedoch für einen großen Fehler. Gerade C++ ist doch eine der Sprachen, mit der man ordentliche Objektorientierung nur mit enormen Klimmzügen und viel Erfahrung erreichen kann.

Es mag zwar eine mächtige, performante und weit verbreitete Sprache sein, aber spätestens beim Hantieren mit Templates oder der STL erreicht der Anfänger doch schnell einen Frustrationsgrad, der jegliches Interesse verfliegen lässt und dem Lerneffekt extrem abträglich ist.
 
Hi,

Azazyel schrieb:
Ich sehe es genau umgekehrt. Ich würde erstmal mit einer sauberen, höheren Sprache anfangen und die Programmierung lernen; danach kann man sich damit vertraut machen, wie es eine Ebene tiefer (z.B. in C) realisiert ist und anschließend kann man sich in Assembler anschauen, was der Prozesser letzten Endes wirklich macht.
Die Gefahr dabei mit Basics wie C anzufangen und sich nach oben weiter durchzuarbeiten sieht man bei vielen C++ Quälcodes - es werden ++ Sachen benutzt, aber es wird genauso programmiert wie unter C. Der oo Ansatz bleibt fast vollkommen ausser acht.

Dennoch, es macht mehr Spass eine Sprache zu lernen, wenn man im Grunde schon nach ein paar Stunden ein sinnvolles Programm zu vim bringt.
C++ als erste objektorientierte Sprache halte ich jedoch für einen großen Fehler. Gerade C++ ist doch eine der Sprachen, mit der man ordentliche Objektorientierung nur mit enormen Klimmzügen und viel Erfahrung erreichen kann.

Es mag zwar eine mächtige, performante und weit verbreitete Sprache sein, aber spätestens beim Hantieren mit Templates oder der STL erreicht der Anfänger doch schnell einen Frustrationsgrad, der jegliches Interesse verfliegen lässt und dem Lerneffekt extrem abträglich ist.

Da ist was dran, dafür ist der Sprung nicht so enorm. Die Empfehlung hatte ich für den learning by doing Weg abgegeben. Nachdem man sich mit c beschäftigt hat und grad die ganzen listen und sowas gefressen hat, kann man sich gut in ++ einarbeiten, ohne "Sendepause zu haben, weil man alles von vorn lernen muss. Hier besteht dann aber die Gefahr mit C++ genauso weiterzuarbeiten, wie mit C. C++ Als Einstieg würde ich auch niemandem raten.

Insofern ist eventuell deine Empfehlung besser, weil man einen komplett neuen Sprung machen muss.

CU

Martin
> Was ist eigendlich mit Java?
Mit Java? Nichts, warum?
;-)
 
Zurück
Oben