Hallo,
da so allmählich wieder die dunkle kalte Jahreszeit beginnt, will ich
die Abende nutzen und meine Programmierkenntnisse deutlich verbessern.
Allerdings fehlt mir hierzu die richtige Herangehensweise.
Ich habe schon mehrere Bücher und Tutorials zu verschieden Sprachen
(Python, C/C++, Bash) gelesen und durchgearbeitet und somit auch
Grundkenntnisse in diesem Thema.
Python hat mich hierbei besonders angesprochen.
Das Problem bei Büchern und Tutorials ist allerdings, dass die
Code-Beispeile in der Regel sehr kurz gehalten sind und
sich nur einem bestimmten Thema widmen. Obwohl ich meistens die
Beispiele auch verstehe fällt es mir schwer, diese kleinen
Beispiele in ein größeres Projekt einzufügen.
Ein Beispiel:
In einen Buch / Tutorial wird super erklärt was z. B. eine verkettete
Liste ist und wie sie funktioniert.
Allerdings sind die Codebeispiele meist so realitätsfremd, dass ich
keine Ideen bekomme, wann man so etwas in
einem richtigen Projekt anwenden könnte.
Dies führt dann dazu, das ich mir komplizierte eigene Lösungen einfallen
lasse, obwohl es in einer Sprache bereits
fertige Lösungen gibt.
Ich habe auch angefangen, Code von Opensource-Projekten zu lesen. Ist
dies eine gute Idee?
Wie habt ihr euch das Programmieren beigebracht? Was war / ist euer
Antrieb hierzu?
HDA schrieb:> Ich habe auch angefangen, Code von Opensource-Projekten zu lesen. Ist> dies eine gute Idee?
Imho, ist es natürlich eine gute Idee Opensource Projekte anzusehen.
Wobei sicher nicht alle davon als Vorbild taugen, insbesondere viele
Kleinstprojekte.
Aber die entscheidende Frage ist doch, wozu lernst du Programmieren? Als
Selbstzweck? Oder hast du irgendein konkretes Ziel? Egal ob es die
Interesse an PC Software oder embbedded ist. Egal ob neues PC-Spiel,
Hausautomation oder Staubsaugerroboter. Ich würde einfach damit anfangen
in der gewünschten Richtung etwas zu programmieren. Die ersten x
Versionen wirst du eher früher als später wegwerfen und neu anfangen,
aber du lernst mehr über Programmieren als irgendein allgemeines
Tutorial liefern kann. Und du erkennst schnell die Probleme in deinem
konkreten Bereich und kannst dich dann gezielt weiterinformieren.
Früher(tm) als Student wollte ich programmieren lernen, weil ich
programmieren können wollte, oder es für meine Vorlesung brauchte. Das
hat nie funktioniert.
Der entscheidende Schritt kam, als ich ein paar echte mit Software
lösbare Probleme vor mir hatte, für die es noch keine Lösung gab. Ab da
war es ein absoluter Selbstläufer.
Suche Dir ein erreichbares Ziel (z. B. etwas an einem Open
Source-Projekt zu ändern/fixen, was Dich schon immer genervt hat) und
dann hau rein! Während man am Anfang vielleicht noch explizit nach
Betätigungsfeldern dieser Art suchen muss, wirst Du irgendwann den Punkt
erreichen, an dem solche Gelegenheiten an jeder Ecke lauern (und man gar
keine Zeit mehr dazu findet, alles zu bearbeiten).
HDA schrieb:> In einen Buch / Tutorial wird super erklärt was z. B. eine verkettete> Liste ist und wie sie funktioniert.
Na passt doch.
Such dir eine Anwendung und setz sie um.
Zum Beispiel ..... ein Telefonbuch.
In einem Telefonbuch sind Namen mit zugehörigen Telephonnummern
gespeichert. Du musst neue Namen einfügen können (möglichst an der
richtigen Stelle im Alphabet), du musst jemanden rauslöschen können. Du
möchtest vielleicht nach Vornamen, Nachnamen sortieren lassen. Oder auch
WOhnort, wenn du den mit dazu nimmst. Du willst suchen können. Du willst
drucken, auf eine Datei speichern, von Datei lesen.
etc. etc.
Und um die Daten zu speichern nimmst du ... eine verkettete Liste.
einfach verkettet, doppelt verkettet. Nach Lust und Laune. Vielleicht
auch beides um die Unterschiede zu sehen.
> Wie habt ihr euch das Programmieren beigebracht?
Durch Üben. Und keine Angst vor Fehlern haben.
Mein erstes Sortierprogramm willst du lieber nicht sehen. Nicht gerade
ein Ruhmesblatt :-)
Aber: nach Tagen voll endloser Fehlersuche hat es sortiert. Und ich war
stolz wie ein Pfau.
+1 Für die ersten beiden Antworten. Ich halte es auch für am
nachhaltigsten nach Lösungen für echte Probleme zu suchen.
Wahrscheinlich gibt es effektiviere Methoden aber so macht es (zumindest
mir) am meisten Spaß. Etwas später noch einmal auf seine Frühwerke zu
schauen und zu versuchen diese mit dem aktuellen Wissen zu lösen ist
übrigens oft sehr beeindruckend :)
Ich habe übrigens zurzeit genau so ein Problem mit Elektronik. Vor 18
Jahren hatte ich das letzte mal einen Lötkolben in der Hand... Das würde
ich jetzt gern ändern aber mit fällt beim besten Willen kein lohnendes
Projekt ein. Die Arduino Einstiegs-Projekte sind zwar gut gemeint, aber
leider ist das nicht mehr als malen nach Zahlen...
HDA schrieb:> Ich habe schon mehrere Bücher und Tutorials zu verschieden Sprachen> (Python, C/C++, Bash) gelesen und durchgearbeitet und somit auch> Grundkenntnisse in diesem Thema.>> Python hat mich hierbei besonders angesprochen.
;-)
> Das Problem bei Büchern und Tutorials ist allerdings, dass die> Code-Beispeile in der Regel sehr kurz gehalten sind und> sich nur einem bestimmten Thema widmen. Obwohl ich meistens die> Beispiele auch verstehe fällt es mir schwer, diese kleinen> Beispiele in ein größeres Projekt einzufügen.
Anhand Deiner Beschreibung fällt es mir nicht leicht, zu verstehen, was
genau Du suchst. Wenn es Dir vor allem darum geht, Techniken zur Lösung
häufig auftretender Probleme zu erlernen, würde ich Dir ein gutes Buch
zum Thema "Design Patterns" bzw. "Entwurfsmuster" empfehlen. Wenn Du
eher die Theorie besser verstehen willst, gibt es da wunderbare Bücher
von Andrew S. Tanenbaum und den berühmt-berüchtigten Balzert. Wenn es
Dir eher um Betriebssystemtechnik geht, sind die Bücher von W. Richard
Stevens eine prima Sache. Und wenn Du wirklich alles und noch ein
bisschen mehr tot schlagen willst, ist das TAOCP ("The Art of Computer
Programming") von Donald E. Knuth das Maß aller Dinge.
Wenn Du eher praktische Tipps suchst, möchte ich Dir -- auch wenn Du mit
Windows entwickeln solltest -- das Buch "The Art of UNIX Programming"
von Eric S. Raymond empfehlen, das Themen wie Modularisierung und den
Entwurf von sauberen Schnittstellen behandelt.
Wenn es Dir eher um die Gestaltung von Benutzeroberflächen geht, so
haben viele große Softwarehersteller wie Microsoft und Apple, aber auch
größere OpenSource-Projekte wie KDE sehr lesenswerte Styleguides.
> Ich habe auch angefangen, Code von Opensource-Projekten zu lesen. Ist> dies eine gute Idee?
Das ist eher was für jemanden, der bereits guten von schlechtem Code
unterscheiden kann.
> Wie habt ihr euch das Programmieren beigebracht?
Lesen. Probieren. Üben. Repeat.
> Was war / ist euer Antrieb hierzu?
Am Anfang war das Hobby. Und dann habe ich auf den großen Sun Tzu
gehört, der sagt: "Wer sein Hobby zum Beruf macht, muß niemals
arbeiten". ;-)
HDA schrieb:> wohl ich meistens die Beispiele auch verstehe fällt es mir schwer, diese> kleinen> Beispiele in ein größeres Projekt einzufügen.
Dafür sind diese Beispiele meistens auch haufig nicht gedacht. Sie
zeigen den Nutzen eines Sprachfeatures, oder die Funktionsweise von
Datenstrukturen und Algorithmen. Um diese anzuwenden benötigt man ein
Problem, dieses stellt anforderungen wie z.B. Menu => hat Verschachtelte
Optionen => braucht Verschachtelte Listen. Dann kann man die Vor und
Nachteile von einem bekannten Datenstrukturen im Bezug auf diese
Anforderungen abwägen.
> Dies führt dann dazu, das ich mir komplizierte eigene Lösungen einfallen> lasse, obwohl es in einer Sprache bereits fertige Lösungen gibt.
Google richtig zu benutzen ist nicht trivial. Es ist mittlerweile jedoch
fast nichtmehr möglich, ein Problem zu finden, für welches noch keine
Library existiert. Soetwas dann selbst zu machen bringt aber immer
winiges an Erfahrungswerten.
>Suche Dir ein erreichbares Ziel
Falsch, suche Dir ein unerreichbares Ziel.
Am meisten lernst du, wenn die von dir selbst geschaffene Komplexität im
Chaos versinkt. Nachdenkst, wie du so ein Desaster das nächste mal
vermeidest.
Karl H. schrieb:> Mein erstes Sortierprogramm willst du lieber nicht sehen. Nicht gerade> ein Ruhmesblatt :-)
Kenn ich.
> Aber: nach Tagen voll endloser Fehlersuche hat es sortiert. Und ich war> stolz wie ein Pfau.
Der Bubblesort wurde zum Troublesort :-)
Sheeva P. schrieb:> Am Anfang war das Hobby. Und dann habe ich auf den großen Sun Tzu> gehört, der sagt: "Wer sein Hobby zum Beruf macht, muß niemals> arbeiten". ;-)
Hmm, da denke ich manchmal, richtiger ist:
Der braucht ein neues Hobby.
HDA schrieb:> Python hat mich hierbei besonders angesprochen.
Python hat die Eigenschaft Dummköpfe anzuziehen und aus klugen Köpfen
Dummköpfe zu machen. Aber lassen wir das ...
> Ich habe auch angefangen, Code von Opensource-Projekten zu lesen. Ist> dies eine gute Idee?
Ja. Es gibt sogar ein gutes Kriterium um festzustellen dass man was
gelernt hat. Wenn man beginnt Fehler in dem Code zu finden oder sich
sagt "Moment, das kann man doch wesentlich
schneller/besser/einfacher/kürzer machen" (und es macht und man recht
hatte).
Dann sollte man zum nächsten besseren Sourcecode übergehen.
> Wie habt ihr euch das Programmieren beigebracht?
Gutes Lehrbuch. Wobei das zu meiner Zeit erst einmal die damals ziemlich
guten Meter von Manuals waren, die mit Computern kamen.
Dazu amerikanische Bücher über diese brandneuen Dinger namens
Mikroprozessoren.
Auch habe ich viele deutsche Computerzeitschriften gelesen, bis ich
relativ schnell gemerkt habe, dass 99% von denen Müll waren. Einzig die
c't, später zusammen mit der Schwesterzeitschrift ix, haben bei mir über
Jahre überlebt. Bis ich sie dann vor ca. zwei Jahren abbestellt habe
weil sie auch nur noch Müll bringen.
Dazu programmieren, programmieren, programmieren.
Ach ja, keine Angst vor Mathe, natürlich besonders numerischer
Mathematik. Das war für mich der Einstig in ernsthafte Computerliteratur
über Algorithmen, Datenstrukturen, Simulation, ... und daraus dann der
Einstieg in ernsthafte Anwendungen wo mehr passiert als dass unter
großem Hallo (Neudeutsch Hype) Daten vom Eingang zum Ausgang verschoben
werden.
Und keine Angst vor alten Sachen. Die moderne Informatik krankt daran,
dass sie ihre eigene Geschichte nicht kennt, nicht erkennt, wenn sie
einen Gewinner hat, alt grundsätzlich für schlecht hält, aber
gleichzeitig immer wieder die gleichen alten Dinge als neue Sau durch
Dorf treibt.
> Was war / ist euer> Antrieb hierzu?
Neugier und dass für mich sehr früh klar war, dass das die Zukunft der
Elektronik sein wird.
Für viele Andere meiner Generation und nachfolgender Generationen waren
es Computerspiele. Allerdings reicht es nicht begeisterter Spieler zu
sein oder "irgendwas mit Medien" machen zu wollen.
Jay schrieb:> ....oder "irgendwas mit Medien" machen zu wollen.
Vielleicht hast Du das nur nicht richtig verstanden und der Betreffende
wollte "irgendetwas mit MÄDCHEN machen" Das wäre naheliegend und vor
Allem spaßiger.
;-)
MfG Paul
Jay schrieb:> Und keine Angst vor alten Sachen. Die moderne Informatik krankt daran,> dass sie ihre eigene Geschichte nicht kennt, nicht erkennt, wenn sie> einen Gewinner hat, alt grundsätzlich für schlecht hält, aber> gleichzeitig immer wieder die gleichen alten Dinge als neue Sau durch> Dorf treibt.
Jepp, und alle alten Fehler gerne schlimmer wiederholt.
HDA schrieb:> Python hat mich hierbei besonders angesprochen.
Kann ich verstehen. Mich auch.
> Das Problem bei Büchern und Tutorials ist allerdings, dass die> Code-Beispeile in der Regel sehr kurz gehalten sind und> sich nur einem bestimmten Thema widmen. Obwohl ich meistens die> Beispiele auch verstehe fällt es mir schwer, diese kleinen> Beispiele in ein größeres Projekt einzufügen.
Haben ja schon oben Leute geschrieben. Einfach hinsetzten, und ein
kleines Programm schreiben, dass Dir irgendeinen Zweck erfüllt.
Du solltest nicht ohne Ende nur darüber lesen ohne zu üben.
Tatsächlich hilft Dir ab einem bestimmten Punkt und als Anstupps wenn
Dir keine passende Lösung zu einem konkreten Problem einfällt, oft eine
Suchmaschine besser weiter als ein Buch.....allerdings solltest Du
irgendwie ein Gespür dafür entwickeln, die passenden Suchbegriffe
einzugeben.
Tipps: Mehrere Suchbegriffe, alternative Suchbegriffe.
In die Ergebnisse schauen und eventuell nach Synonymen suchen.
Ausserdem inspiriert das für weitere Suchen.
Die klassische Metager-Suche ermöglicht eine Suche, die
wissenschaftliche Quellen bevorzugt. Das erhöht die Chance, auf
passendes Lehrmaterial zu stossen.
Ebenso kannst Du auch PDF Dateien bevorzugen lassen. Bei Suchmaschinen,
die diese Option nicht haben, hilft alls zusätzlicher Suchbegriff dann
.pdf oder .ps
Metager findest Du hier: https://metager.de/klassik/?nomblred
Bücher vermitteln eher Grundlagen (und Inspiration).
>> Ein Beispiel:> In einen Buch / Tutorial wird super erklärt was z. B. eine verkettete> Liste ist und wie sie funktioniert.> Allerdings sind die Codebeispiele meist so realitätsfremd, dass ich> keine Ideen bekomme, wann man so etwas in> einem richtigen Projekt anwenden könnte.
Programmiere Dir selber ein Adressbuch, erweitere das um ein
Notizbuch....
> Dies führt dann dazu, das ich mir komplizierte eigene Lösungen einfallen> lasse, obwohl es in einer Sprache bereits> fertige Lösungen gibt.
Ja und? Hauptsache Du lernst dabei. Mach Dir mal ruhig ein paar
Gedabken, was man an der vorhandenen fertigen Software (in bestimmten
Bereichen) z.B. beim Handling, verbessern könnte.
> Ich habe auch angefangen, Code von Opensource-Projekten zu lesen. Ist> dies eine gute Idee?
Wenn die Brocken nicht zu dick sind, warum nicht?
Aber tatsächlich solltest Du anfangen, selber zu schreiben.
> Wie habt ihr euch das Programmieren beigebracht?
Indem ich Angefangen habe, etwas selber zu schreiben. Damals, in den
80ern. In Basic. Auf der Uni habe ich dann (Turbo)Pascal und Fortran 90
gemacht. Irgendwann ist das, mit zwei kurzen Abstechen in PIC Assembler,
aber alles im Sande verlaufen und in Vergessenheit geraten.
Vor ein paar Jahren habe ich dann mal ein kleines Progrämchen für meine
Freundin in Gambas (Basic) geschrieben. Dabei fiel mir dann eine
Möglichkeit für ein anderes Programm auf, die ich dann auch ausprobiert
habe. Weil mir Python aber mehr Freiheiten in bezug auf Plattformen bot,
habe ich dann mit Python 3 angefangen, und letztlich gesehen, dass es
mir besser gefällt als Gambas.
> Was war / ist euer> Antrieb hierzu?
Spass am Programmieren. Privater Bedarf an speziellen Programmen und
Lösungen.
Literaturtipps: Weniger schlecht Programmieren von Katrin Passig und
Johannes Jander.
http://www.amazon.de/s/ref=nb_sb_noss?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&url=search-alias%3Daps&field-keywords=B00HXS2ZHS
Das ist eigentlich ein Buch um das Drumherum des Programmieren.
Das, was üblicherweise in Lehrbüchern zu kurz kommt.
Und sehr vergnüglich geschrieben.
Mit freundlichem Gruß: Bernd Wiebus alias dl1eic
http://www.l02.de
Ich würde überhaupt sagen: es ist eine Mischung aus allem.
Nur programmieren ohne nach links und nach rechts zu schauen, bringt
dich nicht weiter. Ich hatte bis vor 2 Jahren Code in der Wartung, der
von genau so einem verbrochen wurde. Der Mann hatte 15 Jahre
industrieprogrammiert. Aber sein Stil war schauderhaft - er war 14 Jahre
lang auf immer demselben Level festgefahren. Auch nach so langer Zeit
merkte man genau, dass er am Anfang eine Lernphase hatte und danach kam
nichts mehr. Es war keine Entwicklung sichtbar. Das betrifft sowohl die
Verwendung seiner Programmiersprache als auch Konzepte und Algorithmen.
Das ganze war 3D-Geometrie und irgendwie machte er alles anders als der
Rest der Welt. Da konnte man sich einfach nicht ordentlich reinfinden.
Alles was sich schon seit Jahrzehnten im Bereich 3D Modelling soweit
konsolidiert hatte, dass man es als gute Standardlösung ansehen kann ...
nope. Fehlanzeige. Er schrieb nach 15 Jahren seinen Code immer noch so
wie im ersten Jahr (als er noch C Neuling war. Den Umstieg auf OOP durch
den Wechsel auf C++ ein paar Jahre später hat er sowieso verschlafen)
Ich denke man muss
* selbst programmieren. Da führt kein Weg drann vorbei. Auch wenn man
gerade am Anfang Dinge kompliziert löst. Ist egal. Du hast eine Lösung
gefunden und das ist das wichtigste. Denn auch den Prozess des Findens
von Lösungen muss man erst mal lernen
* anderer Leute Code studieren. Ideal ist es natürlich, wenn man selbst
eine Lösung gefunden hat, die implementiert hat und sich dann auch noch
ansieht, wie andere dieses Problem gelöst haben. Von seiner eigenen
Lösung weiss man ja, wo man Probleme hatte, welche Codeteile einen lange
beschäftigt haben bis sie gelaufen sind. Dann kann man nämlich auch die
alternative Lösung viel besser einschätzen, indem man gezielt sich
ansieht, wie sich des eigene Detailproblem dort präsentiert. Ist es dort
überhaupt ein Problem, oder taucht dieses Detailproblem dort vielleicht
gar nicht auf.
Ich kann nur sagen: Ich hab viel davon gelernt, dass ich anderer Leute
Code studiert habe. Und ich meine wirklich studiert. Einfach downloaden,
compilieren und laufen lassen ist zu wenig. Man muss schon im Code
stöbern. Wie ist er aufgebaut, wie sind die SChnittstellen gemacht, wie
passen die Einzelteile zusammen, sind ständige Klimmzüge notwendig oder
läuft der Datenfluss schon fast natürlich von einer Funktion in die
andere. Der Lerneffekt kann dabei in beide Richtungen gehen. DU siehst
Dinge von denen du dir denkst: ui das ist aber komplizert. Und du siehst
Dinge von denen du dir denkst: wow, das ist elegant gelöst. Beides
gehört dazu.
* Algorithmen studieren. Da gibt es reichlich Literatur. Je nachdem
wohin man sich spezialisiert. Aber zumindest Standardverfahren der
allgemeinen Informatik sollte man kennen und auch schon ein paar mal
(und sei es nur aus Spass an der Freude) implementiert haben
* sich auch nicht dazu zu fein sein, sich zurückzulehnen und
selbstkritisch zu agieren. Wenn du das Gefühl hast, das ist jetzt aber
ziemlich verworrener Mist, den du da geschrieben hast ... wie könnte man
das anders machen? Welche Alternativen gibt es? Ruhig auch mal
ausprobieren: wo führt mich diese Alternative hin? Wie modifiziert sich
das wwas ich bis jetzt habe? Kein Code ist in Stein gemeisselt, es ist
erlaubt alles zu ändern. Für meine 2D Editor Engine hab ich wohl 3 oder
4 Anläufe genommen, bis ich erst mal soweit zufrieden war. Ganz
zufrieden bin ich immer noch nicht damit. vielleicht mach ich noch einen
Anlauf. Gerade Neulinge kleben oft viel zu sehr an den Codezeilen die
sie schon haben. Es hat Stunden gedauert sie zu schreiben also sind sie
tabu und werden nicht angerührt - das ist die falsche Einstellung.
Es gibt nicht die eine Beschäftigung, die einen besser macht. Es ist
eine Summe aus allem möglichen. Das wichtigste ist aber, dass es einem
Freude macht. Ja, da gehört auch dazu, dass es einem Freude macht sich
mit einem Problem rumzuquälen. Wenn du das nicht als Herausforderung
siehst, deine Fähigkeiten an einem Problem zu messen, sondern nur als
Qual empfindest, dann ist SW-Entwicklung nicht die richtige
Beschäftigung für dich.
Der Andere schrieb:>> Aber: nach Tagen voll endloser Fehlersuche hat es sortiert. Und ich war>> stolz wie ein Pfau.> Der Bubblesort wurde zum Troublesort :-)
Wenns wenigstens ein Bubblesort gewesen wäre.
Aber das war ein wildes Konglomerat aus ungelenker Feder. Was wusste ich
damals schon von Standardverfahren :-) Da wurde in Arrays heftigst
herumgeschoben um Platz an der Einfügestelle zu machen und an der
Entnahmestelle die Lücke wieder geschlossen. Im Prinzip so wie wenn man
ein Kartenblatt in der Hand sortiert: Karte raus, restliche Karten
wieder zurechtrücken, suchen wo die Karte hin muss, dort die Karten
auseinanderschieben und Karte rein. Und das ganze in BASIC (dem alten,
dem mit den Zeilennummern)
:-)