Every great journey should be well planned. There will be enough unforeseen events, but in order to get to my destination in the end, I need a route above all. Of course, I will not stick to it stubbornly. Deviations will not be absent, sometimes more and sometimes less intentional. But with the help of my plan, I will always be able to find my way around in case of complete disorientation and take the right direction.

“The more planned people are, the more effectively chance is able to strike them.” - Friedrich Dürrenmatt

Just look at the many topics in embedded systems. Programming languages, software libraries, operating systems, computer architectures, electrical engineering fundamentals, data sheets, schematics, and on and on. I don’t even know where to start and feel a little overwhelmed.

The solution is to just start somewhere and muddle through. To help me get started and narrow down the topics, I decided to take on the role of an embedded application developer within a development team.

If you don’t already know the five roles of an embedded development team, you should check out my post.

How to become an embedded systems developer?

What do I need to learn? What skills do I need to acquire? Where is the best place to start? These are the guiding questions for my roadmap.

The traditional path starts with the C programming language. This is the “mother tongue” of embedded programming and you should have a very good command of it. The next step is to purchase a microcontroller kit into which you embed your code. Learn to program the serial port, work with the programmable GPIOs and timers. Understand how interrupts work and how memory is organized.

Then start with interface description and addressing peripherals. Extend the functions of your controller with additional hardware. Take LEDs, a seven-segment display, or a keyboard and not only make them work, but understand how they work.

Create your own first circuits with breadboards and see what’s going on there with the help of a multimeter or even an oscilloscope.

After that, you’ll have the basics down and be ready to take on any challenge.

Read it right! YOU will be ready and able to do it. I’m not. Because I chose a different path.

System Layers  
Application Layer ^
System Service Layer ^
Operating System Layer ^
Hardware Abstraction Layer ^
Hardware Layer ^

If you look at the typical architecture of computer systems and compare it to the traditional learning path, I’m sure you’ll see that the embedded systems developer works his way from the hardware layer through the other layers.

However, I want to follow the path of an embedded application developer. Therefore, my roadmap will be in contrast. I will take a top-down approach, meaning I will start at the top and work my way down.

My Roadmap

I will learn that in the first steps:

  • Primary programming language
    • Variables, loops, functions, exceptions, best practices
  • Source code structuring
    • Variable names, function names, cohesion / coupling, consistent abstractions, refactoring
  • Object-oriented software design
    • Design Patterns, Objects/Classes, Information Hiding, Inheritance, Polymorphism, Interfacing, SOLID Principles
  • Data Structures
    • Array, Linked List, Tree, Heap, Stack, Vector, Queue
  • Algorithms
    • Big O Notation, Searching, Sorting, Graph Traversal
  • Development Platform
    • Open Source, Embedded Linux, Editor/IDE, Build Tools
  • Qt GUI Framework
    • Basic API, Internals, Extension
  • Databases Basic Knowledge
    • Database Design, Indexes, Keys, Statements
  • Version Control
    • Source control concept, check in, check out, merge, branching, tagging
  • Build and Deployment
    • Compiler, Build Tools, Cross Compile Toolchain, Environment Management, Packaging
  • Unit Testing
  • Software Testing Basics
    • White-box, Black-box, Acceptance, Regression, Functional, Performance
  • debugging
    • Debug Technique, Debug Tools
  • Methods and approaches
    • SDLC, Waterfall Model, V-Model, Agile Manifesto, XP, Scrum

Besides all these hard skills, soft skills of course also have a great impact on the success of a professional developer. Therefore, I will deal with them in articles from time to time.

I also make it a point to only use open source tools and projects. I’m a big fan of the open source initiative. Let’s see how far I get with it.

Now don’t panic and don’t be insecure! It doesn’t matter if you don’t understand one or more terms. You are not alone. I and most people feel the same way.

One thing is clear: this is a heck of a lot of stuff!

But unlike the others, we are curious and not afraid of the effort. That’s why I wrote that I will learn these things. That shows a stronger will and is not a non-committal wish than just trying.

What do you think of my roadmap? Is there perhaps an important point missing? Or do you think my plan is better off in the paper trash can?

I wish you maximum success!