Kofler / Öggl / Springer | Coding mit KI | E-Book | www.sack.de
E-Book

E-Book, Deutsch, 412 Seiten

Reihe: Rheinwerk Computing

Kofler / Öggl / Springer Coding mit KI

Das Praxisbuch für die Softwareentwicklung
1. Auflage 2024
ISBN: 978-3-367-10346-1
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection

Das Praxisbuch für die Softwareentwicklung

E-Book, Deutsch, 412 Seiten

Reihe: Rheinwerk Computing

ISBN: 978-3-367-10346-1
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection



KI verändert, wie wir Software entwickeln. Wer die neuen KI-Helfer nicht nutzt, macht sich das Leben unnötig schwer und läuft Gefahr, den Anschluss zu verlieren. In diesem Buch erfahren Sie, was Tools wie ChatGPT oder GitHub Copilot bereits leisten können und wo ihre Grenzen liegen. Praxisnahe Beispiele zeigen Ihnen, wie Sie heute schon mit KI-Unterstützung schneller, effizienter und fehlerfreier programmieren können. Ein pragmatischer Leitfaden für alle, die wissen wollen, wie künstliche Intelligenz die Softwareentwicklung verändert.

Aus dem Inhalt:

  • Wie funktioniert Künstliche Intelligenz
  • Strukturiert programmieren mit KI
  • Debugging, Refactoring und Unit-Tests
  • Dokumentation automatisiert erstellen
  • Datenbankentwicklung und -design
  • Scripting und Administration
  • Lokale LLMs ausführen
  • Projekt-Bootstrapping mit OpenDevin
  • Mit der OpenAI-API arbeiten
  • KI-Apps und RAGs
  • Risiken, Grenzen und Ausblick


Michael Kofler hat Telematik an der TU Graz studiert und ist einer der erfolgreichsten deutschsprachigen IT-Fachbuchautoren. Zu seinen Themengebieten zählen neben Linux auch IT-Sicherheit, Python, Swift, Java und der Raspberry Pi. Er ist Entwickler, berät Firmen und arbeitet als Lehrbeauftragter.
Kofler / Öggl / Springer Coding mit KI jetzt bestellen!

Weitere Infos & Material


Vorwort ... 9

TEIL I.  Coding mit KI-Unterstützung ... 15  1.  Einführung ... 17  1.1 ... Coding per Chat ... 17  1.2 ... Die Kunst des Prompting ... 27  1.3 ... Code-Assistenten ... 35  1.4 ... Chat oder Assistent? ... 47  1.5 ... Grundlagen von Large Language Models (LLMs) ... 48  2.  Pair Programming ... 63  2.1 ... Code in Funktionen strukturieren ... 64  2.2 ... Beispiel: IBAN-Validierung ... 74  2.3 ... Objektorientiert programmieren ... 81  2.4 ... Beispiel: Quiz ... 90  2.5 ... Beispiel: Sudoku lösen ... 96  3.  Debugging ... 107  3.1 ... Web-Applikationen ... 108  3.2 ... App-Entwicklung ... 117  3.3 ... Entwicklung am Raspberry Pi ... 120  3.4 ... Visual Studio und VS Code ... 123  3.5 ... Fazit ... 125  4.  Refactoring ... 127  4.1 ... Einführung ins Refactoring ... 128  4.2 ... Refactoring mit KI-Werkzeugen ... 128  4.3 ... Best Practices ... 141  4.4 ... Fazit ... 143  5.  Software testen ... 145  5.1 ... Erzeugen von Testdaten ... 146  5.2 ... KI-gestützte Testautomatisierung ... 150  5.3 ... Testgetriebene Entwicklung mit KI ... 155  5.4 ... Arbeiten mit Abh?igkeiten ... 162  5.5 ... Optimieren von Tests ... 168  5.6 ... E2E-Tests ... 175  5.7 ... Fazit ... 179  6.  Software dokumentieren ... 181  6.1 ... Inline-Dokumentation ... 183  6.2 ... Funktions- und Klassendokumentation ... 186  6.3 ... API-Dokumentation ... 190  6.4 ... Veraltete Dokumentation ... 193  6.5 ... Fazit ... 196  7.  Datenbanken ... 199  7.1 ... Datenbankdesign ... 199  7.2 ... SQL-Kommandos ... 210  7.3 ... Administration ... 218  7.4 ... Client-Programmierung ... 225  8.  Scripting und Systemadministration ... 227  8.1 ... Scripting ... 228  8.2 ... Beispiel: Python-Script in PHP-Code umwandeln ... 235  8.3 ... Regul? Muster ... 237  8.4 ... Systemadministration ... 241  8.5 ... Beispiel: wget-Script plus tmpfs-Konfiguration ... 249  8.6 ... GitHub Copilot und ChatGPT im Terminal aufrufen ... 254

