Von Skripten zu Software

Die Sprache ist die einfache Hälfte

Umgebungen, Abhängigkeiten und Tests entscheiden darüber, ob dein Code auch dann läuft, wenn ihn jemand anders auf einem anderen Rechner startet.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Seit 1997 am Markt Kleine Gruppen Präsenz und Live-Online Zertifizierte Trainer
Worum es geht

Python verzeiht so lange, bis es zu spät ist

Die Sprache lässt dich weit kommen, ohne dass du dich festlegst. Typen musst du nicht angeben, eine Struktur brauchst du am Anfang nicht, und alles Fehlende installierst du eben schnell nach. Das ist der Grund für den freundlichen Einstieg und gleichzeitig der Grund, warum Python-Bestände in Unternehmen so oft in einem Zustand sind, den niemand mehr anfassen will.

Sichtbar wird das an zwei Stellen. Die erste ist der Rechnerwechsel: Ein Skript läuft bei dir und beim Kollegen nicht, weil bei dir noch eine Bibliothek in einer anderen Fassung liegt, an die sich niemand erinnert. Die zweite ist die Fehlermeldung zur Laufzeit, die eine Verwechslung von Zeichenkette und Zahl war und die ein Werkzeug beim Schreiben hätte melden können.

Im Bewerbungsgespräch entscheidet fast immer diese Ebene und nicht die Sprachkenntnis. Gefragt wird, wie du Abhängigkeiten festhältst, wie du deinen Code testest und was passiert, wenn zwei Projekte unterschiedliche Fassungen derselben Bibliothek brauchen.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Schritt für Schritt

Der Weg in sieben Schritten

Die ersten drei Schritte entscheiden darüber, ob dein Code auf einem fremden Rechner startet. Die letzten vier darüber, ob ihn jemand anders übernehmen kann.

  1. 1

    Die Sprache über die Grundlagen hinaus lernen

    Listen, Wörterbücher und Mengen mit ihren Laufzeiteigenschaften, Comprehensions, Generatoren, Kontextmanager und eine Fehlerbehandlung, die nicht jede Ausnahme verschluckt. Das ist der Punkt, an dem Python aufhört, eine bessere Ablaufsteuerung zu sein.

    Geschafft, wenn: du löst eine Aufgabe ohne verschachtelte Schleifen und ohne Kopiervorlage

  2. 2

    Umgebungen und Abhängigkeiten in den Griff bekommen

    Für jedes Projekt eine eigene Umgebung, die Abhängigkeiten in einer pyproject.toml, die aufgelösten Fassungen in einer Sperrdatei. Werkzeuge wie uv oder poetry nehmen dir die Auflösung ab. Wichtig ist nicht das Werkzeug, sondern dass eine frische Installation reproduzierbar dasselbe ergibt.

    Geschafft, wenn: ein Kollege bringt dein Projekt mit zwei Befehlen zum Laufen

  3. 3

    Aus dem Skript ein Paket machen

    Zerleg die Datei in Module entlang der Aufgaben, trenn den Einstiegspunkt von der Logik und leg eine Paketstruktur an. Damit verschwinden die Importfehler, die entstehen, wenn ein Skript nur aus dem eigenen Verzeichnis heraus startet.

    Geschafft, wenn: dein Projekt läuft unabhängig davon, aus welchem Verzeichnis du es aufrufst

  4. 4

    Typangaben ergänzen und prüfen lassen

    Annotiere zuerst die Schnittstellen zwischen deinen Modulen, nicht jede Hilfsfunktion. Ein statisches Prüfwerkzeug meldet dir danach genau die Verwechslungen, die in Python sonst erst zur Laufzeit auffallen, und dokumentiert nebenbei, was eine Funktion erwartet.

    Geschafft, wenn: die Prüfung läuft ohne Fehler durch und ersetzt die halbe Dokumentation

  5. 5

    Tests schreiben, die etwas aussagen

    Fang mit der Funktion an, die dir beim Ändern am meisten Sorge macht. Mit pytest baust du Vorbedingungen als Fixtures auf, prüfst Grenzfälle und lässt fremde Systeme über Attrappen antworten. Erst danach lohnt sich der Blick auf die Testabdeckung.

    Geschafft, wenn: ein Umbau bricht sichtbar, statt still das Ergebnis zu verändern

  6. 6

    Eine Schnittstelle bauen

    Mit FastAPI wird aus deiner Logik ein Dienst, den andere ansprechen können. Die Typangaben aus dem vierten Schritt zahlen sich hier aus, weil sie zugleich die Prüfung der Eingaben und die Beschreibung der Schnittstelle erzeugen. Denk an die Fehlerfälle: falsche Eingaben, fehlende Rechte, zu lange Antwortzeiten.

    Geschafft, wenn: eine fremde Anwendung kann deine Funktion aufrufen

  7. 7

    In Betrieb geben

    Konfiguration über Umgebungsvariablen statt über feste Werte im Code, Protokollierung statt Ausgaben auf der Konsole, eine feste Python-Fassung im Containerbild. Genau hier trennt sich der Skriptschreiber vom Entwickler, weil ab jetzt jemand anders dein Ergebnis am Laufen halten muss.

    Geschafft, wenn: die Anwendung startet auf einem Rechner, auf dem du nie warst

