, ,

Usability in Code an Overview from IDE to AI

Marc Schillke

Wenn man über Usability Kontext von IT redet, wird ein integraler Part gerne komplett übersehen: Den Entwickler.
Wie soll Usability richtig umgesetzt werden wenn, der der Beides umsetzten, muss von beiden Themen während seiner Arbeit nichts mitbekommt?
Warum hört Usability immer dort auf, wo der Entwickler auf sein Handwerkszeug schaut?

Die Fragen oben sind natürlich etwas überspitzt, dennoch stellt sich die Frage warum Usablity für den Entwickler beim Entwickeln kein großes Thema ist.
Oder ist es das vielleicht doch?

Wir gehen jetzt dem Mythos von unzulänglicher Usability als Entwickler auf den Grund, welche Probleme es weiterhin gibt und wohin die Reise vielleicht hingeht.

IDE

IDEs oder Integrated Development Enviroments zählen heute zu den absoluten Standards, mit denen effektiv jeder Entwickler heute arbeitet. Sie erlauben Syntax-Highlighting, automatisierte Code Completion, automatisches Refactorn und Style Checks. All diese Dinge vereinfachen die Arbeit mit Code und das Entwickeln an sich, zusätzlich ermöglichen sie das Integrieren von Compiler und Build-Routinen alles in einem. All das streamligned den Entwicklungsprozess und unterstützt den Entwickler dabei effektiv und sauber zu arbeiten.

Bevor IDEs oder Terminals verwendet wurden, gab es viel interessante Wege Code zu schreiben und zu kompilieren. Zum Beispiel wurden die Instruktionen dem Compiler in Form von Lochkarten übergeben. Die Instruktionen wurden mithilfe von Flowcharts konstruiert.

Allerdings mussten IDEs auch damals mehrere Hürden überwinden, bis sie großflächig angenommen wurden.
Die erste IDE wurde für die Sprache Dartmouth BASIC 1964 entwickelt. Dartmouth BASIC war die Vorgängersprache zum bekannten BASIC und wurde zusammen mit einer IDE entwickelt. Allerdings stieß das Konzept des Vereinfachens und die Idee dem Entwickler High-Level Probleme vorzusetzen statt sich mit dem Buildprozess des Compilers herumzuschlagen auf negative Reaktionen unter den damaligen Entwicklern. Diese fühlten sich von der IDE in ihrer Kreativität eingeschränkt und lehnten die Verwendung von IDEs großflächig ab. Selbst bis 1995 waren IDEs nicht gerne unter Entwicklern gesehen, mit den gleichen Argumenten wie 30 Jahre zuvor.

Dies hat sich nun aber geändert und die Verwendung von IDEs ist vermutlich der größte Schritt in Richtung Usability für Entwickler, den es gab. Sie vereinfachen den Einstieg in Programmiersprachen, in dem sie Syntax Fehler dem Entwickler direkt darstellen, ohne lange auf das Compiler Log zu schauen und ermöglichen es im besten Fall, dass man sich beim Lernen einer neuen Programmiersprache vollständig auf die Sprache und Syntax selbst einstellen kann, ohne lange das Ökosystem um Compiler, Build Prozeduren und ähnliches erforschen zu müssen.

Beispiel einer IDE (InteliJ) [1]

Während die ersten IDEs speziell mit einer Programmiersprache mit entwickelt wurden, gibt es heute IDEs von verschiedenen Anbietern zu nahezu jeder Programmiersprache. Diese lassen sich heute auch mit Plugins versehen, um z.B. Libary-Funktionen besser zu unterstützen oder die IDE an die eigenen Wünsche und Vorzüge anzupassen.

Wo stehen wir also mit IDEs?
IDEs sind wahrscheinlich die sinnvollste Usability Option für jeden Entwickler, völlig losgelöst von Bereich und Sprache, mit der man arbeitet. Das Verwenden einer IDE hat keinerlei Nachteile und die Auswahl an IDEs sowohl kostenpflichtig als auch kostenlos für quasi jede Programmiersprache ermöglicht einen sehr einfachen Einstieg. Sie helfen einfache Fehler direkt zu lösen und können eine Basis für andere Tool wie Bug-Finder und Formatierungswerkzeuge bilden. Es gibt in 2023 keinen guten Grund mehr ohne eine IDE zu entwickeln.

Beispiele von IDEs sind:

  • Eclipse für Java (mittlerweile durch Erweiterbarkeit auch für andere Sprachen nutzbar)
  • InteliJ für Java
  • Visual Studio für C++
  • PHPStorm für PHP, JavaScript und HTML
  • PyCharm für Python

Low-Code/No-Code

