Wie man ein guter Software-Ingenieur wird
Von der perfekten Beherrschung einer Programmiersprache bis zur Verbesserung der Kommunikationsfähigkeiten – Dr. Milan Milanović teilt in diesem Artikel seine fundierten Einsichten darüber, wie man ein hervorragender Software-Ingenieur wird.
Von Dr. Milan Milanović
Wie wir alle wissen, erfordert der Beruf des Software-Ingenieurs viel Arbeit. Man muss eine Menge erkennen und sich ständig verbessern. Dennoch gibt es viele Fragen und Entscheidungsschwierigkeiten, wenn es um die Frage geht, was man tun sollte, um ein großartiger Ingenieur zu werden, und was eher nebensächlich ist.
Während meiner 20-jährigen Karriere in verschiedenen Unternehmen, von Start-ups bis hin zu großen Unternehmen mit mehr als 10.000 Mitarbeitern, habe ich herausgefunden, was gute und großartige Software-Ingenieure voneinander unterscheidet. Hier sind Empfehlungen, wie man einer wird:
1. Beherrscht eine Programmiersprache vollständig
Nehmt eine Programmiersprache und geht damit in die Tiefe. Lernt alles, was ihr könnt, und werdet Meister darin. Einige gute Sprachen, die man heutzutage wählen kann, sind Python, Java, C# und Rust.
Um sicher zu sein, welche Programmiersprachen ihr lernen solltet, schaut euch diese Beliebtheitsskalen an:
- PYPL PopularitY of Programming Language Index.
- TIOBE Index.
- IEEE Spectrum.
- Stack-Overflow-Umfrage 2023.
2. Lernt Software-Engineering-Konzepte
Wenn man eine Programmiersprache, ihre Syntax, Semantik und Konstrukte beherrscht, muss man als Nächstes verschiedene Software-Engineering-Konzepte lernen, z. B.:
- Software-Architektur
- Software-Design
- Algorithmen und Datenstrukturen
- Entwurfsmuster
- Clean Code
- SOLID-, DRY-, KISS- und YAGNI-Prinzipien
- System-Design
- Daten
- Gitwill
Mehr dazu im nächsten Abschnitt.
3. Lernt den kompletten Software Development LifeCycle (SDLC) Prozess kennen
Versucht, den gesamten Softwareentwicklungsprozess zu verstehen, von den Anforderungen bis zur Bereitstellung. Lernt über agile Methoden, DevOps und Qualitätssicherung.
Versucht, an verschiedenen Projekten zu arbeiten; je mehr Projekte ihr bearbeitet, desto mehr lernt ihr und wachst.
4. Seid produktorientierte Ingenieure
Wenn ihr an einem Projekt arbeitet, gebt euch nicht nur mit den Spezifikationen zufrieden, sondern macht euch daran, das Projekt auch zu realisieren. Lasst eure eigenen Ideen einfließen und involviert dabei den Produktmanager. Versucht, das gesamte System zu verstehen, aber auch, wie das Geschäft dahinter funktioniert. Betrachtet das Produkt von Anfang bis Ende als Feature Owner.
5. Verbessert eure Kommunikation und Soft Skills
Seid anderen gegenüber respektvoll, kommuniziert klar und seid bescheiden. Freundlich zu sein kostet nichts, hat aber unermessliche Auswirkungen.
Lernt außerdem, zu schreiben, zu präsentieren und gut zu sprechen. Dadurch hebt ihr euch von der Masse ab.
Probiert auch Pair/Mob Programming aus. Sprecht mit Leuten außerhalb des Ingenieurwesens, trefft euch gemeinsam mit anderen zu einem Kaffee oder zum Mittagessen und plaudert ein wenig auf dem Flur.
6. Lernt bewusst
Wir müssen lernen, aber der Trick ist das Wann und Wie. Lernt nicht einfach etwas, nur weil es effizienter sein könnte. Wir müssen absichtlich lernen, kurz bevor wir es brauchen. Das hat die größte Wirkung.
7. Arbeitet mit erfahrenen Personen zusammen
Der schnellste Weg, um in eurer Karriere voranzukommen, ist, einen Mentor zu finden. Er kann euch helfen, eure Defizite zu erkennen und euch neue Perspektiven aufzeigen. Ein Mentor kann innerhalb einer Organisation oder außerhalb gefunden werden (probiert dabei spezifische Dienste wie MentorCruise).
Versucht immer, mit Menschen zusammenzuarbeiten, die ihr schätzt und die wiederum euch schätzen.
8. Wendet bewährte technische Praktiken an
Lernt und befolgt Good Practices, wie z. B.:
- den Einsatz von Version Control
- die Anwendung von korrekten Tests (prüft die Testpyramide)
- das Erlernen und Einsetzen von Refactoring
- den Einsatz von TDD
- die Nutzung von Code-Reviews
- das Schaffen einer DevOps-Mentalität
Lernt auch eure IDE und alle wichtigen Abkürzungen, die ihr braucht. Auch den Debugger.
9. Nutzt Produktivitätstechniken
Um produktiver zu sein, müsst ihr verschiedene Techniken erlernen, wie z. B.:
- Prioritätensetzung (siehe Eisenhower-Matrix)
- Zeitmanagement (siehe Pomodoro)
- Konzentration (siehe Deep Focus / keine Ablenkungen)
- Notiznahme (siehe Notion)
Dies wird euch helfen, nur die wichtigen Dinge im Kopf zu behalten, die ihr jetzt für die aktuelle Aufgabe braucht.
10. Seid proaktiv
Vergesst auch nicht eure "Ich kann was tun"-Einstellung und Proaktivität - eine wesentliche Grundlage für jeden guten Softwareentwickler.
Um mehr darüber zu erfahren, empfehle ich das Buch "The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change".
Letztlich brauchen wir mehr, auch wenn wir schon viel wissen. Was braucht es, um ein großartiger Ingenieur zu sein? Es braucht Zeit, Misserfolge und Experimente. Also geht und übt, übt, übt!
Lernt Grundlagen, nicht Frameworks
Wir als Entwickler lernen gerne neue Dinge und probieren sie so schnell wie möglich aus. Dabei handelt es sich meist um neue Frameworks und Tools (wie React, Angular, Spring, Web Forms, ...). Doch diese Frameworks haben in der Regel eine kurze Lebensdauer, bestenfalls 2 bis 5 Jahre. Anstatt Frameworks zu lernen, die bis zu einem gewissen Grad notwendig sind, sollten wir uns mehr auf das Erlernen von Grundlagen konzentrieren.
Das Erlernen von grundlegenden Aspekten der Softwareentwicklung ermöglicht es Entwicklern, die wesentlichen Prinzipien und Konzepte zu verstehen, die den verschiedenen Frameworks und Programmiersprachen gemeinsam sind. Dieses Verständnis sorgt für mehr Flexibilität und Anpassungsfähigkeit bei der Arbeit mit neuen Technologien oder bei Problemen, für deren Lösung ein bestimmtes Framework möglicherweise zu lange braucht.
Darüber hinaus kann ein fundiertes Verständnis der Grundlagen zu einer effizienteren und effektiveren Nutzung von Frameworks führen, da der Entwickler besser versteht, wie er sie an seine spezifischen Anforderungen anpassen und erweitern kann.
Nehmen wir als Beispiel eine Webanwendung, die es den Benutzern ermöglicht, Bilder hochzuladen und mit anderen zu teilen, z.B. mit Ruby on Rails und seine Bildverarbeitungsfunktionen. Dabei kennen wir uns nur mit einem Framework gut aus. Aber nur wenn wir dieses wirklich beherrschen, können wir mit Performance-Problemen umgehen, wenn dann die Zahl der Nutzer steigt. Wenn wir dagegen jedoch die Grundlagen der Webentwicklung verstehen, können wir Engpässe erkennen und verschiedene Lösungen ausprobieren, wie z.B. die Verwendung von CDNs, die Optimierung von Bildgrößen, die Verwendung verschiedener Speicherlösungen, etc.
Hier nochmal, welche Grundlagen also zu lernen sind:
- Algorithmen
- Daten
- Clean Code
- Design-Muster
- Distributed Computing
- System-Design
- Und mehr.
Wenn ihr die Grundlagen erlernen möchtet, kauft und lest diese Bücher.
Dieser Artikel ist eine Übersetzung des Artikels „How to Become a Great Software Engineer“ von Dr. Milan Milanović, CTO von 3MD und Experte für Softwareentwicklung mit umfangreicher akademischer und industrieller Erfahrung. Sein Newsletter richtet sich an Software-Ingenieure, Architekten, technische Manager und alle, die im technischen Bereich arbeiten oder sich dafür interessieren.
Bild: Pexels.com