Sechs Stufen vom ersten Skript zur betreibbaren Anwendung

  1. 01 Die Sprache jenseits der Schleifen beherrschen.
  2. 02 Je Projekt eine eigene Umgebung mit fester Abhängigkeitsliste.
  3. 03 Aus einer langen Datei Module mit klaren Aufgaben machen.
  4. 04 Typangaben ergänzen und ein Prüfwerkzeug darüberlaufen lassen.
  5. 05 Tests schreiben, die auch die Fehlerfälle abdecken.
  6. 06 Eine Schnittstelle bauen und sie in Betrieb geben.
Was du mitnimmst

Was du für den ersten Job zusammenhaben solltest

Die folgenden Punkte sind der Unterschied zwischen einem Skript und einer Anwendung, die jemand anders betreiben kann. Jeder davon lässt sich an einem eigenen Projekt zeigen.

Umgebungen trennen

Du legst je Projekt eine eigene Umgebung an und weißt, warum eine systemweite Installation von Bibliotheken auf einem Arbeitsrechner früher oder später zwei Projekte gegeneinander laufen lässt.

Abhängigkeiten festschreiben

Du beschreibst dein Projekt in einer pyproject.toml und schreibst die aufgelösten Fassungen in eine Sperrdatei, damit dieselbe Installation morgen dasselbe ergibt wie heute.

Aus Skripten Module machen

Du zerlegst eine gewachsene Datei in Module mit klaren Aufgaben, kennst die üblichen Importfallen und trennst den Einstiegspunkt von der Logik, die getestet werden soll.

Typen annotieren

Du versiehst Funktionen mit Typangaben und lässt ein Prüfwerkzeug darüberlaufen, damit Verwechslungen beim Schreiben auffallen statt nachts im Protokoll.

Mit pytest arbeiten

Du schreibst Tests mit Vorbedingungen als Fixtures, prüfst auch die Fehlerfälle und kannst danach umbauen, ohne die halbe Anwendung von Hand durchzuklicken.

Nebenläufigkeit einschätzen

Du weißt, warum zusätzliche Threads bei reiner Rechenlast in Python meist nichts bringen und wann stattdessen asynchrone Verarbeitung oder mehrere Prozesse die richtige Antwort sind.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt

Wo Python in Unternehmen tatsächlich sitzt

Python-Stellen sehen sehr verschieden aus, und das ist für die Bewerbung wichtiger als jede Sprachliste. Der erste Typ ist die Automatisierung im Betrieb: Auswertungen, Datenübernahmen, Aufräumarbeiten, Anbindung von Systemen, die keine gemeinsame Schnittstelle haben. Der zweite ist das Web-Backend mit Django oder FastAPI. Der dritte sind Datenstrecken und das Umfeld maschinellen Lernens.

Die drei Typen verlangen unterschiedliche Nachbarkenntnisse. Im Betrieb brauchst du Systemverständnis, Rechteverwaltung und den Umgang mit fremden Schnittstellen. Im Backend Datenbanken, Anmeldung und Berechtigungen. Im Datenumfeld Statistik und die Bibliotheken dieser Welt. Wer sich bewirbt, ohne zu wissen, welcher Typ gemeint ist, redet im Gespräch an der Stelle vorbei.

Falsch erwartet wird meist der Anteil an fremdem Code. In allen drei Fällen arbeitest du überwiegend an Bestand, den andere begonnen haben, oft ohne Tests und ohne Dokumentation. Die Fähigkeit, dich in ein solches Projekt einzulesen, ohne es sofort neu schreiben zu wollen, wird höher bewertet als jede Sprachfeinheit.

Der Weg hinein, und was von Nachweisen zu halten ist

Python ist die häufigste Quereinstiegssprache, weil viele Menschen zuerst etwas für die eigene Arbeit automatisieren und dabei merken, dass ihnen das liegt. Aus dieser Richtung kommen Leute aus Verwaltung, Labor, Controlling und dem IT-Betrieb, und alle bringen etwas mit, das Berufsanfänger nicht haben: fachliches Verständnis für das, was der Code eigentlich tun soll.

