Low-Level Programming Debate
This cluster debates whether modern programmers need deep knowledge of low-level concepts like assembly, C, CPU architecture, and hardware fundamentals, or if high-level abstractions are sufficient for effective software development.
Activity Over Time
Top Contributors
Keywords
Sample Comments
What do you consider "high-level code" and in what way does deeply understanding how a computer works influence your approach?
People have already got to that level without understanding the environment and hardware. I have worked with them and spent a lot of time explaining how the system works.I personally donāt understand how people enjoy programming without understanding the stack they are ontop of but im sure some C and assembly programmers said the same thing about most of us today.
Until maybe 15-ish years ago, it was common for programmers to ābottom outā on the machine code level. In other words, they came to roughly understand the whole software stack in principle down to the software-hardware interface (the CPU executing machine code). The topic of this thread is that this has (allegedly) changed, developers at large donāt go down in their understanding until they hit hardware anymore.Okay, you might argue that in earlier decades programmers also tended to ha
Most people donāt need to write their own OS or compiler. Knowing the details of how things work is apart of getting to gaining expertise
If we don't understand something from first principles, we don't really understand it in my opinion.How many modern developers have written a single line of assembly yet alone written production assembly code? How many have even written C or used any other language that doesnāt have garbage collection.Everyone who started working on a technology before abstractions make it more accessible think that you really need to understand deeper to be effective.I had to get out o
Thereāre no fundamental concepts.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 de
The point is not to tech "C'isms" but to teach how computers and software work at low level. Even an introduction to an assembly language would be helpful. Higher level languages still perform these tasks but hide them from the user. Even if most people will end up using a high level language, having an understanding of what is going on and of how things work "under the hood" is invaluable.
I don't think that knowledge of low-level systems programming is ever going away. The order in which we learn it is merely changing. In the past, everyone had to understand the absolute basics first because the higher level abstractions were very leaky. Over time the abstractions have gotten better, performance has become less of a problem for most cases, and low-level systems are no longer something everybody needs to know in order to get by at the higher layers of abstraction.
Don't feel too bad.Fully understanding the complete stack of a modern computer system is outside the scope of almost everyone. These things are complicated and we've built abstractions, interfaces and modules to manage the complexity.People specialize in their own fields. I am trained in digital integrated circuit design, but don't ask me to build a file system.
Of course. Even below assembly language there are many layers on today's computers. As you noted pipelining, microcode, branch prediction, etc there is a lot more below it. And further below one gets electronics and then quantum theory and so on. So its a matter of what abstraction one can safely ignore I think. And today I think we at least need to go to the level of that sub-assembly stuff if one wants to write anything that does not perform badly. I personally also feel whatever layer on