Ich komme mit programmieren durcheinander: Wie kann ich ein guter Programmierer werden?


17.01.2021, 01:34

Ich möchte gerne Apps und Website programmieren. Ich habe sehr Interesse dran. Aber kenne niemanden, der Erfahrung hat, um mir zu helfen.

4 Antworten

Üben... Beim Programmieren lässt sich nur ein kleiner Teil durch theoretisches Wissen aneignen, den Rest muss man in Verbindung mit Üben bekommen. Das heißt: Je mehr du programmierst und Erfahrung hast, desto eher verstehst du auch, erweitertes Wissen. Du musst gelernte Konzepte (Objektorientierung...) selbst anwenden. Suche dir am Besten selbst eine kleine Aufgabe und wende dein bekanntes Wissen an. Dann suchst du nach einem für dich interessanten Tutorial und arbeitest es durch.

Du schreibst, dass du schon etwas Erfahrung mit Java gesammelt hast. Ich vermute mal, dies betrifft bisher nur etwas Grundlagentheorie (Variablen, Kontrollstrukturen, u.ä.), bei der du aber scheinbar auch schon Probleme hattest?

Es wäre daher sinnvoll, den bisherigen Lernpfad etwas infrage zu stellen. Vielleicht waren die Erklärungen deiner Quellen nicht gut oder du hast selbst nicht genügend dazugesteuert (z.B. mit dem Gelernten herumexperimentiert, Übungen absolviert).

Ich empfehle für einen Einstieg sehr gern die Processing-Umgebung. Diese stellt dir eine Zeichenfläche und verschiedene Funktionen, um auf dieser zeichnen zu können, zur Verfügung. Programmiert wird mit der Programmiersprache Processing - einer leichten Abwandlung von Java. Die festen OOP-Strukturen, mit denen du als Java-Anfänger von Beginn an konfrontiert werden würdest (Klassen, Schlüsselwörter wie static oder public/private/...) nimmt sie heraus, denn sie sind für dich erst einmal überhaupt nicht relevant (m.E. eher verwirrend).

Ich denke, sie wird dich auch motivieren, selbst mehr auszuprobieren, denn du kannst dich wie gesagt grafisch austoben. Solche visuellen Ausgaben vermitteln oft einen besseren Zugang, als wenn man nur Text auf der Konsole zurückbekommt.

Es eröffnen sich auch ausgezeichnete Übungsaufgaben. Zum Beispiel Minispiele wie Pong, Snake oder Asteroids. Generell eignet sich Processing zur Programmierung von grafischen Simulationen und kleinen Spielen. Die entstandenen Sketches kann man auch auf Android portieren und wohl auch auf iOS (letzteres ist kein offizielles Projekt von Processing).

Eine Auswahl an Lernquellen habe ich hier schon einmal aufgelistet (ebenso sind dort Quellen zu Java verlinkt). Ich denke, vor allem die Seite von Prof. Dr. Kipp sollte dir ziemlich weiterhelfen, denn er hat wirklich tolle Übungsaufgaben je Kapitel parat.

Wenn du in Processing sicher bist, kannst du nahtlos an Java wieder anknüpfen und dann die OOP-Hürde nehmen.

(...) und kann selber keine Programme schreiben.

Das ist ein Problem, welches (so empfinde ich es) in Tutorials oft etwas vernachlässigt wird. Ganz klar, du musst die einzelnen Grundbestandteile kennen und verstanden haben, die die Sprache hat (Variablen, Schleifen, etc.). Es ist wie das Lernen der englischen Sprache: Du brauchst die Vokabeln und du solltest die Grammatikregeln kennen, um verständliche Texte formulieren zu können.

Also: Trage die Themen zusammen, in denen du noch sehr unsicher bist (oder wiederhole generell nochmal alles). Zu jedem Punkt solltest du Übungsaufgaben absolvieren. Über Praxisübung erscheinen die Aha-Effekte und du kannst dir das Gelernte einprägen. Im Folgenden kann ich noch ein paar Übungsaufgaben formulieren oder verlinken, an denen du dich probieren kannst.

