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



## Crysis nerd (4. Januar 2014)

*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!


----------



## ztrew (7. Januar 2014)

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.


----------



## keinnick (7. Januar 2014)

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

Ich finde die Idee gut.  Aber ich fürchte, dass das irgendwann in Flamewars ausartet weil Usergruppe A die Programmiersprache X für besser als Y hält.


----------



## FrozenEYZ (7. Januar 2014)

Sehr gute Idee


----------



## Olstyle (7. Januar 2014)

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



keinnick schrieb:


> Aber ich fürchte, dass das irgendwann in Flamewars ausartet weil Usergruppe A die Programmiersprache X für besser als Y hält.


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.


----------



## bingo88 (7. Januar 2014)

*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...


----------



## Crysis nerd (8. Januar 2014)

*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
> 
> ...



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

Im übrigen, eine super Seite hier: C++ - nuwen.net (Was ich meine sind vorallem die 3 Abschnitte mit den Überschriften, die mit "Why" beginnen)


----------



## bingo88 (8. Januar 2014)

*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 

Man könnte vielleicht - möglichst neutral - eine kurze Auflistung einiger für Anfänger geeigneter Sprachen machen oder so.


----------



## Crysis nerd (8. Januar 2014)

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



bingo88 schrieb:


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


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 



bingo88 schrieb:


> 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


----------



## bingo88 (8. Januar 2014)

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



Crysis nerd schrieb:


> 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


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.



> *Destructors*


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



> *Templates*


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.


----------



## Icedaft (8. Januar 2014)

*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....


----------



## Crysis nerd (8. Januar 2014)

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

Okay, dann mal meinen Senf zu dem Thema 



bingo88 schrieb:


> 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.



bingo88 schrieb:


> 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. 



bingo88 schrieb:


> 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.



bingo88 schrieb:


> 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.



bingo88 schrieb:


> 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. 



bingo88 schrieb:


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


Ist aber viel, viel mehr Tipparbeit und irgendwie... auch nicht so "expressive"  





bingo88 schrieb:


> 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.


----------



## Olstyle (8. Januar 2014)

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



Crysis nerd schrieb:


> 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).


----------



## bingo88 (8. Januar 2014)

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



Crysis nerd schrieb:


> 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.



Crysis nerd schrieb:


> 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.



Crysis nerd schrieb:


> 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 ), 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.



Crysis nerd schrieb:


> 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 



Crysis nerd schrieb:


> 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!



Crysis nerd schrieb:


> Ist aber viel, viel mehr Tipparbeit und irgendwie... auch nicht so "expressive"


 Meckern auf hohem Niveau ^^



Crysis nerd schrieb:


> Genau das hatte ich vor, das wäre toll.


Ok, dann hatte ich das wohl nicht so ganz richtig interpretiert


----------

