myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Wie Lerne ich Programmierung? Ein Grundlagenguide.

 
 
Themen-Optionen Ansicht
Prev Vorheriger Beitrag   Nächster Beitrag Next
Ungelesen 11.11.18, 18:56   #1
Erik/Schreier
Ist öfter hier
 
Registriert seit: Feb 2011
Ort: Eastgermany
Beiträge: 222
Bedankt: 358
Erik/Schreier erschlägt nachts Börsenmakler | 26395 Respekt PunkteErik/Schreier erschlägt nachts Börsenmakler | 26395 Respekt PunkteErik/Schreier erschlägt nachts Börsenmakler | 26395 Respekt PunkteErik/Schreier erschlägt nachts Börsenmakler | 26395 Respekt PunkteErik/Schreier erschlägt nachts Börsenmakler | 26395 Respekt PunkteErik/Schreier erschlägt nachts Börsenmakler | 26395 Respekt PunkteErik/Schreier erschlägt nachts Börsenmakler | 26395 Respekt PunkteErik/Schreier erschlägt nachts Börsenmakler | 26395 Respekt PunkteErik/Schreier erschlägt nachts Börsenmakler | 26395 Respekt PunkteErik/Schreier erschlägt nachts Börsenmakler | 26395 Respekt PunkteErik/Schreier erschlägt nachts Börsenmakler | 26395 Respekt Punkte
Standard Wie Lerne ich Programmierung? Ein Grundlagenguide.

Änderungen Stand 20.01.2018: Bessere Formatierung und neue Quelle mit Beschreibung unter Punkt 6.

Programmieren ist ein sehr interessantes aber auch strittiges Thema in der Welt der Computer. Wie man hier im Forum sieht gibt es viele Fragen zum Thema einstieg und diese werden meist nur mit unnützen Kommentaren und wissen von dritten beantwortet. Da es hunderte Threads zum Thema gibt und fast alle die Selben Themen haben entschloss ich mich dazu die wichtigsten Dinge hier im Thread zusammenzufassen ohne dabei auf spezielle Dinge einzugehen. Ich möchte darauf hinweisen dass es sich bei diesem Thread um einen Guide handelt wie man am besten in die Programmierung einsteigt und um kein Programmiertutorial!


1. Programmierung im Wandel der Zeit

Die Programmierung für den Heimgebrauch wurde 1970 von Atari ins Leben gerufen als diese mit dem Atari auch einen Interpreter für Basic auslieferten, diese Sprache war zwar simpel aber durch ihre Goto Befehle wurden größere Projekte unlesbar und Fehleranfällig. Die Sprache wurde zwar im Laufe der Zeit ständig weiterentwickelt und um Funktionen erweitert jedoch glaube ich dass ihr trotz der großen Fangemeinde niemanden findet der euch ernsthaft empfiehlt damit anzufangen.

Richtig loslegen konnte man 2 Jahre später als die ersten Compiler für C herauskamen, diese Sprache machte einen großen Schritt da sie neben Schleifen und Verzweigungen unter anderem auch Funktionen einführte. Der Code wurde plötzlich les- und wartbar und ermöglichte auch größere Projekte wobei die Sprache auch da noch sehr komplex und fehleranfällig war.

Als C dann in C++ um Klassen erweiert wurde ermöglichten diese noch einmal bessere Strukturierung der Programme jedoch wurde durch die Vermischung von altem und neuen die Fehleranfälligkeit erhöht und die Sprache unnötig kompliziert. Die Sprache ist auch heute noch in bestimmten Anwendungsgebieten das Nonplusultra jedoch für uns als Anfänger noch weit weg, falls wir sie überhaupt jeh lernen müssen.

Sun entwickelte mit Java dann eine Alternative zu C++, sie hatte den Vorteil dass sie völlig neu Konstruiert wurde und dadurch (zum damaligen Zeitpunkt) ein konsequentes Arbeiten ermöglichte, des weiteren war es mit Java durch die Interpretation zum ersten mal möglich Programme einmal zu schreiben und sie auf allen Betriebssystemen laufen zu lassen (was heute auch nicht mehr in allen Fällen zutrifft.) Die Sprache selbst war jedoch, auch wenn die Grundlagen recht einfach waren, sehr Komplex und viele Anfänger standen an einem bestimmten Punkt vor unlösbaren Aufgaben und gaben frustriert auf.

