Wie lange habt ihr gebraucht um programmieren zu lernen?

10 Antworten

Ich arbeite als Software-Entwickler seit ca. 30 Jahren und habe noch lange nicht das Gefühl, "ausgelernt" zu haben, und so wie es aussieht, wird dieser Zustand auch noch mindestens die nächsten 30 Jahre anhalten. :)

Programmiersprachen entwickeln sich meistens weiter, was in neuen Sprachfeatures, Paradigmen und vor allem Bibliotheksfunktionalitäten mündet. Hinzu kommt das ganze drum und dran.

Früher dachte ich immer, dass ich meine jeweilige Programmiersprache nach wenigen Wochen / Monaten beherrschen würde, inzwischen weiß ich, dass "beherrschen" ein Zustand ist, den man realistisch betrachtet nicht erreichen kann. Du kannst dem nur - mehr oder weniger - nahe kommen.

Ich denke, dass ich da schon ausreichend nahe dran bin, aber das ist noch lange kein Grund, nicht weiter zu lernen.

Aber um letztendlich doch noch deine Frage halbwegs zu beantworten: Bis ich mit einer Programmiersprache so ungefähr das anstellen konnte, was ich mir vorgestellt habe, hat Anfangs viele Monate gedauert, mittlerweile benötige ich für neue Sprachen nur noch wenige Wochen, bin dann aber wohlgemerkt noch WEIT von dem entfernt, was ich als "können" bezeichnen würde.

Meine Erfahrung ist übrigens, dass die meisten Programmierer nicht wirklich gut programmieren können, und nicht mal ihre Hauptprogrammiersprache in ausreichendem Maße kennen. Software-Entwicklung ist vermutlich DIE Branche, in denen die meisten Dilettanten arbeiten, sich allerdings selber für unglaublich "fähig" halten.

Mit Abstand in den meisten (!) Firmen, findet man leider nur unteres Mittelmaß. Mehr nicht. Das ist sehr schade. Ich muss oft Software-Audits machen, und gefühlt würde ich schätzen, dass 90% aller Unternehmen eine katastrophal fehldesignte Codebasis haben, von herkömmlichen Bugs durch mangelndes Testing, usw. mal völlig abgesehen. Das ist aber zu großen Teilen die Schuld des Managements und weniger der Entwickler, die vor unmögliche Aufgaben gestellt werden.

Fazit: So richtig "gute" Entwickler, musst du mit der Lupe suchen. Für den meisten Pfusch reicht aber das, was du in den meisten Firmen vorfindest. Was am Ende dabei raus kommt, siehst du ja tagtäglich, wenn du dir mal die Artikel in der Fachpresse zu Security-Alerts durchliest ... und das sind meist große Firmen, die richtig viel Geld in die Weiterbildung ihrer Entwickler investieren.

Denk mal lieber gar nicht erst an die hippe Startup-Klitsche, aus Berlin-Mitte, die ihre neue App mit Social-Media-Anbindung vermarktet, womit User jederzeit über die Cloud irgendeinen Bullshit machen können, der am besten noch etwas mit KI und Blockchain zu tun hat.

Lange Rede, kurzer Sinn: Als Softwareentwickler hat man NIE auch nur annähernd ausgelernt, und die meisten sind einfach so schlecht, als dass man sie wenigstens als "mäßig" bezeichnen könnte. (Disclaimer: Natürlich gibt es auch richtig gute Leute, keine Frage! Aber die gehen im Meer der Unfähigen fast schon unter, und können sich dank stupidem BWL-Futzi aus dem Management meist auch überhaupt nicht entfalten!)

Woher ich das weiß:Berufserfahrung

apachy  06.03.2019, 09:42
Meine Erfahrung ist übrigens, dass die meisten Programmierer nicht wirklich gut programmieren können [...]

Da sprichst du mir aus der Seele. Oft auch bei Leuten mit höheren Abschlüssen. Heutzutage strebt gefühlt jeder Zweite in dem Bereich das Studium an. Für die reine Praxis ist das am Ende aber oft am Bedarf vorbei ausgebildet. Verstehe aber die Leute natürlich auch, immerhin verspricht es ein höheres Einstiegsgehalt.

