# Programmieren lernen - Wie beginnen?



## delfiniumextremum (5. Juni 2019)

Moin Liebe Community!

Ich würde mir gerne Programmieren beibringen. Gerade im Hinblick auf meine Zukunft möchte ich mir die Skills dafür aneignen, notfalls auf etwas ausweichen zu können bzw. etwas anderes vorweisen zu können.
Leider habe ich noch nicht wirklich programmiert und fühle mich schier von der Menge der Möglichkeiten erschlagen.
Was wäre der beste Weg mit dem Programmieren zu beginnen? Einige die ich gefragt habe meinten: "Denk dir ein Projekt aus und fang einfach an!". Aber WIE fange ich an? Und woher bekomme ich das Wissen?

Dazu würde mich mal interessieren, wie ihr mit dem Programmieren begonnen habt und was euer erstes Projekt war!


----------



## DerFakeAccount (5. Juni 2019)

Moin, das ist eine Frage die gar nicht so leicht zu beantworten ist wie ich finde.

In meiner Ausbildung (Fachinformatiker Systemintegration) kam die Sprache Java zum Einsatz, auf einer anderen Schule die ich vor meiner Ausbildung besucht habe wurde C angewendet.
Im Prinzip würde ich nach folgendem Prinzip vorgehen:

Was will ich erreichen, Webanwendung, Handy App, oder igendwas am PC.
Wenn das klar ist die entsprechenden Sprachen raussuchen und über diverse Quellen dich festlegen.

Es gibt viele verschiedenen Websites die dir Kurse anbieten, ganz schnell eine kleine Auflistung: Programmieren lernen: Die besten Quellen fuer den Einstieg
Viele weitere per Google Suche zu finden, einfach "Sprache X Anfängerkurs" oder ähnliches suchen.

Ich muss dazu allerdings aus meinen eigenen Erfahrungen sagen, stell es dir nicht zu leicht vor, ich habe C und Java probiert und bin gescheitert. Mit dem Themen Hardware/Software und Administrierung hatte ich nie Probleme, aber im Bereich Programmieren habe ich nie so den Durchblick gehabt. 

Ich stehe aktuell vor der Entscheidung Python zu versuchen um mir kleine Skripte zu basteln, das wäre mein Vorschlag wenn es um den Bereich Windows/Linux Programmierung/Scripting geht.

An meine ersten Projekte kann ich mich nicht wirklich entsinnen, ganz basic irgendwas mit Hallo Welt


----------



## delfiniumextremum (5. Juni 2019)

Danke dir für die Antwort!

Was meinst du mit "gescheitert"? Dass du an dem Punkt angekommen bist, wo du für dich selbst entschieden hast, dass du die Finger davon lässt? Was hat dich letzten Endes dazu getrieben? Die Komplexität des Programmierens selbst oder die der Sprachen?
Kann man sich denn das Programmiersprachen lernen so vorstellen, als würde man eine neue, verbale Sprache erlernen?

Ich habe mir zum Beispiel vor kurzem überlegt mir selbst ein "Passwortprogramm" zu programmieren. Soetwas, wie es quasi schon in Massen gibt, was ich aber für mich selbst erstellen möchte, damit es eben "einzigartig" ist und somit nochmal (vermeintlich) sicherer.


----------



## DerFakeAccount (5. Juni 2019)

Gescheitert im Sinne von ich kann die Sprache lesen und skripte verstehen, bin aber zu "blöd" das selbst anzuwenden und frei zu schreiben.
Ja Programmiersprache lernen ist ähnlich einer neuen Sprache.

Ein Passwortprogramm mit GUI, diversen Verschlüsslungsmethoden und so weiter, nett, aber das würde ich auf gar keinen Fall als Anfängerprogramm bezeichnen.


----------



## taks (5. Juni 2019)

DerFakeAccount schrieb:


> Ein Passwortprogramm mit GUI, diversen Verschlüsslungsmethoden und so weiter, nett, aber das würde ich auf gar keinen Fall als Anfängerprogramm bezeichnen.



Wieso nicht? Er kann ja zuerst mal lernen wie man klartext Passwörter per console in ein Array schreibt, dann wie man sie in der Datenbank ablegt, dann ein GUI dazu bauen, dann die Verschlüsselung dazu, etc.
Schritt für Schritt zum Ziel.


----------



## DerFakeAccount (5. Juni 2019)

taks schrieb:


