New to programming or embedded systems?
When I started working with embedded systems, I was overwhelmed by the lack of information available to beginners. I am sharing useful reference materials to get you started with programming and embedded systems development.
I wish I had this type of resource when I was starting out - I hope it serves as a shortcut on your journey.
Table of Contents
- Programming Resources
- Getting Started With Embedded Systems
- Managing Your Career
- Tools I Use
For programmers looking to work with embedded systems, I recommend learning a few languages:
- Python (many host tools are written in Python)
- Assembly (familiarity is helpful, but not required)
Secondary languages to familiarize yourself:
- JSON the most common data description format that I come across in embedded systems
- YAML is another common data description format
- Lua is a lightweight scripting language that can be implemented on embedded processors
General Programming Resources
The following resources do not apply to a specific language, but cover general software principles, git, and the open-source ecosystem.
- A Successful
- Every Programmer Should Know
- Memory management - Understanding memory management and garbage collection techniques is vital for low-level programming. Many projects will require you to implement custom memory management libraries.
- Oh Shit Git! - a resource for fixing easy git mistakes
- Apple Concurrency Programming Guide - Introduces the concept of dispatch queues and provides advice for migrating away from threads.
- How to Contribute to an Open-Source Project on GitHub
- First Timers Only - Friendly Open Source projects should reserve specific issues for newbies.
- Make a Pull Request
- Effective Modern C++ - Provides tips and strategies for effectively using new C++11 an C++14 features. Definitely worth reading if you are
- Introductory Modern C++ Course Notes (IFS) - Helpful course notes introducing C++
- Advanced Modern C++ Course Notes (IFS)[ Expand] - Continuation from the introductory course. This course teaches more advanced Modern C++ concepts
- C++ Best Practices - a "Collaborative Collection of C++ Best Practices". It's a highly valuable source for modern software development with C++ and general considerations of good C++ code. This general considerations include the safety, maintainability, portability, threadability, and performance of the code.
- Learn C the Hard Way - If you're not comfortable with C yet, Learn Code the Hard Way has an C programming course. I recommend this course because it provides hands-on demos and examples.
- The Basics and Pitfalls of Pointers in C
- When 4 + 1 Equals 8: An Advanced Take on Pointers in C
- Learn Python the Hard Way - Introduction to Python. Learn to program in Python using hands-on challenges.
Getting Started with Embedded Systems
The following resources will introduce you to the fundamentals of working with embedded systems.
- Programming Embedded Systems - The Barr Group hosts this introductory embedded systems book online. While the examples are slightly dated, the concepts are valid and can be applied to modern systems
- Making Embedded Systems: Design Patterns for Great Software - A great beginner's overview of programming for embedded systems. White provides interview tips, architecture, design patterns, and advice on tackling your first embedded project.
- Embedded Wednesdays: Getting Started in Embedded Systems - A serious of great introductory embedded articles published by Embedded.fm
- Embedded Software Engineering 101 - Another introductory series produced by Embedded.fm
- Writing ARM Assembly
Embedded developers will benefit from having experience with electrical engineering and how circuits work. The following resources will help you get started:
- All About Circuits
- Sparkfun - great source of hands-on projects to grow your embedded/hardware knowledge
Managing Your Career
- Marc Andreesen's Career Planning Guide
- Marc Andreesen's Guide to Personal Productivity
- Simple Programmer's Complete Software Developer Career Guide - Great overview of career development that's geared toward developers who are just starting out on their journey
Arne Mertz of Simplify C++ published a series on the topic of code reviews. This is a common software development activity, and these articles will provide you with a solid foundation.
- Code Reviews - Why?
- Code Reviews - What?
- Code Reviews - Preparation
- Code Reviews - How?
- Code Reviews - The Human Aspect
I'd also be remiss not to mention the most useful self-review tool of all: Rubber Duck Debugging
Startups are popular right now, so here are some helpful resources you can refer to if you are considering a startup.
- Startup school - open online course hosted by Y Combinator discussing starting a new company.
- Pmarchive - an archive of Marc Andreesen's writings on startups
- Stock options, RSUs, taxes: a guide for humans
- Valuing Employee Options
- Clearbit Stock Option Pledge - this is the kind of company to look for