Software-Entwicklung ist vermutlich DIE Branche, in denen die meisten Dilettanten arbeiten, sich allerdings selber für unglaublich "fähig" halten.

Auch das kenne ich zu gut. Leider häufig auch bei Leuten, die eigentlich was auf dem Kasten haben. Bei uns im Unternehmen (10 MA in der Entwicklung) würde ich z.B. sagen, dass alles von gut drei Leuten getragen wird.

Einer davon fühlt sich immer unglaublich clever, wenn er ternäre Operatoren möglichst tief ineinander schachtelt. Am Ende sorgt es nur für Probleme, gerade bei Änderungen und Erweiterungen. Er fühlt sich zu schlau um lesbaren Code zu schreiben. Gerne dann endlos Bandwürmer und OOP ist für ihn das Schlüsselwort class, wo dann natürlich nur statische Funktionen genutzt werden und Abstraktion schlicht nicht existiert. Eigentlich schade, zumal er einer der wenigen ist, der komplexe Aufgaben zumindest selbstständig lösen kann.

Viele andere können die meisten Sachen schlicht nicht lösen, brauchen sehr viel Hilfe oder erzeugen etwas, das am Ende deutlich mehr arbeitet kostet.

[...] gefühlt würde ich schätzen, dass 90% aller Unternehmen eine katastrophal fehldesignte Codebasis haben, von herkömmlichen Bugs durch mangelndes Testing, usw. mal völlig abgesehen. Das ist aber zu großen Teilen die Schuld des Managements und weniger der Entwickler, die vor unmögliche Aufgaben gestellt werden.

Auch das ist mir bestens bekannt. Testen is zu teuer und zu aufwendig.. zum 50. mal die gleichen Fehler entfernen, meist hinterher als Gewährleistung nicht. Nur das man die Fehler dann auch mitschleppt ins nächste Projekt und da wieder am gleichen hängt, ebenso bei jeder Änderung usw.

Natürlich alles auch mit einen exorbitant hohen Stundensatz. Damit der Kunde was kauft werden also die Stunden runtergedreht. Der Kunde kriegt etwas, dass eigentlich 3 Tage dauert für den Preis von einem Manntag, was natürlich nur Pfusch sein kann, ergo kommen dann zwei Tage unbezahlt als Gewährleistung drauf. Der Kunde ist pissed und hinten drum werden Pflaster hier und da draufgeklebt, um das fehlerhafte Design zusammen zu halten. Gerne auch an ganz anderen Stellen, mit zusätzlichen Jobs und was weiß ich, so dass man im Code selbst nicht mal weiß warum etwas funktioniert oder nicht.

Irgendwann ist eine Codebase dann natürlich so groß und verhunzt, dass man wirklich einiges neu schreiben müsste. Das ist aber zu teuer und bezahlt natürlich keiner. Lieber nimmt man ein neues Projekt an und fuscht etwas dazu. Verstehe es aber auch, wenn der Umsatz einbricht gibt es keine Bonizahlungen usw. Man wird quasi für Sche.. bezahlt, anstatt das man den Laden mal aufräumt, dafür in Zukunft wesentlich schneller entwickeln kann, weniger Fehler hat, mehr Kunden annehmen kann, neue Leute schneller einarbeiten kann und den Laden vernünftig hoch skalieren kann.

Scheint aber auch bei den großen so zu sein. Hier mal ein Post von einem ehemaligen Oracle Mitarbeiter:

https://news.ycombinator.com/item?id=18442941

1
jonashima  06.03.2019, 09:59
@apachy

Jetzt habt ihr mir Angst gemacht. Im Studium wird von clean Code, Performance, Abstraktion, testing, guter Dokumentation etc gepredigt (finde ich sehr sinnvoll) damit es dann keiner macht?!

ich dachte in der Inforamatik wäre man ein wenig davon gefreit, ich hatte die Illusion, dass man in dieser Sparte allgemein etwas gewissenhafter ist, danke für diesen Einblick!

0
apachy  06.03.2019, 11:34
@jonashima

