Programmieren als kunstvolles Handwerk zu bezeichnen ist eventuell etwas weit her geholt, wenn man mit dem Ganzen wenig Kontakt hat. Jeder kennt die Tischlerei, Malerei, Glaserei oder Küche um nur einige zu nennen. Irgendwie sieht Software doch immer gleich aus – ist also eher industriell anzusehen. Wer aber hinter die fein gezeichneten Linien, Bilder, Buttons oder Eingabefelder blickt, sieht die wahre Kunst an diesem Handwerk.
Diese Konzepte stehen für mich an erster Stelle beim Entwickeln:
YAGNI – You Aren’t Gonna Need It! Du kannst nicht wissen, was in 5 Jahren ist. Konzentrieren wir uns auf das, was jetzt wichtig ist.
KISS – Keep it simple, stupid! Du kannst es mit der Komplexität von Anwendungen auch übertreiben. So wenig Komponenten wie möglich, so viele wie nötig – von dem einfachen Script bis hin zum Continous Delivery hat alles seinen Stellenwert.
Frag Google! Bevor ich damit beginne, etwas zu programmieren, stelle ich meinem alten Freund Herrn Google immer die Frage: Gibt es das schon wo?
Open-Closed-Prinzip für das Leben als Entwickler.
Wie aus fast allem kann man viele wichtige Lektionen für das Leben auch aus den verschiedenen Programmierkonzepten lernen. Das Open-Closed-Prinzip sagt, dass man offen für Erweiterungen, aber geschlossen für Veränderungen sein soll. Für die Softwareentwicklung leichter zu verstehen als für das Leben, aber ich erklär dir meine Gedankengänge gerne.
Geschlossen für Veränderung heißt, dass man sein Ziel festgelegt hat, ein wichtiger Punkt für jeden Unternehmer und jeden von uns. Zu wissen für was du existierst und was du erreichen willst, erleichtert jede Entscheidung im Leben. Offen für Erweiterungen zu sein bedeutet, schon einen Platz für diverse Änderungen vorgesehen zu haben, ohne sich auf diese schon am Anfang konzentrieren zu müssen. Zum Beispiel die Familienplanung – zwei Kinder zu wollen und drei zu bekommen ist eben eine Erweiterung.
Es kann oft passieren, dass durch äußere Einflüsse eine Veränderung nötig wird. Dann wird meistens auch die Software verworfen oder so stark abgeändert, dass vom ursprünglichen Ziel nichts mehr übrig ist und ein neues Konzept angelegt wird.
Spezialisierung versus Generalisierung:
Wenn zu mir ein Entwickler kommt und sagt, er kann Java, Ruby, Python, PHP, JS, TS, C#, C++ und so lustige Sachen wie Go oder Brainfuck bin ich meistens eher zurückhaltend. Ich programmiere nur PHP und JS/TS und würde mir hier nur 4.5 von 5 Sternen geben. Es wird immer alles funktionieren und auf einem hohen, wartbaren Niveau sein. Die allerneusten Techniken, Möglichkeiten und Versionen schöpfe ich aber nicht aus. Dafür ist eine Programmiersprache zu umfangreich. Meistens heißt eine so lange Liste von Sprachen, dass der oder diejenige noch nicht die Lieblingssprache gefunden hat und meistens kein umfangreiches Langzeit-Projekt damit abgewickelt hat. Könnte aber auch sein, dass es sich um einen Nerd LVL 9999 handelt, dessen Wortwahl ich nicht folgen kann.
Sprache versus Framework:
Für mich ist das Beherrschen einer Sprache mehr als das Einsetzen eines Frameworks. Ein Framework ist sowas wie ein Haufen Schablonen und Modulen, mit denen du in der ausgewählten Programmiersprache Zeit und Ressourcen sparen kannst. Ich habe viele Java-Entwickler getroffen, die die tollsten Anwendungen programmiert haben, aber keine Library am Tomcat installieren können.
Das macht auch nicht zwingend etwas, denn dafür gibt es ja die neue Berufsbezeichnung der DevOps. Trotzdem finde ich, solltest du als Entwickler wissen, wie du wenigstens einfache Strukturen am Server aufbauen kannst – das spart dann wirklich Zeit und Geld – nicht weil du es kannst, sondern weil du die Zusammenhänge verstehst.
Generell Spezialist 😉
Im Prinzip kann ich dir bei allem helfen, was irgendwie mit Internet zu tun hat. Egal ob Frontend Entwickung oder PHP Programmierung – das inkludiert das Entwickeln von Hybrid Apps. Das sind Anwendungen, die in HTML/JS mit Serveranbindung (PHP) erstellt werden und als Anwendung in die App Stores geladen werden. Für den normalen Gebrauch ist das bei weitem ausreichend. Die Anwendungen sind nicht so flexibel und performant wie Native-Apps, also in Java oder Swift programmiert, aber das ist außer bei Spielen kaum relevant. Einige deiner Anwendungen am Handy sind wahrscheinlich Hybrid Anwendungen oder nutzen zumindest eine WebView.