7 ms·
Love resources like this. I’m getting my feet wet in the RISC-V world, and it’s clear that people who want to push FOSS forward are going to need knowledge like
by dwrodri 3y ago
Love resources like this. I’m getting my feet wet in the RISC-V world, and it’s clear that people who want to push FOSS forward are going to need knowledge like this to get software working well on all of the SBCs that are coming out.
- mgaunard 3y agowouldn't any programmer already know this, assuming you studied for a bachelor's degree or more? 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.
- Claude_Shannon 3y agoFor you it was common thing, at mine classes best we did was adding numbers in assembly. Don't assume everyone had the same uni experience.
- __bjoernd 3y agoConfirmation Bias. How many "programmers" went through a traditional university CS course?
- mgaunard 3y agoHow can you call yourself a programmer if you don't know the basics? If you're gonna skip education, you better make up for it by going above and beyond what they teach with your self-learning.
- xeonmc 3y agoHow many people who call themselves "programmers" went through the basics?
- zerodensity 3y agoIf only this was how it worked :( 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.
- j33zusjuice 3y agoOTOH, thank goodness for them or you wouldn’t find jobs so easily, nor would you command the salary you command.
- cyclotron3k 3y agoSome types of low level programming require you to know about CPU architectures and op codes, but certainly not all types of programming. You can be an excellent web dev without knowing how a CPU works, for example.
- mgaunard 3y agoAnd then we wonder why web apps are all so unreliable and inefficient...
- __bjoernd 3y agoCertainly not because the developer didn't learn all the x86 machine code mnemonics by heart.
- mgaunard 3y agoHow is that relevant? A computer architecture class explains the high-level concepts of an ISA and micro-architecture, covering features from across the domain. There is never a strong focus on x86, and any kind of rote memorization has nothing to do in a higher education institution.
- j33zusjuice 3y agoAre you autistic or something? Serious question. You seem to have a hard time understanding other perspectives, and you missed obvious sarcasm/hyperbole there.
- ctz 3y agoIf you find yourself wondering this, the answers are in an undergraduate economics course. Please learn the basics ;)
- quickthrower2 3y agoBecause the developers are not using Chrome tools to profile their web apps, and they are not collecting performance metrics in production?
- deleted 3y ago[deleted]
- circuit10 3y agoYou can be a perfectly good e.g. web developer without knowing any of that. It would be good to know how it works but you don’t need to go that deeply into it unless you’re interested in it. And if you are, or if you really do need to know it, this is a learning resource so you can do that
- skinkestek 3y agoSome of the best programmers I know are self taught.
- imdsm 3y agoOften it's the case that those who learnt to program at college/university at the age of 20 are unsettled by their peers who at 30 have two decades under their belt, having spent their fertile years from 10 or earlier programming. By 20 I'd already been writing code every week without fail for a decade. Now I'm at > 70%.
- __bjoernd 3y agoAnd pages like this are the exact great resources that you can learn from. :)
- xenocratus 3y agoThis sort of gatekeeping is the kind of reason why a lot of people are put off by engineers - "oh, you don't know X? You're clearly not a software engineer". 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.
- mgaunard 3y agoWould you want the structural integrity of your house to be assessed by someone who wasn't taught the principles of stucture engineering?
- w7 3y agoWould you need the principles of structure engineering to assess that house's toaster? Much like a house is more than just the structure itself, so is the realm of computers.
- yjftsjthsd-h 3y ago> How can you call yourself a programmer if you don't know the basics? If you can write programs, then you're a programmer. That's it.
- tremon 3y agoHow does Computer Science teach the basics? Doesn't most of the CS curriculum assume a Turing machine with infinite tape? 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.
- dlisboa 3y agoI learned about computer architecture in my CS curriculum. It seems there’s great variance to these courses, so it’s hard to assume your experience is the same everywhere. Mine had a good deal of practical applications, prefaced by theory. I know people who went to school and didn’t learn some “basic” things, that their curriculum didn’t prioritize. As time goes by the topics to focus also changes (should we have Machine Learning courses now?), so that’s to be expected.
- kunley 3y agoFPGA sounds like the very old days, while LLVM is relatively new. Are you referring to a curriculum of specific university which makes students do both mentioned things?
- mgaunard 3y agoLLVM is 20 years old.
- kunley 3y agoLLVM as a project might be old, but to make its way to university's curriculum takes years or decades. 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.
- mgaunard 3y agoI didn't say there was a course that did both; in practice these things would depend on what the professor/assistants are personally researching. 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.
- Semaphor 3y agoNot everyone studied at the same university as you. And after having worked full time for over 10 years now, I never needed any of those skills.
- mgaunard 3y agoMany jobs wouldn't hire you if you couldn't demonstrate solid understanding of how computers and operating systems work. Myself I don't understand how one could write any code without understanding how the code gets run.
- intelVISA 3y ago> 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 :)
- imdsm 3y ago> Myself I don't understand how one could write any code without understanding how the code gets run. 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?
- mgaunard 3y agoCode is not just to perform tasks, at least not if we're talking about software engineering, rather than mere scripting. 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.
- hgsgm 3y agoI went to a university, not a trade school. It taught me how to learn effectively, so I can learn technical details on my own for decades outside of school. I'm sorry that you wasted your money on an educational investment that doesn't pay dividends.
- mgaunard 3y agoIf you have good grades, you can be paid to study.
- CogitoCogito 3y ago> 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?
- metabagel 3y agoSarcastic response to a humble brag.
- skepticATX 3y agoNothing wrong with a refresher. The details can get fuzzy after a decade or two if you don't think about it regularly.
- metabagel 3y agoMost people have at least some gaps in their knowledge. A lot of people come to computer programming by way of other degree programs, such as EE, physics, math, even astronomy.
- still_grokking 3y agoWell, the voting on this question and the other replays could explain why most code in the wild looks like it was written by people who don't know how computers work… Sad, but this here is quite telling imho. 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) https://en.wikipedia.org/wiki/Genera_(operating_system)
- archmaster 3y agoNot gonna get involved in the Hacker Newsmare occurring in the comments here, but still_grokking: great point about the disclaimer and I was definitely intending to put something similar in. Article is still in WIP status!
- bazoom42 3y agoSurely there was a point even in your life when you didnt know everything worth knowing about how computers work?
- bazoom42 3y ago“Anyone should already know this” is a very weird and illogic criticism towards learning material. Nobody is born knowing this, so surely such material is useful for everybody at some point.
- mananaysiempre 3y agoJust FYI, the RISC-V instruction encoding is considerably freakier than just about anything else you could be exploring except perhaps Thumb-2. They had good reasons to make it like that, but still, if you’re planning on reading hexdumps RISC-V is not going to go easy on you, even if it’s simple from most other angles.
- klelatti 3y agoI’m intrigued why you say this as my impression was that RISC-V coding was very straightforward.
- mananaysiempre 3y agoIt’s mostly the immediates, I mean, how could I not mention the immediates. The other parts are indeed arranged fairly straightforwardly, but trying to read off a 5-bit register field crossing a byte boundary when the instruction is written in little endian—or even just a three-bit field somewhere in the middle to figure out what the instruction even is—is less than pleasant. 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.
- klelatti 3y agoMakes sense - thanks!