> Wieso nicht? Er kann ja zuerst mal lernen wie man klartext Passwörter per console in ein Array schreibt, dann wie man sie in der Datenbank ablegt, dann ein GUI dazu bauen, dann die Verschlüsselung dazu, etc.
> Schritt für Schritt zum Ziel.



Das ist vollkommen richtig, alle Komponenten einzeln fertig stellen und am Ende alles kombinieren, so muss man auch vorgehen. Als ich am Anfang stand wäre das zu viel gewesen.


----------



## delfiniumextremum (5. Juni 2019)

taks schrieb:


> Wieso nicht? Er kann ja zuerst mal lernen wie man klartext Passwörter per console in ein Array schreibt, dann wie man sie in der Datenbank ablegt, dann ein GUI dazu bauen, dann die Verschlüsselung dazu, etc.
> Schritt für Schritt zum Ziel.



Also würdest du vorschlagen, das ganze problemorientiert anzugehen und mich dann nach und nach an die Lösung heranzutasten?
Muss ich dafür aber nicht auch das Wissen besitzen, was so ein Programm ansich beinhalten muss?


----------



## Teacup (5. Juni 2019)

Möchtest Du unter Windows klassische Programme mit GUI schreiben:

Visual Studio runterladen
VB.NET oder C# als Sprache nutzen
Projekt anlegen
GUI irgendwie zusammenklicken
...


```
while(KeineAhnunghaben && DurchhalteVermögen >= Frust)
{
Projekt_anlegen();
GUI_irgendwie_zusammenklicken();
feststellen,_dass_alles_falsch_war();
Wissen++;
Projekt_löschen();
Frust++;
}
```

Oder so 

Ich habe die Erfahrung gemacht: Wenn jemand nicht in die Tiefe der Informatik vordringen möchte, sondern nur "halt mal ein Programm schreiben" will, ist es ganz motivierend etwas zu sehen. Daher mal ganz blöd GUIs zuammentackern und googlen bis die Finger bluten... bei MS findet man zu quasi allem kurze Beispiele.


----------



## Teacup (5. Juni 2019)

DerFakeAccount schrieb:


> Das ist vollkommen richtig, alle Komponenten einzeln fertig stellen und am Ende alles kombinieren, so muss man auch vorgehen. Als ich am Anfang stand wäre das zu viel gewesen.



Man kann das ja beliebig kleinschrittig machen:

1. Nur GUI ohne jegliche Funktion
2. Kopf drücken macht etwas
3. ...



delfiniumextremum schrieb:


> Also würdest du vorschlagen, das ganze problemorientiert anzugehen und mich dann nach und nach an die Lösung heranzutasten?
> Muss ich dafür aber nicht auch das Wissen besitzen, was so ein Programm ansich beinhalten muss?



Wenn Du nur einfach für Windows ein Programm zusammenschrieben möchtest (das kann auch umfangreich sein, so ist es nicht) muss man so was tatsächlich nicht wissen. All den Standardkram übernimmt die IDE (Visual Studio) für einen.


----------



## DataDino (5. Juni 2019)

Als erstes würde ich mich immer zuerst mit den Schlüsselwörtern und dessen Bedeutung auseinandersetzen. Mit den Schlüsselwörtern ertastet man sich die Logik hinter den Programmen.

Es ist definitiv deutlich anders als eine verbale Sprache. Programmiersprachen kennen in der Ausdrucksweise weder Zeit noch Grammatik. Die einzige Grammatik ist die Syntax und die einzige Zeit die Gegenwart. Das komplizierte am Programmieren ist die Logik.


----------



## cPT_cAPSLOCK (5. Juni 2019)

Programmieren lernen ist, wie jede andere Tätigkeit zu lernen. Man wird nicht durch das Lesen von Kunstbüchern zum Picasso und das erste Bild wird mit Sicherheit keine Mona Lisa.
Es gibt haufenweise Tutorials im Internet. Wenn du einfach grundlegend Programmieren möchtest, ist die Sprache letzten Endes gar nicht mal so wichtig. Eine häufig genannte "Einsteigersprache", welche auch im Arbeitsleben häufig gefragt ist und sehr flexibel ist, wäre Java. Allerdings macht Java schon viele Dinge "von alleine", welche andere Programmiersprachen dem Programmierer überlassen. Wenn du grundlegend alles von Grund auf lernen willst, wäre C wahrscheinlich eine gute Wahl. Noch tiefer muss man da eigentlich nicht einsteigen. Allerdings wirst du dich damit abfinden müssen, dass deine Programme dann nicht so "oppulent" sein werden, wie bei Java, weil die Lernkurve deutlich steiler ist.
Ich würde vorschlagen, du suchst dir ein Tutorial heraus und dann fängst du mal langsam und Schritt für Schritt an, dich einzuarbeiten 
Denk dran: es ist noch kein Meister einfach so vom Himmel gefallen. Das braucht jahrelange Arbeit.
gRU?; cAPS


