So, I've had a couple DMs asking me what does it take to get into Iot, low level/embedded systems and software.
I ain't no expert now, but here is a short list of the things that I consider to be the most important when it comes to breaking into these domains.
1. C
What else did you really expect? This is the bread and butter of all things that...well exist, lol. Nothing ever comes to production without some sort of C involved in it. SO an extensive level of understanding and an inherent grasp of its fundamentals is paramount to your success. Go as deep as you can. Then, go a deeper, because there's always something that you never have ever seen before. That being said, there are higher level languages being used such as C and Python, so experience with those should also be of help.
2. Assembly
Don't scroll past this, I am not insane. But believe me when I say this - understanding what assembly is, and how does it actually work is crucial while debugging embedded code. Embed this within your hearts and minds - the code you write literally runs at the heart of a processor. What you’re writing directly impacts the underlying machine code, and understanding opcodes, syscalls, and assembly instructions goes a long way while debugging! Remember, you don't have to WRITE assembly (atleast, I hope you don't), but you should be able to understand it.
3. Computer Architecture
Again, this probably is the most versatile thing that you'll study, since there are significant developments within comp arch that have re-defined the conventional foundation of this subject. There are things like RISC-V, the x86 arch, the ARM arch,- the list could go on and on and on. You can literally do a fucking PhD and spend the rest of your life within this very subject if you really wanted to. And this is the exact reason why a basic understanding of this is crucial for the fields mentioned above. A good command over this makes you extremely versatile. Someone who knows the arch, can slot right into any role that they are offered, be it IoT, Robotics, Heavy Machinery manufacturing, and so on.
4. Analog and Digital Electronics
Listen, my dear CS/IT grads. You have to understand the very thing that you are programming for. A transistor, a BJT, a MOSFET, the basic RLC, AND, OR, NOR, NOT, XOR, XNOR, NAND, encoders, decoders, mux, demux, counters, timers, etc - these things are fundamental to learning and excelling at embedded systems, and you'd do yourself a favor if you have a basic understanding of these things!
5. Protocols
Communication protocols are the key to making things work on a thousand devices instead of one device (which often ends up being useless). Serial, parallel, industrial, cloud, peer-to-peer, these are a few categories of comms protocols that are essential while working within Embedded and IoT, and you better know a few of these!
6. Linux/RTOS
You thought I forgot about this? There comes a point where a processor gets so powerful, that it is imperative that it needs an OS to utilize it's full capacity. This is where this little thing called Linux comes in. Lads, believe me when I say this - there is no IoT network in this world that can usefully function without the involvement of Linux at some level. So you better get your hands down and dirty with this beast!
7. OOP
It is imperative that the end user does not have access to the actual hardware, and abstraction and compartmentalization of access is KEY when it comes to IoT. And if that sounds familiar, well, you are good to go. And if it does not, well, you really need to learn what OOP stands for!
So, that's my list. I hope it covers it all, and if you think I left something out, feel free to correct me in the comments.
Also, if you've made it this far - consider retweeting and following me for more such discussions!