TEIL II.  Sprachmodelle lokal ausführen, fortgeschrittene KI-Tools ... 259  9.  Sprachmodelle lokal ausführen ... 261  9.1 ... Die Qual der LLM-Wahl ... 262  9.2 ... GPT4All ... 267  9.3 ... Ollama ... 271  9.4 ... Open WebUI für Ollama ... 276  9.5 ... Continue ... 284  9.6 ... Ollama-API ... 287  9.7 ... Tabby ... 290  9.8 ... Fazit ... 293

10.  Code automatisiert verarbeiten ... 295  10.1 ... OpenAI-API ... 296  10.2 ... Ollama-API ... 308  10.3 ... Groq-API ... 311  10.4 ... Beispiel: Code automatisiert kommentieren ... 312  10.5 ... Beispiel: von Python 2 zu Python 3 ... 321

11.  Level-3-Tools: OpenHands und Aider ... 325  11.1 ... OpenHands ... 327  11.2 ... OpenHands in der Praxis ... 333  11.3 ... Aider ... 336  11.4 ... Aider in der Praxis ... 341

12.  Retrieval Augmented Generation (RAG) und Text-to-SQL ... 351  12.1 ... Schnellstart RAG ... 352  12.2 ... Das viel-falter-Projekt ... 356  12.3 ... Dokumente laden ... 357  12.4 ... Index erzeugen ... 359  12.5 ... Vector-Store-Datenbanken ... 363  12.6 ... RAG-Abfragen ... 366  12.7 ... Text-to-SQL ... 371

13.  Risiken und Ausblick ... 385  13.1 ... Probleme und Einschr?ungen beim Einsatz von KI-Tools ... 385  13.2 ... Beispielhaftes KI-Versagen ... 389  13.3 ... Ethische Fragen ... 400  13.4 ... Schlussfolgerungen und Ausblick ... 404  Index ... 409


1    Einführung


Dieses »Hello, World!«-Kapitel gibt eine erste Einführung in den Umgang mit KI-Tools bei der Programmentwicklung. Anhand von Beispielen zeigt das Kapitel die Verwendung von Chat-basierten Werkzeugen wie ChatGPT sowie von Coding-Assistenten wie GitHub Copilot.

Höchstwahrscheinlich haben Sie schon KI-Coding-Tools ausprobiert. Überfliegen Sie dennoch die folgenden Seiten – vielleicht können wir Sie schon im Einführungskapitel auf neue Ideen bringen, bevor wir in den weiteren Kapiteln mehr in die Tiefe gehen.

Jedenfalls lesenswert ist Abschnitt 1.5, »Grundlagen von Large Language Models (LLMs)«: Er enthält eine knappe Zusammenfassung, wie Sprachmodelle hinter den Kulissen funktionieren. Dieses Wissen ist nicht zuletzt deswegen hilfreich, um die Grenzen der aktuellen Technik besser zu verstehen.

1.1    Coding per Chat


