Get the book: Practical ELectronics for Inventors by Simon Monk & co. It is an information gold mine. A good reference when you need basic well phrased definitions and equations.
Get an Arduino/Teensy/ESP32 and start writing microcontroller code. The IDE is very simple and it automates many operations to allow beginners to stay focused on their project. Later on, you can tweak the compiler flags for better code quality or even ditch the IDE and use gcc & avrdude or whatever suits your evolutionary needs at that point.
You should get a sensors pack and start building a device that measures and acts upon the measured data. This would require you to read datasheets and familiarize yourself with the process of discovery.
Once you understand the basics of digital and analog (Debouncing, Sampling, Pulse width modulation, Interrupts, Timers, …) and communications protocols (Serial, SPI, I2C, I2S, …) the rest is up to your imagination.
Get a Raspberry Pi and get aquainted with the environment and stay low level.
Avoid Python at the beginning, do everything in C and assembly if you can.
Get a Lattice ICE40 FPGA (cheap: 1K, 4K, 8K logic elements) and use the "icestorm" open source toolchain to synthesize verilog, generate a bitstream and upload it to the chip. There are many ICE40 boards available: Ico board, ICEZero for Raspberry Pi, Lattice ICEStick, …
Sharpen your coding skills by writing as much code as you can with two optimizations in mind: smaller code size possible, fastest program possible. Also, study whataver code you find in the wilderness and learn to use GDB & objdump (or any equivalent tools).
Take a look at parallel programming: OpenMP, MPI, vectorization, …
Read the underlying hardware's documentation to understand its potential and how to exploit it properly.
I would recommand:
. Introduction to Algorithms, Cormen & co.
Post too long. Click here to view the full text.