Zertifikate spielen in der Entwicklung kaum eine Rolle, weder herstellerbezogene noch die verbreiteten Prüfungen zur Sprache selbst. Gefragt wird nach einem Projekt, das man ansehen kann. Nützlich sind dabei genau die unspektakulären Dinge: eine Datei mit Abhängigkeiten, eine Testreihe, eine kurze Anleitung, wie man es startet.

Wenn du aus dem eigenen Haus wechseln willst, ist der kürzeste Weg meist ein interner: Automatisier etwas, das eine Abteilung wirklich stört, gib es weiter und pfleg es ein halbes Jahr. Danach hast du eine Referenz mit Nutzern und Fehlermeldungen, und die zählt mehr als jedes Übungsprojekt.

Woran sich zwei Leute mit gleicher Berufsdauer unterscheiden

Der erste Unterschied ist der Umgang mit Abhängigkeiten. Die eine weiß, welche Bibliotheken ihr Projekt mitschleppt, warum sie da sind und wie ein Wechsel abläuft. Der andere aktualisiert nie, weil danach nichts mehr läuft, und sitzt nach zwei Jahren auf einer Fassung, für die es keine Sicherheitsaktualisierungen mehr gibt.

Der zweite Unterschied ist die Frage, wo Zeit verlorengeht. Wer bei einem langsamen Programm zuerst misst, findet meist eine Schleife über eine Datenbankabfrage oder eine Datenstruktur, die für die Aufgabe falsch gewählt wurde. Wer stattdessen sofort auf Nebenläufigkeit setzt, verdoppelt die Komplexität und behält das Problem.

Der dritte Unterschied ist die Rücksicht auf den Betrieb. Ein Programm, das seine Konfiguration aus Umgebungsvariablen liest, ordentlich protokolliert und bei einem Fehler mit einer verwertbaren Meldung abbricht, kann jemand anders betreuen. Eines, das Pfade aus dem eigenen Rechner enthält und im Fehlerfall stillsteht, bleibt für immer an dir hängen.

Wohin die Rolle führt

Aus der Python-Entwicklung führen drei ausgetretene Wege. Der erste geht in die Datenrichtung, also Auswertung, maschinelles Lernen und der Betrieb von Modellen. Der zweite in die Plattform- und Betriebsrichtung, weil ein großer Teil der Werkzeuge dort ebenfalls in Python geschrieben ist. Der dritte bleibt in der Anwendungsentwicklung und geht in Richtung Entwurf und Architektur.

Für den Datenweg gibt es bei cmt einen fertigen Kursweg, der die Reihenfolge vorgibt, statt dich zwischen einzelnen Angeboten wählen zu lassen. Er beginnt bei der Sprache und endet bei Modellen, und er ist nur dann der richtige Weg, wenn dich die Auswertung mehr reizt als die Anwendung.

Die Zahlen weiter unten sind Bruttomonatsverdienste in Vollzeit ohne Sonderzahlungen. Weihnachts- und Urlaubsgeld sind darin nicht enthalten, dein Jahresverdienst liegt also über dem Zwölffachen des angezeigten Werts.

Dazu passende Kurse

Wenn du diesen Weg nicht allein gehen willst, gibt es Kurse, in denen du von den ersten Schleifen zu eigenen Modulen kommst .

Was verdient man

Die amtlichen Zahlen zu dieser Rolle

Python taucht in sehr unterschiedlich zugeschnittenen Stellen auf, von der Automatisierung im IT-Betrieb über Web-Backends bis zur Datenauswertung, und die amtliche Statistik kennt für keine davon eine eigene Zelle. Die beiden Werte stammen aus der Berufsgattung Softwareentwicklung, wobei die Fachkraft-Zelle auch Stellen enthält, in denen Programmieren nur ein Teil der Aufgabe ist, was den Abstand zwischen den beiden Zeilen mit erklärt. Das Anforderungsniveau beschreibt dabei den Zuschnitt der Stelle und nicht deine Berufsjahre. Vergleich dich mit dem Median, denn einzelne Spitzenverdienste ziehen den Durchschnitt nach oben.

Amtliche Medianverdienste, April 2025

Brutto im Monat

Statistisches Bundesamt, Verdiensterhebung. Vollzeit, ohne Sonderzahlungen. Die Hälfte der Beschäftigten verdient weniger als der Median, die andere Hälfte mehr.

Softwareentwicklung Fachkraft 4.201 €

KldB 43412, Durchschnitt 4.608 €, gerundet rund 50.000 € im Jahr ohne Sonderzahlungen

Softwareentwicklung Spezialist 5.986 €

KldB 43413, Durchschnitt 6.238 €, gerundet rund 72.000 € im Jahr ohne Sonderzahlungen

