Ein sticky Thread "Programmieren lernen" für Anfänger?

Crysis nerd

Freizeitschrauber(in)
Ein sticky Thread "Programmieren lernen" für Anfänger?

Nabend,

wie wäre es, wenn wir mal einen Thread entwerfen, der alle wichtigen Informationen für Anfänger bereit stellt. Es wäre quasi ein etwas längerer Text mit teils philosophischen Sachen (Programmieren an sich, man muss konsequent bleiben) und auch einer kleinen Einführung, was Programmiersprachen überhaupt sind. Danach würde man irgendwie anfangen die bekanntesten Sprachen zu erklären und die Vor und Nachteile von jeder Sprache, sodass der Leser dann entscheiden kann, welche Sprache er gerne lernen würde. Am Ende des ersten Posts kommen dann eine Reihe von weiterführenden Links und Tipps zum programmieren.

Dann können außerdem noch extra Beiträge geschrieben werden, die in je eine Sprache eine Einführung geben bzw. vorallem auch weiterführende Links und Tipps zum lernen geben.

Letztendlich bin ich es unter anderem auch satt, dass die Threads "programmieren lernen" immer gleich ablaufen. Wir könnten hier jetzt uns für etwas entscheiden bzw. auf etwas einigen, sodass jede Sprachen-Fanboy zufrieden ist.
Ich würde mich gerne dazu bereit erklären den Generellen Einführungstext zu schreiben und die Einführung in C++. Natürlich würden wir die Text hier in diesem Thread noch besprechen und verändern, bevor wir dann den "richtigen Thread" erstellen.

Was haltet ihr davon? Und an die Mods: Würdet ihr so einen Thread sticky machen?

Gute Nacht!
 
Also ich fände so einen thread sehr gut. Ich hätte so etwas als Anfänger sehr hilfreich gefunden, gerade eine link Sammlung mit guten tutorials da ich teilweise lange gebraucht habe um ein wirklich gutes zu finden.
 
AW: Ein sticky Thread "Programmieren lernen" für Anfänger?

Ich finde die Idee gut. :daumen: Aber ich fürchte, dass das irgendwann in Flamewars ausartet weil Usergruppe A die Programmiersprache X für besser als Y hält. :schief:
 
AW: Ein sticky Thread "Programmieren lernen" für Anfänger?

Aber ich fürchte, dass das irgendwann in Flamewars ausartet weil Usergruppe A die Programmiersprache X für besser als Y hält. :schief:
Eben.
Generell glaube ich nicht, dass es möglich ist eine wirklich objektive Betrachtung von verschiedenen Programmiersprachen zu finden. Auch ist das Threadaufkommen in diesem Unterforum nicht so groß als dass man nicht jeden "persönlich" betreuen kann.
 
AW: Ein sticky Thread "Programmieren lernen" für Anfänger?

Sehe ich auch so. Bei jedem Thread dieser Art, den ich bis jetzt mitbekommen habe, bricht früher oder später das "Sprache X ist kacke, nimm Sprache Y" oder "IDE X ist kacke, nimm IDE Y oder direkt Texteditor + Konsole". Wobei ich da auch nicht immer nur den Zaungast spiele...
 
AW: Ein sticky Thread "Programmieren lernen" für Anfänger?

Ja das stimmt, dass diese "Streitereien" immer entstehen. Aber genau das will ich ja sozusagen vermeiden, dass "wir" hier, in diesem Thread, uns streiten und nichtmehr in den Threads, wo Anfänger mitlesen. Denn wenn Anfänger schon beim 4. Posts nichts mehr verstehen, bringt denen das nichts. Also ich will die Streiterei hierhin verschieben ;)

Und ich denke schon, dass wir uns wohl auf eine objektive Betrachtung einigen können, mit denen alle einigermaßen zufrieden sind. Man kann ja immer noch in den "Unterposts" zu verschiedenen Programmiersprachen die Vorteil der Sprache loben und so weiter.

Und auch das mit der IDE/Entwicklungsumgebung... ich meine da kann man doch wohl die gängigen Möglichkeiten aufzählen und Vor- und Nachteile davon nennen. Meint ihr nicht, dass wir sowas hinkriegen sollten?