Während eine IDE den Entwickler beim Scheiben von Code unterstützt und es vereinfacht Code zu schreiben, gehen LC/NC-Plattformen (Low-Code/No-Code) noch einen Schritt weiter und versuchen das Schreiben von Code selbst abzunehmen oder zu minimieren.

LC/NC hat zwar noch keine klare Definition, aber im Umfang dieses Artikels sprechen wir von Plattformen, die es ermöglichen Programme per visuellen Werkzeugen zu erstellen und es auch Nicht-Entwicklern ermöglichen sollen Programme zu erstellen.

Low-Code als Begriff wurde stark von dem 2014 erschienen Forrester Research Trend Bericht geprägt. Die Idee statt textbasierten, visuelle Coding-Systeme zu verwenden gibt es allerdings schon länger. Low-Code Plattformen zeichnen sich aber dadurch aus, dass sie nicht nur zum Anwendungserstellen verwendet werden, sondern auch alle anderen Aspekte eines IT-Produkt Lebenszyklus abdecken, also Planung, Deployment, Wartung etc. Aufgrund dessen ist die Flexibilität und Anbindbarkeit von Low-Code-Systemen häufig auf Cloud-Systeme beschränkt.

Beispiel einer Low-Code-Oberfläche (Simplifier) [2]

Aus Usability-Sicht ergeben sich einige Vorteile:
Visuelle Coding-Tools können Verteile für Nicht-Entwickler bringen, die sich nicht in Programmcode einarbeiten wollen oder können, somit können Fachanwender ebenfalls simple Programme für ihre eigene Fachdomain erstellen und diese Verwenden.
Für Entwickler können Low-Code Plattformen das schnelle Prototyping oder Proof-of-Concept Entwicklung unterstützen, um simple Prototypen schnell den Kunden vorzustellen, anschließend kann man das eigentliche Programm immer noch auf klassischer weiße oder mit einer Hybriden Methode entwickeln. Außerdem kann es die Zusammenarbeit zwischen Entwicklern und Fachkunden vereinfachen, wenn man in einem ähnlichen Jargon reden kann.

Unter Entwicklern hat LC/NC noch keinen besonders guten Stand, da die meisten Anwendungen nur auf Standardprozeduren basieren, die man ‚zusammenstecken‘ kann, um das gewünschte Verhalten zu erreichen. Zusätzlich sind alle großen Plattformen, die LC/NC anbieten, kommerziell und aufgrund dessen bindet man sich dadurch stark an einen speziellen Anbieter.

Low-Code Plattformen sind aus einer Business-Idee entstanden und nicht aus der Entwicklerschaft. Während viele Entwicklungen in der Software-Entwicklung aus der Entwicklerschaft entstanden sind und anschließend von Firmen aufgenommen wurden, verhält es sich bei Low-Code andersherum. Dies führt dazu, dass es immer eine Business-Anbindung der Plattformen gibt und nur unzureichende z.B. Open-Source Auskopplung der Tools gibt.

Die Grundidee von visuellen Entwicklungs-Plattformen hat einige interessante Möglichkeiten, die aktuell leider nicht ausgenutzt werden. Eine interessante Nutzung wäre es z.B. Programm Definitionen per Low-Code Tools zu definieren und diese anschließend in beliebige Programmiersprachen zu überführen, sei es für direkte Erstellung des ganzen Programms oder um Subroutinen oder Libarys zu erstellen, die von mehreren Codebase verwendet werden kann. Alternativ könnte man mit kürzerer Einarbeitungszeit Fachnutzern es ermöglichen, domänenspezifische Vorgänge zu definieren, die man dann in Source-Code überführen könnte, statt lange Meetings mit den Anwendern zu führen.

Ist also Low-Code die End-All-Lösung für Entwicklung?
Nun auf der Habenseite steht der theoretische einfache Einstieg und die zugänglichen Tools der Anbieter, allerdings haben die meisten der Systeme starke Einschränkungen, was Flexibilität und Konnektivität an vorhandene Systeme betrifft.
Ein großer Punkt für Entwickler ist sicher auch die Abhängigkeit von den Plattformen und Anbietern der Tools. Diese Abhängigkeit dürfte ein großer negativer Punkt für die Zugänglichkeit von LC/NC darstellen.
Low-Code bleibt wie oben beschrieben hinter seinen Möglichkeiten zurück durch die starke Business-Orientierung der Plattformen und die geringe Flexibilität.

Low-Code Plattformen sind z.B.:

  • OSBP von der Eclipse Foundation (Open Source)
  • Oracle Application Express (APEX) von Oracle

AI-Tools

