"Wie" programmieren lernen

Ich finde es unangebracht mich als "Profi" zu bezeichnen.

Aber bei den ganzen Tipps hier kann ich auch nur den Kopf schütteln. Wieso? Weil ich von, wie du sagtest, "Hippster"-Kram nichts halte.
Dazu gehören für mich alle Sprachen, die ein Nischendarsein haben, nicht weil sie sehr spezielle Anwendungsgebiete haben, sondern weil sie neu sind und wenig Nutzer haben.

OP fühlt sich jetzt "gut" beraten mit einer alten Nischensprache und einem Hippster-Klick-Bunti Ding. Beides bringt ihm keine allgemein anwendbaren Grundkonzepte bei, weil abstraktes Denken so oder so vorhanden sein muss.

Kurzum: Vergiss den Kram.
Zukunft ist ungewiss, und es fehlt die Nutzerbasis und die Libs. Hast ein Problem? Gut möglich, dass du einer der wenigen bist. Wenn ich hier auf CB Hilfe brauche einen Text auf Hebräisch zu korrigieren, der sich dazu auch noch mit speziellen technischen Fachtermina beschäftigt, bin ich aufgeschmissen.
 
sh. schrieb:
Was sagen die Profis hier zu Kotlin? Nur ein nächster Hippster-Hype oder doch eine ernsthafte "Konkurrenz" zu den alten Platzhirschen wie Java usw.?
Android Entwicklung = Kotlin & Backend = weiterhin Java. Wobei wir jetzt tatsächlich ein paar Juniors Near Shore hatten, die Code fürs Backend in Kotlin programmiert haben. :D
 
Zwisch schrieb:
Wenn man ohne Ziel programmieren lernen will, sind sicher Sachen am besten, die am wenigsten Barriere vor einem aufbauen. Da bietet sich das olle Javascript echt an, keine riesigen Programme installieren, keine großen Formalien vorweg, man sieht sehr schnell Ergebnisse, das Netz ist voller Beispiele. Einfach Browser und Texteditor nehmen und los gehts.

Viele Sprachen ähneln sich dann auch sehr stark, da lernt man in 2 Tagen um, falls man dann echt an eine gezielte Sache will (Javascript, Java, C, C++, Perl, PHP liegen alle nah beieinander).
Wenn man von C zu Java kommt merkt man, dass hier (fast) gar nichts ähnlich ist. C++ und Java sind auch grundverschieden. Allein schon wegen der Garbage-Collection. C hat ja noch nicht mal Objekte.

  1. Such dir was aus das du machen willst
  2. Such dir die Sprache aus in der du das machen willst.
    1. Python finde ich am einfachsten von allen Sprachen, der Code ist zwar nicht effizient, aber extrem schnell geschrieben. Die Effizienz von C, C++,C#, Rust etc. benötigt man im Hobby-Bereich vermutlich nie.
  3. Fang an zu programmieren.
Wenn du dann mal ein funktionierendes Programm hast:
  • lerne dein Programm in vernünftige Funktionen anzupassen
  • lernen einen Codingstandard zu verwenden, damit der Code leserlich ist.
  • kommentiere die einzelnen Funktionen - 1 kurzer Satz "Was macht die Funktion" und "Was sind die einzelnen Parameter dieser Funktion.
    • Beispiel Hierzu:
    • Python:
      # @func divide: division for 2 numbers
      # @param a: dividend
      # @param b: divisor
      # @return: a/b or ERR_DIVISION_BY_ZERO
      def divide(float a, float b):
          if b == 0:
              return ERR_DIVISION_BY_ZERO
          return a/b
 
shinXdxd schrieb:
kommentiere die einzelnen Funktionen - 1 kurzer Satz "Was macht die Funktion" und "Was sind die einzelnen Parameter dieser Funktion.
  • Beispiel Hierzu:
  • Python:
    # @func divide: division for 2 numbers
    # @param a: dividend
    # @param b: divisor
    # @return: a/b or ERR_DIVISION_BY_ZERO
    def divide(float a, float b):
    if b == 0:
    return ERR_DIVISION_BY_ZERO
    return a/b