Den intuitivsten Einstieg in das KI-unterstütze Coding bieten Chat-Systeme wie ChatGPT. Als wir dieses Buch im Sommer 2024 verfassten, standen diverse kostenlose Systeme zur Auswahl:

Auf den meisten Webseiten haben Sie die Option, mit dem Abschluss eines kostenpflichtigen Abos Zusatzfunktionen freizuschalten. Soweit wir bei der Arbeit für dieses Buch mit öffentlich verfügbaren Chat-Systemen experimentiert haben, war ChatGPT unser bevorzugtes System. Bei dieser Website müssen Sie sich einmalig registrieren. Das geht schnell und kostet nichts. Anschließend ist die Anwendung denkbar einfach: Sie formulieren Ihre Frage und erhalten eine Antwort.

Passwortgenerator


Sie brauchen in einem Python-Script eine Funktion, die ein zufälliges Passwort in einer vorgegebenen Länge liefert. Natürlich können Sie den Code selbst schreiben – aber Sie sparen sich vermutlich ein, zwei Minuten Zeit, wenn Sie diese triviale Aufgabe an ChatGPT abgeben.

Abbildung 1.1     ChatGPT hat einen Passwortgenerator in eine Funktion verpackt.

Den Code können Sie nun unkompliziert kopieren und in Ihr Script einbauen. Vergessen Sie die erforderlichen Importe nicht! Diese werden immer am Beginn des Scripts angegeben.

Deutsch oder Englisch?


Wie das einleitende Beispiel gezeigt hat, versteht ChatGPT Prompts in deutscher Sprache. Dennoch empfehlen wir Ihnen, Prompts in englischer Sprache zu formulieren. Dafür gibt es mehrere Gründe:

  • Sprachmodelle sind nur so gut wie das zugrunde liegende Trainingsmaterial. Naturgemäß gibt es viel mehr englischsprachige Websites, Bücher und Repositorys, die zum Training verwendet wurden. Je spezifischer Ihre Fragestellung, je diffiziler das Problem, desto eher werden Sie korrekte Antworten erhalten, wenn Sie Ihren Prompt englisch formulieren. Das gilt selbst dann, wenn Ihr Englisch nicht perfekt ist.

  • Bei den meisten größeren Software-Projekten ist die Verwendung englischer Klassen-, Funktions- und Variablennamen selbstverständlich oder sogar in den Projektrichtlinien festgeschrieben. Mit einem englischen Prompt bringen Sie zum Ausdruck, dass der KI-Codegenerator englische Begriffe vorziehen soll.

  • Auch wenn ChatGPT gleichermaßen deutsch, englisch, französisch sowie diverse andere Sprachen spricht: Auf diverse andere Sprachmodelle trifft dies nicht zu. Gerade öffentlich verfügbare Sprachmodelle, die lokal ausgeführt werden können (siehe Kapitel 9, »Sprachmodelle lokal ausführen«), funktionieren nur in englischer Sprache zufriedenstellend.

Deswegen arbeiten wir in diesem Buch fast durchgängig mit englischen Prompts. Das führt dazu, dass auch die Erklärungen und der erstellte Code auf Englisch ausgegeben werden. Das entspricht den Standards der meisten Entwicklungsprojekte, besonders wenn unterschiedliche Nationalitäten gemeinsam an einer Codebasis arbeiten. Falls Sie trotzdem deutsche Variablennamen und Funktionsbezeichner nutzen wollen, müssen Sie ChatGPT explizit anweisen.

Falls Sie die englischen Erklärungen einmal nicht verstehen, können Sie natürlich nach einer Übersetzung fragen. ChatGPT hilft Ihnen dann weiter und erläutert den Code auf Deutsch.

Python: Datum suchen und ersetzen


In diesem Beispiel sollen in einer Zeichenkette alle Datumsangaben vom US-Format (12/31/2024) in das ISO-Format (2024-12-31) umgewandelt werden. Als Programmiersprache soll Python verwendet werden.