Im laufe der letzten Jahrzehnte entwickelten sich auf Basis der vergangenen Sprachen nicht nur solche die für spezielle Problemlösungen entwickelt wurden sondern auch solche die Anfängern die Programmierung so gut wie möglich erleichtern sollten, zugleich aber auch den Vollen Umfang der bekannten besitzen sollten. Kopierten Sprachen wie C# und Visual Basic nur altbekannte Konzepte entstanden damit auch Sprachen wie Python und Ruby welche einen unglaublich verständlichen Code ermöglichen und dabei alle Funktionen besitzen welche man auch als Profi benötigt.

Noch vor 10 Jahren als Python immer mehr an Beliebtheit gewann wurde Bemängelt dass die Sprache durch den Interpreter zu langsam sei und für größere Anwendungen ungeeignet, erfahrene Anwender wussten jedoch dass sie die Sprache in diesem Fall schon damals um C oder C++ Bibliotheken erweitern konnten um diesem Problem entgegenzuwirken. Seit in der 3.x Version eine Vielzahl der bekannten Schwachstellen abgestellt wurden und Programmierer sich kaum noch Gedanken um Resourcen machen müssen wächst die Fangemeinde jedoch stetig und selbst erfahrene Entwickler welche strikt gegen sie waren Steigen nun auf die Sprache um. Die Dokumentation, eine Vielzahl an verfügbaren Bibliotheken und die Masse an guten Tutorials in Verbindung mit der Leistungsfähigkeit der Sprache machen sie zum heutigen Zeitpunkt zum besten was man als Anfänger finden kann.

An alle "Profis" welche sich hier zu Wort melden möchten um ihre Sprache in den Vordergrund zu bringen, wie schwer ist es euch gefallen in euren ersten Tagen zugang zu Quellen und Dokumentationen zu finden, wie schwer fiel euch das Lernen und was bietet eure Sprache die Python im alltagsgebrach nicht bietet?


2. Was benötige ich WIRKLICH

Es ist schwer für jeden einzelnen zu sagen was er für Software benötigt, ich kenne eine IDE für Basic welche 500kb groß ist und alles benötigt um Programme zu schreiben, jedoch ist die Sprache veraltet, wichtige Funktionen fehlen und der Comfort fehlt gänzlich. Ich werde hier auf die Dinge eingehen welche sich in den letzten Jahren durchgesetzt haben und vom Anfänger bis zum Profi benutzt werden. Als Betriebssystem empfehle ich eine Linux Umgebung da diese auf jedem System durch Emulatoren verfügbar ist und besonders im Bereich Programmierung die Community am besten zusammenarbeitet und Plugins entwickelt um die Programmiererfahrung zu verbessern. Außerdem sind 100% der Programme für Linux kostenlos und nach eigenen Wünschen anpassbar.

Falls ihr kein Linux besitzt sucht euch einfach eine Möglichkeit für euer Betriebssystem eine Linux Shell zu emulieren. Mehr als die Kommandozeile benötigt ihr die ersten Monate oder Jahre nicht und die Emulatoren sind als Open Source für jedes Betriebssystem mit 1 Klick installiert ohne dass ihr etwas einstellen müsst. Ich selbst nutze momentan Termux auf meinem Samsung Tablet um unterwegs zu programmieren und kann keine Nachtile zu meiner Windows Umgebung feststellen.

Das wichtigste ist als Anfänger der sichere Umgang mit der Tastatur. Ihr solltet euch angewöhnen die Maus so wenig wie möglich zu nutzen und mit Shortcuts und Makros arbeiten da der Wechsel von Tastatur zu Maus und zurück zum ersten lange dauert und zum zweiten sehr stark ablenken kann. Gewöhnt euch das 10 Finger System an bei welchem eure Finger auf <A> <S> <D> <F> .. <J> <K> <L> <Ö> liegen und auf die für den Finger festgelegten Zeichen wechseln. Sollte euch das Probleme bereiten dann gibt es unter Linux das Programm gtypist welches über ein sehr gutes Tutorial mit Übungen verfügt. (apt-get install gtypist)