Finde ich ein schlechtes Beispiel. Du könntest dir die Kommentare sparen, wenn du einfach die Parameter vernünftig nennen würdest:
Python:
def divide(float dividend, float divisor) -> Union[float, DivisionByZeroError]:
   if divisor == 0:
      return DivisionByZeroError()
   return dividend/divisor
Unnötige Kommentare vermeiden
 
Zuletzt bearbeitet: (typo)
  • Gefällt mir
Reaktionen: Skysnake, mental.dIseASe, DerGoblin2k und eine weitere Person
shinXdxd schrieb:
  1. Die Effizienz von C, C++,C#, Rust etc. benötigt man im Hobby-Bereich vermutlich nie.
Die Aussage ist pauschal mal nicht ganz richtig. Wenn mein Hobby Steuerungen mit dem Arduino sind (und ich kenne einige, die das als reines Hobby betreiben), komme ich an C oder C++ nicht vorbei.

Und zu Python: Die Sprache kann schon sehr effizient sein und ist selbst für Desktop-Anwendungen und Spiele gut geeignet, gerade im Hobby-Bereich. Ich würde heutzutage jedem Neuling, oder jemanden der nur mal reinschnuppern möchte, Python uneingeschränkt empfehlen.
 
  • Gefällt mir
Reaktionen: Skysnake
new Account() schrieb:
Unnötige Kommentare vermeiden
Das schon, Funktionsheader sind aber alles andere als unnötig., gerade am Anfang. Aber ich schätze mal für die Diskussion wäre ein eigener Thread geeignet.
Sehr Hilfreich wenn man nach Monaten mal wieder drüber schaut.
Es ist einfach wichtig, einmal zu lernen, sauberen Code zu schreiben.

DerGoblin2k schrieb:
Die Aussage ist pauschal mal nicht ganz richtig. Wenn mein Hobby Steuerungen mit dem Arduino sind (und ich kenne einige, die das als reines Hobby betreiben), komme ich an C oder C++ nicht vorbei.
Man liest ja häufig, dass die Performance von Python nicht so toll ist - Kommt aber auch auf den Code an. Ich meinte nur, dass die Performance meistens vollkommen ausreichend ist.
Für den Arduino gibt es inzwischen auch Micropython. Natürlich wird das nicht bei allen Projekten funktionieren und man ist mal auf C/C++ angewiesen. Man sollte immer die richtige Sprache für das Projekt auswählen, gerade zu Beginn wenn man noch nicht so im Thema Programmieren ist, ist das allerdings eine schwierige Aufgabe.
 
Zuletzt bearbeitet:
shinXdxd schrieb:
Man liest ja häufig, dass die Performance von Python nicht so toll ist
Ist sie auch nicht. Also Python performt wirklich schlecht. Auch im Vergleich zu ähnlichen Programmiersprachen.

shinXdxd schrieb:
Kommt aber auch auf den Code an.
Klar. Man kann auch selbst in C ineffizient programmieren. Das ist ja auch gar nicht die Frage.
Trotzdem kann die Python-Performance ok sein. Nämlich da, wo Performance in großen Ausmaß gar nicht benötigt wird. Performance ist halt nur eines von mehreren Kriterien.

Zusätzlich kann man natürlich noch tricksen. Man denke da an NumPy, wo man für den performancekritischen Teil C nimmt aber dann die Funktionen angenehm und einfach über Python ansprechbar sind.

Was mich persönlich(!) an Python aber wirklich nervt sind die Einrückungen. Also konkret: semantische Whitespaces.
Ist jetzt nicht kriegsentscheidend. Aber halt nervig. Und statische Typisierung wäre manchmal auch ganz nett. Immerhin gibts ja jetzt diese Type-Hints.
 
