Programiersprache für Anfänger
-
~fricky schrieb:
asc schrieb:
Der Name ist Programm... Wenn du C++ als " Unlogisch und kompliziert" betrachtest, gilt dies erst recht für C.
erst recht? was ist an C komplizierter als an C++? C++ so kompliziert wie C plus einer gehörigen portion eigenkomplexität.
Nur wenn man unter C++ C schreibt. Ansonsten nimmt einen C++ einiges an internen Querelen ab.
-
Der Name ist Programm... Wenn du C++ als " Unlogisch und kompliziert" betrachtest, gilt dies erst recht für C.
C++ ist für mich die Summe der C++-Konzepte, die über C hinausgehen.
Auf dem Einsteiger-Level kann man sagen, daß C eine Teilmenge von C++ ist.C ist für mich nicht wirklich eine Hochsprache, sondern eher
structured assembler. Also der Schraubenzieher, den ich auspacke
wenn die Bohrmaschine nicht um die Ecke kommt.Aber: Jedem Tierchen sein Pläsierchen...
Daran zeigt sich ein eigentümliches soziologisches Phänomen:
Überall im Internet finden sich Menschen zuhauf, die sagen daß
C++ das tollste und beste ist (it's what god used for us).Wenn sie's dann halbwegs beherrschen, meinen sie, daß sie alles wissen,
und entwickeln eine seltsame Arroganz, die zutage tritt, wenn sie
alle anderen Objektsysteme pauschal verwerfen.Dabei ist für einen Anfänger, der nützliche Programme schreiben will,
ein garbage collector eine gute Sache.
Außderdem sollten Anfänger einen guten Überblick über alle Sprachen
haben, für die Zeit, in der wir alt und schwach sein werden, denn dann werden
sie herrschen.Ich will nicht für Python in den Krieg ziehen, aber ich bin scheinbar
nicht der einzige, der's verwendet:
http://xkcd.com/353/EOD
-
flamer, kampfbereit schrieb:
asc schrieb:
Aber: Jedem Tierchen sein Pläsierchen...
Daran zeigt sich ein eigentümliches soziologisches Phänomen:
Überall im Internet finden sich Menschen zuhauf, die sagen daß
C++ das tollste und beste ist (it's what god used for us).Ist dir eigentlich aufgefallen das ich nicht C++ empfohlen, sondern nur deine Aussage in Zweifel gezogen habe? Ich werde mit sicherheit keine Sprache für einen Anfänger empfehlen ohne sein Ziel zu kennen.
C++ ist schwer und komplex, aber dann C aufzuführen halte ich für absoluten Quatsch, da Anfänger damit mindestens ebenso überfordert sind.
flamer, kampfbereit schrieb:
Wenn sie's dann halbwegs beherrschen, meinen sie, daß sie alles wissen, und entwickeln eine seltsame Arroganz, die zutage tritt, wenn sie alle anderen Objektsysteme pauschal verwerfen.
Ganz ehrlich, die arroganz gebe ich auch zurück. Gerade bei einem Namen der darauf hindeutet absichtlich zu flamen. Darauf deutet auch folgendes hin:
flamer, kampfbereit schrieb:
asc schrieb:
Der Name ist Programm... Wenn du C++ als " Unlogisch und kompliziert" betrachtest, gilt dies erst recht für C.
C++ ist für mich die Summe der C++-Konzepte, die über C hinausgehen.
Auf dem Einsteiger-Level kann man sagen, daß C eine Teilmenge von C++ ist.Und das ist die typische Arroganz von jemanden der aus der C-Schiene kommt, und das konzept von C++ nicht verstanden hat. Ja, man kann dort C schreiben (Aus kompatibilitätsgründen), dies ist dann aber C und nicht C++. Man kann C++ auch ohne C programmieren und wenn man es auf die C++ Art macht, halte ich es sogar für einfacher verständlich (weniger Zeigerarithmetik, weniger Fallstrike bei simplen Strings und Arrays...).
Zudem kann ich nur das empfehlen was ich kenne, ich habe mich hier auch niemals gegen Phyton und Co ausgelassen. Nur akzeptiere ich es tatsächlich nicht (insofern bin ich tatsächlich arrogant) C auf ein anderes Komplexitätslevel als C++ zu legen. Das was in C das wilde Schießen mit Zeigern ist, ist in C++ das Grundverständnis der Standardbibliothek, die eben dies reduziert.
Der Ursprungsposter hat nur einen Satz ohne Anwendungsfeld beschrieben, in der Hinsicht kann ich jedenfalls keine Empfehlung aussprechen. Ich weiß weder wo seine späteren Schwerpunkte (Webentwicklung, kleine oder große Desktopanwendungen, Spiele...) liegen, noch was sein entgültiges Ziel ist.
Wenn es um eine Sprache in der Anwendungsentwicklung, mit späterer Zielsetzung mittlere/große Projekte geht, würde ich wohl am ehesten zu Java oder C# tendieren. Bei kleinen Anwendungen gehen aber ebenso Scriptsprachen etc.. Im Bereich der Spieleentwicklung tendiere ich derzeit zu C++ oder C#. Im Bereich der rein serverbasierten Webentwicklung kann ich kaum eine Auskunft geben (da ist meines Erachtens vor allen PHP, Phyton & Co stark, ebenso kann aber durchaus auch Java und C# [ASP.Net] je nach Anwendungsfall gut sein. Wenn es um die Entwicklung von Webanwendungen ala Applets geht würde ich wohl Java, C# [Silverlight] oder Flash nennen...
Und wenn jemand bereit ist ins eiskalte Wasser zu springen mit dem Ziel später möglichst leicht auf viele andere Sprachen zu wechseln, selbst wenn es mit viel Erstaufwand verbunden ist, ja, dann kann ich vielleicht auch C++ ins Rennen schicken.
cu André
-
ein großer Teil der Faszination, die Programmierer für C++ empfinden, besteht m.M.n. darin, daß C++ ständig kleine Erfolgserlebnisse bereithält, wenn man wieder eines der (vielen und nicht immer logischen) Sprach-Features verstanden hat.
Ich denke z.B. da an die Mehrfach-Bedeutung von static und & (wieviele völlig verschiedene Bedeutungen hat & in C/C++ ? fünf ? Vom "und" bis zum Adreßoperator) - je nach Kontext bedeuten diese Syntax-Elemente völlig verschiedene Dinge. Das ist unlogisch und verwirrt Anfänger ungemein; dem Fortgeschrittenen dageben gibt es das Gefühl, wieder etwas durchschaut zu haben, ähnlich, wie sich Archäologen fühlen, wenn sie die Bedeutung eines antiken Schriftzeichens entschlüsselt haben, oder so, wie sich Mathematiker fühlen, wenn sie wieder ein neues Lemma durchschaut haben.
Programmiersprachen sind für Anfänger dann geeignet, wenn es eine 1:1 eindeutige Zuordnung zwischen Syntax-Elementen und Konzepten gibt. Deshalb auch kein Ruby (7 Arten der Benutzung blockähnlicher Konstrukte :D).
"The Pythonic way" ist ein gutes Beispiel für Anfänger-gerechtes Sprachdesign, aber auch weniger bekannte Sprachen wie Smalltalk.
-
asc schrieb:
Nur wenn man unter C++ C schreibt. Ansonsten nimmt einen C++ einiges an internen Querelen ab.
nenn doch mal ein konkretes beispiel. z.b. ein c++ feature, womit man eine C-eigenart umschiffen kann, ohne sich nicht mindestens 2 oder 3 neue, potentielle problemchen einzuhandeln.
-
~fricky schrieb:
nenn doch mal ein konkretes beispiel. z.b. ein c++ feature, womit man eine C-eigenart umschiffen kann, ohne sich nicht mindestens 2 oder 3 neue, potentielle problemchen einzuhandeln.
Nicht, dass ich versuchen wollen würde, Dich von der getätigten Aussage zu überzeugen (das klappt sowieso nicht), aber mich würde interessieren, wo Du hier (mindestens zwei! :D) neue Problemchen findest:
printf("%d", "hallo, welt"); // vs. cout << "hallo, welt";
-
~fricky schrieb:
nenn doch mal ein konkretes beispiel. z.b. ein c++ feature, womit man eine C-eigenart umschiffen kann, ohne sich nicht mindestens 2 oder 3 neue, potentielle problemchen einzuhandeln.
Alleine schon die normale Stringbehandlung (Inklusive Aufaddieren, Übergeben...)
#include <string> void foo(std::string & x) { x = x + x; } int main() { std::string a = "H"; std::string b = "allo"; std::string c = a + b; foo(c); }
Die Übergabe von Arrays, die Behandlung von Arraygrenzen...
usw.
cu André
-
Moin,
ANSI C ist genauso wenig schwer wie C++ oder Java, wobei ich mit
C++ nicht sooo viel am Hut hatte.
Jedoch sei gesagt, dass ich _nur_ einen Hauptschulabschluss habe.
Und wenn ich mich sogar an Assembler begeistern kann, dann könnt ihr
das so oder soGruß,
KabelKlaus
-
Dieser Autor bringt es auf den Punkt:
It can be considered: what application domain is C++ relevant for? The answer to this is that C++ might be used as a better C. But for what applications is C relevant? C is relevant for low level Unix style programming, and is not an ideal language in view of its low level nature, and flaws. C is not applicable for large project organisation: hence C++'s attempt to improve it. C++, however, has not solved C's flaws, as I once hoped it would, but painfully magnified them.
-
LordJaxom schrieb:
mich würde interessieren, wo Du hier (mindestens zwei! :D) neue Problemchen findest:
cout << "hallo, welt";
<< ist bereits Shift-Operator; die Doppelbedeutung verwirrt Anfänger.
-
Echt? Ein Anfänger lernt zuerst was ein Shift-Operator ist?
Ich habe den bis heute nicht gebraucht! Zu Assembler-Zeiten habe ich Shifts benutzt... in C++ ist mir das zum Glück erspart geblieben.
Und das oben genannte Beispiel, kommt in jedem C++-Buch VOR den Shift-Operatoren. Das kann niemanden verwirren.
-
tfa schrieb:
Dieser Autor bringt es auf den Punkt:
It can be considered: what application domain is C++ relevant for? The answer to this is that C++ might be used as a better C. But for what applications is C relevant? C is relevant for low level Unix style programming, and is not an ideal language in view of its low level nature, and flaws. C is not applicable for large project organisation: hence C++'s attempt to improve it. C++, however, has not solved C's flaws, as I once hoped it would, but painfully magnified them.
Yo, ich kann auch eine Gegenkritik schreiben. Jeder kann eine Kritik schreiben. Muß aber deshalb nichts heißen.
-
u-ser_l schrieb:
<< ist bereits Shift-Operator; die Doppelbedeutung verwirrt C-Veteranen, die sich seit 20 Jahren erfolgreich C++ widersetzen.
FTFY
-
Bulli schrieb:
Yo, ich kann auch eine Gegenkritik schreiben. Jeder kann eine Kritik schreiben. Muß aber deshalb nichts heißen.
Absolute Zustimmung. Es gibt solche Kritiken ohnehin zu jeder Sprache (Sei es nun C, Java, C++, VB...). Wenn es einen heiligen Gral an Sprache gäbe, würde es eh nur noch diese auf dem Markt geben
cu André
-
asc schrieb:
Wenn es einen heiligen Gral an Sprache gäbe, würde es eh nur noch diese auf dem Markt geben
Nein, dann würden die, die ihn gefunden haben, in einen heiligen Kreuzzug gegen die Anhänger anderer Sprachen ziehen. Moment mal ...
-
asc schrieb:
Und das ist die typische Arroganz von jemanden der aus der C-Schiene kommt, und das konzept von C++ nicht verstanden hat.
hatte ich wirklich ein bißchen hart formuliert.
asc schrieb:
Der Ursprungsposter hat nur einen Satz ohne Anwendungsfeld beschrieben, in der Hinsicht kann ich jedenfalls keine Empfehlung aussprechen.
Goethe schrieb:
Ein jeder, weil er spricht, glaubt auch über die Sprache sprechen zu können.
er hat ein anwendungsgebiet beschrieben:
er will was lernen.und da ist mir eingefallen, _wie_ lange ich die std-b von C++
studieren mußte, um "erfolgserlebnisse" zu haben.
ich würde heute anders anfangen.Wenn es um eine Sprache in der Anwendungsentwicklung, mit späterer Zielsetzung mittlere/große Projekte geht, würde ich wohl am ehesten zu Java oder C# tendieren. Bei kleinen Anwendungen gehen aber ebenso Scriptsprachen etc..
es ist einfach nicht wahr, dass "scriptsprachen" nur mehr für
kleine anwendungen was taugen.ANSI C ist genauso wenig schwer wie C++ oder Java
aber man braucht ein wenig, bis man manches durchschaut hat,
außer vielleicht bei java.
-
besseres Beispiel:
&
hat je nach Kontext wieviele verschiedene Bedeutungen in C++ ?
1. logisches "und"
2. Adreßoperator
3. unabhängige Referenzen (int& a)
4. pass-by-reference bei Argumentübergabe in Funktionsaufrufen
5. Referenzrückgabe von Funktionen(habe ich noch welche vergessen?)
das ist für Anfänger schlicht eine Menge zu lernen, und intuitiv erkennbar sind diese Bedeutungen, abgesehen vom logischen "und", auch nicht.
-
Ich habe die letzten drei Seiten mit Antworten nur überflogen, aber da bei so einer Grundsatzfrage überhaupt eine Diskussion von der Länge entstand, nehme ich an, dass es mal wieder darum geht, ob C/C++ gute Anfängersprachen sind.
Ich sage, das kommt auf das Grundverständnis an. Wenn man weiß, dass jede Programmiersprache eine gewisse Grundlogik verfolgt (...naja fast jede...;), dann spricht überhaupt nichts dagegen, mit C/C++ anzufangen. Ich persönlich hab das auch versucht, bin aber zunächst daran gescheitert. Trotzdem war es ein Erfolg, weil ich das Gelernte auf andere Sprachen anwenden konnte, durch die ich dann kurze Zeit später einen besseren Zugang zu C/C++ aufbauen konnte.
Mit Geduld geht alles. Und wenn man zunächst die vermeintlich kryptischen Aspekte der Sprache ignoriert, dann ist das genauso simpel wie Java. Übrigens hab ich mit Java größere Probleme gehabt als mit C, weil mich die etwas restriktivere Umgebung zunächst irritierte, aber das ist nur meine Erfahrung.
Merke: C++ kocht auch nur mit Wasser.
Bashar schrieb:
asc schrieb:
Wenn es einen heiligen Gral an Sprache gäbe, würde es eh nur noch diese auf dem Markt geben
Nein, dann würden die, die ihn gefunden haben, in einen heiligen Kreuzzug gegen die Anhänger anderer Sprachen ziehen. Moment mal ...
Darüber hinaus würde jeder Prozess ewig leben...
-
u-ser_l schrieb:
besseres Beispiel:
&
hat je nach Kontext wieviele verschiedene Bedeutungen in C++ ?
Richtig! Je nach Kontext, und somit eindeutig. Es klingt hier bei einigen so, als würde die Syntax nur auf gut Glück funktionieren. Tut sie aber nicht. Sie funktioniert nach bestimmten Regeln. Sogar besser geregelt als in der deutschen Sprache, wo man erst beim Lesen und nicht beim Hören den Sinn erfährt ("Ein paar Schuhe" und "Ein Paar Schuhe").
Wo ist also in C++ da das Problem, wenn selbst ein dummer Compiler versteht, was gemeint ist? Ein Mensch kann das noch besser verstehen, so wie du ja sogar selber gesagt hast: je nach Kontext.
u-ser_l schrieb:
das ist für Anfänger schlicht eine Menge zu lernen, und intuitiv erkennbar sind diese Bedeutungen, abgesehen vom logischen "und", auch nicht.
Ehm, und? Er ist Anfänger. Ein Anfänger kann per Definition nicht so viel vom Fach, wie ein Fortgeschrittener oder ein Profi. Aaaaanfäääääängeeeer. Ja, das ist sowas wie ein Lehrling. Und eine Programmiersprache muß man lernen. Wer hätte das gedacht?!
Es ist aber nicht so schwer zu lernen, wie es hier einige verkaufen wollen. Weiterhin muß man auch nicht jede Einzelheit von C++ wissen, um damit zu programmieren. Vieles kann man bei Bedarf nachschlagen oder auch nochmal nachschlagen. Es ist nichts geheimes, wo einem Informationen vorenthalten werden.
Z.B. liefert einem der MS-Compiler immer Fehlercodes, und die kann man in der MSDN nachschlagen und bekommt sogar mögliche Lösungen spendiert. Darüber habe ich z.B. sehr viele Unverständlichkeiten verstanden... durch Fehler lernt man.
-
3. unabhängige Referenzen (int& a)
4. pass-by-reference bei Argumentübergabe in Funktionsaufrufen
5. Referenzrückgabe von FunktionenAhja, das sollten natürlich alles unterschiedliche Zeichen oder Schlüsselwörter sein, wär ja auch viel klarer.