Auf welche Platform (z. B. Server, Browser, iOS, Android, Windows, Mac) sollte sich ein junger Software Entwickler spezialisieren, um lange damit seinen Lebensunterhalt verdienen zu können?
Eine Plattform ist keine Spezialisierung, sondern eine Plattform.
Eine Plattform ist eine Form einer Umgebung. Umgebungen ändern sich. Ich fing auf einer 8 Bit-Plattform an, wechselte frühzeitig auf eine 32-Bit-Plattform mit preemptiven Multitasking, aber ebenfalls ohne Speicherschutz oder virtuellem Speicher. Heute arbeite ich auf einem Standard-PC. Und morgen?
Ich lerne Konzepte. Assembler ist ein anderes Konzept als eine abstrakte Sprache wie Java, die gleichzeitig eine Plattform ist. Eine Plattform, die vor 20 Jahren kam und in 20 Jahren gegangen sein wird. Wer braucht heute noch Assembler? Kürzlich hatten wir einen Bug, bei dem der Debugger nicht half. Eine Funktion wurde in der falschen Calling Convention gerufen, das Programm verhielt sich plötzlich merkwürdig, lief aber noch einige Zeit weiter, bis es dann abstürzte. Der Debugger zeigte zwar merkwürdiges an, aber es konnte sich halt keiner erklären.
Assembler erklärt OpCodes, Bytecodes, egal ob JVM oder .NET, egal welche Plattform. C++ erlaubt extrem hohe Abstraktion. Gefragt, weshalb man mich als Java-Entwickler eingestellt hat, erklärte man mir “Weil C++-Entwickler wissen, was sie tun.”
Spezialisierung bedeutet Alleinstellungsmerkmale zu schaffen. Man kann Webentwickler sein, solange das Web jemanden interessiert. Was ist Web? HTTP? HTML? CSS? JavaScript? Als ich angefangen habe zu programmieren gab es kein HTTP, aber das Web. NNTP. Telnet. Beides heute nicht mehr sonderlich wichtig im Vergleich zu HTTP. Eine Spezialisierung auf NNTP oder Telnet wäre also heute uninteressant. Vor 15 Jahren war WAP der ganz große Scheiß. Nix HTML, HDML! Interessiert keine Sau mehr.
Wenn es also darum geht, lange sein Geld zu verdienen, sollte man sich Dinge angucken, die grundsätzlich einen Wert haben. Assembler wird nicht abgelöst. Assembler wird auf Embedded Systems interessant bleiben.
C++ wird vielleicht abgelöst, wird aber noch sehr, sehr, sehr lange dauren. Nicht abgelöst werden aber nicht dessen Konzepte. Falls doch, stirbt nahezu alles andere auch weg - und zwar vorher. C++ ist also eine ziemlich sichere Nummer, wenn man sich spezialisieren will.
Algorithmen, Datenstrukturen, Mathematik. Parallelisierung halte ich für dauerhaft relevant. Racing-Conditions zu verstehen.
Die Plattform kommen und gehen. Die Plattform, die am längsten da ist, wurde übrigens nicht aufgezählt: Unix. MacOS ist ein Unix. Linux ist ein Unix. iOS ist macOS ist ein Unix. Android ist Linux ist ein Unix. Server laufen häufig auf Linux. Linux läuft auf meinem NAS. Linux läuft auf meinem DVBT2-Receiver. Windows… ist eine andere Plattform, die sich mobil nicht durchgesetzt hat.
Wenn es also darum geht, sich lange und breit zu spezialisieren, dann wäre Linux ein guter Einstieg. Ich bin Software-Entwickler. Unter Windows. Privat unter Linux. Und meine Software-Repositories hoste ich unter einem Linux-Server. Auf der Arbeit haben wir einen Admin. Das Software-Repository läuft auf einem Linux-Server und um den kümmere ich mich.
Konzentriert man sich auf langlebige Produkte, sammelt man Fachwissen, was man lange gebrauchen und verkaufen kann. Den ersten Repository-Server habe ich 2005 aufgesetzt. Das Wissen verkaufe ich heute noch und ist auch noch nicht veraltet.
Aktuell blieben und überlegen, was von den aktuellen Hypes morgen noch interessiert. Womit wir wieder bei der Parallelisierung und den Racing-Conditions wären. Egal ob auf Server, Mobiltelefon, Windows, Mac oder Browser.