E-Book, Deutsch, 288 Seiten
Crocker Softwareentwicklung mit ChatGPT und Copilot
1. Auflage 2025
ISBN: 978-3-98890-230-6
Verlag: dpunkt.verlag
Format: EPUB
Kopierschutz: 6 - ePub Watermark
Mit innovativen KI-Tools Produktivität, Effizienz und Codequalität steigern
E-Book, Deutsch, 288 Seiten
ISBN: 978-3-98890-230-6
Verlag: dpunkt.verlag
Format: EPUB
Kopierschutz: 6 - ePub Watermark
Nathan B. Crocker ist Mitgründer und CTO bei Checker, einer API-First-Lösung, die traditionelle Kapitalmarktinfrastrukturen mit dem Blockchain-Ökosystem verbindet. Mit über 20 Jahren Erfahrung in den Bereichen Technologie und Finanzen ist er sehr daran interessiert, die komplexen Herausforderungen der Kapital- und Kryptomärkte zu lösen.
Weitere Infos & Material
1 Large Language Models verstehen
Kapitelübersicht
- ? Einführung in generative KI (insbesondere Large Language Models)
- ? Die Vorteile generativer KI erkunden
- ? Herausfinden, wann der Einsatz generativer KI sinnvoll ist und wann nicht
Ob es Ihnen nun aufgefallen ist oder nicht und ob Sie wollen oder nicht – Sie wurden im Stillen für eine Beförderung ausgewählt. Alle anderen professionellen Software-Engineers übrigens auch. Fast über Nacht haben wir uns von Staff Engineers in Engineering Manager verwandelt. Sie haben jetzt nämlich den talentiertesten Junior-Entwickler im Team. Generative KI ist Ihr neuer Programmierpartner. Aus diesem Grund sollten Anleitung, Mentoring und die Code-Reviews ab sofort Teil Ihres Alltags werden. Dieses Kapitel gibt Ihnen einen Überblick über eine Untermenge generativer KI, die als Large Language Models (große Sprachmodelle, LLMs) bezeichnet werden. Insbesondere werden wir uns mit ChatGPT und GitHub Copilot beschäftigen.
Hinweis
Dies ist kein traditionelles Programmierbuch. Es ist keine Abfolge von Handlungsanweisungen. Stattdessen treten Sie in einen Dialog mit verschiedenen LLMs. Und wie bei jeder Konversation werden sich die Worte und Richtung je nach Modell und dem vorigen Kontext verändern. Die abgedruckten Antworten und Ausgaben werden sich sehr wahrscheinlich von denen unterscheiden, die Sie erhalten. Das sollte Sie aber nicht davon abhalten, diese neue Welt zu erkunden. Dabei ist der Weg mindestens so bereichernd wie das Ziel. Gelegentlich werden Sie frustriert sein, weil Sie nicht gleich alle Dinge durchschauen. Haben Sie Geduld. Wenn Sie diszipliniert sind (und ein wenig abenteuerlustig), können Sie GPT durch die Themen und Ziele dieses Buchs zur Zusammenarbeit bewegen – zu lernen, wie Sie generative KI nutzen können, um ein besserer Programmierer zu werden.
1.1 Ihre Entwicklung beschleunigen
Willkommen in einem neuen Zeitalter der Softwareentwicklung, in dem Ihr Entwicklerteam durch einen sehr talentierten Engineer erweitert wird. Generative KI ist nicht nur ein Werkzeug, sondern Ihr nächstes Teammitglied, das nur darauf wartet, Ihre Programmierung auf ein neues Niveau zu heben. Stellen Sie sich den Entwurf komplexer Systeme vor; überlegen Sie, wie es ist, mit nie dagewesener Geschwindigkeit zu coden und mit einer Robustheit zu testen, die Sie nie für möglich gehalten haben – all das mithilfe einer künstlichen Intelligenz, die sich aus dem Wissen der Besten speist. In diesem Buch erforschen wir, wie generative KI Ihnen nicht nur bei alltäglichen Programmieraufgaben helfen kann, sondern Sie auch unterstützen kann, bisher unerreichbare Leistungen zu erbringen und dabei für eine schnellere Entwicklung, höhere Qualität und eine nie dagewesene Innovationsfähigkeit zu sorgen.
LLMs und generative KI können Ihren Software-Entwicklungsprozess drastisch beschleunigen. Indem Sie die mühsame Erstellung von Code-Grundstrukturen automatisieren, sind Sie frei, sich auf kreative Problemlösungen und wertschöpfende Aufgaben zu konzentrieren. Nehmen wir z. B. das folgende Szenario: Ein LLM soll für Sie eine Flask-Applikation erstellen. Hierfür könnten Sie folgenden Prompt (Eingabe an das LLM) verwenden:
Generate a stubbed-out Flask application.
Deutsch: Erstelle die Grundstruktur einer Flask-Applikation.
Listing 1.1 Beispiel für die Grundstruktur einer Flask-Applikation, die von einem LLM erzeugt wurde
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, world!"
if __name__ == '__main__':
app.run(debug=True)
Hinweis
Wenn Sie beim Lesen dieses Buchs den deutschsprachigen Prompt eingeben, liefert Ihnen die aktuelle Version von ChatGPT (4o) nicht nur den Inhalt der Hauptdatei, sondern eine umfassende Anleitung inklusive aller benötigten Dateien, Bibliotheken und Verzeichnisse. Ein Versuch lohnt sich!
LLMs sind Deep-Learning-Modelle, die gut darin sind, auf Prompts in natürlicher Sprache entsprechende Antworten in natürlicher Sprache zu erzeugen. Stellen Sie sich vor, Sie beschreiben einfach in normalem Englisch (oder Deutsch), was Sie brauchen, und erhalten Code zurück, den Sie direkt integrieren können:
Create a class for managing user sessions in Python.
Deutsch: Erstelle eine Klasse für die Verwaltung von Benutzer-Sessions in Python.
Listing 1.2 Eine Möglichkeit für erzeugten Code einer Klasse für die Verwaltung von Benutzer-Sessions
import uuid
from datetime import datetime, timedelta
class SessionManager:
def __init__(self):
self.sessions = {}
def create_session(self, user_id):
"""Create a new session for a user with a unique session ID and
expiration time."""
session_id = str(uuid.uuid4())
# Sitzungen laufen nach einer Stunde ab
expiration = datetime.now() + timedelta(hours=1)
self.sessions[session_id] = {'user_id':
user_id, 'expiration': expiration}
return session_id
def get_user_id(self, session_id):
"""Retrieve a user ID from a session ID
if the session is still valid."""
session_info = self.sessions.get(session_id)
if session_info and session_info['expiration'] > datetime.now():
return session_info['user_id']
return None # Sitzung ist abgelaufen oder existiert nicht
def delete_session(self, session_id):
"""Delete a session by its ID."""
if session_id in self.sessions:
del self.sessions[session_id]
def is_session_valid(self, session_id):
"""Check if a session is still valid."""
return session_id in self. sessions and self.sessions[session_id]
['expiration'] > datetime.now()
Diese Werkzeuge steigern außerdem Ihre Effizienz beim Debuggen, indem sie Muster finden und Reparaturen vorschlagen. Angenommen, Sie möchten, dass eine KI einen Codeblock analysiert und auf mögliche Speicherlecks hinweist. Dann könnte das Modell beispielsweise folgenden Code erzeugen.
Listing 1.3 Ein LLM verwenden, um ein mögliches Speicherleck in Python zu finden
def process_data():
large_data = [x for x in range(1000000)]
# Eine große Liste mit Zahlen
result = sum(large_data)
print("Result of processing:", result)
# large_data wurde nicht geleert oder neu
# zugewiesen, wodurch die Daten
# möglicherweise im Arbeitsspeicher verbleiben
process_data()
Laut ChatGPT zeigt dieser Python-Code ein mögliches Speicherleck, weil eine große Liste nach ihrer Benutzung nicht ausdrücklich geleert wurde. Dadurch kann ihr Inhalt möglicherweise länger als nötig im Speicher verbleiben, wenn die Referenzen nicht ordentlich verwaltet werden.
Im verbesserten Code schlägt das KI-Werkzeug vor, die Liste ausdrücklich zu leeren oder ihr nach der Verwendung zuzuweisen, damit der Speicher früher wieder freigegeben werden kann. Dies kann besonders in Bereichen helfen, wo die Garbage Collection eher vorsichtig ist.
Listing 1.4 »Verbesserter« LLM-Code für den Umgang mit einem möglichen Speicherleck
def process_data():
large_data = [x for x in range(1000000)]
# Eine große Liste mit Zahlen
result = sum(large_data)
print("Result of processing:", result)
large_data = None
# Referenz ausleeren, um Speicher freizugeben
process_data()
Kommt es später zu einer Refaktorierung, kann die KI Optimierungen vorschlagen, die Ihren Code sauberer und effizienter machen, wie in den folgenden zwei Listings gezeigt:
Listing 1.5 Wortreicher (»verbose«) Code vor der Refaktorierung
class DataProcessor:
def __init__(self, data):
self.data = data
def process_data(self):
if self. data is not None:
if len(self.data) > 0:
processed_data = []
for d in self.data:
if d is not None:
if d % 2 == 0:
processed_data.append(d)
return processed_data
else:
return []
else:
return []
processor = DataProcessor([1, 2, 3, 4, None, 6])
result = processor.process_data()
print("Processed Data:", result)
Nach der Refaktorierung ist der Code lesbarer, wartbarer und sprachspezifischer (»idiomatischer«).
Listing 1.6 Der vom LLM refaktorierte Code ist deutlich kürzer.
class DataProcessor:
def __init__(self,...