Ich würde sagen, wir machen das einfach mal und sehen, wo es hinführt ;)


Um direkt mal für Diskussionsstoff zu sorgen, hier grob zusammengefasst, wie ich das mit den Sprachen sehen würde, bzw wie ich irgendwie anfangen würde zu erklären:
- Es gibt nicht DIE Programmiersprache, sondern mehrere. Was ist eine Hochsprache?
- Scriptsprachen, interpretierte Sprachen, compilierte Sprachen
- Sprachen für unterschiedliche Anwendungsbereiche: PHP eher für Webdevelopment, Java/C++ eher für Anwendungsentwicklung, etc

Es gibt mehrere bekannte und viel genutze Sprachen. Leider gibt es keine garantiert richtigen Statistiken, aber hier die wohl meist benutzen Sprachen für Anwendungsentwicklung:
C: C ist eine alte Sprache, die schon 1972 erschienen ist. C ist eine kleine Sprache, die in den letzten Jahren nurnoch geringe Änderung im Standard hatte. In C kann man sehr performant programmieren und sie wird oft dort benutzt, wo man nah an der Hardware arbeitet, weil C eine sehr hardwarenahe Sprache ist. C fehlen aber viele Features, um ein abstrahiertes Programmieren möglich machen. Z.B. gibt es in C keine wirkliche OOP und keine Unterstützung für generische Programmierung. In C kümmert man sich selber um das Speichermanagement und außerdem ist C an vielen Stellen typunsicher, weswegen C als "unsicher" gilt. Unsicher heißt hier allerdings nicht, dass die Sprache an sich unsicher ist, sondern dass vorallem unerfahrene Programmierer leicht Fehler einbauen, die später zu Problemen führen. [Meine persönliche Meinung: Schöne Sprache im letzten Jahrtausend. Heute gibt es sicherere, "gleich schnelle", elegantere und abstrahiertere Alternativen, die einfach besser in die aktuelle Zeit passen, also C. Okay ich hab gelogen, mit "Alternativen" meine ich "eine Alternative"]
C++: C++ ist eine Weiterentwicklung von C und ist komplett abwärtskompatibel (heißt, dass jedes C programm mit einem C++ Compiler compilierbar ist). C++ hat zahlreiche Features spendiert bekommen, wie Unterstützung der OOP und der generischen Programmierung via Templates, deutliche Verbesserungen der Typsicherheit in vielen Punkten (durch templates und viele alternativen zum typunsicheren Preprocessor) sowie eine Menge Features zur Verbesserung der Lesbarkeit (ausdrucksstarker Code). In C++ kümmert man sich immer noch selber um Speichermanagement, aber bekommt einige sehr gute Hilfsmittel an die Hand gegeben, die wirkliches manuelles Management oft unnötig machen (vorallem RAII verbessert die Situation erheblich. Smartpointer, etc). C++ ist daher absolut keine kleine Sprache mehr sondern gilt zu den umfangreichesten Sprachen. [Meine Meinung: Die beste Programmiersprache und in den letzten Jahren immer besser, AUCH für anfänger geeignet!]
Java: (sorry keine Zeit mehr, reiche ich morgen nach)

Das jetzt nur auf die schnelle, damit ihr schonmal meckern könnt :D

Im übrigen, eine super Seite hier: C++ - nuwen.net (Was ich meine sind vorallem die 3 Abschnitte mit den Überschriften, die mit "Why" beginnen) ;)
 
AW: Ein sticky Thread "Programmieren lernen" für Anfänger?

Da wird aber ganz schön über Java hergezogen, teilweise sogar mit Unwahrheiten... da mag wohl jemand Java absolut nicht :ugly:

Man könnte vielleicht - möglichst neutral - eine kurze Auflistung einiger für Anfänger geeigneter Sprachen machen oder so.
 
AW: Ein sticky Thread "Programmieren lernen" für Anfänger?