Ich würde sagen, das man ein gesundes Mittelmaß finden sollte. Performance ist zwar irgendwo wichtig, aber wenn man mit ein paar Einbußen in sehr kurzer Zeit ein Skript schreiben kann, das die Aufgabe erfüllen kann, bin ich damit meist auch zufrieden.
Also wenn man nicht gerade Unmengen an Berechnungen anstellt, greife ich gerne zu Python. Bei mir sind das meistens Skripts die im Hintergrund laufen und alle paar Minuten ein paar Sachen erledigen. Gerade wenn es Sachen sind, die ich vorher noch nie gemacht habe, komme ich in Python schneller zu Ergebnissen.
Die Syntax ist zwar stark gewöhnungsbedürftig, aber der Lernerfolg für Einsteiger ist meiner Meinung nach am Anfang größer als bei anderen Sprachen (solange man auf GUIs verzichten kann).
 
Auf GUI muss man auch nicht verzichten, Qt z.B. hat Python Bindings (d.h. man kann Qt mit Python benutzen).
Performance ist für einen Anfänger eh ziemlich egal und wie hier schon angemerkt wurde kann Python im Zweifel auch relativ problemfrei (jdfs für Hobbyprojekte) performant verwendet werden.

Jedenfalls kann man guten Gewissens mit jeder sehr weit verbreiteten Sprache einsteigen. Ich persönlich würde nur von C abraten, da die fehlende Abstraktion dazu führt, dass der Einstieg noch schwerer ist als er das sowieso schon ist, aber ich weiß, dass viele das anders sehen und den Vorteil stärker gewichten, dass man mehr darüber lernt, was denn da eigentlich passiert, wenn ein Programm ausgeführt wird.
 
3ristokrat schrieb:
Ich würde sagen, das man ein gesundes Mittelmaß finden sollte.
Klar.
Wie gesagt. Nicht überall ist ja Performance so entscheidend.

3ristokrat schrieb:
Performance ist zwar irgendwo wichtig, aber wenn man mit ein paar Einbußen in sehr kurzer Zeit ein Skript schreiben kann, das die Aufgabe erfüllen kann, bin ich damit meist auch zufrieden.
Gut. Das ist jetzt aber kein Alleinstellungsmerkmal von Python. Es gibt auch andere Sprachen, wo man bestimmte Dinge schnell implementieren kann.

Wovon Python wirklich profitiert ist, das es ein relativ interessantes Gesamtpaket ergibt, welches dann auch noch einen relativ breites Anwendungsspektrum abdeckt. Es ist nirgendwo richtig gut, aber meist gut genug.
Dafür hat es eine hohe Verbreitung. Man findet also viel Doku, Tools, Bibliotheken etc. dazu.
 
BeBur schrieb:
Auf GUI muss man auch nicht verzichten, Qt z.B. hat Python Bindings (d.h. man kann Qt mit Python benutzen).

Ich meinte wenn man am Anfang drauf verzichten kann. Ich verwende zum Beispiel tkinter, und bin auf manche Sachen gestoßen, die Einsteiger verzweifeln lassen. Wenn man direkt mit GUIs starten will, würde eher C# oder so empfehlen. Dann hat man direkt bei Visual Studio eine GUI-Editor dabei.
 
Hast du es ggf. schon Gedanken über ein sogenanntes Coder-Bootcamp gemacht?
Hier kann man innerhalb von ca. 3 Monaten in einem Intensiv-Training programmieren lernen.
Ist dann zwar kostenpflichtig, aber dafür musst du da nicht alleine durch :-)

Dazu gab es vor einigen Monaten bei Golem schon mal einen interessanten Artikel:
https://www.golem.de/news/bootcamps-programmierer-in-drei-monaten-1812-137431.html
 
Zuletzt bearbeitet:
zwischen "Programmieren lernen" und "Programmieren können" sind aber noch Welten... das 3-Monats-Bootcamp wird in etwa sein wie ein Kurs auf udemy.com, man weiß danach mehr oder weniger um was es geht.
 
