Einsteiger Programmiersprachen

Der Thread artet schon wieder aus wie jeder dieser Threads. Einfach anfangen, reinkämpfen und dranbleiben (!), Sprache egal.
 
  • Gefällt mir
Reaktionen: areiland, Ebrithil, Raijin und eine weitere Person
Wichtigste: Nimm die Sprache auf die du Bock hast, warum auch immer. Das ist das mit Abstand wichtigste Kriterium. Dass dem keine technische Analyse zugrunde liegt ist klar.

Davon abgesehen bietet sich folgendes an für die erste Sprache:
  • Vornehmlich auf objektorientierte Programmierung ausgelegt
  • Statisch typisiert
  • Speicherverwaltung ist weg abstrahiert
Java ist ein klassischer Vertreter, der alle drei Bedingungen erfüllt.
Python ist als Skriptsprache nicht statisch typisiert, aber das muss einen am Ende auch nicht aufhalten damit zu beginnen. C++ hat zwar heute smart pointer, aber das ist dennoch Komplexität, die zusätzlich mit obendrauf kommt, wenn man damit anfängt.
 
BeBur schrieb:
C++ hat zwar heute smart pointer, aber das ist dennoch Komplexität, die zusätzlich mit obendrauf kommt, wenn man damit anfängt.
Braucht man aber nicht. Jedenfalls nicht in den ersten fünf Jahren der Programmiererei. Ansonsten ist in C++ die "Speicherverwaltung wegabstrahiert" wenn man das möchte (C++-Standardbibliothek). Wenn man das unbedingt möchte, kann man aber auch in C++ die Speicherverwaltung explizit selbst vornehmen.

Python für Anfänger ist imho nicht optimal, da es "einfach" zu sein scheint aber sehr schnell viel zu komplex wird, wenn man etwas Nichttrviales machen will. Dann muß man nämlich Python-Idiome erlernen, die nur auf Python und ggf. sogar nur auf eine der beiden gängigen Versionen zutreffen. Außerdem ist die logische Strukturierung des Quellcodes durch Leerzeichen nicht jedermanns Sache (meine nicht). Dafür ist die Sprache "Mode" und den sozialen Aspekt einer Community, die ihr Werkzeug an sich "supertoll" findet, darf man nicht unterschätzen.

Warum nicht Java? Java, das finde ich halt, macht keinen Spaß. Das kann man später immer noch erlernen, wenn man unbedingt muss - um z. B. Geld zu verdienen. Aber freiwillig? Java?
 
blöderidiot schrieb:
Braucht man aber nicht. Jedenfalls nicht in den ersten fünf Jahren der Programmiererei. Ansonsten ist in C++ die "Speicherverwaltung wegabstrahiert" wenn man das möchte (C++-Standardbibliothek). Wenn man das unbedingt möchte, kann man aber auch in C++ die Speicherverwaltung explizit selbst vornehmen.
Das habe ich nicht verstanden. Wir sprechen eventuell von verschiedenen Dingen.
Mir geht es darum, dass du in C++ Speicher teilweise selber freigeben musst. Smart-Pointer gibt es ja, aber damit sieht man sich plötzlich einem Konzept gegenüber, mit dem man als Anfänger eigentlich nicht konfrontiert sein will. Mit etwas Konzentration kann man vllt. einfach überall shared pointer verwenden und raw pointer, weak pointer und unique pointer einfach ignorieren, aber das ist alles für einen Anfänger unnötiger overhead, wo wir hingegen bei z.B. Java "es funktioniert einfach" haben durch den garbage collector.

Idiome gibt es imHo in jeder Sprache. Das Python schneller komplexer als andere Sprachen wird würde mich wundern, kann aber theoretisch sein, habe damit noch nicht viel gearbeitet.
 
BeBur schrieb:
Das habe ich nicht verstanden. Wir sprechen eventuell von verschiedenen Dingen.
Mir geht es darum, dass du in C++ Speicher teilweise selber freigeben musst. Smart-Pointer gibt es ja, aber damit sieht man sich plötzlich einem Konzept gegenüber, mit dem man als Anfänger eigentlich nicht konfrontiert sein will. Mit etwas Konzentration kann man vllt. einfach überall shared pointer verwenden und raw pointer, weak pointer und unique pointer einfach ignorieren, aber das ist alles für einen Anfänger unnötiger overhead, wo wir hingegen bei z.B. Java "es funktioniert einfach" haben durch den garbage collector.
OK.