Spätestens seit dem großen Hype um ChatGPT und die Möglichkeit Code von ChatGPT erzeugen zu lassen ist das Thema von AI-Tools für Entwickler bekannter geworden. Die Möglichkeiten, die AI für Entwickler bietet, sind enorm und könnten in Zukunft einen sehr großen Einschnitt in die Art machen, wie Software-Development abläuft.

Aktuelle AI-Tools, die für Entwickler zugeschnitten sind, effektiv eine Weiterentwicklung der Tools, die eine IDE bietet. Intelligente Code-Vervollständigung, automatisches Interpretieren von Funktionen und Erstellen von Doku, erzeugen von individuellem Boilerplate-Code nach natürlich sprachlicher Definition, etc. All diese Funktionen gab es in Simpel schon vorher, allerdings weit weniger ausgefeilt und wesentlich eingeschränkter in ihrer Funktion und Flexibilität.

Auszug aus GitHub Copilot [3]

Die Möglichkeit komplette Code Dokumentation erstellen zu lassen oder vollständige Anleitungen für Programmabläufe generieren zu lassen, nimmt Entwicklern viel Arbeit ab, die gerne herausgezögert oder unterlassen wird. Andere AI-Tools beinhalten automatisches Protokollieren von Meetings und erstellen von Notizen und Informationen bei Kundengesprächen, oder automatisches intelligentes erstellen von Tutorial und Code Guides. Auch automatisch Testerstellung für Funktionen und Klassen ist möglich.

Ein Thema, das aktuell noch nicht wirklich aktiv ist, ist es AI für Sicherheit in Code zu verwenden. Sicherheitslücken per AI im Source-Code zu erkennen, wäre ein großer Schritt in Richtung sicherer Systeme. Auch erkennen von Memory-Leaks oder Buffer-Overflows sollte theoretisch möglich sein. AI-Tools für das Erkennen komplexerer Fehler, die statt systemischer Sicherheit z.B. Privacy Probleme in APIs oder anderen Zugriffen erkennen können, sollten in naher Zukunft möglich sein.
Wenn wir einen Schritt weiter gehen, könnten auch vollautomatische Penetrationstests auf vollständige Systemarchitekturen ausgeführt werden. Auch Architekturanalysen und systemische Schwachstellen wie Skalierungsprobleme oder Caching Strategien für Systemarchitekturen könnten AI gesteuert untersucht werden und in automatische Skalierungsstrategien implementiert werden.

Eine weitere Anwendung könnte in naher Zukunft auch die vollständige Generierung von Programmen auf Basis von natürlich sprachlicher Beschreibung sein. Auch wenn diese Möglichkeit noch etwas in der Ferne steht, kann es zumindest in naher Zukunft schon sein, dass das Konzept von Low-Code zusammen mit AI-Unterstützung das Entwickeln von Programmen für nicht Entwickler ermöglicht und Entwickler mehr in die konzeptionelle Ausarbeitung von Systemen verschoben werden.

AI-Tools sind aktuell zwar noch nicht so ausgereift wie sie sein könnten und auch noch recht simpel in ihren Funktionen, dennoch können sie eine große Bereicherung für Entwickler darstellen, um effektiv und schnell zu arbeiten. Allerdings muss man auch sagen, dass AI-Tools aktuell noch hinter ihren Möglichkeiten zurückbleiben und in naher Zukunft eine wesentlich mächtigere Ergänzung für Entwickler darstellen können.

AI-Tools:

  • GitHub Copilot
  • Scribe

Fazit

Dieser kurze Überblick über Tools und Technologien für Entwickler ist natürlich kein vollständiger Blick auf alle möglichen Erleichterungen, die es für Entwickler gibt. Die drei Bereiche, die hier vorgestellt wurden, zeigen dennoch, dass es einige Vereinfachungen für Entwickler gibt und das Thema Usability kein Buch mit sieben Sigeln für Entwickler sein muss.

Größtes Potenzial für die Zukunft sehe ich in AI-Tools, die die Entwicklung nicht nur vereinfachen, sondern in hoffentlich naher Zukunft auch die Sicherheit stark verbessert. Aktuell bleiben neuere Optionen hinter ihrem Potenzial zurück und sind zwar hilfreich, aber nicht so bahnbrechend wie die großflächige Einführung von IDEs.

Quellen

Bild Quellen

  1. https://de.wikipedia.org/wiki/OSBP_(Software)
  2. https://entwickler.de/programmierung/eine-neue-ara-der-softwareentwicklung
  3. https://github.githubassets.com/images/modules/site/copilot-preview/ui-demo.webp

by

Marc Schillke

Tags:

Comments

Leave a Reply