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



  • Learn C the Hard Way - If you're not comfortable with C yet, Learn Code the Hard Way has an excellent C programming course, complete with many hands-on demos and examples.


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)

Managing Your Career

Tools I Use

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