Am wichtigsten um effektiv Code zu schreiben ist ein Texteditor welcher euch dabei unterstützt. Ich sage hier explizit Texteditor da IDE's uns zwar sehr viel Arbeit abnehmen jedoch bieten sie wenn wir mit dem Texteditor wirklich umgehen können kaum Funktionen die wir in diesem nicht finden und erschweren uns im späteren Verlauf den Lern und Programmierprozess sogar noch, auch wenn sie am Anfang verlockend wirken. Unter den Texteditoren hat sich bei Entwicklern Emacs und Vim durchgesetzt. Atom für Windows zieht zwar nach jedoch ist dieser noch im Anfangsstadium. Ich empfehle hier Vim bzw. die Neuauflage Neovim. Der Grund ist einfach, diese Editoren wurden speziell für uns Programmierer entwickelt, sie bieten uns Syntaxhervorhebung für nahezu alle Sprachen, ermöglichen uns Funktionen wie automatische Einrückung und Codevervollständigung drch Plugins und was am aller Wichtigsten ist, sie sind zu 100% mit der Tastatur bedienbar (daher sicherer Umgang mit der Tastatur). Wir können mit einem simplen Tastendruck in Zeile n springen, Codezeilen bei Bedarf auskommentieren oder bearbeiten, uns das Vorkommen einzelner Variablen und Befehle hervorheben lassen, Codeblöcke ein und ausblenden und vieles mehr. Eben weil der Einstieg in diese Programme sehr kompliziert sein kann (wenn man das Prinzip einmal verstanden hat jedoch intuitiv ist) empfehle ich Neovim da Swaroop zu diesem einen hervorragenden Guide geschrieben hat der alles nötige bis ins kleinste Detail verständlich erklärt.

Hier kommt auch der Punkt zum Tragen weshalb ich Linux empfehle, dort ist es möglich Vim in der Kommandozeile auszuführen (und er sieht trotzdem super aus) und ihm Plugins und Einstellungen einfach aus vorgefertigten Sets mithilfe des git clone Befehls zu übergeben. Wer sich einmal richtig mit dem Programm befasst hat wird feststellen dass es keine bessere Community als Github gibt egal welche Sprache man nun lernen möchte.

Nun kommen wir zur Wahl der Programmiersprache, wir benötigen auf jeden Fall eine Standardisierte, der Programmierstil sollte festen Konventionen folgen und die Dokumentation solle verständlich und leicht zugänglich sein. Bereits bei diesen Kriterien bleiben nur wenige übrig, wollen wir dann noch einfache Tutorials welche für Anfänger verständlich sind und in die absoluten Grundlagen einführen kann man die die übrig bleiben an einer Hand abzählen. Da wir Zukunftsorientiert lernen wollen und nichtmehr wie früher darauf angewiesen sind eine Lernsprache zu benutzen um dann später auf eine Hochsprache umzusteigen entscheiden wir uns ohne wenn und Aber für Python (Ruby ist ebenfalls eine gute Alternative, jedoch gibt es für diese Sprache kaum deutsche Quellen und sie ist mehr für die Web Programmierung geeignet) da diese einen verständlichen Syntax besitzt und Hunderte vorinstallierte Bibliotheken welche uns alles bieten was wir brauchen (und tausende von dritten wie GUI Programmierung für Android, Spieleprogrammierung usw.).


3. Wie lerne ich effektiv?

