Softwareentwickler:innen, auch Software-Developer genannt, sind Fachinformatiker:innen, die Software und Applikationen konzipieren, implementieren und warten. In der Praxis kann das z.B. eine E-Commerce-Plattform sein oder auch mobile Apps, Betriebssysteme oder Videospiele. Dies tun sie mithilfe verschiedener Programmiersprachen wie Java, C++ oder PHP. Da die Tätigkeiten von Softwareentwickler:innen sehr vielfältig sind, vereint das Jobprofil Softwareentwickler:in auch Tätigkeiten aus dem Aufgabenspektrum von Programmierer:innen oder Anwendungsentwickler:innen. Softwareentwickler:innen arbeiten zumeist in System- und Softwarehäusern, Unternehmen der Informations- und Kommunikationstechnik oder bei EDV-Dienstleistern, finden aber auch in anderen Branchen eine Anstellung.
Inhaltsübersicht
- Aufgaben
- Programmiersprachen
- Hard Skills
- Soft Skills
- Jobs für Softwareentwickler:innen
Was sind die Aufgaben von Softwareentwickler:innen?
Die Aufgaben von Softwareentwickler:innen unterteilen sich in vier wesentliche Aufgabenbereiche:
Anforderungsmanagement: Der erste Schritt bei der Entwicklung einer neuen Software oder Applikation ist die eingehende Analyse der Anforderungen der Stakeholder. Ziel ist es, ein gemeinsames Verständnis der zu entwickelnden Software zwischen Softwareentwickler:in und Stakeholder zu erreichen und Arbeitsprozesse sowie Qualitätskriterien im gegenseitigen Einverständnis festzulegen. Die daraus resultierende Anforderungsdokumentation dient den Softwareentwickler:innen als Basis und Rahmen für alle darauffolgenden Entwicklungsschritte der Software und Applikation. Darüber hinaus wird die Anforderungsdokumentation nach Abschluss jedes größeren Entwicklungsschrittes herangezogen. So können die Ergebnisse mit den eigentlichen Anforderungen der Stakeholder regelmäßig abgeglichen werden.
Entwicklung der Software-Architektur und des Quell-Code: Im Rahmen der Entwicklung der Software-Architektur bestimmen die Softwareentwickler:innen die grundlegenden Komponenten eines Softwaresystems und wie diese intern miteinander zusammenhängen und agieren sollen. Dieser Aufgabenbereich ist einer der wichtigsten und kritischsten der Softwareentwickler:innen. Ist die Software-Architektur einmal eingerichtet, kann diese zu einem späteren Zeitpunkt nur mit sehr hohem Aufwand wieder geändert werden. Deswegen müssen Softwareentwickler:innen in diesem Schritt einen hohen Wert auf Qualitätskriterien wie Modifizierbarkeit, Wartbarkeit, Sicherheit und Performance legen. Ist die Software-Architektur definiert, muss diese mit Hilfe verschiedener Programmiersprachen umgesetzt werden. Die am häufigsten verwendeten Programmiersprachen sind Java, C++ und PHP. Darüber hinaus gibt es weitere Programmiersprachen wie z.B. Perl, Cobol, Pascal oder Ruby on Rails.
Testing: Ist die Software entwickelt, kommt es zur Testphase. Hierbei untersuchen Softwareentwickler:innen die Software auf die im ersten Schritt definierten Anforderungen, messen die Qualität und prüfen die Software auf Fehler. Dazu nutzten Softwareentwickler:innen zumeist vordefinierte Protokolle und Qualitätsstandards. Je nach Komplexität der Software kann sich die Testphase im Umfang unterscheiden.
Implementierung und Installation der Software: Sind alle Fehler, die während der Testphase offengelegt wurden, behoben, kann die Software implementiert werden. In diesem Zusammenhang erstellen die Softwareentwickler:innen eine technische Dokumentation, in der alle wesentlichen Informationen zur Installation, Nutzung, Wartung und Reparatur der Software festgehalten werden. Darüber hinaus geben die Softwareentwickler:innen den zukünftigen Nutzerinnen und Nutzern des Programms oder der Applikation eine Einweisung.
Wartung und Weiterentwicklung der neu eingeführten Software: Nach Implementierung ist es Aufgabe der Softwareentwickler:innen die Software regelmäßig auf den neuesten Stand zu bringen und in ihren Funktionen zu erweitern. Darüber hinaus ist er derjenige, der bei aufkommenden Problemen die Software überarbeitet und an die Anforderungen der Stakeholder anpasst.
In den meisten Fällen sind Softwareentwickler:innen nicht alleine für alle beschriebenen Aufgabenfelder zuständig. Je nach Projektumfang arbeiten sie in einem Entwicklungsteam zusammen mit Software-Analystinnen und Software-Analysten, Programmierer:innen, Software-Tester:innen, Anwendungsberater:innen, Software-Ingenieur:innen oder auch Web Designerinnen und Web Designern und decken dabei meist nur Ausschnitte der oben genannten Tätigkeitsfelder ab.
Mit welchen Programmiersprachen arbeiten Software-Entwickler:innen?
Zu den wichtigsten Programmiersprachen der Softwareentwickler:innen zählen folgende:
Java: Die Programmiersprache Java ist eine der bekanntesten Programmiersprachen und wurde erstmals 1995 von dem Unternehmen Sun Microsystems auf den Markt gebracht. Java gehört zur Gruppe der objektorientierten Programmiersprachen, wobei geschriebene Programme in Objekte und Klassen unterteilt werden. Mit Java werden Webanwendungen, Desktop-Anwendungen und Apps programmiert.
C++: Bei dieser Programmiersprache handelt es sich um eine Erweiterung der Programmiersprache C. Sie zählt wie auch Java zu den objektorientierten Programmiersprachen. C++ wird in der Anwendungs- und Systemprogrammierung genutzt und wurde zwischen 1979 und 1983 von Bjarne Stroustrup, ein ehemaliger Professor der Informatik an der Texas A&M University, entwickelt.
PHP: PHP steht für Hypertext Preprocessor. Bei PHP handelt es sich um eine Skriptsprache, die hauptsächlich dazu dient, dynamische Webseiten und Webanwendungen zu erstellen. Viele Content-Management-Systeme basieren auf der Programmiersprache PHP wie z.B. Wordpress. Die Programmiersprache existiert seit 1995 und wird seitdem stetig weiterentwickelt.
Über welche Hard Skills sollte man als Softwareentwickler:in verfügen?
Programmiersprachen: Eine der wichtigsten Kompetenzen von Softwareentwickler:innen ist das Beherrschen einer oder mehrerer Programmiersprachen. Welche Programmiersprache zum Einsatz kommt, ist ganz davon abhängig, in welchem Bereich man sich als Softwareentwickler:in spezialisiert hat. Für Softwareentwickler:innen, die sich auf die Entwicklung von Microsoft-Plattformen und Microsoft-Services spezialisiert haben, eignet sich die Programmiersprache C#. Wer seinen Schwerpunkt hingegen auf die Entwicklung von Webanwendungen, die Daten verarbeiten können, gelegt hat, wird PHP nutzen. Wie in vielen anderen Bereich gilt auch hier, dass ein tiefes Verständnis einer Programmiersprache oft sinnvoller ist, als oberflächliches Wissen mehrerer Programmiersprachen.
Saubere und sinnvoll strukturierte Code-Struktur: Eine klar verständliche und gut strukturierte Code-Struktur ist meist ausschlaggebend für die Qualität und damit den Erfolg eines Projekts. Viele Unternehmen und Entwickler-Teams greifen dazu auf einen eigenen Code Codices zurück, um die Codestruktur für alle Teammitglieder und Nachfolger verständlich zu machen. Teil eines solchen Code Codexes kann es z.B. sein, identifizierte Bugs umgehend zu kommunizieren und regelmäßige Reviews der Code-Struktur durchzuführen. Darüber hinaus kann innerhalb eines Codes Codexes festgehalten werden, wie und wann Kommentare innerhalb des Codes gesetzt, wie lange die Zeilen sein sollten oder wie der Code eingerückt werden sollte.
Versionsverwaltung: Unter Versionsverwaltung versteht man in der Softwareentwicklung ein System, das alle Änderungen am Quelltext protokolliert. So ist es zu einem späteren Zeitpunkt möglich, auf eine ältere Version des Quelltextes zurückzugreifen. Gerade in Teams, die sich aus mehreren Softwareentwickler:innen zusammensetzen, ist der Umgang mit einer Versionsverwaltung von Nutzen. Softwareentwickler:innen sollten z.B. Kenntnis darüber haben, wie Code ein- und ausgecheckt werden kann.
Projektmanagementmethoden: Mittlerweile gibt es zahlreiche Projektmanagement-Methoden, die in der Softwareentwicklung angewandt werden. Diese reichen vom Agilen Projektmanagement über Scrum, Kanban, Prince2 bis hin zur Wasserfall-Methode oder XP. Software-Entwickler:innen müssen nicht alle Projektmanagement-Methoden im Detail beherrschen können. Dennoch ist es wichtig zu wissen, um was es bei den einzelnen Projektmanagement-Methoden geht und wie diese im Tagesgeschäft angewendet werden können.
Algorithmen und Datenstrukturen: Treten bei der Entwicklung eines Softwareprodukts Problemstellungen auf, ist es für Softwareentwickler:innen von Vorteil, die gängigsten Algorithmen und Datenstrukturen zu kennen. Algorithmen geben Softwareentwickler:innen vereinfacht gesagt einen Lösungsweg für bestimmte Aufgaben mit auf den Weg, bei dem die Schritte eindeutig definiert sind. Ein Beispiel für einen Algorithmus im täglich Leben sind Navigationsgeräte, die aufgrund verschiedener Faktoren, wie Stau, Straßensperrungen oder Steigungen die kürzeste Strecke berechnen. Auch Kenntnisse über Datenstrukturen sind wichtig. Datenstrukturen dienen zur Speicherung und Organisation von Daten. Je mehr man als Softwareentwickler:in über Datenstrukturen weiß, umso besser kann er verschiedene Problemstellungen lösen.
Datenbanken: In Zeiten von Big Data und Machine Learning ist zumindest Basiswissen rund um verschiedene Datenbankentypen angemessen. Softwareentwickler:innen sollten mit Datenbanken umgehen können und Kenntnisse darüber haben, wie Daten in Datenbanken eingefügt und gelöscht, upgedatet sowie vereinigt werden können.
Testing - Methoden: Ziel desTestings ist es, das Software-Produkt auf die technischen Anforderungen hin zu testen und Bugs offen zu legen. Da das Testen von Softwareprodukten zu den Aufgabengebieten von Software-Entwickler:innen zählt, sollten diese auch Wissen über verschiedene Testing-Methoden haben. Zu den gängigsten Testing-Methoden zählt z.B. der Systemtest, bei dem alle Komponenten einer Anwendung, die neu entwickelt oder geändert wurden, geprüft werden.
Debugging-Methoden: Das Debugging ist dem Testing nachgelagert und beschäftigt sich mit der Behebung der in der Test-Phase offen gelegten Bugs. In diesem Zusammenhang sollten Softwareentwickler:innen Kenntnis zu den verschiedenen Typen des Debuggings haben und sich mit Methoden und Tools auskennen, wie z.B. dem Kommandozeilentool GNU Symbolic Debugger (GDB), dem Just-in-Time-Debugging oder dem Post-Mortem-Debugging.
Über welche Softskills sollte man als Softwareentwickler:in verfügen?
Unternehmen arbeiten immer projektbasierter. Abhängig von der Größe und Dauer des Projekts sind meist mehrere Teams aus verschiedenen Fachrichtungen involviert, die gut miteinander kommunizieren und empathisch miteinander umgehen müssen, um ein Projekt erfolgreich zu Ende zu bringen. Softskills sind deshalb mindestens genauso wichtig wie entsprechende Fachkenntnisse. Das Klischee, dass es für Softwareentwickler:innen ausreichend ist, ausschließlich durch fundiertes Know-how zu überzeugen, ist damit überholt. Längst sind Softskills wie Teamfähigkeit, kommunikatives Geschick und Kreativität entscheidend, um Projektanforderungen erfolgreich umsetzen zu können.
Kommunikatives Geschick: Softwareentwickler:innen haben, egal ob in einer Agentur oder im eigenen Unternehmen, eine Dienstleistungsfunktion inne. Das heißt, sie müssen die Anforderungen der Kunden oder der Business Units im Unternehmen verstehen und diese im eigenen Team entsprechend der Anforderungen umsetzen und zugleich auf Chancen und Risiken aufmerksam machen. Deshalb ist kommunikatives Geschick eine der Schlüsselkompetenzen, über die man als Softwareentwickler:in verfügen sollte.
Teamarbeit: IT-Projekte werden grundsätzlich in Teams umgesetzt. Abhängig von der Größe des Projekts können die Teams international aufgestellt sein. Genauso wie andere IT-Spezialistinnen und -Spezialisten aus verwandten Fachgebieten müssen somit auch Softwareentwickler:innen fähig sein, im Team Projekte umzusetzen und im gemeinsamen Dialog Lösungen für Anforderungen verschiedener Stakeholder zu erarbeiten. Darüber hinaus setzen moderne Projektmanagementmethoden in der Softwareentwicklung wie Scrum Teamarbeit und Kommunikationsfähigkeit voraus.
Die Fähigkeit, sich selbst weiterzubilden und voneinander zu lernen: Die Softwareentwicklung zählt zu den Branchen, die am schnelllebigsten sind. Umso wichtiger ist es für Softwareentwickler:innen am Ball zu bleiben, sich mit den aktuellen Entwicklungen auseinanderzusetzen und sich stetig neue Kenntnisse in der Softwareentwicklung anzueignen. Der Austausch im eigenen Team ist dabei von besonders großer Bedeutung. Eine beliebte Methode, die dazu in Entwicklungsteams angewendet wird, ist das Pair Programming im Rahmen des Code Reviews. Dabei arbeiten zwei Entwickler:innen zusammen an einem Code und überprüfen dabei die Arbeit des jeweils anderen. Darüber hinaus gehen einige Software-Teams auch dazu über, regelmäßige firmeninterne Tech Talks zu veranstalten, bei denen Erfahrungen ausgetauscht, Diskussionen geführt und Codes betrachtet werden.
Flexibilität: Softwareentwickler:innen müssen flexibel sein. Das gilt nicht nur bei unerwartet auftretenden Problemen, sondern auch bei Änderungen der Anforderungen von Seiten der Stakeholder. In diesen Situationen gilt es, die neuen Anforderungen kurzfristig in bereits bestehende Überlegungen miteinzubeziehen und bei Problemen kreativ zu werden. Gerade in zeitkritischen Projekten ist eine schnelle Reaktion wichtig, um den Projektverlauf nicht zu gefährden und um den Erfolg des Projekts weiterhin zu garantieren.