Der Code verwendet das re-Modul, mit dem in Python reguläre Ausdrücke verarbeitet werden. ChatGPT formuliert den Code als Funktion, was die weitere Anwendung vereinfacht. convert_us_to_iso_date enthält wiederum eine Subfunktion replace, die an re.sub als Parameter übergeben wird und jeden Treffer durch das neu formatierte Datum ersetzt.

Prompt: Python: I want to replace all US dates by ISO dates in a string. Can you help?

Certainly! To replace all U.S. date formats (commonly MM/DD/YYYY) with ISO date formats (YYYY-MM-DD) in a string using Python, you can use the re module to find dates and then rearrange the format. Here’s a Python function that accomplishes this:

import re
def convert_us_to_iso_dates(text):

date_pattern = r'\b(\d{1,2})/(\d{1,2})/(\d{4})\b'


def replace(match):
month, day, year = match.groups()
return {year}{month.zfill(2)}{day.zfill(2)}


return re.sub(date_pattern, replace, text)


input_text = "Today's date is 05/09/2024 and the event " +

converted_text = convert_us_to_iso_dates(input_text)
print(converted_text)

This script:

  • Defines a regex pattern to match dates in the format MM/DD/YYYY.

  • Uses a replacement function to rearrange the date components into the ISO format YYYY-MM-DD.

  • Applies this transformation to all occurrences in the provided text.

Der Code funktioniert in der präsentierten Form ausgezeichnet. Wenn Sie mit regulären Ausdrücken nicht vertraut sind, können Sie sich den Aufbau des Musters in einer Folgefrage erläutern lassen:

Prompt: Could you explain the regular pattern?

Certainly! Here’s a breakdown of the pattern r'\b(\d{1,2})/(\d{1,2})/(\d{4})\b':

  • \b: This is a word boundary marker. It ensures that the pattern matches whole words only, which helps prevent partial matches of larger sequences that aren’t dates.

  • (\d{1,2}): This part of the pattern captures one or two digits. The \d denotes a digit (equivalent to [0-9]), and {1,2} specifies that the digit can appear once or twice. This pattern is used for both the month and the day in the date.

  • /: This is a literal forward slash character. It separates the month and day, and day and year, in U.S. date formats.

  • (\d{4}): This captures exactly four digits, representing the year. Here, \d again denotes a digit, and {4} specifies that exactly four digits must be present.

  • \b: Another word boundary marker, ensuring the date is a standalone entity, not part of a larger sequence of numbers or characters.

So, the entire pattern matches strings that start and end with a boundary between words (like spaces or punctuation), followed by one or two digits for the month, a slash, one or two digits for the day, another slash, and finally four digits for the year.

In diesem Buch verzichten wir...


Kofler, Michael
Michael Kofler hat Telematik an der TU Graz studiert und ist einer der erfolgreichsten deutschsprachigen IT-Fachbuchautoren. Zu seinen Themengebieten zählen neben Linux auch IT-Sicherheit, Python, Swift, Java und der Raspberry Pi. Er ist Entwickler, berät Firmen und
arbeitet als Lehrbeauftragter.

Springer, Sebastian
Sebastian Springer ist JavaScript-Engineer bei MaibornWolff. Als Dozent lehrt er JavaScript an der Technischen Hochschule Rosenheim. Er publiziert regelmäßig in Fachzeitschriften, schreibt Fachbücher zu Node.js und ist ein gefragter Speaker auf allen wichtigen JavaScript- und Webentwickler-Konferenzen. Sebastian Springer bietet auch Seminare zu JavaScript und Node.js an und ist Trainer für mehrere Rheinwerk Webinare.

Öggl, Bernd
Bernd Öggl ist ein erfahrener Systemadministrator und Webentwickler. Bereits seit 2001 erstellt er für Kunden Websites, setzt individuelle Entwicklerprojekte um und gibt sein Wissen auf Konferenzen und in Publikationen weiter.



Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.