Es gibt viele wichtige Punkte um effektiv und zukunftsorientiert zu lernen, ihr müsst nicht nur die Sprache selbst lernen sondern auch die jeweiligen Konventionen, stellt euch vor ihr reist durch Deutschland. Alle sprechen deutsch aber das deutsch eines Bayers ist ein anderes als das des Schwaben, in Deutschland hat man sich daher auf Hochdeutsch geeinigt was jeder versteht (oder zumindest sollte). Genauso verhält es sich mit Programmiersprachen, es gibt viele Wege diese zu schreiben und die Funktion wäre die gleiche. Ihr wollt aber dass andere Programmierer euren Code lesen können und gleichzeitig wollt ihr in der Lage sein den Code eines anderen zu lesen. Die Konventionen für Python werden im PEP 8 Standard festgehalten, es sind Regeln wie man seinen Quelltext formatieren sollte damit er für andere lesbar wird, auch wenn es kein Zwang ist solltet ihr ihn euch von Anfang an daran halte. Vim bietet hierfür ein wunderbares Plugin welches diese Konventionen überwacht und euch darauf hinweist wenn ettwas nicht den Vorgaben entspricht.

Um die Sprache selbst zu lernen benötigt ihr ein Tutorial, hierbei ist es egal ob ihr eines in Textform verwendet oder Videotutorials, es sollte für euch jedoch verständlich sein. Ein gutes Beispiel in Python ist z.B. A Byte of Python von Swaroop, dieses ist kostenlos im Netz verfügbar und leicht verstädlich, es gibt jedoch auch eine Vielzahl weiterer guter Quellen unter anderem im Ebook Bereich des Forums. Zu empfehlen sind die meisten Bücher von OREILLY und PACKT, bei diesen findet man fast ausschließlich Autoren welche seit Jahren die Sprache verwenden und auch in der Community aktiv sind. Abzuraten ist von Büchern des Reinwerk (Gallileo) Verlags da diese meist die Codebeispiele aus anderen Sprachen Portieren und die Autoren meist kaum Erfahrung haben.

Habt ihr euch für ein Tutorial entschieden, arbeitet es Stück für Stück durch, wichtig dabei ist dass ihr den Inhalt nicht auswendig lernt sondern ihr ihn versteht. Es bringt nichts wenn ihr wisst wie ihr Funktion b von Klasse A aufruft jedoch zwei kapitel Später nichtmehr wie es mit funktion c funktioniert. Wenn euch ein Kapitel Probleme bereitet dann lest es noch einmal bis ihr alles verstanden habt und überfliegt das Buch nicht nur. Auch wenn ihr euch sicher seid dass ihr bestimmte Themen bereits aus einer anderen Sprache kennt, lest euch den gesamten Text durch, meistens findet ihr immernoch eine Besonderheit oder Neuerung die euch nicht bewusst war.

Eine gute Hilfe beim Lernen ist es sich auf Papier Spickzettel anzufertigen auf welchen ihr festhaltet wie ihr Instanzen erstellt und verwendet, wie ihr Schleifen aufruft usw. Gerade bei selten verwendeten Funktionen ist es nützlich zu wissen wo man es festgehalten hat statt ein 500 Seiten Buch zu durchsuchen. Legt euch ein Kochbuch zur Sprache zu, in diesen sind meist häufig auftretende Problemlösungen Schritt für Schritt erklärt und durch mehrere Beispiele gelöst. Die Dokumentaton besonders bei Python ist hervorragend, ihr habt zum einen die HTML Datei in welcher ihr euch in den einzelnen Bereichen durchklicken und einlesen könnt und zum zweiten den hilfe() Befehl im Interpreter welcher euch für die einzelnen Befehle die Funktion, die benötigten Parameter und vor allem die Funktionen die in Verbindung mit ihr verwendet werden können.


4. Was fange ich mit meinem Wissen an?