----------



## Laudian (5. Juni 2019)

delfiniumextremum schrieb:


> Also würdest du vorschlagen, das ganze problemorientiert anzugehen und mich dann nach und nach an die Lösung heranzutasten?



Ich würde das ganze auf jeden Fall problemorientiert angehen. Das ist die Kunst beim Programmieren - Probleme lösen.

Natürlich musst du dazu zunächst einmal die grundlegendsten Grundlagen kennen. Datentypen, Schleifen, Objekte, Funktionen/Methoden...

Die Programmiersprache hängt so ein bisschen davon ab, was genau du programmieren möchtest. Für Websites und eher kleine Programme ohne grafische Oberfläche empfehle ich dir Python, mit grafischer Oberflächer oder bei umfangreicheren Programmen Java. C# ist quasi das gleiche wie Java, aber mehr oder weniger Microsoft exklusiv. Wenn du bei Windows bleiben möchtest kannst du also auch C# nehmen.

Die Entscheidung ist jetzt auch nicht soooo wichtig, 80% des Wissen kannst du von einer Programmiersprache zur nächsten mitnehmen, falls du dich dann doch noch einmal umentscheidest.

Wenn du dich für eine Sprache entschieden hast empfehle ich dir, in einem Tutorial einmal die ersten 2-3 Kapitel durchzulesen. Das brauchst du einfach, um die wirklichen Basics kennenzulernen. Wenn du möchtest können wir uns bestimmt auch einmal im Teamspeak oder Discord zusammensetzen und dir beim Einrichten der nötigen Software und den Anfängen helfen.

Anschließend würde ich mir dann ein paar Aufgaben suchen, bei denen du die Lösung am Ende testen kannst. Ich empfehle immer Advent of Code 2018 - da bekommst du eine Textdatei und eine Aufgabe und kannst deine Lösung am Ende auf der Internetseite eingeben um zu prüfen, ob sie stimmt. Auf Reddit kannst du dir auch viele Lösungsvorschläge in den verschiedensten Programmiersprachen angucken, falls du mal nicht weiterkommst. Die Aufgaben werden nach und nach schwerer.

Bücher etc sind immer doof finde ich - da steht als Lösung meist eine Möglichkeit, wie man ein Programm hätte schreiben können - das bringt dir aber nicht viel, wenn deine Lösung anders aussieht.

Kurz - entscheide dich einfach für eine Sprache und fang an zu gucken, wie die Sprache funktioniert und spiel etwas damit herum.


----------



## grasshopper_1975 (5. Juni 2019)

C++ Aufgaben - Einfach, Mittel, Schwer,.. ..
für den ganz leichten Einstieg. In den Videos findest Du links wo Du weitere Informationen zu allem möglichen findest...

Als IDE kann man mal gucken.. Es ist halt immer Geschmackssache. Ich hab von der FH eclipse ans Herz gelegt bekommen
(nicht gleich alle auf mich drauf pls, ist vielleicht nicht das Gelbe vom Ei, aber es funktioniert immerhin):
Eclipse downloads - Select a mirror | The Eclipse Foundation 

zusammen mit MinGW für Windows:
MinGW-w64 - for 32 and 64 bit Windows download | SourceForge.net

Dann kann man ganz in Ruhe weiter gucken.. so hab ich auch angefangen.. bin kein Crack da drin, aber immerhin weiss ich langsam,
wie man vorgehen kann bzw. muss, damit es auch was wird


----------



## delfiniumextremum (7. Juni 2019)

Herzlichen Dank für die ganzen Antworten  Ich denke, dass ich mich einfach mal hinsetze und mir meinen "Passwort-Safe" mit einem Sprung ins kalte Wasser programmieren werde. Dafür wäre Java ja am "besten", da ich eine grafische Oberfläche brauche, richtig?


----------



## Teacup (7. Juni 2019)

delfiniumextremum schrieb:


> Herzlichen Dank für die ganzen Antworten  Ich denke, dass ich mich einfach mal hinsetze und mir meinen "Passwort-Safe" mit einem Sprung ins kalte Wasser programmieren werde.



Das ist schon mal die richtige Idee .



> Dafür wäre Java ja am "besten", da ich eine grafische Oberfläche brauche, richtig?



