Breathe the spirit, deep.
0x0 - Electronics & circuits:
Practical Electronics for Inventors. Monk & co.
Buy an Arduino/Teensy/ESP32 and start playing:
Blink LEDs,
LCD display,
Button debounce,
Pulse width modulation,
Sensory action/reaction,
SIM card module,
SD card module,
Interrupt management,
Multitasking,
...
Programming FPGAs. Monk.
Buy a Lattice ice40 based FPGA board (very cheap ~20$) and use the icestorm open source
tool chain to run synthesis, generate bitstream and upload to a board.
The hardware hacker. Huang.
Hacking the Xbox. Huang.
PCB reverse engineering. Tiong.
Top projects: phone (i.e. ZeroPhone), a CPU architecture, networked device, ...
Ultimate project: Design a board with an ATmega328p implementing your own CPU and instruction set
with an SRAM/EEPROM module (Memory) and an SD card module (hard drive).
Design a language and a compiler for that instruction set.
Design an OS for the whole board.
Can also be implemented on an FPGA.
--> this should get you aquainted with the embedde world's tools and challenges.
0x1 - Programming:
The Zen of Assembly Language. Abrash.
Professional Assembly Language. Blum.
Introduction to Algorithms. Cormen & co.
The C programming language. K & R.
The C++ programming language. Stroustrup.
Programming in Python. Summerfield.
The Art of Unix Programming. Raymond.
Programming FORTH. Pelc.
Compilers: principles, techniques and tools. Aho & co.
Engineering a compiler. Cooper & co.
The Graphics programming Blackbook. Abrash.
Jim Blinn's work: http://www.jimblinn.com/publications/
OpenMP/MPI/PGAS/SHMEM parallel programming paradigms
Intel/AMD/ARM documentation.
Agner Fog's material on code optimization. agner.org
What every programmer should know about memory. Drepper.
Code optimization: effective memory usage. Kaspersky.
What every computer scientist should know about floating-point arithmetic. Goldberg.
Introduction to Data Compression. Sayood.
The Art of debugging with GDB: Salzman & co.
0x3 - Security
Applied cryptography. Schneier.
Practical cryptography.Schneier.
Engineering cryptography. Schneier.
Practical Malware Analysis. Skochinski.
Hacking: the art of exploitation. Erickson.
The Shellcoder's Handbook. Anley & co.
0x3 - Math
Concrete Mathematics. Knuth.
Handbook of Mathematics. Bronshtein.
Numerical Recipes in C. Flannery & co.
Hacker's Delight. Warren.
Algorithmic Graph theory. Gibbons.
Scientific Programming and Computer Architecture. Viswanath.
At the end, it all comes down to what do you wanna play with. Take a subject get to play with its concepts. Always keep it fun because it is fun. Read code, write code as much as you can, optimize, play around with different compilers on different CPU architectures, compare serial vs. parallel versions, ...
Never adopt a position on a tool or its group philosophy, keep it all pragmatic fun. Religious tendencies tend to fuck up the experience. Prioritise Freedom & collaboration, it always pays back in ways you can't imagine. If a tool isn't good enough, write your own or STFU. And always, RTFM !!!!