Wenn ihr ein Tutorial zur Programmiersprache durchgelesen habt dann werdet ihr nicht 2 Tage später in Heimarbeit euren eigenen Shooter programmieren. Die Grundlagen welche ihr im Buch lernt nützen euch nur insoweit dass ihr nun alles besitzt um euch selbst Programme zu erstellen und euch sind dabei tatsächlich keine Grenzen gesetzt. Wenn ihr euch vor Augen haltet bei wievielen Spielen im Startbildschirm "Cryengine X" auftaucht wisst ihr wieviele Spieleentwickler nichts anderes tun als sich eine Bibliothek Dritter zu suchen und diese in ihrem Code zu verwenden. Diese Cryengine wiederum wurde von hunderten Programmieren über Jahre entwickelt und gepflegt. Ein gutes Beispiel was allein Möglich ist, Stardew Valley, ein hervorragendes Spiel mit Tiefgang über Jahre von einem einzelnen entwickelt.

Als Programmierneulinge die ihr nun seid solltet ihr euch in den Foren eurer Sprache herumtreiben, seht euch Code anderer an, versucht herauszufinden ob ihr ihn verbessern könntet, schaut euch an auf welche Probleme andere treffen und ob ihr ihnen helfen könnt. Selbst wenn ihr mit einem Vorschlag für ein Programm unrecht habt wird euch im Python Forum keiner den Kopf abreißen, ihr habt dort tatsächlich Entwickler welche sich Zeit für euch nehmen und detailiet beschreiben aus welchem Grund ihr unrecht habt und was ihr verbessern könnt (auch wenn es einige wenige gibt die mit unnützem Wissen punkten wollen).

Eine weitere gute Möglichkeit euch zu verbessern ist sich die Bestandteile von Python genauer anzusehen, nehmen wir an ihr wollt verstehen wie ein Array sortiert wird, die Funktion ist ein fester Bestandteil der Sprache, kopiert euch den Code und probiert ihn aus, überlegt euch dann eine Möglichkeit wie man es anders machen ann und testet sie. Wenn beide Funktionen laufen dann baut mithilfe von print Anweisungen kleine Zähler ein um zu sehen wieviele Durchläufe sie benötigen, setzt einen Timer der euch anzeigt wie schnell sie jeweils sind.

Wenn ihr euch dann sicher im Umgang mit der Sprache fühlt (wie ihr feststellt können wir bis zu diesem Punkt 100% mit der Konsole arbeiten) könnt ihr euch die Dokumentation für GUI Elemente zu Gemüte führen, euch Drittanbietermodule wie Pygame (zum erstellen von Spielen) oder Kivy (Für Gui Programmierung auf Android) ansehen und versuchen Programme dafür zu entwickeln oder wo auch immer die Reise hingehen soll.

Wichtig ist dass ihr nicht versucht nach einer Woche ein Betriebssystem zu entwickeln oder ähnliches, ihr solltet wissen wo eure Grenzen und Ziele liegen und euch schritt für Schritt durch Übung und Erfahrung voranarbeiten. Wenn ihr in euren Programmen Fehler macht dann ist das nichts schlimmes, versucht sie zu beheben und zu verstehen was schiefgelaufen ist, gelingt euch das nicht dann wendet euch an die Community denn durch Fehler lernt man mehr als man vileicht denkt. Und wenn man es so sieht, einige der wichtigsten Errungenschaften der Wissenschaft sind durch Fehler entstanden.

5. Nachtrag

Wie bereits gesagt ist dies hier ein Tutorial um absoluten Anfängern zu helfen möglichst schnell in die Programmierung einzusteigen. Falls hier jemand der Meinung ist Werbung für die Programmiersprache seiner Wahl zu hinerlassen bitte ich dies zu unterlassen da jede Unnütze Information den Lernprozess nur hindert. Versucht euch vor Augen zu halten wie ihr euch gefühlt habt als ihr das erste mal einen Compiler heruntergeladen habt und wie wild nach Befehlen gesucht habt.

Wer konstruktive Verbesserungsvorschläge für den Text hat kann sich natürlich gern zu Wort melden, vileicht gibt es in Zukunft noch Verbesserungen die den Einstieg noch leichter machen oder womöglich habe ich einen Denkfehler im Text, der ja nun doch etwas länger und ausführlicher wurde (bis auf Rechtschreibfehler, die könnt ihr behalten ).