Einfachster Stepguide:
1. erstell dir eine Playlist auf Youtube mit dingen die dich als projekt interessieren würden.
2. wenn du immernoch keine lust auf eines dieser projekte hast: schau in die videoempfehlungen unter den videos in dieser playlist.
3. wenn du eins gefunden hast-> i.d.R. gibt es meinst ein basic "Code though" durch das projekt. Code es nach und lerne parallel was die einzelnen Libaries / Prinzipien machen (Ich würds als "Learn by Coding" bezeichnen)
4. dein projekt wird ineffizient sein. (Zeit & RAM technisch)
-> versuche es durch trial- n -error so effizient wie möglich zu machen.
5. versuche alle errors zu handln
6. klatsch ne schöne GUI drauf und publische das programm als BETA für ein paar €.
-> gibt gleich mehr Motivation es auf die professionelle ebene zu bringen ^^
 
Was haltet ihr von speziellen Kursen bzw. Umschulungen, die man innerhalb von ca. 3 Monaten durchführen kann - also einem sogenannten "Coding Bootcamps", bei dem man alle wichtigen Skills in kurzer Zeit kompakt und inkl. Praxis gelehrt bekommt? Davon hatte ich neue schon in der t3n gelesen.
 
FZM schrieb:
Was haltet ihr von speziellen Kursen bzw. Umschulungen, die man innerhalb von ca. 3 Monaten durchführen kann - also einem sogenannten "Coding Bootcamps", bei dem man alle wichtigen Skills in kurzer Zeit kompakt und inkl. Praxis gelehrt bekommt? Davon hatte ich neue schon in der t3n gelesen.
Das meiste von meinen (noch nicht allzu weit fortgeschrittenen) Programmier-Kenntnissen habe ich durch Querlesen und Hier-und-Da reingucken und informieren gelernt. Als ich aber noch ein blutiger Anfänger war, habe ich tatsächlich 70% eines dicken Java-Buchs systematisch durchgearbeitet, und das ohne IDE (nur notepad.exe und javac bzw. java über cmd.exe).

Und "alles wichtige" kann sehr relativ sein. Wichtig ist das, was du zur Umsetzung eines konkreten Projekts benötigst. Und noch ein kleiner Tipp: Such dir einen Freund zum Plaudern, der in dem Genre arbeitet / Zuhause ist. Den hatte ich zwar auch nie, es geht also auch ohne, aber schaden tut das sicherlich nicht.
 
  • Gefällt mir
Reaktionen: Skysnake
FZM schrieb:
Was haltet ihr von speziellen Kursen bzw. Umschulungen, die man innerhalb von ca. 3 Monaten durchführen kann - also einem sogenannten "Coding Bootcamps", bei dem man alle wichtigen Skills in kurzer Zeit kompakt und inkl. Praxis gelehrt bekommt?
Wenn gut gemacht und an dein Kenntnisniveau angepasst, ist sicher ein guter Schnellstart möglich.
Längere Erfahrung ersetzt es aber nicht, und du solltest halt auch der richtige Typ dafür sein.

Die einen machen es so, andere lieber so:
Robocopy schrieb:
Als ich aber noch ein blutiger Anfänger war, habe ich tatsächlich 70% eines dicken Java-Buchs systematisch durchgearbeitet, und das ohne IDE (nur notepad.exe und javac bzw. java über cmd.exe).

Wiederum andere setzen sich in eine FH und wieder andere werden bei Pluralsight fündig
 
Ich finde, es gibt beim Lernen -- egal von was, Programmieren, Stricken, Schwimmen oder Differentialgleichungen lösen -- nicht den optimalen Weg. Was gut klappt, hängt von dir als Person ab und von den Vorerfahrungen, die du bisher gemacht hast. Was für mich gut klappt, klappt für dich vielleicht überhaupt nicht gut. Was für dich vor einem Jahr nicht geklappt hat, klappt vielleicht heute, da du während dieses Jahrs neue Erfahrungen und Kenntnisse gesammelt hast.

Lieblingsbeispiel aus eigener Erfahrung im Physikstudium beim Einarbeiten in die spezielle Relativitätstheorie:

