Ein guter Ingenieur werden
(0x0001.cc)- Viele Softwareingenieure arbeiten ohne Leidenschaft für Software
- Sie arbeiten lediglich für ein gutes Gehalt, aber ohne Leidenschaft lässt die Leistung am Ende nach
- Wer bei veralteten Technologien und falschen Überzeugungen stehen bleibt und nicht weiterlernt, wächst nicht
- Elemente, die nötig sind, um ein guter Ingenieur zu werden
- Man muss das Wesen des Engineerings verstehen und sich tiefgehendes Wissen aneignen
- Neue Technologien sollte man kontinuierlich lernen und kritisch betrachten
- Man braucht die Gewohnheit, in der Praxis gelerntes Wissen anzuwenden und zu verbessern
# Was macht einen guten Ingenieur aus
- Definition eines Ingenieurs
„Jemand, der wissenschaftliche Prinzipien anwendet, Probleme analysiert und sie durch Entwurf, Schreiben von Code, Fertigung, Schaffen und Ähnliches löst und die Welt zu einem besseren Ort macht“
- Erforderliche Fähigkeiten für Softwareingenieure
- Man muss die Prinzipien verstehen, wie ein Computer funktioniert
- Ein tiefes Verständnis dafür ist nötig, wie Hardware und Software miteinander interagieren
- Man sollte sich nicht nur auf abstrahierte Sprachen oder Technologien verlassen, sondern von den Grundlagen an lernen
Tiefes Verständnis der Domäne
- Ein starkes Verständnis der Grundprinzipien ist nötig
- Maschinenbauingenieur → Eigenschaften von Materialien und Wissen über ihre Anwendung
- Softwareingenieur → Verständnis der Funktionsweise von Speicher und CPU
- Man sollte von den Grundprinzipien aus lernen
- Ein tiefes Verständnis grundlegender Konzepte wie HTTP, Speicheraufbau und Systemverhalten ist unverzichtbar
- Man sollte nicht auf hoher Ebene anfangen, sondern auf den Grundlagen aufbauen
Kontinuierliches Lernen
- Man sollte aktuelle Technologien und Entwicklungstrends fortlaufend lernen
- Die Vor- und Nachteile neuer Technologien sollte man kritisch analysieren
- Neue Themen, die man im Lernprozess entdeckt, sollte man tiefer erforschen
- So wie man beim Lernen von Mathematik in Detailthemen weitergeht, sollte man auch die Tiefe des Lernens erweitern
Grenzen und Probleme von Technologien verstehen
- Man muss die Stärken und Schwächen von Tools oder Sprachen klar verstehen
- Man sollte sich davor hüten, eine bestimmte Sprache oder ein bestimmtes Tool übermäßig zu verherrlichen
- Wichtig ist, das optimale Tool für das jeweilige Projekt auszuwählen
Wissen in der Praxis anwenden
- Nur Theorie zu kennen, ist bedeutungslos
- Gelerntes Wissen muss in realen Projekten angewendet werden
- Es sollte genutzt werden, um Probleme zu lösen oder Konzepte zu beweisen
- Beispiele für praktische Anwendung
- Kleine Prototypen bauen
- Probleme lösen, die im Alltag entstehen
- Gelerntes anderen erklären und beibringen
# Wie man ein besserer Ingenieur wird
Kritisches Denken entwickeln
- Kritisches Denken ist ein Kernelement des Engineerings
- Es ist unverzichtbar, um Konzepte und ihre Wirkung zu verstehen und zu hinterfragen
- Fehlt kritisches Denken oder wird es vernachlässigt, führt das zu Ineffizienz und Komplexität
- Die Fähigkeit zum kritischen Denken stärken
- Wenn man mit neuen Konzepten in Kontakt kommt, sollte man sie nicht bedingungslos akzeptieren, sondern Wirksamkeit und Gültigkeit prüfen
- Man sollte Vor- und Nachteile sowie Alternativen eines bestimmten Ansatzes logisch analysieren
- Lernmaterial zum kritischen Denken: Siehe Critical Thinking
Mehr Bücher lesen
- Lesen ist eine effektive Methode, Wissen zu erwerben
- Es gibt Bücher zu verschiedensten Themen der Softwareentwicklung
- Man sollte den Inhalt von Büchern nicht einfach übernehmen, sondern kritisch herangehen
- Beispielfragen für kritisches Lesen
- „Gibt es Probleme mit diesem Ansatz?“
- „Gibt es einen besseren Weg?“
- „Wie würde ich es anders machen?“
- „Ist das, was dieses Buch erklärt, tatsächlich richtig?“
- Die Gewohnheit entwickeln, Notizen zu machen
- Gelerntes und eigene Gedanken ordnen und festhalten
- Wenn ein unbekanntes Thema erwähnt wird, zusätzlich recherchieren
- Obsidian wird als Tool für Notizen empfohlen (kann je nach persönlicher Vorliebe gewählt werden)
- Empfohlene Leselisten
Gelerntes Wissen auf Projekte anwenden
- Von der Theorie zur Praxis
- Echtes Lernen findet erst statt, wenn man Gelerntes in realen Projekten anwendet
- Durch die tatsächliche Umsetzung von Konzepten ist ein tieferes Verständnis möglich
- Es ist wichtig, selbst kleine Projekte oder Prototypen direkt zu bauen
- Vorteile, die man durch praktische Anwendung gewinnt
- Man stößt auf reale Probleme, die in der Theorie nicht sichtbar waren
- Im Prozess der Problemlösung kann man Wissen konkretisieren und verbessern
- Problemlösungsfähigkeit und logisches Denken werden gestärkt
- So kann man Gelerntes anwenden
- Kleine Prototypen bauen
- Nach dem Lernen eines neuen Frameworks, einer Sprache oder eines Konzepts ein kleines Projekt ausprobieren
- Beispiel: Nach dem Lernen von Datenbankindizierung ein einfaches Suchsystem implementieren und die Performance vergleichen
- Reale Probleme lösen
- Kleine Probleme lösen, die im Alltag oder bei der Arbeit entstehen
- Beispiel: Wiederkehrende manuelle Arbeit automatisieren, Performance-Probleme verbessern usw.
- Gelerntes weitergeben
- Das eigene Verständnis vertiefen, indem man Gelerntes anderen erklärt
- Einen Blogbeitrag schreiben, einen Twitter-Thread verfassen oder mit Kollegen diskutieren
- Im Lehrprozess kann man neue Perspektiven entdecken
- Wenn man Wissen kontinuierlich anwendet, verwandelt sich theoretisches Verständnis in praktische Kompetenz, und man kann sich zu einem fähigeren Ingenieur entwickeln
Eigenen Code bewerten und verbessern
- Selbstkritik ist eine zentrale Gewohnheit hervorragender Ingenieure
- Viele Ingenieure machen den Fehler zu glauben, Code sei „gut genug“, solange er funktioniert
- Ein echter Ingenieur erkennt jedoch, dass es immer Raum für Verbesserungen gibt
- Ziel der Selbstbewertung
- Man muss nicht übermäßig streng mit sich selbst sein
- Entscheidend ist, Chancen für kontinuierliche Verbesserung zu finden
- Man sollte sich nicht damit zufriedengeben, dass Code nur funktioniert, sondern nach Verbesserungen bei Performance, Wartbarkeit und Lesbarkeit suchen
- Wirkung kontinuierlicher Selbstbewertung
- Die Codequalität verbessert sich schrittweise
- Durch Selbstkritik wird die Problemlösungsfähigkeit gestärkt
- Das eigene Wissen und die eigenen Fähigkeiten können sich ständig weiterentwickeln
# Empfehlungsliste für Softwareingenieure
Empfohlene Bücher
- Designing Data-Intensive Applications – Entwurf datenintensiver Anwendungen
- Introduction to Algorithms – (auch die koreanische Ausgabe trägt einen englischen Titel)
- Writing a C Compiler
- Essential Maths for Data Science – Unverzichtbare Mathematik für Entwickler
- Elements of Information Theory
Empfohlene Projekte
- Compiler - Versuchen, einen Compiler für eine Sprache Ihrer Wahl zu schreiben, mit Bezug auf LLVM oder die JVM
- Emulator - Einen einfachen CPU-Emulator (z. B. 8086) schreiben
- Rendering Engine / Game Engine - Mit OpenGL oder Vulkan ein Grafikprogramm schreiben
- Speicher-Viewer und -Editor schreiben - Ein Programm schreiben, das mit dem Speicher anderer Programme interagiert
- HTTP-Server schreiben - Einen HTTP-Server in einer Low-Level-Sprache schreiben
- Websites oder einfache Projekte sollte man vermeiden. Der Lerneffekt kann gering sein. Wählen Sie eines der oben genannten Projekte, recherchieren Sie das Thema und setzen Sie es selbst um
Fazit
- Ein guter Ingenieur zu sein bedeutet nicht, viele Programmiersprachen zu kennen
- Tiefes Verständnis der Grundprinzipien + kritisches Denken + praktische Anwendung sind entscheidend
- Man braucht die Haltung, zu lernen, anzuwenden und sich ständig zu verbessern
- Engineering ist eine endlose Reise, und die Bereitschaft zu wachsen ist wichtig
Fazit
- Das Wesen dessen, ein guter Ingenieur zu werden
- Es geht nicht darum, die meisten Programmiersprachen zu kennen, die neuesten Frameworks zu meistern oder neuen Technologien hinterherzulaufen
- Entscheidend ist ein tiefes Verständnis der Grundprinzipien des Engineerings
- Man muss Gelerntes auf reale Projekte anwenden, kritisch denken und kontinuierlich wachsen
- Merkmale erstklassiger Ingenieure
- Sie hören nie auf zu lernen und eignen sich neues Wissen an
- Sie hinterfragen ständig ihre eigenen Annahmen und suchen nach Verbesserungsmöglichkeiten
- Sie wenden Gelerntes auf reale Problemlösungen an, arbeiten mit Kollegen zusammen und wachsen daran
- Engineering ist eine lebenslange Reise
- Neugier (curiosity), Disziplin (discipline) und der Wille zum Wachstum sind erforderlich
- Wenn man diese Prinzipien lebt, kann man nicht nur ein guter, sondern ein großartiger Ingenieur werden
9 Kommentare
Ich habe auch schon zum Speichermanagement des Linux-Kernels beigetragen und denke, dass ich ein gewisses Verständnis für Low-Level-Abläufe habe. Wenn ich aber bedenke, dass ich am Ende ungewollt Arbeit mache, die weit von der Entwicklung entfernt ist, denke ich, dass man wohl eher das Gegenteil von diesem Artikel tun muss, um ein erfolgreicher Ingenieur zu werden.
Als ich in meine Heimat zurückgekehrt bin, habe ich gemerkt, dass der Markt in Korea zu klein und der Wettbewerb zu hart ist. Es gibt nur wenige Unternehmen oder Positionen, in denen man sich auf Entwicklung konzentrieren kann, und weil alle um diese wenigen Plätze konkurrieren, scheint man sich am Ende auf Dinge konzentrieren zu müssen, die gut auffallen, um die Entwicklung machen zu können, die man eigentlich machen möchte.
Dem stimme ich auch zu! Und ich habe das Gefühl, dass die Interpretationen dessen, was hier mit einem „guten“ Engineer gemeint ist, je nach Person sehr unterschiedlich sind. Das mag extrem klingen, aber selbst wenn man die Bedeutung von Grundlagenwissen kennt, frage ich mich, ob ein Engineer, der auf dem Markt keinen Wert hat, ein guter Engineer ist.
Dem kann ich wirklich nur zustimmen,,,
Es ist leider nicht das Spiel darum, wie gut man das Wesentliche wirklich versteht und damit umgeht,
sondern eher das Spiel darum, bestimmte Sprachen und bestimmte Technologien im Einklang mit Trends gut einzusetzen,,
Ich denke, dass es auch in Korea viele sehr gute Ingenieure gibt, aber wegen der Marktgröße gibt es vieles, was ich bedauerlich finde.
Ich denke manchmal, es wäre schön gewesen, wenn ein Unternehmen wie FuriosaAI erfolgreich gewesen wäre.
Ist FuriosaAI pleite ...?
Dem stimme ich irgendwie zu … haha
Ob das nur auf den koreanischen Markt zutrifft …
Vor Kurzem habe ich im Unternehmen einmal ein Seminar für eine Kotlin-Sprachstudiengruppe gehalten. Die Reaktionen waren gut, weil ich es anhand eines Vergleichs mit der in unserer Abteilung hauptsächlich verwendeten Sprache C++ erklärt habe. Obwohl ich selbst C++ kaum nutze und die Teammitglieder Kotlin zum ersten Mal kennengelernt haben, hatte ich das Gefühl, dass es in vielerlei Hinsicht für das Wachstum von uns allen hilfreich war.
Hacker-News-Meinung
Die Meinung zum Lesen von Büchern gefällt mir sehr. Ich sehe oft, dass viele Ingenieure viel verpassen, weil sie Videos und oberflächliche Beiträge gegenüber Dokumentation und Büchern bevorzugen
Ich stimme vielen der in diesem Artikel genannten Punkte zu. Allerdings bin ich mir nicht sicher, wie tiefgehende Grundlagenkenntnisse zu CPU, Speicher, HTTP usw. dabei helfen, ein besserer Ingenieur zu werden
Ich kenne vielleicht nicht einmal die tieferen Grundlagen, aber ich habe gesehen, was für wirklich absurde und völlig unvorstellbare Ergebnisse entstehen, wenn man die Grundlagen nicht kennt.
Zum Beispiel eine Implementierung, die alle Datensätze aus der DB in den Speicher lädt und dann im Speicher durchsucht.
Solange es nur wenige Datensätze gibt, funktioniert es gut, aber wenn es viele werden, läuft der Speicher voll.
So wird so etwas geschrieben, weil man überhaupt nicht versteht, wie sich Speicher und DB unterscheiden.
Das ist nur ein Beispiel, und jedes Mal wird es in eine Richtung implementiert, die man sich wirklich nie hätte vorstellen können.
Ein normaler(?) Programmierer kann sich so etwas wirklich nicht ausmalen.