Lasst diesen Thread bitte nicht zu einer Diskussion über Programmiersprachen oder Tools vermüllen wie die anderen hier im Forum und haltet euch mit Kommentaren zurück wenn ihr nichts nützliches zu sagen habt. Falls euch das Tutorial beim Einstieg geholfen habt dann lasst ein Danke da damit der Thread aktuell bleibt und auch anderen hilft.


6. Nützliche Quellen

Swaroops HP >> Hier findet ihr sehr gute Tutorials für Python und Vim >> [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Python Forum >> Klasse Community die immer mit Rat und Tat hilft >> [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] oder [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
github >> Von Programmierern für Programmierer >> [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

Und natürlich die Bücher, Videos und Tutorials des Forums welche ihr unter der Suche Funktion zu Python findet.

Da ich in den letzten Tagen festgestellt habe dass bei den Anfängern die ich persönlich kenne meist nicht die Sprache das Problem ist sondern das funktionale und Objektorientierte denken habe ich hier noch eine sehr nützliche Hilfe gefunden die jetzt ebenfalls volkommen kostenlos ist. Sie benötigt zwar eine Java 8 Installation ist jedoch auf nahezu jedem System lauffähig (getestet auf meinem Raspberry Pi) und unterstützt in der neuesten Version Python, Ruby, Scratch, Java und andere (die dazugehörenden Bücher sind ebenfalls im PDF Format frei erhältlich und beziehen sich auf Java)

Es handelt sich hierbei um einen Texteditor mit Codehighlighting in den man Programme eingeben kann, diese beginnen mit 4 einfachen Anweisungen und werden von euch Schritt für Schritt durch Funktionen und Klassen erweitert um einen Hamster durch ein Labyrinth zu führen. Ihr könnt euch dabei auf die Entwicklung des Programms konzentrieren und der Simulator zieht im Hintergrund die Strippen.

Was anfangs langweilig und kindisch klingt ist auch für Fortgeschrittene interessant die Probleme beim funktionalen und Objektorientierten denken haben. Ich habe die Bücher über Weihnachten mal durchgearbeitet und fand stellenweise Punkte die selbst mir Kopfzerbrechen bereiteten und ich hatte wirklich Spaß an den Büchern.

[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
__________________
1. Streite niemals mit Idioten, sie ziehen dich auf ihr Niveau und schlagen dich dann mit Erfahrung.

2. Wenn jemand denkt er hat die Oberhand, brich sie ihm.

Geändert von Erik/Schreier (20.01.19 um 09:34 Uhr)
Erik/Schreier ist offline   Mit Zitat antworten
Die folgenden 46 Mitglieder haben sich bei Erik/Schreier bedankt:
AcemiMan (19.10.19), Alizahra (20.01.21), B345T (11.11.18), bec3 (13.11.18), Berlindude (04.03.19), BigbadGun (10.10.19), bioseuche (18.05.19), blackpope (15.01.19), Blauesgelb (04.12.19), Bluebyte1976 (12.05.19), Bluesky1982 (17.07.19), Brill_e1 (01.03.19), Cad (30.12.18), calidro (19.08.23), ChillerDave (18.10.19), delta45 (09.02.23), Deserttry (11.05.22), dsen (03.01.21), felymm (18.07.19), gAm3r_13 (06.08.19), HakenX (22.04.22), haraldfseidl (02.01.20), Helina (17.05.23), ibeeback (13.01.19), ivaniog1 (18.10.19), JippiHero (13.01.19), Klaudia2014 (13.01.23), kp500h (16.02.20), lamsieu (09.12.18), luna101 (12.11.18), MSG1 (17.12.18), myespresso (06.01.19), noonim (18.10.19), ohrloch (08.04.20), qiyam (17.02.22), rabbasol (07.08.19), Rimad Sua Tilps (14.03.19), scropi (08.01.23), ShiiRLoXX (13.11.18), silvester01 (16.01.21), skybeat (22.01.21), tetraploid (20.02.20), thechigger (04.01.21), ThePius (29.11.18), titzan (14.11.19), wilma.cray (10.01.19)
 

Themen-Optionen
Ansicht

Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 Uhr.


Sitemap

().