Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Programmieranfänger, Schwierigkeiten mit der Programmierung
Hey,
beschäftige mich jetzt seit ein paar Wochen mit der Programmierung bzw. mit Java.
Habe vor Wochen auch angefangen einen Videokurs zu gucken, extra für Einsteiger, wo halt die Grundlagen (Variablen, Verzweigungen, Schleifen, Methoden, Objektorientiert ...). Habe den Kurs noch nicht durch, muss aber feststellen das ich bei einigen Aufgaben Probleme habe auf die Lösung zu kommen bzw. wie man etwas umsetzt.
Keine Ahnung ob ich zu viel für diesen Zeitraum erwarte oder eventuell einfach zu blöd für die Programmierung bin.
Habt ihr eventuell paar Tipps, wie man am besten an das Lernen von Java bzw. allgemein von Programmiersprachen rangehen kann / sollte?
Bzw. was wäre denn sinnvoll sich anzueignen, damit einem das Programmieren vielleicht etwas leichter fällt.
Habe auch gerade einen Einführungskurs in der Schule zum Thema programmieren wo Java einem näher gebracht werden soll. Aber der Dozent springt halt auch von Thema zu Thema und nutzt gefühlt jede Gelegenheit zu erwähnen wie schlecht Java doch eigentlich sei. Ist auch nicht gerade hilfreich.
Praktisch anwenden ist natürlich klar, mach ich auch, aber mir gehen langsam die Ideen aus, was man mit dem „bisschen" noch alles so anstellen kann. 😅
Bedanke mich schon mal für alle hilfreichen tipps.
Jetzt kann man viel schreiben...
Grundsätzlich gilt es in der SW-Modellierung- und -Entwicklung davon auszugehen, dass eine bestimmte Funktionalität einmal, mehrfach (oder eher selten) oder vielfach gebraucht bzw. wiederverwendet werden kann / soll / muss... . Beispielhaft hat bei hoher (potentieller) Veränderungs- oder Erweiterungsrate einer Software der Einsatz von Interfaces Sinn. Oder anonyme Funktionen (=Lambdas) wenn eine bestimmte Funktionalität einmal (oder selten) gebraucht wird.
Naja, wenn du die Aufgaben in der Reihenfolge machst, in der der Kurs sie dir vorschlägt, dann ist eventuell der Kurs nicht gut aufgebaut.
Programmieren hat viel mit Abstrahieren und logischem Denken zu tun, das muss man eben üben.
Wichtig wäre zu wissen, bei welchen Aufgaben du Probleme hast, auf die Lösung zu kommen. Auch wichtig wäre die Frage, warum programmierst du? Wenn du eh auf ein Projekt hinarbeitest, dann würde es sich lohnen, einfach mal mit einer Mini-Version deines Ziels anzufangen.
Oder zumindest eine Funktionalität mal zu programmieren, die in deinem Endprojekt vorhanden sein soll.
Wenn du "nur" dein Gehirn etwas trainieren willst, dann könntest du solche Seiten wie "Codewars" nutzen, da gibt es sicher auch andere, die Coder-Challenges anbieten. Im Zweifelsfall kannst du dir das Buch "Algorithmen in Python" zulegen, und versuchen diese Funktionen in Java umzusetzen (oder Python lernen. wenn du es nur für dich machst, ist das ja eine Option)
Code reviews davon machen lassen, entweder hier im Forum (ich glaube das ist on-topic?) oder auf CodeReview StackExchange bietet sich an. Meistens kann man auch aus den kleinsten Programmen drei, vier Iterationen rausholen aus denen man lernt.
Naja, wenn du die Aufgaben in der Reihenfolge machst, in der der Kurs sie dir vorschlägt, dann ist eventuell der Kurs nicht gut aufgebaut.
Programmieren hat viel mit Abstrahieren und logischem Denken zu tun, das muss man eben üben.
Wichtig wäre zu wissen, bei welchen Aufgaben du Probleme hast, auf die Lösung zu kommen. Auch wichtig wäre die Frage, warum programmierst du? Wenn du eh auf ein Projekt hinarbeitest, dann würde es sich lohnen, einfach mal mit einer Mini-Version deines Ziels anzufangen.
Oder zumindest eine Funktionalität mal zu programmieren, die in deinem Endprojekt vorhanden sein soll.
Wenn du "nur" dein Gehirn etwas trainieren willst, dann könntest du solche Seiten wie "Codewars" nutzen, da gibt es sicher auch andere, die Coder-Challenges anbieten. Im Zweifelsfall kannst du dir das Buch "Algorithmen in Python" zulegen, und versuchen diese Funktionen in Java umzusetzen (oder Python lernen. wenn du es nur für dich machst, ist das ja eine Option)
Danke für die Antwort.
Eigentlich ist der Kurs relativ gut aufgebaut. Zumindest kamen bisher immer Aufgaben die die vorherigen Sachen beinhalten. Habe aber halt noch so meine Probleme mit einigen Sachen. Arrays finde ich noch relativ schwierig (zumindest zweidimensionale) und mit den Methoden geht bei mir auch noch nicht so einfach von der Hand und das kombiniert mit Objektorientiert. Vielleicht kommt das ja noch mit der Übung. Mir fällt es nur etwas schwer den Anfang zu finden, wie ich am besten üben soll und wo ich anfangen soll. Am liebsten würde ich alles gleichzeitig machen (was ja nicht wirklich geht).
Ich hatte halt letztens ein Problem mit einer Aufgabe da sollte man ein Spiel programmieren. Man sollte ein Spielfeld generieren und eine Spielfigur die sich in diesem Spielfeld bewegen kann: Vorwärts, nach links und rechts drehen, sollte halt so aufgebaut werden:
#######
# #
# #
# ^ #
# #
# #
#######
Für mich war es schon ein Rätsel überhaupt herauszufinden wie man dieses Spielfeld generiert. Weiß mittlerweile ungefähr wie das gemacht wird. Aber das sind dann halt so Sachen die mich etwas demotivieren. Fand es persönlich schwer, für jemanden der erst seit paar Wochen programmiert.
Ich programmiere, weil ich mir eigentlich Spaß macht. Der Anfang ist halt ziemlich schwer bzw. rein zu kommen. Zu vor hatte ich bisher nur mit HTML und CSS zu tun bzw. etwas JavaScript (aber hier halt nur eingebunden und fertig), habe allerdings auch berufliches Interesse daran, da ich zur Zeit eine Umschulung zum Fachinformatiker mache.
Tatsächlich habe ich auch private Absichten, bzw. habe mir zwei „kleinere" Projekte ausgesucht, die ich gerne bis Ende des Jahres realisieren möchte. Möchte auf den Projekten dann später aufbauen und das halt erweitern ...
Code reviews davon machen lassen, entweder hier im Forum (ich glaube das ist on-topic?) oder auf CodeReview StackExchange bietet sich an. Meistens kann man auch aus den kleinsten Programmen drei, vier Iterationen rausholen aus denen man lernt.
Für mich war es schon ein Rätsel überhaupt herauszufinden wie man dieses Spielfeld generiert. Weiß mittlerweile ungefähr wie das gemacht wird. Aber das sind dann halt so Sachen die mich etwas demotivieren. Fand es persönlich schwer, für jemanden der erst seit paar Wochen programmiert.
Bezüglich des Spielfeldes. Was genau war dein Problem mit "generiert"?
Ein Fehler, den ich hier im Forum oft erlebe dass Anfänger den dritten Schritt vor dem ersten machen. ich versuche das mal auf das Spielfeld runterzubrechen, inwieweit das auf dich zutrifft, musst du selber sehen.
Aufgabe: Erzeuge das Spielfeld
Überlegung: Schleifen, Arrays was nehme ich und einfach mal probieren.
Das führt selten, wenn man nicht weiß was man tut, zu einer guten Lösung. Es ist oft sinnvoller das Problem erstmal losgelöst von Java zu betrachten. Ich soll ein Spielfeld generieren. Was ist das überhaupt für ein Spielfeld? Wie sieht das aus? Was hat das für Eigenschaften?
Wenn ich das Spielfeld auf einem Karo-Papier von Hand malen müsste, welche Informationen bräuchte ich eigentlich um es korrekt zu malen?
Und wenn man das hat, dann - und erst dann - kann man anfangen das in Programmcode zu übertragen.
Aus den wenigen Infos da oben würde ich mal folgendes destillieren:
* Ein Spielfeld ist ein Rechteck bestehend aus Feldern.
* Felder können entweder eine Mauer sein, leer sein oder eine Spielfigur enthalten.
* Wenn ich es von Hand zeichnen will, was müsste ich wissen?
** Wie viele Zeilen hat das Spielfeld
** Wie viele Spalte hat das Spielfeld
** Was ist auf jedem Feld gespeichert
* Wie würde mir jemand sagen, wo die Spielfigur steht? Er würde mir wohl Koordinaten geben - eine x und eine y Koordinate.
Und jetzt übertragen wir es mal in Java:
Das heißt, um das Spielfeld darzustellen, brauche ich eine x und eine y Koordinate, so wie die Info was da gespeichert ist => Da bietet sich doch ein zwei-dimensionales Array an_
Java:
int ANZAHL_ZEILEN = 10;
int ANZAHL_SPALTEN = 8;
spielfeld = new array[ANZAHL_ZEILEN][ANZAHL_SPALTEN];
Dazu direkt ein weiterer tipp - Variablen immer sinnvoll benennen und möglichst wenig Magic Numbers verwenden, sondern lieber Konstanten. Man könnte es auch so schreiben
Java:
s = new array[10][8];
Nur wenn du jetzt später mal wissen willst, was steht in Zeile 5 an Position 6 - war die Zeile die erste oder die zweite Stelle des Arrays? Im ersten Code siehst du es direkt, im zweiten nicht.
Nächster Schritt:
Wir haben uns jetzt für 2-dimensionales Array entschieden. Aber wie wollen ja auch Informationen speichern. Was für einen Datentyp wollen wir denn da nehmen? Wir schauen mal zurück auf den schlauen Zettel - "Felder können entweder eine Mauer sein, leer sein oder eine Spielfigur enthalten".
Jetzt kann ich das beliebig modellieren - ich kann eine Zahl speichern und definieren 0=Leer, 1=Mauer, 42=Spielfigur. Oder ich speichere ein character - das Zeichen was später ausgegeben wird, also " ", "#" oder "^". An der Stelle gilt wieder: Möglichst wenig Magic Numbers. Wenn du später im Code vergleiche hast
Java:
if (spielfeld[x][y]==42) {....}
das versteht keiner mehr. Da es ja anscheinend nur eine fixe Menge an Objekten gibt und die Art sich nicht dynamisch ändern kann, bietet sich ein Enum an:
Code:
public enum Feld {
FREI, MAUER, FIGUR;
}
So, kümmern wir uns nun mal um die Ausgabe auf dem Bildschirm. Wir machen wir das auf Karopapier, wenn wir unser Array hätten? Wir würden nachschauen was steht an Position 1,1 und dann in Zeile 1 und Spalte 1 das entsprechende Symbol malen. Das heißt, wir müssen uns jedes Feld 1x ansehen und ausgeben.
Nun geht das auf der Konsole bei der Ausgabe nicht so einfach umherzuspringen, sondern man kann nur von links nach rechts schreiben und dann eine Zeile weiter springen. Also müssen wir offensichtlich erst die erste Zeile komplett ausgeben, dann einen Zeilenwechsel machen, dann die zweite Zeile ausgeben usw. Wir zerlegen dabei das Problem in Teilschritte:
* Eine Zeile ausgeben
* Zeilewechswel
Schreiben wir erst mal Rumpf Code dafür:
Java:
for (int aktuelleZeile = 0; aktuelleZeile<spielfeld.length; aktuelleZeile) {
// Gib aktuelle Zeile aus
// Zeilenwechsel
System.out.println();
}
Ok, nächstes Teilproblem - Aktuelle Zeile ausgeben. Wie machen wir das?
Nun, wir gehen durch jedes Feld in der Zeile durch und geben es einzeln aus. Damit haben wir das Problem wieder in zwei kleinere zerlegt:
Java:
for (int aktuelleZeile = 0; aktuelleZeile<spielfeld.length; aktuelleZeile) {
// Gib aktuelle Zeile aus
for (int aktuelleSpalte = 0; aktuelleSpalte<spielfeld[aktuelleZeile].length; aktuelleSpalte++) {
// Gib aktuelles Feld aus
}
// Zeilenwechsel
System.out.println();
}
Wie geben wir das aktuelle Feld aus? Nun Mauer heißt "#", Leer " " und Spielfigur "^"
Java:
for (int aktuelleZeile = 0; aktuelleZeile<spielfeld.length; aktuelleZeile) {
// Gib aktuelle Zeile aus
for (int aktuelleSpalte = 0; aktuelleSpalte<spielfeld[aktuelleZeile].length; aktuelleSpalte++) {
// Gib aktuelles Feld aus
switch(spielfeld[aktuelleZeile][aktuelleSpalte) {
case MAUER: System.out.print("#"); break;
case FREI: System.out.print(" "); break;
case FIGUR: System.out.print("^"); break;
}
}
// Zeilenwechsel
System.out.println();
}
Fertig ist das Spielfeld.
Das heißt zwei Dinge helfen oftmals:
* Das Problem erstmal losgelöst von Java betrachten
* Das Problem immer weiter in kleine Teile zerlegen, bis die Teile so klein sind, dass man sie lösen kann.
Zusätzlich werden bei Figurenzeichnungen auf der Konsole auch andere achsensymetrische Figuren (z.B.) Tannenbäume oder siehe ASCII-Zeichnungen bei JavaBeginners verwendet. Die prinizipielle Überlegung von wg. zweidimensionalem Array und was wo zu zeichnen ist, ist aber dieselbe.