1. Anlauf, noch als Schüler:
Erklärungen auf diversen Webseiten gelesen, empfand sie als zu komplex. All diese Bezugssysteme, komische Notation, etc. Versucht die Sache in Feynman's "Lectures on Physics" nachzulesen, war mir aber auch zu komplex und zu lang.

2. Anlauf, frischgebackener Student:
Kapitel in Landau&Lifschitz' "Feldtheorie" zu dem Thema gelesen, Eindruck: Extrem formal und mathematisch aufwendig, keinerlei Intuition wird rübergebracht. Es tauchen hyperbolische Funktionen auf, wie ich sie in dem Kontext sonst nirgends gesehen habe.

3. Anlauf, immer noch recht grünschnabliger Student:
Kapitel in Feynman's "Lectures" wieder gelesen, Eindruck: Ah ja, das macht intuitiv irgendwo Sinn, aber es wird nur an einem konstruierten Beispiel gearbeitet, es fehlt die Allgemeinheit und die mathematische Rigorosität.

4. Anlauf, gegen Ende des Bachelors:
Kapitel in Landau&Lifschitz' "Feldtheorie" nochmal gelesen, Eindruck: BOAH, das macht auf einmal voll viel Sinn und in den hyperbolischen Funktionen steckt eine mega gute Intuition, Lorentz-Trafos als (Pseudo)Drehungen der Raumzeit! Feynman sucks, ist nur Larifari für Anfänger, Landau&Lifschitz sind die besten!

Aktuelle Sichtweise: Es brauchte all diese Anäufe, um die Sache aus verschiedenen Perspektiven zu betrachten.
 
  • Gefällt mir
Reaktionen: ###Zaunpfahl### und Skysnake
Beim programmieren muß man leider immer stets Energie aufbringen um sich seinem Ziel zu nähern. Am Anfang steht man vor dem nichts, will aber gerne in Kürze viel erreichen. Da steht man dann schnell auf dem Schlauch. Mein Tipp: Sich kleine Ziele setzen, die aber trotzdem ein schönes Erfolgserlebnis versprechen. Erst mal die Syntax verstehen lernen ( wie z.B. die Klammern setzen muß und wo man sie am liebsten hinsetzt ). Es zu probieren einfache Schleifen zu bauen und wie man Inhalte in eine Textkonsole ausgibt, kann auch ohne buntes HTML/Javascript Spaß machen. Ich habe C++ an einem Unix Text-Terminal erlernt, und hatte Spaß damit die damals eher neuartigen objektorientierten Denkweisen zu erlernen. Was hat es mit den fundamentalen Datentypen auf sich und wie kann man sie zu Strukturen zusammensetzen? Wie kann ich ein Feld von Strukturen anlegen? Was ist eine Klasse? Einfache fragen mit (eigentlich) einfachen Antworten.

Wer vor schwierigen, langen und unbekannten Installationen zurückschreckt, dem kann ich das QT Framework empfehlen. Gibt's für umsonst und kann alles was man in C++ heutzutage machen kann. Ich würde empfehlen mit einer kleinen Konsolenanwendung anzufangen, es sind aber auch entsetzlich viele Beispielprogramme zum selbst kompilieren und bearbeiten dabei. Der Code dürfte aber ganz zu Anfang eher abschreckend wirken. Daher meine Empfehlung mit der Konsolenanwendung. Wer schnell schöne grafische Animationen programmieren möchte kann sich in QML versuchen. Mit überschaubaren Textdateien lassen sich Animationen erzeugen, die man z.B. in Form einer Tachoanzeige oder der Navigationssysteme in modernen Autos sieht.

QT gibt's hier:
https://www.qt.io
 
3ristokrat schrieb:
Ich meinte wenn man am Anfang drauf verzichten kann. Ich verwende zum Beispiel tkinter, und bin auf manche Sachen gestoßen, die Einsteiger verzweifeln lassen. Wenn man direkt mit GUIs starten will, würde eher C# oder so empfehlen. Dann hat man direkt bei Visual Studio eine GUI-Editor dabei.
Python und Java sind durchaus gut geeignet für den Einstieg da man sich auf die Algorithmen beschränken kann. Bash ist da durchaus auch ne Idee. Was man sich halt klar machen sollte ist, das man erst mal klein anfangen sollte. Also den ganzen Objektkram weglassen. Das kann man dann nutzen wenn man ein paar Problemen gelöst hat und anfängt sich zu fragen ob man das nicht eleganter lösen könnte ohne codereplikation zum Beispiel.