Für das Schreiben etwas komplexerer Anwendungen (z.B. Sortieren von Listen, Suchen von Daten in einer Baumstruktur, Minispielen, ...) würde ich empfehlen, diese zunächst weit entfernt vom Programmcode zu lösen. Formuliere zunächst das Problem in wenigen, einfachen Sätzen und zerlege dies dann in einzelne Aufgabenpakete.

Dazu ein Beispiel: Du hast eine große Fläche (Konsolenfenster) und auf der sollst du ein ausgefülltes Viereck bestimmter Höhe und Breite zeichnen.

Visuelle Darstellung:

*****
*****
*****

Das Viereck lässt sich zerlegen. In mehrere Zeilen, und jede Zeile wiederum in Spalten. Man könnte sich nun fragen:

  1. Wie zeichne ich das komplette Viereck?
  2. Wie zeichne ich nur eine Zeile dieses Vierecks?
  3. Wie zeichne ich nur eine Zelle dieser Zeile?

Vom kleinsten Schritt aufsteigend könnte man nun die Aufgabe leicht lösen. Im Prinzip muss man hier nur schauen, wie man eine Zelle öfter wiederholt.

Lösung in Java:

for (int row = 0; row < rows; ++row) {  // step 3
  for (int column = 0; column < columns; ++column) {  // step 2
    System.out.print("*"); // step 1
  }
  System.out.println();
}     

Ich weiß, dass sieht jetzt einfach aus und ist ja auch ein einfaches Beispiel. Es erfordert jedoch Übung. Schau dir Programmablaufpläne an, nutze sie. Sie werden dir bei der Lösungsfindung helfen, denn sie abstrahieren (es gibt keine Fokussierung auf eine konkrete Syntax der Programmiersprache, sondern auf den logischen Ablauf). Der PapDesigner ist dabei ein ziemlich hilfreiches Tool. Wenn der Plan steht, kannst du ihn auf Java übertragen.

(...) ich kann immer noch die Codes nicht gut verstehen (...)

Auch hier ist Übung notwendig. Anfängern hilft es vermutlich, viel mit Kommentaren zu arbeiten. Zu manchem kann man sich auch Skizzen anfertigen oder du setzt einmal Testwerte für Variablen ein und spielst das Programm folgend so durch (ganz klar, das funktioniert nicht bei jedem Programm so gut). Dazu ein Rat: Mache dich mit dem Debugging-Tool vertraut, welches in den meisten Entwicklungsumgebungen integriert ist.

Was an der Stelle ebenso erwähnbar wäre: Verwende bei eigenen Programmen Bezeichner mit aussagekräftigen, eindeutigen Namen. Wenn du deine Variablen a, b, c, ... nennst, lässt sich das Programm später schwerer lesen.

Zurück zum Lesen fremden Codes: Wichtig ist noch, dass du schon früh damit beginnst, auch mit einer Dokumentation zu arbeiten. Beim oben erwähnten Processing ist die Referenz noch recht klein (wenn auch über die letzten Versionen hinweg durchaus gewachsen). Die Java API-Referenz ist umfangreicher. Vielleicht fallen mir dazu auch gleich noch Übungsaufgaben ein.

Ich möchte gerne Apps und Website programmieren. Ich habe sehr Interesse dran.

Mit Java liegst du in beiden Gebieten richtig. Ich würde dir jedoch empfehlen, zuerst sich in der OOP zu werden, bevor du damit beginnst, Applikationen zu entwickeln (sei es für Desktop z.B. mit OpenJFX oder für Android).

In der Webentwicklung ist Java schwerlastig. Das heißt, es gibt sehr viele und komplexe Technologien. Der Fokus liegt auf Webservices und E-Commerce oder Enterprise-Plattformen mit Webanbindung. Zusätzlich (und das in jedem Fall) müsstest du dich noch mit HTML und CSS auseinandersetzen (oder zumindest Abstraktionen, wie z.B. SCSS).

