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