Again, I recognize this makes things simpler, not more difficult, for the hardware, and even a compiler’s emitter will spend very little code dealing with it. But it’s not easy on the eyes.
At least if you didn't skip the computer architecture and operating systems classes.
For me it was a common thing to define an ISA, implement a simulator and assembler, and hand-write some assembly as part of learning how computers work. A dedicated man might go the extra mile and implement it in FPGA, or write a LLVM backend.
Then there is all the operating system aspect. It's quite common to implement your own kernel there to learn, or at least to modify an existing one.
If you're gonna skip education, you better make up for it by going above and beyond what they teach with your self-learning.
From my experience a substantial fraction of programmers learn the absolute minimum to get a job.
Then they either learn on the job or ask the same questions over and over again, never learning. The latter being the really annoying people to work with.
There is never a strong focus on x86, and any kind of rote memorization has nothing to do in a higher education institution.
There's a reason abstraction layers exist, perhaps you should try and figure out why your mental model of software does not account for that.
Much like a house is more than just the structure itself, so is the realm of computers.
If you can write programs, then you're a programmer. That's it.
At my university, most of the classes the GP is talking about (logic design, microprocessor implementation, OS-level programming) were in the Electrical Engineering curriculum. The lowest level that the CS curriculum got to was writing a parser for a programming language.
As time goes by the topics to focus also changes (should we have Machine Learning courses now?), so that’s to be expected.
Are you referring to a curriculum of specific university which makes students do both mentioned things?
So I guess you are avoiding answering my question: can you give an example of university's curriculum, when they make students work on both FPGA and LLVM? Because that's what you were suggesting in your statement.
The school I went to definitely did the FPGA bit as there was a research team looking into FPUs at the time. I don't think we did any LLVM, though one of the teaching assistants I was friends with was excited about it as he was specifically researching SSA transformations, but most of my exposure to that must have been outside of class.
That school specializes in theoretical computer science so I wouldn't really recommend it to anyone willing to do practical things, nor can I vouch for the quality of any remaining practical bits today.
In practice I don't really know where to get a good computer science education. It seems computer architecture has become optional in quite a few top-ranking institutions as well. And they tend to follow trends like the whole AI fad. Your best bet is to research what kind of research the associated people do.
Myself I don't understand how one could write any code without understanding how the code gets run.
I've got bad news if you work anywhere that is web or web adjacent then :)
I think this perhaps says more about you then it does the people to whom you're referring. If you can't understand how someone can write code to perform tasks and extrapolate from that ways that programming can be used to perform tasks, without any underlying knowledge of the architecture that it runs on, then I would suggest your education is currently incomplete.
How far down does the full stack go? Hardware? Digital electronics? Analogue electronics? Physics? Further?
Code is typically used to run a service running for a potentially long time leveraging hardware resources which are made accessible and shared with other processes through an operating system.
To ensure that the service runs well and doesn't hamper other services sharing those resources, you need at least high-level understanding of how the hardware and operating systems work.
Depending on your definition of “service” here, I’d argue that most code is not written to run services, and certainly not long-running services. Like, core-utils is a shitton of programs, and a shitton of code, and none of that runs as a service. Most of what you mentioned in your first comment aren’t services.
Bio researchers don’t write long-running services. They don’t even really understand how computers are allocating resources. They don’t know shit about putting an HPC cluster together and managing it. Are they not writing code?
I agree with the other person who said your education seems incomplete. Yours is a very narrow view of computers and computing.
You may want to know why they are the size that they are, be able to extract meta-information, configure how the dynamic linker works, extract debug info, etc.
Some of things are actually critical for installation or deployment.
I'm sorry that you wasted your money on an educational investment that doesn't pay dividends.
Which part of the grandparent's post led you to the conclusion that his/her education wasn’t good?
I don't say that you need to be an expert on low level programming to write good code (sometimes this is even a hindrance as quite some of these people are prone to the premature optimization anti-pattern) but one should imho know at least the basics and have a high level overview of the low level stuff.
But frankly the reality is that even people who struggle with mere syntax, people who have no clue whatsoever what's going actually on, "contribute" code way to often to the corpus that you need to deal with in professional settings.
</rant>
Edith thinks I should at least praise the great article we're commenting on here!
Very nice write up.
The only thing that I miss a little bit is a kind of "disclaimer" that what gets presented is "just" the result of a market race, and not how computers need necessary to work like. Not going into the details of possible hardware architectures and implementation, but even on the "user facing" level (the operating system and application layer) things can look very, very differently. Just as an example: https://en.wikipedia.org/wiki/Genera_(operating_system)
Don't assume everyone had the same uni experience.