Frank PientkaInnovation und Technologie

Software-Entwicklung in Zeiten künstlicher Intelligenz – alles fließt, alles ändert sich

Die Algorithmen der künstlichen Intelligenz (KI) feiern vor allem auf dem Gebiet des tiefen maschinellen Lernens (DL), nicht nur bei Brettspielen, große Erfolge.

Mit dem Smartphone werden Dienste wie Sprach- und Bilderkennung immer mehr ein selbstverständlicher Teil unseres Alltags. In spezialisierten Kontexten hat künstliche Intelligenz erstaunliche Fortschritte erzielt. In manchen Gebieten erzielen die von Maschinen generierten Algorithmen inzwischen bessere Ergebnisse, als das mit klassisch von Entwicklern programmierten Programmen möglich ist.

Ganz ohne Programmierung funktionieren jedoch auch neuronale Netze und andere KI-Algorithmen nicht. So sind gerade durch die KI wieder Programmiersprachen wie Python oder R sehr populär geworden. Eine spannende Frage ist, inwiefern sich die Software-Entwicklung selbst durch den Einsatz von KI verändert?

KI bietet sich an, um selbstheilende und selbstoptimierende Systeme zu bauen. Wenn diese Daten eh beim Betrieb in der Cloud anfallen, können sie zur Optimierung oder Fehlerdiagnose verwendet werden. Algorithmen zur vorausschauenden Wartung können enorme Kosten beim Betrieb, den Prozessen und den benötigten Ressourcen sparen.

Typische Fehlermuster können leicht erkannt, gemeldet und mit geeigneten Maßnahmen automatisch behoben werden. Bei einigen Produkten, wie z. B. Datenbanken oder Betriebssystemen gibt es schon seit Längerem solche Selbstheilungsmechanismen, um auf Fehlersituationen mit automatischen Reparaturmaßnahmen zu reagieren.

Doch wie sieht es bei der Software-Entwicklung selbst aus? Es wäre hilfreich, wenn bei gemeldeten Fehlern auch schon eine Voranalyse vorgenommen oder typische Fehler bereits im Vorfeld vermieden werden könnten. Bisher sind die verwendeten Werkzeuge immer noch nicht optimal integriert. Das liegt auch daran, dass es hier auch zu wenig Integrationsstandards gibt und jeder sein eigenes Süppchen kocht. Statt sich durch Codeschnipsel-Sammlungen oder Tipps auf Stack Overflow zu wühlen, wäre es sinnvoll, wenn geprüfte Empfehlungen auch direkt aus einer Stelle kommen könnten, um Best Practices, Codeschnipsel für wiederkehrende Probleme oder Verbesserungsvorschläge zu erhalten.

Viele integrierte Entwicklungsumgebung (IDE genannt) melden inzwischen, wenn gewünscht, die Nutzerdaten weiter, um die Werkzeugfunktionen besser an die echte Nutzung anzupassen und häufige Fehlersituationen besser verstehen zu können. Im Bereich Web- und mobile Entwicklung gibt es auch entsprechende Bibliotheken, um das Nutzerverhalten besser verstehen zu können. Sowohl für iOS als auch für Android Apps gibt es verschieden Dienste und Bibliotheken, die das Verteilen und die zentrale Analyse von Absturzfehlern, sogar in Realzeit, erleichtern.

Ein vielversprechender Ansatz ist das Language Server Protocol (LSP), das von Microsofts Visual Studio Code Team Mitte 2016 als offener Standard veröffentlicht wurde.  Es unterstützt inzwischen eine Vielzahl von Programmiersprachen und domainspezifische Sprachen (DSLs) und wird in immer mehr IDEs integriert. Das hat den Vorteil, dass nicht mehr werkzeugspezifische Erweiterungen entwickelt und installiert werden müssen, sondern eines auf dem Server, der das LSP-Protokoll unterstützt. Dadurch können auch die Erweiterungen bei neueren Sprachversionen schneller umgesetzt werden. Es lassen sich aber auch die typischen Entwicklernutzungsfälle anpassen, damit diese sich nicht in der Vielzahl der Sprachfunktionen verlieren.

Das erhöht nicht nur die Qualität des Codes, sondern erhöht auch die Produktivität der Entwickler, da sie nicht umständlich im Internet nach Empfehlungen oder in der API-Dokumentation nach geeigneten Beispielen suchen müssen. Verletzungen von Codierregeln sind dann direkt bei der Erstellung erkennbar und nicht erst in einem nachgelagerten Schritt. Das kann gerade bei der Wartung von Fremdcode eine große Hilfe sein, da man nicht erst den ganzen Code verbessern muss, sondern das direkt bei der Erstellung von neuem Code schrittweise tun kann. Codeduplizierungen könnten einfach erkannt und damit spätere Wartungsprobleme frühzeitig beseitig werden.

Hinsichtlich der Wiederverwendbarkeit könnten solche Algorithmen auch Vorschläge erstellen, um nicht das Rad neu zu erfinden, sondern auf bestehende und bereits reife Lösungen aufzusetzen. Nicht alle Vorschläge können jedoch ungeprüft übernommen werden. Aber wenn typische Fehlerprobleme nicht wiederholt werden und sich damit über einen langen Zeitraum fortpflanzen, ist schon viel gewonnen. Letztlich ist dann der KI-Kollege Computer eine andere Art des Paarprogrammierens.

Das noch zu wenig genutzte Potenzial von KI hat erst vor kurzem das Beratungshaus Forrester in seinem Bericht „How AI Will Change Software Development And Applications“ hervorgehoben.

KI-Methoden helfen nicht nur schlechteren Programmierern, besser zu werden, um nicht immer wieder in alte Muster zurückzufallen, sondern sie helfen allen Programmierern und Testern smarter und produktiver zu werden. Denn nur derjenige bleibt auch erfolgreich, der nicht aufhört von anderen zu lernen und sei es durch den Kollegen KI. Alles fließt und ändert sich erkannte schon der griechische Philosoph Heraklit. Warum sollte das nicht mit der Software-Entwicklung anders sein.

 

Schlagwörter: , , ,