Das es gepredigt wird ist schön. Im Studium lernst du aber ein wenig Theorie und Konzepte. Ihr werdet nicht mit viel Code arbeiten, vor allem nicht mit großen Projekten wo zig Leute über Jahrzehnte dran waren.

Wenn du erstmal ein paar Millionen Code hast, dann lässt sich sowas eben nicht mehr leicht ändern. Das ist dann ein Projekt von einem halben Jahr oder Jahr, da geht es um Millionen an Umsatz, da hängen Sonderzahlungen oder gar Jobs dran.

Ergo hast du einen riesen Haufen Sche.. der immer weiter anwächst. Habe abgesehen von großen öffentlichen Projekten und kleineren Hobbyprojekten sehr selten guten Code gesehen.

Im Berufsumfeld so gut wie nie. Der Großteil der Arbeit ist am Ende entfernen von Fehlern und der Versuch vorhandenen Code zu verstehen. Oft geht es so weit, dass sich am Ende eh keiner traut den Code zu ändern und deshalb mehr drum rum gebaut wird usw.

1
colum123  06.03.2019, 13:07
@apachy

Hm, ich selbst habe für paar Jahre Java gelernt und jetzt lerne ich Kotlin (übrigens sehr schöne Sprache). Jetzt, wo ich das hier gelesen habe, denke ich, dass ich doch nicht gut bin ^^

Ich habe Probleme mit (asynchronen) Datenbanken, da ich nicht wirklich weiß, wie ich da rangehen soll. Zum Beispiel bei einer Account-Registrierung könnte es doch passieren, wenn man asynchron arbeitet, dass sich zwei Benutzer zur gleichen Zeit mit dem selben Benutzernamen registrieren, wie sollte man das umgehen? Einfach nicht asynchron arbeiten?

Außerdem weiß ich nicht, welches Pattern ich für Datenbanken benutzen soll, da es manchmal sehr unübersichtlich wird.

Würde mich gerne über Hilfe/Rat freuen! :)

0
VeryBestAnswers  06.03.2019, 18:04
@colum123

Ich arbeite als Werkstudent bei einem mittelgroßen Software-Dienstleistungsunternehmen. Meine Erfahrung ist bisher eine völlig andere als die von ixUser :)

Im Moment arbeite ich zusammen mit 3 Mitarbeiter*innen an einer Webanwendung (Frontent: Angular, Backend: Spring Boot in Kotlin). Das Backend manipuliert eine MySql-Datenbank über eine REST-Schnittstelle. Bisher ist der Code ordentlich und hat sogar einige Test Cases.

Ich habe Probleme mit (asynchronen) Datenbanken

Hättest du bereits eine Datenbanken-Vorlesung gehabt, dann wüsstest du, dass moderne, relationale Datenbanken Transaktionen verwenden. Transaktionen können zwar oft parallel ausgeführt werden, bei data races wird aber synchronisiert. Wenn eine Transaktion fehlschlägt, wird sie wieder rückgängig gemacht und erzeugt eine Fehlermeldung.

Das heißt: Wenn du einen User Account erzeugst, musst du nur überprüfen, ob die Datenbank dir einen Fehler zurückgibt. Um alles andere kümmert sich die Datenbank.

Außerdem weiß ich nicht, welches Pattern ich für Datenbanken benutzen soll, da es manchmal sehr unübersichtlich wird.

Vielleicht solltest du einfach warten, bis du die Datenbankvorlesung hattest. Da wird das alles sehr detailliert erklärt. Es gibt aber auch Ressourcen dazu online.

1
colum123  06.03.2019, 19:58
@VeryBestAnswers

Spring Boot muss ich auch noch lernen :/
Konntest du das schon bevor du eingestellt worden bist?

Hm, Test Cases sind eine gute Idee. Aber ich wollte eigentlich keine relationale Datenbank benutzen, sondern MongoDB. Wie muss ich in diesem Fall mit einer Registrierung umgehen?

Das mit der Datenbankvorlesung ist eine gute Idee.

Danke!

0
VeryBestAnswers  06.03.2019, 20:51
@colum123

