From eecd5d443e12aaeac72cbbaf3efdf0ff7abff304 Mon Sep 17 00:00:00 2001 From: Meysam Parvizi Date: Sat, 12 Jul 2025 13:40:02 +0200 Subject: [PATCH] draft: embedded systems roadmap --- _data/authors.yml | 9 ++ ...bedded-systems-roadmap-bridging-the-gap.md | 131 ++++++++++++++++++ img/author/meysam.jpg | Bin 0 -> 36049 bytes 3 files changed, 140 insertions(+) create mode 100644 _drafts/2015-07-16-embedded-systems-roadmap-bridging-the-gap.md create mode 100644 img/author/meysam.jpg diff --git a/_data/authors.yml b/_data/authors.yml index 8b06d628..2258dcad 100644 --- a/_data/authors.yml +++ b/_data/authors.yml @@ -415,3 +415,12 @@ jrsharp: is a right-brained embedded engineer that enjoys designing and building new and novel things. He is a Field Engineer at Memfault and he's running out of space for new devkits. +meysam: + name: Meysam Parvizi + linkedin: https://www.linkedin.com/in/meysamparvizi/ + github: m3y54m + image: /img/author/meysam.jpg + blurb: + is an embedded systems engineer who enjoys the freedom to manipulate every + single bit and byte in a digital system, enabling him to do amazing things. + He is currently working at Tractive. diff --git a/_drafts/2015-07-16-embedded-systems-roadmap-bridging-the-gap.md b/_drafts/2015-07-16-embedded-systems-roadmap-bridging-the-gap.md new file mode 100644 index 00000000..7c175732 --- /dev/null +++ b/_drafts/2015-07-16-embedded-systems-roadmap-bridging-the-gap.md @@ -0,0 +1,131 @@ +--- +title: "Embedded Systems Roadmap: Bridging the Gap" +description: + Discover the story behind this embedded systems roadmap—a structured learning path for hardware and software engineers. It guides you in selecting resources, boosting career growth, and staying current with industry trends. +author: meysam +--- + +It was around mid-2023 when I realized that, despite working as a developer in the field, my knowledge of embedded systems needed a significant refresh. It was time to revisit some of the fundamentals and catch up on the latest technologies and best practices. As I began listing topics to review, I searched for existing embedded systems roadmaps online. However, none perfectly matched my specific learning goals. This prompted me to create my own comprehensive roadmap—not just for personal use, but also as a valuable resource for others on a similar journey. + + + +In this article, I’ll share the story behind creating my embedded systems engineering roadmap, why it became necessary, the logic behind its structure, and how to use it effectively in your learning journey. + + + +## Is a Roadmap Really Necessary? + +Embedded systems sit at the crossroads of hardware and software, combining electronic components with software development principles. Consequently, becoming an embedded engineer demands knowledge from both disciplines. However, most people entering this field possess a stronger background in either hardware or software—rarely both. + +For instance, I entered the field with a degree in Electrical and Electronics Engineering. I had a solid understanding of hardware circuits, sensors, and microcontrollers. But when I started working on embedded systems, I quickly realized I lacked key software development concepts like efficient coding, data structures, and design patterns. This made me feel like an important piece of the puzzle was missing. + +Conversely, I’ve spoken with individuals who transitioned from software engineering or computer science backgrounds into embedded systems. They had a strong grasp of software development but often struggled with hardware aspects, such as interfacing with electronic components, understanding electrical signals, or designing circuits. + +This common experience highlights a clear truth: **embedded systems is an interdisciplinary field, and regardless of your starting point, there will likely be gaps in your knowledge.** + +Furthermore, what students learn in universities—whether in electrical engineering, computer science, or related fields—often doesn’t fully prepare them for real-world embedded systems work. While universities provide crucial theoretical knowledge, they sometimes lack the hands-on skills needed for practical projects. As a result, many graduates find themselves needing additional internships, self-study, or personal projects to meet industry demands. + +This brings us to another challenge: the overwhelming number of available resources for **self-study**. Countless books, courses, and tutorials exist on programming and electronics, but for someone new to embedded systems, it’s hard to know which ones are most helpful. + +Should you focus on advanced programming or spend more time on hardware concepts like circuit design and microcontrollers? Without clear guidance, it’s easy to feel lost or invest time in resources that aren’t the best fit. While a **mentor** can be invaluable, they aren’t always available. This is precisely where a roadmap becomes valuable. It offers a structured learning path, providing clear direction on what to focus on and helping you choose the most useful resources for both software and hardware, making the learning process more manageable. + +## Building the Roadmap: Challenges and Design Choices + +As I mentioned earlier, the idea for creating my embedded engineering roadmap stemmed from my personal experience of needing to refresh my skills and stay current with new technologies. While reviewing existing roadmaps, I came across one by [Erick Vázquez on GitHub](https://github.com/vazeri/Embedded-Engineering-RoadMap-2018), which was inspired by the graphical design from [roadmap.sh](http://roadmap.sh). I appreciated its visual approach, but it was missing several important topics and wasn’t structured in a way that would be most helpful for everyone. I decided to use that roadmap as a foundation and began adding key topics I felt were missing. + +Developing this roadmap presented its own challenges, particularly in organizing the vast field of embedded systems. One of the main problems was clearly **dividing the roadmap between embedded hardware and embedded software**, as many skills in these areas are closely related. A skill that seems primarily software-focused might require a good understanding of the underlying hardware, and vice versa. Finding a good balance to show these connections clearly, while still offering separate learning paths, was a significant consideration. To address this, I decided to separate hardware-focused and software-focused topics structurally, and for areas that overlapped, I created an intersection section to highlight those connections. + +Once I had a more complete version, I shared it with the [Reddit embedded community](https://www.reddit.com/r/embedded/) to get feedback from other engineers and enthusiasts. The response was very encouraging and inspired me to include more application-specific topics in the roadmap. You can find one of the earliest versions of the roadmap in [this commit](https://github.com/m3y54m/Embedded-Engineering-Roadmap/tree/c2cc64e069e13aadb730d9b6c497d4181cc26fea). + +Although my original goal for the roadmap was to deepen my own knowledge as a practicing embedded systems engineer, I decided to structure it as a helpful guide for beginners as well. To achieve this, I added instructions and explanations in the [README of the roadmap's GitHub repo](https://github.com/m3y54m/Embedded-Engineering-Roadmap/blob/master/README.md), along with invaluable beginner-friendly resources to guide those just starting out in the embedded world. + +Another significant challenge was trying to include as many topics as possible to make the roadmap comprehensive, without making it too daunting for beginners. The aim was to provide a broad overview of the embedded field, making it a detailed resource for different learning stages. However, I also needed to **ensure that newcomers wouldn’t feel overwhelmed**. The goal was to provide enough detail to be helpful, but organize it in a way that guides rather than intimidates, so beginners can take their first steps with confidence. + +Fortunately, the roadmap has gained considerable attention online, with new contributors helping to expand [the collection of learning resources on the GitHub page](https://github.com/m3y54m/Embedded-Engineering-Roadmap). Below, you can see the latest version of the roadmap's graphical representation. It’s important to note that the roadmap is not complete without the curated learning resources on the GitHub page. + +![Embedded Systems Engineering Roadmap](https://github.com/m3y54m/Embedded-Engineering-Roadmap/releases/latest/download/Embedded-Engineering-Roadmap.png) + +## How to Use This Roadmap Effectively + +This roadmap is designed to guide you through complex embedded systems topics, but with so many resources available, how do you choose where to start or which resource fits your needs best? Let's walk through an example using the crucial topic of embedded systems: [**Testing**](https://github.com/m3y54m/Embedded-Engineering-Roadmap/tree/master?tab=readme-ov-file#%EF%B8%8F-testing). + +When you approach a new area like testing, you'll encounter various topics such as Test-Driven Development (TDD), along with concepts like unit testing, regression testing, integration testing, and Hardware-in-the-Loop (HIL) testing. Each of these topics often has numerous books, articles, and tutorials. The questions then arise: what do these terms mean, how are they used in practice, how should you learn them, and which resources should you choose? Here’s a systematic way to navigate them: + +### Start with the 'Why' and Core Concepts + +Before diving into specific tools or frameworks, prioritize resources that explain the fundamental principles and the reason a technique exists. For TDD, this means looking for materials that clarify "why write tests before code?" or "what problems does TDD solve?" Short articles and videos can be particularly beneficial at this stage. However, well-written books like [Test Driven Development for Embedded C by James W. Grenning](https://www.amazon.com/Driven-Development-Embedded-Pragmatic-Programmers/dp/193435662X) can also provide a solid conceptual foundation. + +### Identify Key Methods and Practical Approaches + +Once you grasp the basic concepts, focus on resources that emphasize practical application. For unit testing in embedded systems, you'll quickly encounter challenges like hardware dependencies. Look for tutorials that demonstrate techniques such as mocking and stubbing hardware interactions, which enable you to test software components in isolation. At this stage, reading these two articles—[Embedded C/C++ Unit Testing Basics](https://interrupt.memfault.com/blog/unit-testing-basics) and [Embedded C/C++ Unit Testing with Mocks](https://interrupt.memfault.com/blog/unit-test-mocking)—was instrumental in guiding me in the right direction. These resources provide concrete patterns and frameworks that make applying the theory much more approachable. + +### Understand Limitations and Explore Advanced Solutions + +As you gain experience, you'll start to recognize the limitations of certain techniques. For instance, unit testing, while excellent for verifying software logic, cannot fully simulate real hardware interactions, complex timing, or environmental factors. This realization is crucial and should naturally encourage you to explore more advanced techniques. For example, understanding the limits of unit testing can lead you to investigate Hardware-in-the-Loop (HIL) testing. A helpful introduction to this topic can be found in the video [What is Hardware-in-the-Loop (HIL) Testing? A Beginner's Guide](https://www.youtube.com/watch?v=znhmahegnlc). + +### Seek Specialized and Deep-Dive Resources + +For advanced topics like HIL, you'll need more specialized resources. Look for whitepapers, conference presentations, or dedicated courses from industry leaders. These resources provide the depth needed to understand complex setups and comprehensive system validation. + +### Key Questions to Stay on Track + +Throughout this process, continuously filter resources by asking: + +- **"What specific problem am I trying to solve right now?"** Are you aiming for conceptual understanding, practical application, or advanced solutions? + +- **"Does this resource explain concepts clearly and simply?"** Look for materials that break down complex ideas intuitively. + +- **"Is it practical and hands-on?"** For technical topics, direct application and examples are often key to solidifying understanding. + +- **"Is it reputable and well-regarded?"** Consider the author's expertise and community consensus. + +- **"Does it address specific challenges relevant to embedded systems?"** For our field, this means prioritizing resources that acknowledge and provide solutions for hardware interaction difficulties. + +By applying this selective approach, you can navigate the vast amount of information presented in this roadmap or elsewhere. It helps you dive into a topic, even if you're unsure where or how to start, and find the most relevant and useful materials at each stage of your learning journey. + + +## Feedback and Future Directions + +I’ve received some helpful feedback on the roadmap, along with a few criticisms. I want to address some of the most common concerns and share my thoughts on them: + +***"The roadmap has too much information and can be overwhelming for beginners."*** + +I understand the roadmap might feel overwhelming, especially for beginners. I included a wide range of topics to cover the full spectrum of embedded systems, but I agree it can seem like a lot. To help with this, I added a section in the README encouraging beginners to start with simple, manageable hands-on projects and use the roadmap as a reference when needed. + +***"It doesn’t go deep enough into certain areas, like application-specific fields (automotive, aerospace, agriculture, etc.)."*** + +The graphical roadmap provides an overview of key topics but doesn’t go into extreme depth in specific fields, as that would make it too complicated. Instead, I’ve made the README an open space where contributors can add resources for specific application areas, such as automotive, aerospace, and more. I am confident that with more contributions in the future, the roadmap will become even more inclusive. + +***"The roadmap doesn't cover hardware design skills enough."*** + +That was somewhat intentional. Many embedded system engineers already come from electrical or hardware backgrounds, so I wanted to focus more on the software side, which is often overlooked. While the graphical roadmap may seem light on hardware skills, the curated list of resources in the README offers plenty of valuable materials for hardware development. That said, I'm open to expanding the hardware section, as long as it maintains the roadmap's simplicity and clarity. + +I encourage everyone, whether you're a beginner or an experienced engineer, to share your feedback and contribute, as long as the roadmap stays useful for both beginners and experienced professionals. I admit that it can be difficult, and sometimes impossible, to apply all feedback to the roadmap. For example, someone working in automotive may feel a topic should be added, while someone in IoT may think it’s unnecessary. Besides, it's impossible to please everyone. The only option is to **find a middle ground that balances everyone's opinions**. + +Although this roadmap is designed to be helpful for experienced engineers, **its primary audience is beginners**, as experienced engineers can typically navigate on their own. It's the beginners who truly benefit from a clear, easy-to-understand guide. So, let's keep it simple for them. + +Regarding the roadmap's future, I've considered adding it to [roadmap.sh](http://roadmap.sh) but I have some reservations. A GitHub repo offers more freedom, flexibility, and engagement, allowing contributors' work to be better recognized by others, compared to how contributions are managed on roadmap.sh. However, I'm still considering it and would love to hear thoughts on this. + +I encourage everyone to share their thoughts and help improve it by suggesting design enhancements or adding resources to the [embedded roadmap's GitHub repo](https://github.com/m3y54m/Embedded-Engineering-Roadmap/). Your input will make this project even more useful, especially for newcomers to the embedded world. + +## Final Words + +My own experience with this roadmap shows a key truth about career growth: it’s a mix of **independent learning** and **collaboration**. While self-directed study builds the discipline for lifelong learning, collaboration brings fresh perspectives and accelerates progress in ways you cannot achieve alone. + +### Knowledge Sharing + +- **Engage with the Community:** Participate in specialized forums like the [Interrupt Slack community](https://interrupt-slack.herokuapp.com/) or other active online groups. These platforms offer real-time problem-solving and expose you to diverse approaches from practitioners worldwide. + +- **Learn from Colleagues:** If you work in a team, crowdsource knowledge from experienced colleagues. A brief conversation with a senior engineer can often provide insights that would take hours to find in documentation. + +- **Teach to Learn:** Consider presenting what you've learned at company lunch-and-learns or technical talks. Teaching reinforces your understanding and sparks valuable discussions that deepen everyone's knowledge. + +The key is to balance consuming information with contributing back, whether by asking thoughtful questions or sharing solutions. While self-study is important, the insights gained from experienced engineers and their real-world problem-solving skills are transformative. + +### Embrace Continuous Learning and Stay Market-Aware + +**Continuous improvement** is not optional; it is essential. Focus on mastering the fundamentals of your chosen area to build a strong foundation. Learning does not stop when you land a job—a new role is often the beginning of a new learning phase. The embedded field evolves constantly, so you must proactively stay current to remain valuable. + +**Track job market requirements** by analyzing postings on platforms like LinkedIn, Indeed, and Glassdoor. Filter these listings by location, experience level, and company size to gain targeted insights into in-demand technical skills and salary ranges. Use multiple sources to get a comprehensive view of current demands and emerging trends. Focus on skills that appear consistently, as these represent genuine market needs. + +This systematic approach helps you make informed decisions about where to invest your learning efforts, ensuring you develop skills with real market value. diff --git a/img/author/meysam.jpg b/img/author/meysam.jpg new file mode 100644 index 0000000000000000000000000000000000000000..523e03fb5b0374917131c74f74955a9becf53acd GIT binary patch literal 36049 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 Yi|Q&B8u%Z8ob}_Y)c6jDH8E5F*~gq#Hvj+t literal 0 HcmV?d00001