Aber kenne niemanden, der Erfahrung hat, um mir zu helfen.

Mit GF hast du ja nun eine Plattform gefunden, auf der du Fragen zu den Themen stellen kannst. Hier gibt es genügend Nutzer, die sich mit Java auskennen. Einige spezifische Java-Foren gibt es alternativ ebenso noch. Das Java-Forum beispielsweise.

Zu den Übungsaufgaben:

Schau selbst durch, was du probieren möchtest / was du als Herausforderung betrachtest. Es sind soweit nur Vorschläge.

Hilfreiche Internetseiten:

Einfache Einstiegsaufgaben (für die Konsole; umfassen Kontrollstrukturen, Strings, Arrays):

  • Lasse dir den Namen des Nutzer angeben, um ihn daraufhin begrüßen zu können (Hallo <Name>!).
  • Erweitere das vorherige Programm: Wenn der Nutzer Vor- und Nachname eingibt, soll es ihn mit Hallo Herr/Frau <Nachname>! begrüßen.
  • Lasse dir das Alter vom Nutzer angeben. Wenn er noch unter 18 ist, beende das Programm.
  • Lege drei numerische Variablen an, gib ihnen einen Wert und ermittle, welche von diesen den kleinsten Wert hat.
  • Baue einen kleinen Taschenrechner für die Grundrechenarten. Die Zahlen und der Operator werden separat eingegeben.
  • Erweitere deinen Rechner. Er soll auch zwischen Zahlensystemen (Dezimalzahlen, Binärzahlen, Hexadezimalzahlen, Oktalzahlen) konvertieren können.
  • Entwickle ein Programm zur Berechnung eines Notenspiegels.
  • Schau nach, welche Möglichkeiten ein String bietet, um an dessen einzelne Zeichen (Character) zu kommen. Zwei solltest du mindestens finden.
  • Lies eine Nutzereingabe ein (sie darf Buchstaben, Leerzeichen und Zahlen beinhalten) und lasse dir von dieser nur jeden zweiten Buchstaben ausgeben.
  • Lies eine Nutzereingabe ein und lasse sie rückwärts ausgeben.
  • Sammle mehrere Namen (Nutzereingaben) in einem Array. Bei Eingabe einer Zahl wird geprüft, welcher Name im Array der mit den meisten Zeichen ist. Sollte es Namen gleicher Länge geben, wird der erste Fund gewählt.
  • Berechne die Quersumme einer Zahl. Für einen einfacheren Einstieg in die Aufgabe kannst du die Anzahl an erlaubten Stellen für die Zahl ja auf 3 begrenzen.
  • Implementiere String-Funktionen wie reverse, replace, removeChar, addChar, insertChar, substring oder indexOf selbst, ohne auf die bestehenden Methoden zurückzugreifen.
  • Implementiere ein Zahlen-raten-Spiel (der Computer rät eine Zahl zwischen 0 und 1000 in möglichst wenigen Schritten, er darf dabei nur Ja-Nein-Fragen an den Nutzer stellen).
  • Erstelle ein Programm, welches eine Nutzereingabe ver-/entschlüsselt. Nutze einmal den Caesar-Chiffre und einmal den Vigenère-Chiffre. Falls du noch einen anderen findest, nur zu.
  • Schreibe ein Programm, welches Wörter eines eingefügten Textes alphabetisch (o.a.) sortiert (schreibe dafür eine eigene Sortierfunktion oder biete verschiedene an (Bubble-Sort, Quicksort, Mergesort, Selection Sort, Slowsort, ... - hier findest du eine Übersicht, welche es so gibt, auf den konkreten Seiten finden sich die Algorithmen - allerdings solltest du dir erst selbst Gedanken darüber machen, wie ein Algorithmus dazu aussehen kann, lies dazu die jeweiligen Beschreibungen zum Ablauf auf den Wikiseiten)
  • Schreibe ein Programm, welches Wörter in einem Text mittels binärer Suche sucht.
  • Schlage in der Referenz nach, was der Unterschied zwischen den Methoden valueOf und parseInt der Klasse Integer ist.

Aufgaben, die sich explizit in Processing gut eignen:

  • Pong
  • Breakout
  • Space Invaders
  • Conway's Game Of Life
  • Ein Blur-Effekt für Bilder
  • Snake
  • Hangman
  • Tetris
  • Vier gewinnt
  • Asteroids
  • Simon says
  • Memory
  • Tic-Tac-Toe
  • Peg Solitaire (vermutlich schon etwas schwerer)

Weitere Aufgaben (es kann sein, dass einige doppelt sind):

Und zuletzt hier noch etwas fortgeschrittenere Projektideen.

Es gibt da viele gute Bücher bzw. auch Anleitungen auf YouTube, der einzige weg da weiterzukommen ist lernen.

Apps kann man mit Java Entwickeln, für Websiten müsstest du dir unter anderem auch HTML/CSS anschauen.

Woher ich das weiß:Hobby – Mehr als 7+ Jahre Erfahrung im Bereich der Informatik

Mehunt3r 
Fragesteller
 17.01.2021, 01:59

Kennst du ein gutes Buch? Oder kennst du eine gute Website, wo ich Aufgaben finden kann.

0

Wer den festen Wunsch hat, wirklich Code schreiben zu können, der etwas nützt, sollte zwei Dinge berücksichtigen:

  1. Es geht nicht ohne ein gutes Buch für die erste Programmiersprache, die man zu lernen hat. Videos anzusehen hilft da gar nichts.
  2. Es ist wichtig, mit welcher Programmiersprache man beginnt. Sinn machen für diesen Zweck nur folgende drei: C, C# oder Java.

Mein Ratschlag:

Der 2021 mit Sicherheit sinnvollste Einstieg ins Programmieren /M /LB

Begründung:

C und eine der beiden anderen (sie arbeiten nach gleichem Prinzip, aber nach einem völlig anderen als C) muss JEDER Programmierer beherrschen, wenn er ernst genommen werden möchte.

C ist zwar leicht zu lernen (da wenig umfangreich), ein nützliches Programm damit zu schreiben ist aber deutlich schwieriger als mit C# oder Java. Das liegt daran, dass

  1. die Standardbibliothek von C sehr klein ist, die von C# und Java aber wirklich riesig, so dass man für die heute notwendige Komplexität von Apps fast alles an notwendigen Grundbausteinen dort schon fertig gelöst vorfindet.
  2. Zudem beschützen diese beiden Programmiersprachen den Programmamier davor, viele Codierfehler zu machen, die in C noch möglich sind und die man, wenn sie auftreten, lange zu suchen haben wird. Es muss deswegen jeder, der in C programmiert, sich ein Konzept ausdenken, das er in all seine Programme einbaut mit dem Ziel, vor allem auch anwendungslogische Fehler (genauer: ihre Ursache) schnell finden zu können. Debugger nützen da kaum was. Sie sind nur gut, Absturzstellen beschrieben zu bekommen.

Nebenbei noch:

Als erste Programmiersprache Python zu wählen, wäre gar nicht gut, da alle, die das tun, nie mehr zu einem wirklich professionellen Programmierstil hinfinden. Zudem gilt:

Cython ist das bessere Python — und C das bessere Cython,  /B /daher ...


regex9  17.01.2021, 12:20

Einige deiner Aussagen sind aufgrund der Art, wie du sie formulierst, ganz ehrlich, ziemlicher Quatsch.

1) Videos als gar nicht hilfreich zu beschreiben, würde ich nicht so stehen lassen.

  • Es gibt Videokurse, in denen Grundlagen gut und professionell erklärt werden (z.B. auf PluralSight).
  • Es gibt Videos von Vorträgen oder Vorlesungen, die sehr hilfreich sein können.