Mit "Smart-pointer braucht man nicht" meinte ich: Man braucht in modernem C++ sich im Grunde überhaupt nicht mehr mit Speicherverwaltung herumzuschlagen - durch die Standardbibliothek und deren Container. Die "alltägliche" Erzeugung und Verwaltung von Objektspeicher ist an die "Lebenszeit" (scope) gekoppelt und funktioniert prima. Es sei denn, man möchte davon abweichen, z. B.:
  • man will ein Objekt von mehreren Stellen aus referenzieren und es soll so lange erhalten bleiben bis alle Referenzen verschwunden sind,
  • man will ein Objekt nur von exakt einer Stelle aus referenzieren,
  • ein Objekt kann über mehrere Stellen gleichzeitig referenziert werden und kann von jeder Stelle aus entfernt werden.
Aber sowas wird der Anfänger in den ersten 5 Jahren nicht zu sehen bekommen. Was er sieht, ist scope-basierte "automatische" Speicherverwaltung:
C++:
 ...
{  // block (scope) begin

   std::vector<double> A(1000000, 1.0); // alloc. 1 Mio doubles, "1.0"
   initialize_difficult_calculations(A);

   std::vector<double> B(1000000, 0.0); // alloc. 1 Mio doubles, "0.0"

   for (auto v : B)
      v += mega_complex_function_of(A);
   ...
} // scope end, A und B automatisch gelöscht
...
~
Idiome gibt es imHo in jeder Sprache. Das Python schneller komplexer als andere Sprachen wird würde mich wundern, kann aber theoretisch sein, habe damit noch nicht viel gearbeitet.
Python ist schon ok, aber bei komplexerer Textauswertung und Umwandlung hab ich bisher meistens geflucht und dann doch Perl genommen ;)
 
  • Gefällt mir
Reaktionen: T_55 und BeBur
blöderidiot schrieb:
Aber sowas wird der Anfänger in den ersten 5 Jahren nicht zu sehen bekommen. Was er sieht, ist scope-basierte "automatische" Speicherverwaltung:
sorry, halte ich für realitätsfern.

Und selbst wenn: google mal ohne Ahnung nach Hilfe zu C++ und entscheide dann ob vorliegendes ein moderner Ansatz von C++ ist, oder nicht.
 
  • Gefällt mir
Reaktionen: areiland und BeBur
Anscheinend bin ich hier der einzige Schreiber,
der Anfängern das Programmieren beibringt,
die nicht bereits in der IT zuhause sind.

Mal paar Erkenntnisse aus der Praxis (~50 Workshops, ~500 Anfänger):
  • nach den Java & Android Kursen kommt kaum einer mehr (Installation auf Windows..., Kompilieren, wie zeigt man es Freunden?, Typisierung?)
  • die Promovierenden nutzen gerne Python, weil einfach und gutes Ökosystem (Numpy etc.)
  • JavaScript wird am meisten gemocht & höchste Rate an Dranbleibern (Browser Konsole reicht, viele REPLs wie Codepen & Codesandbox, man kann schnell mal was Lauffähiges zeigen)

Im Endeffekt ist meine Erkenntnis, dass bei den Sprachen, die wir toll finden,
kaum einer dran bleibt. Und mir persönlich ist es am wichtigsten, dass sie dran bleiben.
 
  • Gefällt mir
Reaktionen: DubZ
Am wichtigsten finde ich ist, dass man sich etwas konkretes vornimmt, etwas was man wirklich machen will, was aber auch realistisch ist, also kein 3D-Spiel oder ein neues Photoshop. Ich persönlich hab den Einstieg mit einem Elder Scrolls Online UI-Addon gemacht, weil ich was wollte was es nicht gibt. Da hab ich dann auch gemerkt, dass mir Programmieren echt spaß macht.

Eine Sprache aussuchen bringt dir nichts, wenn du dann nicht weißt was du machen sollst. Die Grundlagen lernt man in jeder Sprache, und Motivation durch ein eigenes Ziel ist imho viel wichtiger. Lernen des Ziels wegen, nicht des Lernens wegen!

