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

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) - Very helpful set of course notes introducing you to 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

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

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:

Managing Your Career

Startups

Startups are very 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 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