Da wird aber ganz schön über Java hergezogen, teilweise sogar mit Unwahrheiten... da mag wohl jemand Java absolut nicht :ugly:
Unwahrheiten... seh ich nirgends ;) Aber das war auch nur ein Witz nebenbei. Der Artikel wird nicht gerade zu einer "möglichst neutralen" Beschreibung beitragen, sondern eher noch den Sprachenkampf entfachen :D

Man könnte vielleicht - möglichst neutral - eine kurze Auflistung einiger für Anfänger geeigneter Sprachen machen oder so.
Genau das hatte ich vor. Und wenn wir hier im Konsenz entscheiden, was wir schreiben, sollte das auch klappen. Hab nur leider gerade wenig Zeit, werde hier noch mehr beitragen, sobald ich kann... :/

Grüße
 
AW: Ein sticky Thread "Programmieren lernen" für Anfänger?

Unwahrheiten... seh ich nirgends ;) Aber das war auch nur ein Witz nebenbei. Der Artikel wird nicht gerade zu einer "möglichst neutralen" Beschreibung beitragen, sondern eher noch den Sprachenkampf entfachen :D
Das ist wohl war, stammt wohl noch aus einer früheren Java-Zeit ^^

The C machine model. [...]
Was reitet der so auf den Pointern rum? Sehe ich nicht als wirklichen Nachteil, hängt von den "persönlichen Präferenzen" ab.

Es gibt keine explizit aufrufbaren Destruktoren, das geht aber über die finalize() Methode. RAII kann über try-with-resources erreicht werden.

Die Java Generics sind nicht so mächtig wie C++ Templates, das stimmt. Stammt aber wohl noch aus einer Zeit, bevor die Generics überhaupt kamen (< Java 1.5).

Operator overloading
Das "Problem" hatte ich allerdings auch schon mal gehabt, den Punkt lasse ich gelten. Wobei ich auch schon üblen Missbrauch dieses Features gesehen habe, insofern kann man sich da durchaus drüber streiten.

The C preprocessor
Vorteil für C/C++, wenn man ihn denn sinnvoll einsetzt. Man kommt aber auch ohne aus. Was ich aber schon ab und an gerne hätte wäre ein #ifdef DEBUG ;-)

Default arguments
Kann man per Überladung nachbauen, wenn man es denn unbedingt braucht.

Just my 2 cents.

Genau das hatte ich vor. Und wenn wir hier im Konsenz entscheiden, was wir schreiben, sollte das auch klappen. Hab nur leider gerade wenig Zeit, werde hier noch mehr beitragen, sobald ich kann... :/
Also wenn wir das neutral machen könnten (ich versuche auch nicht zu meckern ^^), vielleicht so mit Vor- und Nachteilen, könnte das für Neueinsteiger hiflreich sein. So eine Art FAQ für Neueinsteiger vielleicht.
 
AW: Ein sticky Thread "Programmieren lernen" für Anfänger?

Dann legt mal los, meine "Programmierkenntnisse" reduzieren sich auf ein par hängengebliebene Basic- und DOS-Befehle....:D;):P
 
AW: Ein sticky Thread "Programmieren lernen" für Anfänger?

Okay, dann mal meinen Senf zu dem Thema ;)

Was reitet der so auf den Pointern rum? Sehe ich nicht als wirklichen Nachteil, hängt von den "persönlichen Präferenzen" ab.
Ich verstehe hier nicht ganz, was du meinst. Dass Java explizite Pointer verbietet ist halt.. naja. Vllt. kannste nochmal erklären, was du genauer meinst.

Es gibt keine explizit aufrufbaren Destruktoren, das geht aber über die finalize() Methode. RAII kann über try-with-resources erreicht werden.
Das kannte ich noch nicht und es scheint wirklich sinnvoll in Java. Trotzdem ist es zusätzliche Syntax und zusätzlicher Aufwand. RAII quasi als "default" für Resourcenmanagement zu nutzen, finde ich definitiv besser. Vorallem sehe ich keinen Grund, es nicht "default" zu machen. Die Sache mit dem GC ist so... wenig genau definiert. Man weiß nicht, wann welches Objekt wirklich zerstört wird. Die finalize() Methode wird ja auch erst aufgerufen, wenn der GC sich mal entscheidet, das Objekt wegzuräumen.