Da siehst Du einen Zusammenhang wo keiner ist. Du kannst mit QT + C++, Java + Swing, C#/VB.NET + WinForms/WPF/UWP, Delphi + keine Ahnung was, uvm... ein Programm mit GUI schreiben. 
Wenn Du mit Java anfangen willst bin ich der letzte, der Dich davon abbringen wollen wird. Java ist eine moderne, objektorientierte und plattformunabhängige Sprache, ich muss nur zugeben, dass das Entwickler-Nest von Microsoft schon ganz gemütlich ist.


----------



## RyzA (7. Juni 2019)

DataDino schrieb:


> Es ist definitiv deutlich anders als eine verbale Sprache. Programmiersprachen kennen in der Ausdrucksweise weder Zeit noch Grammatik. Die einzige Grammatik ist die Syntax und die einzige Zeit die Gegenwart. Das komplizierte am Programmieren ist die Logik.


Ich finde verbale Sprachen einfacher.
Programmieren, gerade die neueren Sprachen, ist komplizierter.
Ich habe früher Basic und GW Basic ein bißchen gemacht. Das war noch einfach.
Aber wenn ich mir PHP oder C angucke, mit den ganzen Klammern und Schleifen, blicke ich nicht mehr durch.
Das ist nicht meine Welt.


----------



## taks (8. Juni 2019)

Teacup schrieb:


> , Delphi + keine Ahnung was,


Delphi und VCL 



Headcrash schrieb:


> Aber wenn ich mir PHP oder C angucke, mit den ganzen Klammern und Schleifen, blicke ich nicht mehr durch


Ich habs grad umgekehrt. Ich verzweifle in Python fast weils keine Klammern hat ^^


----------



## efdev (8. Juni 2019)

taks schrieb:


> Ich habs grad umgekehrt. Ich verzweifle in Python fast weils keine Klammern hat ^^



Und man gefühlt das ganze Programm in eine Zeile schreiben kann


----------



## Arkintosz (8. Juni 2019)

Ich würde zum Einstieg C lernen.

Gründe:
- Es ist vom Wissensschatz absolut übersichtlich -> Man hat es irgendwann "gelernt" und ist fertig.
- Man lernt, wie Speicherbereiche im PC verwaltet werden
- Man lernt, dieses Programm zu lesen: GitHub - torvalds/linux: Linux kernel source tree -> Und damit kann man noch viel mehr darüber lernen, wie der PC von der Hardware zur Endnutzer-Software funktioniert.
- Mit C kann man extrem schnelle Programme schreiben.

Nachteile von C: Speicherverwaltung und Zeiger sind keine leichten Programmierkonzepte und benötigen ein logisches Verständnis, um verstanden zu werden. Wenn man sie einmal verstanden hat, ist man aber durch.

Warum ich Python erst später lernen würde:
- Python lebt von fertigen Bibliotheken, die man nur in sein Programm einbinden und benutzen muss. Die Schwierigkeit, in Python gut zu werden, besteht darin, zu wissen, wie man mit den häufig genutzten Bibliotheken umgeht und nicht, dass man die Sprache selbst beherrscht, denn sie ist sehr anspruchslos
- Python ist extrem langsam
- Python und seine Bibliotheken verändern sich vergleichsweise, sodass Dinge eventuell nicht mehr so funktionieren, wie davor.
- Um einen CPU-Thread zu belasten, muss man jeweils einen Python-Prozess starten, der den Code ausführt. Da der Start von Python einiges an Zeit kostet, ist das schreiben von entsprechenden Programmen schwer. Es ist trotzdem sehr ratsam nach den ersten Schritten relativ schnell das Konzept hinter mehreren Prozessen zu verstehen, damit man aktuelle und künftige CPUs auch gut auslasten kann.

Vorteil von Python:
Man hat schnell Ergebnisse und das kann eventuell für zusätzliche Motivation sorgen. Aber wenn man einen Algorithmus implementieren muss, der durch Python sehr langsam läuft, kann es auch sehr demotivieren, dass man keine andere Sprache gewählt hat.

Edit: Eine andere Sprache zum Anfang wäre Java, das auch nicht besonders schnell ist, und auch Objektorientierung mit sich führt, gleichzeitig jedoch die Speicherverwaltung für einen übernimmt. Da hat man jedoch wie bei Python einen Prozess unter dem eigentlichen Programm, der dann das Programm ausführt. Und das ist nicht ganz so cool, wie wenn das Programm direkt auf der CPU läuft.


----------

