Mein Fahrplan
Jede große Reise sollte gut geplant sein. Es wird genug Unvorhergesehenes geben, doch damit ich am Ende an meinem Ziel ankomme, benötige ich vor allem eine Route. Natürlich werde ich mich nicht stur daran festklammern. Abweichungen bleiben nicht aus; mal mehr und mal weniger gewollt. Aber ich kann mit Hilfe meines Plans im Falle von völliger Orientierungslosigkeit jederzeit den Weg wiederfinden und die richtige Richtung einschlagen.
„Je planmäßiger die Menschen vorgehen, desto wirksamer vermag sie der Zufall treffen.“ - Friedrich Dürrenmatt
In diesem Beitrag möchte ich dir meine Herangehensweise, die Strategie und meinen Fahrplan durch die gigantische Welt der eingebetteten Systeme vorstellen.
Schau dir nur alle Themen im Bereich der Embedded Systems an. Programmiersprachen, Softwarebibliotheken, Betriebssysteme, Computerarchitekturen, Grundlagen der Elektrotechnik, Datenblätter, Schaltpläne und und und. Ich weiß gar nicht, wo ich anfangen soll und fühle mich ein wenig überfordert.
Die Lösung heißt, einfach irgendwo anfangen und sich durchbeißen. Um mir den Start zu erleichtern und die Themen einzugrenzen, habe ich mich dazu entschieden, die Rolle des Embedded Application Developers innerhalb eines Entwicklungsteams einzunehmen.
Falls du die fünf Rollen eines Embedded Product Development Teams nicht kennst, dann schau dir doch meinen Beitrag dazu an.
Wie werde ich Embedded System Developer
Was muss ich alles lernen? Welche Fähigkeiten muss ich mir aneignen? Wo fange ich am besten an? Das sind die Leitfragen für meinen Fahrplan.
Der traditionelle Weg beginnt mit der Programmiersprache C. Diese ist die „Muttersprache” des Embedded Programming und du solltest sie sehr gut beherrschen. Im nächsten Schritt besorgst du dir ein Microcontroller-Kit und bettest deinen Programmcode dort ein. Lerne den Serial Port zu programmieren, arbeite mit den programmierbaren GPIOs und Timern. Verstehe, wie Interrupts funktionieren, und die Organisation des Speichers.
Beginne danach die Schnittstellenbeschreibung und Adressierung von Peripheriegeräten. Erweitere die Funktionen deines Controllers mit zusätzlicher Hardware. Nimm dir LEDs, eine Siebensegmentanzeige oder eine Tastatur und bringe sie nicht einfach nur zum Laufen; verstehe ihre Funktionsweise.
Erstelle erste eigene Schaltkreise mit Breadboards und schau dir mit Hilfe eines Multimeters oder sogar eines Oszilloskops an, was dort geschieht.
Anschließend hast du die nötigen Grundlagen drauf und kannst dich allen Herausforderungen stellen.
Richtig gelesen! DU bist dann soweit und fähig dazu. Ich nicht. Denn ich habe einen anderen Weg gewählt.
System Layers | |
---|---|
Application Layer | ^ |
System Service Layer | ^ |
Operating System Layer | ^ |
Hardware Abstraction Layer | ^ |
Hardware Layer | ^ |
Wenn du dir die typische Architektur von Computersystemen betrachtest und mit dem traditionellen Lernpfad vergleichst, fällt dir sicherlich auf, dass der Embedded System Developer sich vom Hardware-Layer aus die anderen Schichten hinaufarbeitet.
Ich möchte allerdings den Weg eines Embedded Application Developers beschreiten. Deshalb wird mein Fahrplan im Kontrast dazu stehen. Ich nehme einen Top-Down Ansatz, fange am oberen Enden an und wühle mich nach unten durch.
Meine Roadmap
Das werde ich in den ersten Schritten lernen:
- Primäre Programmiersprache - Variablen, Schleifen, Funktionen, Exceptions, Best Practices
- Quellcode Strukturierung - Variablen Namen, Funktionen Namen, Cohesion / Coupling, Konsistente Abstraktionen, Refactoring
- Objektorientiertes Softwaredesign - Design Patterns, Objekte/Klassen, Information Hiding, Vererbung, Polymorphism, Interfacing, SOLID Principles
- Datenstrukturen - Array, Linked List, Tree, Heap, Stack, Vector, Queue
- Algorithmen - Big O Notation, Searching, Sorting, Graph Traversal
- Entwicklungsplattform - Open Source, Embedded Linux, Editor/IDE, Build Tools
- Qt GUI Framework - Basic API, Internals, Extension
- Datenbanken Grundkenntnisse - Database Design, Indexes, Keys, Statements
- Versionskontrolle - Source Control Konzept, Check in, Check out, Merge, Branching, Tagging
- Build und Deployment - Compiler, Build Tools, Cross Compile Toolchain, Environment Management, Packaging
- Unit Testing
- Software Testing Grundlagen - White-box, Black-box, Acceptance, Regression, Functional, Performance
- Debugging - Debug Technik, Debug Tools
- Methoden und Vorgehensweisen - SDLC, Waterfall Model, V-Model, Agile Manifest, XP, Scrum
Neben all diesen Hardskills haben natürlich auch Softskills großen Einfluss auf den Erfolg eines professionellen Entwicklers. Deshalb werde ich mich hin und wieder in Beiträgen damit befassen.
Zudem mache ich mir zur Auflage, möglichst nur Open Source Tools und Projekte zu verwenden. Ich bin ein großer Fan der Open Source Initiative. Mal schauen, wie weit ich damit komme.
Bekomme jetzt bloß keine Panik und sei nicht verunsichert! Es ist nicht schlimm, wenn du dir unter einem oder mehreren Begriffen nichts vorstellen kannst. Damit bist du nicht allein. Mir und den meisten Menschen geht es da nicht anders.
Eines ist klar: Das ist verdammt viel Zeug!
Im Unterschied zu den anderen sind wir aber neugierig und scheuen den Aufwand nicht. Aus diesem Grund habe ich auch geschrieben, dass ich diese Dinge lernen werde. Das zeigt einen stärkeren Willen und ist kein unverbindlicher Wunsch, als nur der Versuch, es erreichen zu wollen.
Was hältst du von meinem Fahrplan? Fehlt vielleicht ein wichtiger Punkt? Oder ist mein Plan deiner Meinung nach in der Papiertonne besser aufgehoben?
Ich wünsche dir maximalen Erfolg!