Die Java Generics sind nicht so mächtig wie C++ Templates, das stimmt. Stammt aber wohl noch aus einer Zeit, bevor die Generics überhaupt kamen (< Java 1.5).
Und jeder, der nicht komplett in C++ steckt, sieht garnicht, wie viel mehr Templates können. Aber das verlange ich auch garnicht, dass das jeder weiß und dein "nicht so mächtig" ist ja schon korrekt ;) Außerdem ist es sowieso irgendwie peinlich, dass Java so ewig lange für Generics gebraucht hat (die auch nur per Type-Erasure funktionieren) wo C++ schon in 98 einen kompletten Standard mit Templates hatte. Der Artikel ist auch recht alt, stimmt auch wohl. Und ja die Java Generics haben sogar ein paar wenige Sachen, die mir da gut gefallen, wo man in C++ ein wenig komplizierter vorgehen muss. Aber grundsätzlich ist es halt kein wirklicher Vergleich.

Das "Problem" hatte ich allerdings auch schon mal gehabt, den Punkt lasse ich gelten. Wobei ich auch schon üblen Missbrauch dieses Features gesehen habe, insofern kann man sich da durchaus drüber streiten.
Das ist irgendwie genau der Unterschied in den Philosophien der Sprachen. Warum sollte man ein Feature verbieten, nur weil man es missbrauchen kann? Diskutieren kann man natürlich gerne, weil es gibt durchaus Features, die in den meisten Fällen eigentlich nur schlecht genutzt werden können. Aber Operatorüberladung gehört jedenfalls nicht dazu, meiner Meinung nach. Wird ja auch oft gesagt, dass C++ es einem extrem einfach macht, sich selbst in den Fuß zu schießen ;) Aber dann muss man halt nur wissen, wann man die Pistole aufnehmen sollte. Wenn man da allerdings die Pistole aufnimmt ohne seine Funktion wirklich zu kennen, ist man selber Schuld, wenn man ein Loch im Fuß hat.

Vorteil für C/C++, wenn man ihn denn sinnvoll einsetzt. Man kommt aber auch ohne aus. Was ich aber schon ab und an gerne hätte wäre ein #ifdef DEBUG ;-)
Ja genau, ich bin auch kein Freund vom Preprocessor und nutze ihn als.. "letzte Möglichkeit". Er hat durchaus sinnvolle Einsatzgebiete, wie z.B. X-Makro Konstrukte. Aber modernes C++ versucht auch den Preprocessor in den meisten Anwendungen abzulösen.

Kann man per Überladung nachbauen, wenn man es denn unbedingt braucht.
Ist aber viel, viel mehr Tipparbeit und irgendwie... auch nicht so "expressive" :D



Also wenn wir das neutral machen könnten (ich versuche auch nicht zu meckern ^^), vielleicht so mit Vor- und Nachteilen, könnte das für Neueinsteiger hiflreich sein. So eine Art FAQ für Neueinsteiger vielleicht.
Genau das hatte ich vor, das wäre toll.
 
AW: Ein sticky Thread "Programmieren lernen" für Anfänger?

Ich verstehe hier nicht ganz, was du meinst. Dass Java explizite Pointer verbietet ist halt.. naja.
Das ist weniger ein Verbot des verbieten wegens als ein Erfordernis damit die automatische Speicherverwaltung in Ruhe durch den Ram wüten darf.

C# hat als Notlösung "fixed" eingeführt womit man die Umsortiererei zeitweilig aussetzen kann. Funktioniert zwar, verkompliziert die Sprache aber auch weiter (man könnte auch sagen es ist eine typische MS-Lösung: Hauptsache ein Feature mehr angeboten, egal wie).
 
AW: Ein sticky Thread "Programmieren lernen" für Anfänger?

Ich verstehe hier nicht ganz, was du meinst. Dass Java explizite Pointer verbietet ist halt.. naja. Vllt. kannste nochmal erklären, was du genauer meinst.
In Java ist alles ein Objekt(-zeiger), was kein primitiver Datentyp ist. Warum dann noch einen separaten Datentyp? Du hast ja quasi implizit nur noch Zeiger. Ich wüsste jetzt nicht, was man mit dem Zeiger noch machen möchte.

