Ode an die Systemprogramierer

Ich habe lange Zeit Gedacht, dass die Ausbildung zum Informatiker EFZ ausgewogen ist. Ich wurde in der letzten Zeit leider etwas anderem belehrt. Ich habe mit verschiedenen Informatikern EFZ Applikationsentwicklung zusamengearbeitet und war jedes mal erstaunt, wie einseitig die Ausbildung ist.

Ausrichtung der Ausbildung

Die Lehre zum Applikationsentwickler ist mehrheitlich auf die Entwicklung von Webentwicklungen ausgelegt. Das ist an und für sich kein grosses Problem. Die meisten Applikationen, welche heutzutage benutzt werden, werden als Webentwicklungen aufgesetzt. Daher ist ein starker Fokus darauf verständlich. Jedoch werden andere Ansätze weitestgehend nicht beachtet oder nur zu leichtfüssig angeschnitten.

Ich habe es nicht nur bei einer, sondern mehreren Personen beobachtet. Sie haben alle die Ausbildung zum Applikationsentwickler besucht. Konnten aber nur ohne grosse Einführung nur bei der Webentwicklung eingesetzt werden. Sie können Webdienste programieren, welche unbegrenzte Anzahl von Anfragen in der Sekunde bearbeiten könne, stellt man ihnen eine Aufgabe ausserhalb der Webentwicklung, stehen sie schnell an.

Beispiele Hardwareentwicklung

Ein ausgelernter Informatiker mit mehreren Jahren Erfahrung in der Praxis hat die Aufgabe bekommen eine einfache Logik zu implementieren, welche von 2 Sensoren und einem Taster bedient wurde. Die Hardware und die Logik waren vorgegeben, es ging nur um die Implementatnion. Da der Aufbau einfach war, wurde die Logik mündlich besprochen und nicht aufgezeichnet.

Als der Informatiker mit der Arbeit begann, fing er an zu fluchen über die vielen IF-Statments und verschachtelungen, welche zur umsetztung nötig wären. Ich hatte schon vorher im Kopf ein grundlegendes Design erstellt und war über diese Aussage verwundert. Daher besprach ich seinen Ansatz mit Ihm.

Er wollte die Logik mit Hilfe eines Ablaufdiagramms abbilden und implementieren. Da war für mich auch klar, dass es viele IF-Statmenets braucht und der Informatiker verzweifelte. Als Lösung zeigte ich ihm mein Design, welches auf einer Statemachine basierte. Durch konnte ein umfangreiches Ablaufdiagram vereinfacht werden und die Implementierung war um ein vielfaches einfacher.

Bin ich der Meinung, der Informatiker sei unfähig, weil er das Problem auf eine komplizierte Art lösen wollte? Überhaubt nicht. Seine Ausbildung hat Ihn nicht auf diese Problem vorbereitet. Falls sie jetzt denken, dass sei auch ein Problem für einen Elektroniker und nicht für ein Informatiker, so haben sie unrecht. Er konnte die Logik aufbauen, ohne sich um die Hardware zu kümmern. Aus früheren Projekten existierten schon die Hardware-Abstraktionen. 
Ich bin eher der Meinung, dass die Ausbildung versagt hat. Ja, Mit Ablaufdiagrammen kann man Software gut planen. Aber es ist nicht immer die beste Lösung. Die Ausbildung zum Applikationsentwickler sollte auch andere Varianten aufzeigen und schulen.
Eine Statemachine kann man nicht nur in der Hardwareprogrammierung einsetzten. Sie kann auch bei anderen Anwendungen nützlich sein. Sollte zum Beispiele eine eine serverbasierte Applikation verschiedene Zustände haben, so kann man eine Statemachine für die grundlegende Logik nutzen.

Systemkenntnisse

Ein weiteren Punkt, welchen ich problematisch finde, ist die teilweise Mangelnde Kenntniss der Grundlegenden Systeme wie Hardware und Betriebssysteme. Es geht mir nicht darum, dass die Applikationsentwickler ein Betriebssystem von Grund auf schreiben sollen. Es geht darum, dass man bei einer Ausbildung, welche sich auf Webentwicklung fokusiert, zu stark von den System entfernt, welche alles am laufen halten. Ein zusätzlicher Trend ist, dass man alles in Container verschiebt, welche auf der Server-Seite für eine stärkere Abstraktion sorgen können.

