Welche Programmiersprache als erstes lernen?
-
Das ist nur Marketing-Blabla! C#/CLI/BCL sind ECMA Standardisiert.
Und die ECMA sieht vor.
2. If an Ecma International Standard is developed and a party may own or control a patent or application with claims that are required to implement such Ecma International Standard
2.1 The patent holder is prepared to grant licenses free of charge to other parties on a non-discriminatory basis on reasonable terms and conditions.
d.h. Wenn Microsoft es will können sie Mono gewaltig abspecken.
-
Damit steht C# trotzdem noch besser da als Java.
Java hat eine geschlossene Implementierung und eine Patentklage an eine alternative Implementierung vorzuweisen.
C# hat eine offene Implementierung und ein verbindliches Versprechen vorzuweisen.
Microsoft ist erfahrungsgemäß nicht zu trauen, aber Oracle hat jegliches Vertrauen bereits enttäuscht.
Ich bin zum Glück auf Beides nicht angewiesen.
-
Und vom OpenJDK die unter GPL steht haben wir nicht gehört?
-
Dany5 schrieb:
Ich bin im moment voll verwirrt:
Weil du dir einen Compiler hast aufzwingen lassen. Schlechte Idee. Zum Einsteigen willst du einen Interpreter, weil ein Interpreter naturgemäss einige Debugging-Möglichkeiten hat. Ausserdem willst du einen Garbage-Collector, weil du lernen willst wie man programmiert, und nicht wie man Speicher verwaltet. Und wahrscheinlich willst du auch ein latentes (schwaches) Typsystem, damit du drauflos schreiben kannst, ohne vor dem Testen genaue Auskünfte über die verwendeten Typen einzuholen.
In diesem Sinn solltest du schnell auf Python oder Scheme oder sowas umsatteln. Die vielen C++-Empfehlungen kannst du getrost ignorieren, weil von einem C++-Forum nichts anderes zu erwarten ist.
-
mngbd schrieb:
Ausserdem willst du einen Garbage-Collector, weil du lernen willst wie man programmiert, und nicht wie man Speicher verwaltet.
Hä? Wieder ein C++-Hasser? Hat ja erstaunlich viele Seiten lang gedauert. Früher kamen so Sprüche stets schon auf der ersten Seite.
-
mngbd schrieb:
Weil du dir einen Compiler hast aufzwingen lassen. Schlechte Idee. Zum Einsteigen willst du...
Wie wäre es solchen Unsinn zu lassen, nein, es geht mir nicht um Interpreter und Compiler, sondern jemanden zu sagen was er zu wollen hat.
Was er will ist natürlich sehr schwer zu ermitteln, aber zu sagen was er will ist ziemlich anmaßend. Je nach dem was er sich als Ziele setzt kann deine Aussage stimmen oder komplett falsch sein (und teilweise mächtig nach hinten losgehen, falls er später auch C oder C++ lernen will. Ich habe sehr viele Fälle erlebt, in denen jemand extreme Probleme hatte von einer Sprache mit GC & Co auf eine ohne zu wechseln, umgekehrt fällt es häufig leichter, hat aber auch eine höhere Einstiegshürde).
-
Als allererste Programmiersprache würde ich aber auch NICHT C++ empfehlen, da man als Anfänger dort mehr falsch als richtig machen kann und von den Compilerfehlermeldungen häufig völlig irritiert wird.
Und der Frust führt dann eher dazu, daß man auf Programmieren dann gar keine Lust mehr hat (weil man ja nicht weiß, wie einfach es manchmal sein kann, aber das bringt eben nur die Erfahrung -).Und die Grundsätze der OOP lernt man mit anderen Sprachen viel besser (C#, Java), da C++ eben eine Multiparadigmensprache ist (und Templates, Zeiger/Referenzen sowie das Streaming am Anfang eher abschreckend wirken).
Aber ich verstehe schon die Bedenken, daß man danach beim Wechsel auf C++ es (ebenso) schwer hat (man glaubt, programmieren zu können, muß aber trotzdem nochmal bei Null anfangen).
Ich finde C++ kann man nur schätzen (lernen), wenn man die Nachteile anderer Sprache kennt (ohne zu vergessen, daß auch C++ nicht perfekt ist. Und durch C++0x wird die Schere zwischen "C++ mit Klassen"-Programmierern und echten "C++ Profis" immer größer).
P.S. Ich würde C++ auch noch mehr lieben, wenn sie viel mehr alten Ballast (das sog. C Erbe) wegwerfen würden (zumindestens mit einer Compiler-Option!!!)
-
volkard schrieb:
Hä? Wieder ein C++-Hasser? Hat ja erstaunlich viele Seiten lang gedauert. Früher kamen so Sprüche stets schon auf der ersten Seite.
Nö, gar nicht. Aber zum Anfangen ist C++, und sogar C#, mal ehrlich gesagt, nichts. Da muss was möglichst einfaches her, etwas, das man schnell intuitiv bedienen kann. So ist es einfacher, die schwierigeren Themen experimentell anzugehen. Und später, wenn man eine Vorstellung davon hat, was ein Stack ist, kann man sich erklären lassen, dass und warum
new
ein Objekt nicht auf "dem" Stack anlegt, und was "der" Stack eigentlich ist.Ich glaube nicht, dass eine solche "Einstiegs-Phase" bei ehrlichem Interesse länger als ein paar Wochen dauern muss. Aber nach ein paar Wochen kennt man einige Eigenschaften der meisten Programmiersprachen, so wie: Algol60-Blockstruktur, Funktionen mit Parametern und Rückgabewerten, Infix mit optionalen Klammern, usw. Man unterscheidet dann Argumente von Parametern, auch wenn man die beiden Worte noch nie gehört hat.
Und die Meinung ist eben, auch wenn sie euch gar nicht gefällt, dass C++ die Voraussetzungen für eine Einstiegs-Sprache in diesem Sinn nicht erfüllt.
Der Behauptung, ich hätte vor, "jemanden zu sagen was er zu wollen hat", halte ich entgegen, dass sie nicht stimmt.
Edit: Die Blöcke gab's scheinbar schon in Algol60.
-
Th69 schrieb:
Als allererste Programmiersprache würde ich aber auch NICHT C++ empfehlen,
In der Regel gebe ich dir Recht, wobei auch diese Aussage abhängig von der Zielsetzung abhängig ist. Wenn jemand ein Ziel hat, wofür Skriptsprachen nicht geeignet sind, rentiert es sich nicht, mit einer Skriptsprache zu beginnen, um dann direkt wieder umlernen zu müssen. Genauso wie umgekehrt...
Th69 schrieb:
...da man als Anfänger dort mehr falsch als richtig machen kann und von den Compilerfehlermeldungen häufig völlig irritiert wird.
Zwar ist C++ komplex, aber je nach Lektüre kann ich die Aussage so nicht unterschreiben. Ja, es gibt viele Fallstricke, aber die Lektüre macht auch viel aus.
Th69 schrieb:
Und die Grundsätze der OOP lernt man mit anderen Sprachen viel besser (C#, Java)...
Wenn man vorrangig OOP lernen will (wobei ich C# und Java auch nicht unbedingt als die sauberste OO ansehe).
Th69 schrieb:
...da C++ eben eine Multiparadigmensprache ist (und Templates, Zeiger/Referenzen sowie das Streaming am Anfang eher abschreckend wirken).
Wobei man manche Themen auch ignorieren kann. Niemand zwingt einem Templates zu lernen (solange man diese grundlegend verwenden kann, wie std::vector<int>, was aber wesentlich einfacher ist, als ein komplettes Verständnis der Hintergründe).
Zeiger sind auch keinen Zwang bei den ersten Gehschritten (man kommt durchaus auch mit Stackvariablen und Containern aus).
Und ob Streaming wirklich kompliziert ist, muss jeder selbst entscheiden, ich fand die C++ Streams einfacher als die kriptischen Kürzel bei printf & Co.
Th69 schrieb:
Und durch C++0x wird die Schere zwischen "C++ mit Klassen"-Programmierern und echten "C++ Profis" immer größer).
Sehe ich auch wieder nicht so: Man muss nicht den ganzen Sprachumfang kennen, um sauber zu programmieren.
Th69 schrieb:
P.S. Ich würde C++ auch noch mehr lieben, wenn sie viel mehr alten Ballast (das sog. C Erbe) wegwerfen würden (zumindestens mit einer Compiler-Option!!!)
Und eine binärkompatible Schnittstelle (zumindest pro OS), und damit Bibliotheken bzw. ein Modulsystem endlich mal integrieren könnte.
-
mngbd schrieb:
Der Behauptung, ich hätte vor, "jemanden zu sagen was er zu wollen hat", halte ich entgegen, dass sie nicht stimmt.
mngbd schrieb:
Zum Einsteigen willst du einen Interpreter, weil ein Interpreter naturgemäss einige Debugging-Möglichkeiten hat. Ausserdem willst du einen Garbage-Collector, weil du...
Naja, das kann man leichter anders verstehen als so, wie Du es auslegst.
ps: Du willst ja gar nicht dazulernen. Es gab doch hier wirklich genug von merkbefreiten Anti-C++-Trollen angeheizte Diskussionen.
Es gibt sogar gute Gründe, nicht mit C++ anzufangen. Aber das hängt stark vom Lerner ab, wie stark die ziehen. Deine Gründe ziehen gar nicht. Debugger für C++ sind gut. Freispeicher, wer braucht denn sowas, wenn es doch std::string und std::vector gibt? Später mal für Polymorphie, und wenn man dann einen ptr-Container nimmt, ist delete immer noch nocht nötig. Irgendwann mal zur Übung eine verkettete Liste basteln, ja, aber wenn man so weit schon ist, kann man im .remove() neben dem Umketten und droppen des gelöschten Knotens auch schnell ein delete reinschreiben.
-
Man kann mit Basiswissen in C++ schon Anwendungen programmieren. Das Basiswissen reizt halt die Möglichkeiten der Sprache nur nicht aus. Aber man kann sich ja entwickeln, das ist aber bei jedem der C++ Profis hier der Fall gewesen.
Meistens gibt es solche Fallen, das jemand ein C++/CLI Projekt im MSVC erstellt und sich dann wundert, das es nicht so läuft wie im Buch beschrieben.
Und wenn in den Büchern auf den ersten Seiten mit Pointern und C-Funktionen um sich geschmissen wird, braucht man sich auch nicht wundern, das C++ dem Einsteiger die Lust am Programmieren nimmt. Gerade C++ ist doch mit seinen Standardklassen (string, vector etc.) prädestiniert Spaß in die Programmierung zu bringen.
Das einzige Hindernis ist wirklich die fehlende GUI Lib.
-
Th69 schrieb:
Und die Grundsätze der OOP lernt man mit anderen Sprachen viel besser (C#, Java), da C++ eben eine Multiparadigmensprache ist
Ich zweifle ein wenig daran, daß man die das Wurzelziehen, das eigentlich eine Methode von double sein müßte, in eine künstliche Klasse Math stopfen muß. Und daran, daß das das Verständnis über OO vereinfacht.
-
volkard schrieb:
Naja, das kann man leichter anders verstehen als so, wie Du es auslegst.
Zugegeben. Die Sätze könnten ein "Ich glaube, dass ..." vertragen. Weil ich den Fehler nun schon gemacht habe, ersuche ich, in Zukunft allen meinen Sätzen ein "Ich glaube, dass ..." hinzu zu denken. Das wäre sehr praktisch, denn dann müsste ich's nur mehr dazusagen, wenn ich etwas sage, was ich nicht glaube.
volkard schrieb:
Deine Gründe ziehen gar nicht.
Warum nicht?
-
Zeus schrieb:
Und vom OpenJDK die unter GPL steht haben wir nicht gehört?
Ich habe als Nutzer immer recht schnell auf Suns JDK gewechselt, weil mir OpenJDK Probleme gemacht hat. Das ist zwar nicht mehr ganz aktuell, aber ich habe vorhin mal FreeCol (ein Colonization-Clone komplett in Java geschrieben) ausprobiert und es ist bei mir mit OpenJDK unspielbar, mit Suns Java läuft es. Aber wie gesagt, auch wenn OpenJDK wirklich gut sein sollte (CLI code für .net entwickelt läuft bestimmt auch auf Mono nicht sonderlich gut...), dann bleibt immer noch der Fakt, dass Oracle eine alternative Implementierung abgeklagt hat. Microsoft hat das (zumindest noch) nicht getan.
Im Grunde ist der Missstand in meinen Augen, dass oftmals einseitig auf C# herumgehackt wird ("proprietärer Käfig"), während das bei Java einfach verschwiegen wird, oder sogar aus Offenheitsgründen Java anstatt C# empfohlen wird (C# ist von Microsoft, Microsoft ist böse, nimm lieber Java).
Zur aktuellen Diskussion: Warum muss es immer C++ oder eine Skriptsprache sein? Es gibt viele Sprachen, die weniger Fallstricke haben als C++ und trotzdem nicht gleich Vieles vor dem Programmierer verstecken, so dass er den Umgang damit nicht lernen kann. (Object-)Pascal, Ada oder Modula zum Beispiel. Die eignen sich ebenfalls gut zum Einstieg.
-
Frei Dom schrieb:
Ich habe als Nutzer immer recht schnell auf Suns JDK gewechselt, weil mir OpenJDK Probleme gemacht hat.
Also verbreitest du mit Absicht falsche Informationen?
Frei Dom schrieb:
..., dann bleibt immer noch der Fakt, dass Oracle eine alternative Implementierung abgeklagt hat.
Ja, weil Google damit Geld verdient hat.
Microsoft hat das (zumindest noch) nicht getan.
- SMB (file transfer)
- FAT (file system)
Microsoft holds the patents for these two technologies. Samba is a reverse engineered implementation of SMB as is the the FAT driver. The reason Microsoft is not suing anyone for these patents is because it is better for them for other systems to access Windows. If it was something that would make them lose money, you can be sure: they would sue, as anyone else like IBM, Apple, Oracle, etc would sue as well.
Frei Dom schrieb:
Im Grunde ist der Missstand in meinen Augen, dass oftmals einseitig auf C# herumgehackt wird ("proprietärer Käfig"), während das bei Java einfach verschwiegen wird, oder sogar aus Offenheitsgründen Java anstatt C# empfohlen wird (C# ist von Microsoft, Microsoft ist böse, nimm lieber Java).
Da ist kein Missverständnis, das Risiko für den Anwendungsprogramme ist der Gleiche, gleich null! Jene Unternehmen wird doch nicht sein eigene Kundenkreise mit Patentklagen wegklagen - das ist doch paradox.
-
Da ist kein Missverständnis, das Risiko für den Anwendungsprogramme ist der Gleiche, gleich null! Jene Unternehmen wird doch nicht sein eigene Kundenkreise mit Patentklagen wegklagen - das ist doch paradox.
Was ist denn mit Dalvik, Android, den Android Anwendungsentwicklern und Nutzern? Das sind eben keine eigenen Kundenkreise.
- SMB (file transfer)
- FAT (file system)
Microsoft holds the patents for these two technologies. Samba is a reverse engineered implementation of SMB as is the the FAT driver. The reason Microsoft is not suing anyone for these patents is because it is better for them for other systems to access Windows. If it was something that would make them lose money, you can be sure: they would sue, as anyone else like IBM, Apple, Oracle, etc would sue as well.
Mit "Microsoft hat das noch nicht getan" meinte ich logischerweise C# und CLI, speziell Mono. Darum geht es hier. Oracle hat sicherlich auch schon mehr eingeklagt als nur Dalvik. Darum geht es hier aber nicht.
Ja, weil Google damit Geld verdient hat.
Und mit Mono verdient niemand Geld?
Also verbreitest du mit Absicht falsche Informationen?
Nein. Wieso? Im ersten Post habe ich von einer "guten" Implementierung gesprochen. Ich dachte das müsste ich nicht wiederholen. So doof, dass ich der Meinung bin du kennst OpenJDK nicht, bin ich nun auch nicht... nicht ganz.
-
mngbd schrieb:
Weil ich den Fehler nun schon gemacht habe, ersuche ich, in Zukunft allen meinen Sätzen ein "Ich glaube, dass ..." hinzu zu denken.
Das mußt Du schon selber jedesmal hinzufügen.
-
volkard schrieb:
Das mußt Du schon selber jedesmal hinzufügen.
Sir, jawohl, Sir!