Software-Engineering für Quereinsteiger:innen und warum es mehr als Informatik ist
Ich beginne gerne mit einem Zitat von Prof. Stefan Richter, Studiengangleiter Informatik an der Fachhochschule OST:
«Während die Informatik ursprünglich die Wissenschaft der automatisierten Informationsverarbeitung ist, also stark vereinfacht die Wissenschaft effizienter Algorithmen und Datenstrukturen, geht es beim Software-Engineering um die Konkrete Implementierung komplexer Softwaresysteme. Das ist in etwa vergleichbar mit dem Unterschied zwischen Physik und Maschinenbau.»
Letzten Freitag waren wieder einige Studierende bei uns zu Besuch, welche sich für unser Software Trainee-Programm interessieren. Darunter sind auch immer viele Nicht-Informatik Studierende, z.B. aus den Bereichen der Elektrotechnik, Mathematik, Physik oder Maschinenbau, die aber gerne nach dem Studium als Software-Entwickler:in arbeiten möchten.
Die Wirtschaft bzw. wir und unsere Kunden benötigen vor allem «Software Engineers». Reines Informatik-Wissen reicht nicht aus, um erfolgreich zu sein.
Wir haben deshalb einige Punkte und Tipps zusammengetragen, die wichtig sind für den Einstieg in unser Trainee-Programm bzw. für den Weg von Informatiker:Innen zu Software Engineers.
Was Dich als Software-Engineer bei uns erwartet:
- «Moderne» Softwareentwicklung
- Situationsgerechter Einsatz von objektorientierter, funktionaler und prozeduraler Programmierung (kennst du den Unterschied?)
- Situationsgerechter Einsatz von Entwicklungsmethoden und -konzepten: Agil, Wasserfall, V-Modell, …
- Verwendung von modernen Programmierkonzepten, Patterns etc.
- Continuous Integration, Testautomatisierung, Buildautomatisierung, DevOPS, Versionskontrolle
- Verwendung von 3rd Party Komponenten und Frameworks, z.B.:
- Unit testing
- Dependency Injection
- GUI-Frameworks
- Kommunikations-Frameworks
- OR-Mapper
Für den Einstieg in unser Trainee-Programm erwarten wir nicht, dass du das alles schon 100% beherrschst, jedoch sollten die Begriffe für dich keine Fremdworte sein und du solltest die wichtigsten Grundlagen davon kennen.
Wie kannst Du das bereits während Deinem Studium lernen?
- Grundlagen von Software-Engineering anschauen: Es lohnt sich auf jeden Fall, ein Buch über Software-Engineering zu lesen. Neben der eigentlichen "Programmierung" gehört noch viel mehr Know-how zu einem guten Software-Entwickler:in, insbesondere:
- Projektmanagement
- Requirements Engineering
- Risikomanagement
- Qualitätsmanagement
- Systemdesign/technische Konzeption/Modellierung
- Implementierung
- Testing
- Einführung/Wartung/Pflege
- OO-Kenntnisse vertiefen in Projektarbeiten
- Zusätzlich Bücher lesen, z.B. «Head First Design Patterns»
- OO-Design Patterns verstehen
- Source-Code von Frameworks anschauen und verstehen
- Code und Architekturen von erfahrenen Programmierern anschauen und verstehen
- SOLID Principles verstehen und in Projektarbeiten berücksichtigen
- Feedback und Hilfe von Software-Experten bei Projektarbeiten verlangen
- Elektrotechnik Betreuer haben in der Regel die benötigten Software-Kenntnisse nicht
- Zusätzliche Inputs und Feedback von Software-Experten (Co-Betreuer, Freunde) ist nötig
- Private Projekte starten
Bücher-Empfehlungen
StackOverflow reicht nicht - deshalb kann ich folgende Bücher wärmstens empfehlen:
Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code von Robert C. Martin
- ein absolutes Muss für alle Software Engineers
- beschreibt anschaulich, wie gute, wartbare und fehlerfreie Software aussieht
- bringt zwischen den Zeilen auch viel SW Engineering Know-how
Head First Design Patterns von Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra
- einfach zu lesen, aber spezielles Lernkonzept
- mit guter Einführung in OO und UML
Domain-Driven Design von Eric J. Evans
- starke Designmethode
- viel Hintergrundinfos zwischen den Zeilen
- gute Beispiele
Clean Architecture - A Craftsman's Guide to Software Structure and Design von Robert C. Martin
- sehr gut strukturiert, sehr angenehm zum Lesen
- erklärt, was Software Architektur eigentlich ist
- fasst viele wichtige Prinzipien (Programmierparadigmen, SOLID-Prinzipien, Boundaries und Schichten, Integration von Testing in Architektur, etc.) anschaulich zusammen
Für das Thema Software-Engineering habe ich leider noch keinen «Knüller» gefunden. Hier wäre ich auch sehr dankbar um Hinweise und Empfehlungen. Folgende Bücher und Links sind mindestens teilweise empfehlenswert:
- Best Practices Tutorial: Einige ganz elementare Grundlagen für Software-Engineers, welche jedoch absolut wichtig sind, bietet diese kurze Intro: tutorialspoint.com/developers_best_practices
- Software Engineering von Ian Sommerville: Ein umfangreiches Werk, welches das Software-Engineering aus allen wichtigen Blickpunkten beleuchtet.
- Softwareentwicklung kompakt und verständlich: Wie Softwaresysteme entstehen von Hans Brandt-Pook: Eine kurze Einführung mit Fokus auf Vorgehensmodelle und Modellierungswerkzeuge
- Head First Software Development von Dan Pilone: Wenn man die Head First Serie mag, gibt dieses Buch einen guten Überblick über das Software Engineering
- Für eine kurze, einfache Einführung in UML hilft das UML Class Diagram Tutorial.
- Spannende Youtube-Videos zu Continuous Delivery von Dave Farley: https://www.youtube.com/c/ContinuousDelivery?
Mein Kollege Christian Ewald hat mir noch folgende Bücher und Links empfohlen:
- Coder To Developer: Von mir aus gesehen ein Muss für jeden Software-Entwickler:in.
- Code Complete: A Practical Handbook of Software Construction: Wird oft zusammen mit Clean Code genannt. Ein ziemlicher Wälzer. Deckt aber den ganzen Lebenszyklus von Software ab. Von der Idee bis zur Wartung.
- Joel on Software: Blog Serie von Joel Spolsky, Mitgründer von StackExchange, Trello uvm. Witzig und gut zu lesen.
Der beste Einstieg in die Software-Entwicklung ist natürlich unser Software Trainee-Programm. Melde Dich bei uns, wenn du interessiert bist.
Kommentare