New to programming or embedded systems? 

Here are some materials to get you started on your journey. I wish I knew about these techniques, tools, and resources when I started.

Programming Resources

For programmers looking to work with embedded systems, I recommend learning a few languages:

  • C++
  • C
  • 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 Resources

Books

C++

  • 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.

C

Python

Getting Started with Embedded Systems

Improve Your Programming Chops

  • 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

Concurrency Programming (Multithreading)

Hardware

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
    • Textbooks - A set of free textbooks covering DC, AC, Semiconductors, Digital signals, Experiments, and RF Analysis and design
    • Video Lectures
    • Worksheets - test your EE knowledge with these worksheets
  • Sparkfun - great source of hands-on projects to grow your embedded/hardware knowledge

Managing Your Career

Code Reviews

Arne Mertz of Simplify C++ published a series on the topic of code reviews. This is a very common software development activity, and these articles will provide you with a solid foundation.

  1. Code Reviews - Why?
  2. Code Reviews - What?
  3. Code Reviews - Preparation
  4. Code Reviews - How?
  5. 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

Startups are popular right now, so here are some helpful resources you can refer to if you are considering a startup.

Tools I Use

  • git lfs - git extension to help versioning of large files (binaries, assets)
  • thefuck - fixes incorrect terminal commands
  • ack - better than grep for searching through source code
  • cscope - a C source code search tool. Geared toward C but also usable with C++.
  • c++filt - demangle C++ names