Also überleg dir was, z.B. ein simples Spiel wie Pong im Browser mit JS + etwas HTML wäre imho eine gute Wahl, da wie @mastaqz schon sagte, man dort recht einfach rein kommt und auch schnell Erfolge sieht, und FF und Chrome schon viele Tools mitbringen.
 
Das mit der C++ Speicherverwaltung ist spannend, auch vor den Smart-pointern hat man die "manuelle" dynamische Speicherverwaltung mit new etc nicht zwangsläufig nutzen müssen. Man kann Objekte immer auch in Container wie maps etc legen wenn Sie irgendwo länger leben sollen. Am Ende müssten auch Pointer zu Objekten irgendwo zur Verfügung stehen dann kann auch man gleich dort das Objekt reinstecken. Das erste mal wo ich tatsächlich zu einem "new" gezwungen wurde war im GUI Bereich.

Ich denke man kann auch durchaus mit C++ einsteigen denn die ganzen Möglichkeiten dort sind ja freiwillig. Erstmal dort im C-Style die prozeduralen Basics lernen, Funktionen, Basis-Datentypen, Arrays, Schleifen etc, dann nimmt man Structs/Klassen rein und die C++Container und geht einfach weiter mit Dingen die man für seine Projekte braucht.
Ich bin damals komplett von null mit C++ gestartet und es war die beste Entscheidung überhaupt, ich will nie wieder darauf verzichten.

Es ist auch immer die Frage was man überhaupt längerfristig programmieren will, hat man nur mal ein kleines "Projekt" und will ein paar Daten darstellen dann gehts natürlich viel leichter mit sowas wie Python das ist klar.
 
mental.dIseASe schrieb:
Der Thread artet schon wieder aus wie jeder dieser Threads.
Diese Threads entwickeln sich über die Dekaden inhaltlich irgendwie auch nicht weiter, obwohl sich technologisch einiges getan hat.

Das Schöne an solchen Threads ist aber, dass jeder mal unverbindlich seine Präferenz ablassen kann, daher mache ich das auch und hab genau so viel oder wenig Recht, wie alle anderen. :)

Statt Java -> Kotlin
Statt C/C++ -> Rust
Statt Javascript -> Typescript

Für kleine Sachen bin ich aber auch Fan von Python und das war auch die Sprache, mit der ich in der Schule damals Programmieren gelernt habe. Und ja, damit kann man natürlich auch umfangreiche Software schreiben.
 
Die Frage ist ja nicht primär, welchen Funktionsumfang eine Sprache bietet, sondern womit ein Anfänger der jeweiligen Sprache konfrontiert wird. Und was sinnvoll für einen Anfänger ist.
 
Ich habe vor 18 Jahren auf dem Gym im Info Unterricht Delphi gelehrt bekommen. Eine sehr einfache Sprache und für Anfänger dank der simplen visuellen Möglichkeiten ideal. Wenn man als Anfänger ein Tool zur Kurvendiskussion programmiert, will man eben auch direkt den Graphen visuell zeichnen und eben Buttons und Editfelder nutzen. In späteren Ausbildungen wurde dann auf Java und C++ gesetzt und letzten Endes bin ich doch privat immer bei Delphi geblieben...

Aber es kommt eben darauf an, in welche Richtung man sich entwickeln möchte oder ob es nur ein Hobby zum Selbstzweck sein soll.
 
Tumbleweed schrieb:
daher mache ich das auch und hab genau so viel oder wenig Recht, wie alle anderen. :)
Das mag sein, aber
Tumbleweed schrieb:
Statt Javascript -> Typescript
TS ist keine eigene Sprache, es ist nur ein superset zu JS, mit Typisierung und etwas syntactic sugar. Wer TS kann kann auch JS, und wer JS kann kann auch TS. Für größere Projekte würde ich aber nur noch TS nutzen wollen, macht einfach keinen Sinn darauf zu verzichten.

TS + IDE mit den tsconfig options
Code:
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"strict": true,
"noUnusedLocals": true
verhindert schon mal ne ganze Menge an Fehlern, und ist 1000x angehnemer zu nutzen.

Zum Anfang aber imho eher schlecht, da man sich dann erst ums "Kompilieren" kümmern muss, statt den code direkt (z.B. im Browser) ausführen zu können, und der code ist so oder so eher kurz. TS kann man dann nutzen, wenn man die Grundlagen schon versteht, und der code größer wird.
 
Zurück
Oben