Hard to say, there are so many.
- I'd start with embedded environments: Arduino / STM32(F1/F4) / RaspberryPi see how to code for them and how to make them talk to each other (UART/SPI/I2C/CAN...)
- Then I'd check how simple kernel modules are made, and try to mess around the kernel in raspberryPi and make something that outputs a value on the terminal and via I2C.
- I'd check the "concept" of middlewares and start by something simple WComp[0] (written in C#). It is not used in the industry but it gives you a pretty good sens of how things should work.
- For beginners I'd recommend to use Parse[1] for any project where you need a "cloud" infrastructure (Database, API, users, privileges,...)
- You should also check how fully distributed systems (that operate in a peer-to-peer manner) work.
- After that it comes to ressource optimisation and things like that.
EDIT (You should also check these) :
- UPnP (Universal Plug and Play) is way to get devices to automatically discover and understand each other.
- MQTT: publish-subscribe TCP/IP messaging protocol (I use it for push notifications)
[0] : http://www.wcomp.fr
[1] : https://www.parse.com/