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.
. The C Programming Language, Kernighan & Ritchie.
. ATmega (128, 328p, …) data sheets.
. Teensy 3.6 (amazing board) documentation and exmaple projects.
. ESP32 (dual core, WiFi, bluetooth, Ethernet, …) data sheet and example projects.
. Agner Fog's work on optimization: agner.org
Projects I would recommend:
. Write in C a modular program that takes as input an arithmetic expression and outputs its syntactic tree and postfixed notation.
Also, the program must report subexpressions that can be run in parallel and generate an assembly code for the given expression.
. Write in C a program that takes as input a file and outputs the Huffman tables and the compressed file.
The program should be able to decompress the output file also.
. Design your own Arduino board using the ATmega 328p and a USB to Serial converter.
. Design a phone using the SIM800L module with a switch matrix and a display. (check out ZeroPhone)
. Write a program that idsplays Mandelbrot fractals on an TFT.
. Design a CPU and implement it in an Arduino then an FPGA.
. Design a compiler from a language of choice to the CPU instruction set.
. Design an OS:
I/O (Serial, …)
User management
Filesystem (SD card module)
Process management
Memory management
. Design a board that runs on all of your previous designs.
. Design a parallel architecture using your previous designs.
I can keep going on but this is more than enough to stimulate your neurons.
Have fun.