This article contains some affiliate links. As an Amazon Associate, we earn from qualifying purchases.
This page covers all the recommended courses and books for you to get to a beginner level in Embedded Software Engineering. The topics include C, C++, Basics of Electronics, Microcontrollers, Operating systems, Version Control software, etc.
C Programming Language
The C programming language is usually the first language taught in schools as a part of the introductory course in computer programming. The C programming language is an easy one to learn but that doesn’t mean it is only meant for simple things. Example real-world applications that use the C programming language include
- Embedded Systems programming
- Windows, Linux and Mac OSes are written using C
- Compilers, Interpreters for higher-level languages like C++, Java, and Python are written using C language
- the GNU Multiple Precision Arithmetic Library, the GNU Scientific Library, Mathematica, and MATLAB are completely or partially written in C.
The applications of C are endless and the reason all these applications are written using C is because of the efficiency of C code, very low overheads, portability and the speed in which it runs.
If you start working as an Embedded software engineer you will be spending more time talking C than you would be talking English! Hence I would recommend its best to learn it at least to an intermediate level before you start your job. If you can push it to the advanced levels then go ahead by all means!
I believe in using books for learning programming languages as most of the online courses take on a different approach in the sense that they get you used to the language, in other words, they give you a good introduction to the language and its features, but not to master it.
Let’s have a look at some books that I feel are the best for learning the C Programming Language
Absolute Beginners
If you are a complete beginner then I would recommend the book
Recommended Book: Let us C
This book helps the reader get a basic grasp of computer programming in general in a simple to understand manner. This was in fact the first-ever book I read on programming!
Estimated time to complete: 60 hours
Intermediate level
If you already had taken some introductory computer programming course already and you wish to improve your skills then I recommend taking a look at
Recommended Book: Head first C
Estimated time to complete: 60 hours
Advanced level
If you already have some programming experience in C say through some hobby projects, you can go straight for the book written by the creators of the C language
Recommended Book: The C Programming Language by Kernighan and Ritchie
Estimated time to complete: 80 hours
Once you finish this last book you would reach a good level of understanding of C works and how to navigate in the C world.
C++ Programming Language
Once you have mastered C, I suggest you proceed to C++, the object-oriented programming language with lots of open source software and learning resources online. With more and more companies providing support for C++ compilers, more and more embedded products are getting developed in C++ and it’s not that hard to learn as many online experts make us believe it!
Also unlike C++ for game development, C++ for embedded software development doesn’t need the following features
- Templates and STL
- Multiple Inheritance
- Virtual base classes
- Run-Time Type identification and
- Virtual functions
So feel free to skip those topics as you come across them as modern embedded compilers don’t include support for these features and they don’t give us a reasonable cost to benefit ratio for our embedded systems.
Absolute Beginners
If you have little or no programming experience, I recommend the book below.
Recommended Book: C++ Primer by Stanley B. Lippman, Josée Lajoie, and Barbara E. Moo.
This book assumes very little about the reader, and thus covers a lot more of the basics in a slower, more methodical manner.
Estimated time to complete 40 hours
Recommended book 2: Thinking in C++ by Bruce Eckel
This is another very good beginner book in C++ and it covers all the basics thoroughly.
You can choose either one of the above books, I suggest giving them both a quick look by reading the intro chapters to get a feel of which one is best for you and continue with that one.
Estimated time to complete 60 hours
Recommended course: Learn By Example: C++ Programming – 75 Solved Problems
I have myself went through this course and the instructors do a very good job of picking these examples to teach the necessary concepts to get us started on our journey to learn C++ programming.
Estimated time to complete 20 hours
Intermediate level
Recommended Book: Accelerated C++ by Andrew Koenig and Barbara E. Moo.
Assuming you already know how to program, I recommend the above book. It covers C++ thoroughly, with an example-driven approach, so that you can practice as you learn it and you will get a good understanding of the language.
Estimated time to complete 40 hours
Recommended Book 2: Effective C++ by Scott Meyers
As a second book, you can try the one above by Scott Meyer’s. Its a highly-regarded book and it teaches you the best practices on how to actually use the language so that you can make consistently good maintainable code.
Estimated time to complete 40 hours
Advanced level
Recommended book: The C++ Language by Bjarne Stroustrup
This book is written by the creator of the C++ language Bjarne Stroustrup and as such, it is considered to be one of the most comprehensive books on the subject and hence once you reach an advanced level, this book will help you understand the language deeper.
Estimated time to complete 60 hours
Basics of Electronics
For embedded software development, you still need to understand the basics of electronics as your entire work will be on top of the hardware.
Recommended book: Make: Electronics: Learning Through Discovery
This book is an excellent book if you are interested in learning electronics, but you never managed to find the correct resource. It is an optional read if your main aim is to learn Linux as it basically teaches you stuff which is at a very low level, like how the components in your motherboard work, but its a fun read!
Estimated time to complete 80 hours
Basics of Microcontrollers
Each Microcontroller may be built on top of different architectures, but the fundamental building blocks are the same. For learning the basics I would recommend another one of the “Make” series
Recommended book: Make: AVR Programming: Learning to Write Software for Hardware (Make: Technology on Your Time)
Learning micro-controllers will need some visual help and for that, I would recommend the following course in edX.
Recommended course: Embedded Systems – Shape The World (link to edX)
Also, Udemy has an excellent course on Microcontrollers that you can check out here.
Recommended course 2: Mastering Microcontroller with Embedded Driver Development
Both the above courses are good ones, I suggest you give the introductory videos a chance and pick one.
Basics of Operating Systems
Recommended book 1: Operating System Concepts
This book, also known as “The Dinosaur Book” (due to the pictures of dinosaurs on the cover) is considered to be one of the best books on operating systems for beginners as it uses easy to understand language and covers all the important concepts.
Estimated time to complete: 120 hours
Recommended book 2:
I got the 3 points, mentioned a little above, from the book on operating systems “Operating Systems: Three Easy Pieces” by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau. This is a very good book that lays a strong foundation of knowledge about operating systems and I completely recommend it.
You can also read this book for free at this link as the authors
Estimated time to complete: 80 hours
This is a rather thorough book of about 600 pages on operating systems that will probably take you about 60 to 100 hours to complete (The exact time duration depends upon your reading speed, concentration, etc. )
Software Management and Dev-Ops
When I say software management, I don’t mean project management (development plans and meetings), rather I mean version control and DevOps.
What is version control? Tool and techniques used for managing and keeping track of the changes you make during software development.
In software engineering, when you building a project, you can often find yourself in a place where something which was working fine suddenly breaks because of some changes you made recently. This is where version control software like git comes in.
Here every change you make will be recorded and you can easily see the exact changes you did and undo those changes if needed. This will save you tons of time, so I recommend you to learn a bit about it. I myself had wasted days trying to figure out the change I made that crashed the machine, but once I started using a version control system I was much more efficient! Now I can’t imagine writing code without a version control system!
I recommend you learn git, the opensource version control system developed by Linus Torvalds, who started it as a supporting project for Linux, but now git is used in everything from writing computer programs to poetry!
Recommended course: “Git & GitHub Complete Masterclass: Beginner to Git Expert” on git is a good informative course
Estimated time to complete: 25 hours
Recommended online course: Gitlab CI: Pipelines, CI/CD and DevOps for Beginners
This one will give you a brief overview of what can be done using CI/CD and GitLab. It teaches you enough of the basics to get yourself started with automating your hobby project’s build and deploy process.
Estimated time to complete: 20 hours
Recommended book: Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
Estimated time to complete: 80 hours
This ends my compilation of best study materials I can find for learning Embedded Systems.
I hope you have a great time learning!
I hope you found this article valuable. Feel free to share it with your friends and colleagues!