Das Problem ist, dass es genügend Anwendungen gibt, bei welcher man die Lösung nicht Web- oder Containerbasiert aufbauen kann. Setzt man einen Informatiker EFZ an sollche Probleme, stehen sie schnell an und kommen ins schlingern. 

Beispiel Lesegeschwindigkeit

Ich hatte eine Disskusion mit einem Informatiker darüber, ob es sinnvoll sei, ein Überschreiben von Datenträgern in Python zu schreiben. Aus seiner Sicht nicht, da Python eine interpretierte Sprache sein und zu den langsamtsen gehört. Mann sollte doch eine Sprache näher an der Hardware nehmen, um eine höhere Durchsatztrate zu erreichen.

Es stimmt, das Python als interpretierte Sprache eher langsam ist. Jedoch kann man mit den richtigen Systemfunktionen diesen Nachteil grösstenteils ausgleichen. Ausserdem war der rest des Programms in Python geschrieben, da es bei diesem nicht auf Geschwindigkeit, sonder auf Wartbarkeit und einfache Anpassungsfähigkeit ging.

Ausserdem haben Systemüberwachungstools gezeigt, dass nicht das Programm, sondern die Schnitstelle zum Datenträger der bremsende Faktor waren. Es gab einzelne Geräte mit schnellen Datenträgern und eher schwachen Prozessoren, bei denen der Datenträger nicht 100% ausgelastet war. Jedoch waren es nicht genügend Geräte, um ein neuschreiben der Funktion in einer anderen Sprache zu relativieren. Auch hätte man das Überschreiben in Python beschleunigen können, wenn man den Prozess mit Multithreading ausgestattet hätte. Jedoch hätte es bei höchstens 5% der Geräte eine beschleunigung von vielleicht 10% ergeben. Die restlichen Geräte wären nicht betroffen gewesen.

Was war hier der Fehler des Informatikers / der Ausbildung. Die Argumentation hat sich nur darauf fokussiert, dass Python eine langsame Sprache sei. Die Leistung moderner Prozessoren oder die Begrenzungen durch die Hardware wurden in der Argumentation nicht beachtet. Obwohl diese eine grosse Rolle gespielt haben in der Betrachtung des Problems.
Könnte man das Programm durch einen Wechsel der Programmiersprache beschleunigen. Theoretisch ja, jedoch wäre es in der Praxis nicht sichtbar. 
Der Fehler war in der rein theoretischen Diskussion, ohne überhaubt getestet zu haben, was die momentane Version ausbremst. In der Welt der Webapplikationen sind meistens die Limitation der Hardware eher von geringerer Bedeutung, da sie extrem hoch sind durch die heutzutage extrem leistungsfähige Serverhardware. Wenn man jedoch Software für Endgeräte entwickelt, ist es oft so, dass die Hardwarelimitationen eine Rolle spielen.

Was soll dieser Titel?

Ich habe in letzter Zeit oft mit Systemen zu tun, welche nicht von Applikationsentwicklern stammen. Ich war mehrfach beeindruckt vom Einfallsreichtum und den Lösungen dieser Software. Die Entwickler haben nicht darüber nachgedacht, welches die schnellste Sprache ist. Sie haben die Sprache genutzt,welche sie kannten und nur gewechselt, wenn es klare Anzeichen gab, dass die Sprache die Aufgabe nicht bewältigte. Auch kannten diese Entwickler meistens die Hardware und die Betriebssysteme gut und konnten somit Problemlos mit beidem zusamenarbeiten.
Ich habe ein parametrisierbares und äusserst flexibles Flottenverwaltungstool gesehen, welches komplett in Bash geschrieben wurde. Wäre Bash meine Wahl für diese Aufgabe gewesen. Eindeutig nicht, jedoch liefert Bash mehrere Vorteile, welche den System zugutekommen. Auch wird das System nicht durch die Nutztung von Bash ausgebremst. Im gesamten steht das System Ansible und co. in nur wenigen Bereichen nah. Das grösste Problem ist, dass es nur für eine Distribution entwickelt wurde. Jedoch nutzen alle Systeme die gleiche Distribution und es gibt keine Gründe dies zu ändern. Daher ist diese Problem auch nicht so schwerwiegend aus meiner Sicht.