Today let me talk a bit about embedded software development.
Firstly you need to use some language to explain hardware what to do. You can choose between:
- low-level ones (i.e. Assember/C/Ada) which give you full control — you can do anything and screw everything up
- general-purpose (like C++) which enables implementation of complex tasks in a systemic approach
- interpreted ones (i.e. Python/Java) which are great for beginning — you need to know very little about the hardware
Get familiar with as many as possible- you can never understand one language until you understand at least two!
Secondly, you are as good as the tools you are using. To work on embedded software you need:
- a place where you can write the code: text editor/IDE/ISE
- a translator which changes your code into machine language: linker/compiler/interpreter
- a magnifier that enables looking into hardware and understanding how the code works: debugger/emulator
Last but not least don’t forget about the main challenges in embedded software development:
- your device need to always work stable so that it will always do the tasks reliably
- your solution frequently needs to be safe to not hurt anything while working
- your software sometimes have to be secure to not be modified and used for bad things
Let me end with a metaphor from The Pragmatic Programmer book about coding:
“Rather than construction, the software is more like gardening — it is more organic than concrete.”
So choose the language wisely, use good tools, and remember the challenges!