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
- A Successful
- Every Programmer Should Know
- How to Contribute to an Open-Source Project on GitHub
- First Timers Only - Friendly Open Source projects should reserve specific issues for newbies.
- Make a Pull Request
- 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.
- Learn C the Hard Way - If you're not comfortable with C yet, Learn Code the Hard Way has an C programming course. I recommend this course because it provides hands-on demos and examples.
- The Basics and Pitfalls of Pointers in C
- When 4 + 1 Equals 8: An Advanced Take on Pointers in C
- Learn Python the Hard Way - Introduction to Python. Learn to program in Python using hands-on challenges.
Getting Started with Embedded Systems
- Programming Embedded Systems - The Barr Group hosts this introductory embedded systems book online. While the examples are slightly dated, the concepts are valid and can be applied to modern 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
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.
- Code Reviews - Why?
- Code Reviews - What?
- Code Reviews - Preparation
- Code Reviews - How?
- 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 are 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