02k4k6k
  • Vollzeitbeschäftigte, Bruttomonatsverdienst ohne Sonderzahlungen. Weihnachts- und Urlaubsgeld, Prämien und Boni sind nicht enthalten, der Jahresverdienst liegt also über dem Zwölffachen.
  • Das Anforderungsniveau beschreibt den Zuschnitt der Stelle, nicht die Berufserfahrung. Fachkraft, Spezialist und Experte sagen etwas über die Komplexität der Tätigkeit aus, nicht über Dienstjahre.
  • Die Erhebung geht regional nur bis auf die Bundeslandebene. Für einzelne Städte gibt es keine amtlichen Zahlen, weil der Zufallsfehler zu groß wäre.

Quelle: Statistischer Bericht Verdienste , Statistisches Bundesamt (Destatis). Den eigenen Fall prüfst du im Entgeltatlas der Bundesagentur für Arbeit . Beachte dort: Entgelte oberhalb der Beitragsbemessungsgrenze sind der Statistik nicht bekannt, bei gut bezahlten IT-Rollen steht deshalb nur eine Untergrenze.

Wissen prüfen

Wie sicher bist du beim Thema wirklich?

Lesen fühlt sich schnell nach Können an. Ein kurzer Test zeigt dir, was davon schon sitzt und wo sich ein Kurs lohnt. Kostenlos, ohne Anmeldung, mit einer Erklärung zu jeder Antwort.

Ein sehr gutes, praxisorientiertes und nachhaltiges Seminar. So sollte es immer sein. Vielen Dank.
LimeSurvey - Anwendertraining Teil 1 (Grundlagen)
Ein sehr guter und verständlicher Überblick über die Grundlagen im Umgang mit BricsCAD.
BricsCAD 2D Schulung Grundkurs
Alle meine Erwartungen wurden erfüllt und ich habe mich sehr gut aufgenommen gefühlt, jede Frage wurden Probleme direkt beseitigt.
BricsCAD 3D Schulung - Grundlagen

Häufige Fragen

Reicht Python allein für eine Bewerbung?
In den seltensten Fällen. Was zusätzlich erwartet wird, hängt vom Stellentyp ab: im Backend Datenbanken und Schnittstellen, im Betrieb Systemkenntnisse und Skripting, im Datenumfeld Statistik und die passenden Bibliotheken. Was in allen drei Fällen erwartet wird, sind Git, Tests und der Umgang mit Abhängigkeiten.
Welches Werkzeug für Abhängigkeiten soll ich lernen?
Das Prinzip ist wichtiger als das Werkzeug. Beschreib dein Projekt in einer pyproject.toml, halte die aufgelösten Fassungen in einer Sperrdatei fest und arbeite je Projekt in einer eigenen Umgebung. Ob das uv, poetry oder eine Kombination aus venv und pip erledigt, ist eine Frage des Hauses, in dem du landest, und in wenigen Tagen umgelernt.
Brauche ich Typangaben wirklich, wenn Python doch dynamisch ist?
In einem Skript von fünfzig Zeilen nicht, in allem darüber ja. Typangaben ändern die Ausführung nicht, aber ein Prüfwerkzeug findet damit Verwechslungen vor dem Start, und die Schnittstellen zwischen deinen Modulen sind ohne Kommentar lesbar. In Stellenanzeigen taucht das inzwischen regelmäßig auf.
Macht Nebenläufigkeit meinen Code automatisch schneller?
Nein, und in Python führt der Versuch besonders oft in die Irre. Bei reiner Rechenlast bringen zusätzliche Threads durch den globalen Interpreter-Lock in der Regel nichts, dort helfen mehrere Prozesse oder eine Bibliothek, die die Arbeit außerhalb von Python erledigt. Bei Warten auf Netz oder Platte ist asynchrone Verarbeitung das passende Mittel.

Passt thematisch dazu

Wenn dich die Datenrichtung mehr reizt als die Anwendungsentwicklung, gibt es dafür einen fertigen Kursweg in Richtung Datenauswertung .

Falls der zweite Schritt neu für dich ist, lies zuerst nach, was eine virtuelle Umgebung genau trennt .

Persönlich für dich da

Deine Ansprechpartner

Du bist dir nicht sicher, welcher Kurs oder welches Level zu dir passt? Wir beraten dich persönlich und kostenlos.

Yves Hoppe

Yves Hoppe

Weiterbildung & Beratung

Hilft dir, aus dem IT-Berufe-Programm den passenden Kurs für deinen Stand zu finden.

Norbert Jansen

Norbert Jansen

Beratung & Inhouse

Plant mit dir Inhouse-Trainings, die auf eure Abläufe und euren Datenbestand zugeschnitten sind.