Each of these abstraction levels is fundamental relative to the upper one.
The level of abstraction that you declare fundamental is arbitrary. You can define your “fundamental level” threshold much higher, e.g. JVM or S-Expressions, and start bottom up from that arbitrary level.
The level a median developer believes is fundamental drifts upwards over time.
70 years ago it was impossible to be a programmer without knowing about logic gates. The majority of modern software developers can’t design stuff from logic gates, they don’t even know much higher-level USB protocol stack, and yet they are able to do their jobs just fine.
If you’ll start with C, there’s assembler and machine code underneath.
Underneath there’s memory hierarchy, CPU microarchitecture, buses, and other things like USB protocol stack.
Underneath there’re logic gates, comparators, summators.
Underneath there’s physics, quantum mechanics, electrodynamics.
Each of these abstraction levels is fundamental relative to the upper one.
The level of abstraction that you declare fundamental is arbitrary. You can define your “fundamental level” threshold much higher, e.g. JVM or S-Expressions, and start bottom up from that arbitrary level.
The level a median developer believes is fundamental drifts upwards over time.
70 years ago it was impossible to be a programmer without knowing about logic gates. The majority of modern software developers can’t design stuff from logic gates, they don’t even know much higher-level USB protocol stack, and yet they are able to do their jobs just fine.