Auch wenn ich selbst gern feste Literatur empfehle, gehört zur Wahrheit dazu, dass nicht jeder auf diese Lernquelle gut anspringt und es doch als hilfreicher empfindet, es akkustisch erklärt zu bekommen.

Eine Kombination aus mehreren Quellen halte ich aber auch nicht für schlecht.

2) Mit Programmiersprachen werden Anwendungen entwickelt, die in der Regel bestimmte Funktionalitäten erfüllen sollen. Das gilt sowohl für Anwendungen, die mit Java entwickelt wurden, als auch mit PHP, Dart, Python, Go, etc.. In jedem Fall hat man Code vorliegen, der etwas nützt. Ich denke, das habe ich dir auch schon einmal geschrieben.

3) Um als Programmierer ernstgenommen zu werden, sollte man eine Programmiersprache beherrschen und mit dieser programmieren können. Ich kann es verstehen, wenn man hier die esoterischen Sprachen ausklammert und vielleicht auch ein paar spezielle Exemplare (proprietäre Skriptsprachen). Doch so zu tun, als könnte man nur mit Java, C oder C# ein ernstgenommener Programmierer werden...🙄 Ein Apple-Entwickler bspw. braucht keine der drei Sprachen. Er nutzt Swift oder hat zuvor Objective-C verwendet. Alle beiden Sprachen sind gut genug, um sehr gute Anwendungen zu entwickeln. Andere Entwickler haben sich ebenso auf eigene Anwendungsgebiete fokussiert. Es gibt genügend Nischen, wo es ausreicht, sich nur auf eine Sprache zu konzentrieren (Scala, Haskell, ...), die zudem nicht einer Popularitätsskala hinterherlaufen muss.