Das kannte ich noch nicht und es scheint wirklich sinnvoll in Java. Trotzdem ist es zusätzliche Syntax und zusätzlicher Aufwand. RAII quasi als "default" für Resourcenmanagement zu nutzen, finde ich definitiv besser. Vorallem sehe ich keinen Grund, es nicht "default" zu machen. Die Sache mit dem GC ist so... wenig genau definiert. Man weiß nicht, wann welches Objekt wirklich zerstört wird. Die finalize() Methode wird ja auch erst aufgerufen, wenn der GC sich mal entscheidet, das Objekt wegzuräumen.
Naja, du hast halt durch den GC gewisse Einschränkungen was die Ressourcenverwaltung angeht. In C# läuft das ja ähnlich, wobei man dort durchaus einen Destruktor definieren kann (muss), der funktioniert aber auch anders als in C++ (und ich meine jetzt nicht IDisposable). Das ist halt eine Abwägung zwischen Komplexität und Performance des GC und Flexibilität/Möglichkeiten der Sprache.

Und jeder, der nicht komplett in C++ steckt, sieht garnicht, wie viel mehr Templates können. Aber das verlange ich auch garnicht, dass das jeder weiß und dein "nicht so mächtig" ist ja schon korrekt ;) Außerdem ist es sowieso irgendwie peinlich, dass Java so ewig lange für Generics gebraucht hat (die auch nur per Type-Erasure funktionieren) wo C++ schon in 98 einen kompletten Standard mit Templates hatte. Der Artikel ist auch recht alt, stimmt auch wohl. Und ja die Java Generics haben sogar ein paar wenige Sachen, die mir da gut gefallen, wo man in C++ ein wenig komplizierter vorgehen muss. Aber grundsätzlich ist es halt kein wirklicher Vergleich.
Ich hab mit Templates schon mal meinen Visual C++ Compiler überfordert ("Error: Compiler ran out of heapspace", Buildzeit lag bei 40+ Minuten :ugly:), mir ist durchaus bewusst, was man mit Templates machen kann. Ich wollte ja nur sagen, dass es mittlerweile in Java Generics gibt und der Text wohl noch auf eine ältere Java-Version Bezug nimmt. Und die Generics in Java nur einen Teilbereich der C++ Templates abdecken.

Das ist irgendwie genau der Unterschied in den Philosophien der Sprachen. Warum sollte man ein Feature verbieten, nur weil man es missbrauchen kann? Diskutieren kann man natürlich gerne, weil es gibt durchaus Features, die in den meisten Fällen eigentlich nur schlecht genutzt werden können. Aber Operatorüberladung gehört jedenfalls nicht dazu, meiner Meinung nach. Wird ja auch oft gesagt, dass C++ es einem extrem einfach macht, sich selbst in den Fuß zu schießen ;) Aber dann muss man halt nur wissen, wann man die Pistole aufnehmen sollte. Wenn man da allerdings die Pistole aufnimmt ohne seine Funktion wirklich zu kennen, ist man selber Schuld, wenn man ein Loch im Fuß hat.
Ist sage ja nicht, das Java perfekt ist. In C# gibt es das Feature ja und das wurde von einem ehemaligen Java-Entwickler mitdesignt ;-)

Ja genau, ich bin auch kein Freund vom Preprocessor und nutze ihn als.. "letzte Möglichkeit". Er hat durchaus sinnvolle Einsatzgebiete, wie z.B. X-Makro Konstrukte. Aber modernes C++ versucht auch den Preprocessor in den meisten Anwendungen abzulösen.
Sehe ich auch so!

Ist aber viel, viel mehr Tipparbeit und irgendwie... auch nicht so "expressive" :D
Meckern auf hohem Niveau ^^

Genau das hatte ich vor, das wäre toll.
Ok, dann hatte ich das wohl nicht so ganz richtig interpretiert :D
 
Zurück