Spring Boot konnte ich noch nicht, als ich mit dem Projekt angefangen habe. Da gibt es auch noch einiges, was ich nicht oder oder nur schlecht verstehe. In Kotlin hatte ich hobbymäßig schon etwas Programmiererfahrung.

Mit MongoDB kenne ich mich nicht aus, daher weiß ich nicht, wie das typischerweise gelöst wird.

0

Naja, was heißt gelernt?

Das erste Programm kannste nach ein paar Wochen Schreiben. Aber beherrschen tust du es dann ja nicht. Viel ist ja auch einfach die Denkweise die man dafür braucht.

Man lernt auch nach 10 Jahren sicher noch immer Mal was neues dazu.

Ich bin noch dabei. Zum Computer kam ich vor 27 Jahren und habe auch bald erste Erfahrungen mit Batchskripten und co. gemacht und einige Jahre später mit Sprachen wie JavaScript, später dann C(++), Assembler, Java, C# und PL/SQL.

Die Grundlagen kann man durchaus innerhalb weniger Tage lernen und Programme erstellen. Kompliziert wird es, wenn Programme größer werden, sich nach längerer Zeit ändern müssen oder mehre Leute am Code arbeiten bzw. man auch auf Code von anderen zurückgreifen muss oder diesen ändern muss, wenn Softwaredesign, lesbarer und testbarer Code usw. wichtiger werden.

Da bin ich auch heute sicher noch nicht am Ende meiner Reise, ganz davon ab dass sich die Sprachen auch ändern, wir "neue" Paradigmen bekommen wie Functional Programming usw.

Also wie lange habe ich gebraucht? Für die erste Sprache, bis ich sie für meine Zwecke nutzen konnte einige Tage. Fertig gelernt ist da aber noch lange nicht, wie gesagt da bin ich auch jetzt nicht und werde wahrscheinlich niemals da ankommen, da die Sprachen, Frameworks, Bibliotheken, das Tooling, Schnittstellen, die Best Practices usw. sich stetig bewegen, ebenso wie die Clients oder Server.

Wie ich gelernt habe? Nun zu Anfang gab es das www nicht, ergo war es hauptsächlich Trial and Error, vorhandenen Code anschauen, hier und da was ändern und gucken was passiert. Ich denke das hat mir in meiner weiteren Laufbahn auch sehr geholfen, da ich dadurch gelernt habe mich an komplexe Sachen heranzutasten. Irgendwann kamen dann Bücher hinzu, eine Ausbildung in dem Bereich, heutzutage ist es ein Mix aus Trial and Error inkl. APIs, Code den man benutzt lesen und verstehen, Blogs und Youtube.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012

gute frage , wirklich komplexe probleme lösen ? 1 Jahr jeden tag 8 stunden . und es gab nur englishe dokumentation , keine filmchen und eigentlich auch keine frameworks ausser die MFC von windows mit seiner ungeügenden Dokumentation und kaum beispielen .

aber das gute ist, wenn man die grundlagen kann , also reale probleme in code umzuwandeln , ist es sehr schnell gelernt das in alle möglichen sprachen umzusetzen .

ergo nehme gleich am anfang etwas was auch wirklich alles abdeckt, nur so lernst du probleme zu lösen auch wenn es kein framework dafür gibt oder das framework deprecated ist bzw etwas kostet

  • Hello World abtippen und laufen lassen - Minuten
  • Einfaches Programm abtippen und stellenweise modifizieren - Stunden
  • Einfaches Programm ohne Vorlage selbst erstellen - Tage
  • Syntax der Programmiersprache komplett erkundet haben - Wochen
  • Mit Bibliotheken arbeiten, Schnittstellen erstellen - Monate
  • Komplexe und robuste Programme, guter Programmierstil - Jahre

Mit weiteren Programmiersprachen verringert sich der Aufwand - um etwa eine Zeile.

Wobei es nicht jedem gegeben ist, sämtliche dieser Reifegrade zu erreichen. Andere setzen noch einen drauf und schreiben sich ihre eigene Programmiersprache samt Compiler.

Woher ich das weiß:eigene Erfahrung