4) Was du unter einen wirklich professionellen Programmierstil verstehst, erklärst du nicht. Ich gehe folgend einmal davon aus, dass du vielleicht die Entwicklung komplexer Software beschreibst (z.B. OOP-Anwendungen mit hunderten von Klassen, die sehr leistungsfähig sein sollen), also kein Rapid Skripting.

Wenn man eine neue Programmiersprache lernen möchte, muss man sich auch auf sie einlassen und daran arbeiten, ihren Stil zu verstehen und bestenfalls zu adaptieren - völlig klar. Das kann eine Hürde sein, da man eine gewisse Komfortzone verlassen muss (bestes Beispiel: Von C zu C++). Doch das schafft man, selbst wenn es etwas länger dauern mag.

Man ist aber, nur weil man zuvor eine andere Sprache gelernt hat, nicht für immer gebrandmarkt für neue Sprachen.

Ich persönlich kenne Entwickler, deren erste Sprache PHP war, der man auch schon das nachgesagt hat, was du zu Python schreibst. Sie sind später auf andere Sprachen gewechselt, sei es Java, C++, ... haben sich an den Stil angepasst und entwickeln seitdem mit an komplexer, professioeneller Software, ohne dass man einene großen Niveau-Unterschied in der Art zu anderen Entwicklern feststellen würde, die z.B. mit Java begonnen haben.

1
grtgrt  17.01.2021, 12:50
@regex9

Ich gebe dir recht.

Aber um das so richtig einschätzen zu können, muss man schon ziemlich viel Übung im Schreiben auch großer Anwendungen haben.

Es so zu sagen, wie Du es sagst, wirkt verwirrend und wird kontraproduktiv sein für jeden, der eben noch nicht in die Welt des guten Programmierens reingefunden hat.

Kurz: Gute, brauchbare Erlkärung, muss den Fragenden abholen, wo er sich gerade in seiner Entwicklung hin zum angestrebten Ziel befindet.

Der erste Rechenunterricht in der Schule beginnt ja auch nicht gleich mit dem Erklären von Infinitesimalrechnung.

0