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.
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
- 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
- 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.
- Learn Python the Hard Way - Excellent introduction to Python. Learn to program in Python using hands-on challenges.
Getting Started with Embedded 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.
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)
- Apple Concurrency Programming Guide - Introduces the concept of dispatch queues and provides advice for migrating away from threads.
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