C kann aber auch nen guter Einstieg sein, wenn man darauf steht wie Hardware WIRKLICH funktioniert und man dann auch mal bischen inline Assembler einwerfen will.

Der Punkt ist. Man MUSS Motivation haben etwas zu machen. Programmieren lernen ist erst mal Arbeit. Ist wie wenn man lernt ein Instrument zu spielen. Das klingt erst richtig Kacke und das obwohl man sich einen abbricht. Nach viel viel üben wird es aber besser und man hat immer mehr Spaß an den Erfolgen oder halt auch nicht...

Aber selbst wenn man es kann ist es Arbeit. Ist wie nen Bild malen oder ne Statue hauen. Selbst wenn man es kann ist es einfach zum Großteil stumpfe Arbeit.

Schau mal ich programmiere seit zwei Jahrzehnten oder so. Wobei ich seit bald 10 Jahren meinen Lebensunterhalt damit verdiene. Und wie ist es bei mir? 1-10 Tage Arbeit und dann ein Erfolgserlebnis von 1-10 Minuten und dann kommt die nächste Nuss an der man verzweifelt oder aber die nächste stupide Aufgabe wo man nach 10 Minuten weiß was man zu tun hat dann aber Stunden oder Tage dran sitzt um es zu realisieren....

Wenn man in die Webentwicklung etc will braucht man nicht groß wissen wie man performanten Code schreibt und wie PCs funktionieren. Je mehr man aber Richtung Backend geht oder gar Treiber etc desto mehr muss man die Details kennen. Da hat man Bock drauf oder nicht. Wenn man es nicht hat bringt es auch nur bedingt etwas sich damit zu beschäftigen. Aber an sich wäre es eigentlich wichtig das man es versteht um zu wissen, warum es MEISTENS irrelevant ist. Aber eben auch GANZ genau weiß wann es eben wichtig ist...


Für dich ist aber an sich eins wichtig. Mach etwas. Das wars eigentlich.

Ich habe es nie wirklich geschafft eigene Projekte zu realisieren weil mir immer das Problem gefehlt hat. Ich hatte aber immer Spaß daran zu verstehen wie die Hardware tut und wie ich ein winziges Problem möglichst optimal lösen kann. Das hat mich dann auch echt lange beschäftigt und eben selbst im Studium ganze Vorlesungen gekostet.

Ich habe z.b. in das Sortieren von einer Liste von Floats Wochen wenn nicht Monate an Arbeit gesteckt. Am Ende lief das sogar auf GPUs und zwar mega effizient. Selbst die Musterlösung vom Dozenten habe ich bezüglich Performance einfach nur zerstört. Der war sich selbst nicht klar das man das auch so lösen kann. Die Lösung habe ich dann sogar Jahre später in einer eigenen Schulung verwendet um anderen zu zeigen wie man GPUs programmiert.

Das ist aber schon speziell bei mir. Aber zeigt was dir die Leute sagen. DU musst herausfinden wie es für dich funktioniert. Am Ende musst du aber eben motiviert sein dir die Hände dreckig zu machen und auch etwas zu leiden. Kannst du das nicht? Dann wirst du auch nie ein Instrument beherrschen oder Bilder malen oder Bildhauer.

Programmieren ist am Ende auch ein Kunsthandwerk. Und das muss man auf der einen Seite üben üben üben um es zu meistern aber auf der andern auch ein Talent haben um wirklich ein Meister zu werden.

In dem Fall vor allem logisches Denkvermögen und strukturiertes Arbeiten.
 
  • Gefällt mir
Reaktionen: Janush, sh., Hurricane271 und eine weitere Person
Zurück
Oben