Very few people have designed CPUs. A lot of people manage to write great software despite this. It seems to be irrelevant. Again, coming from someone who knows.
If someone is interested, yes, I absolutely encourage them to pursue that interest and yes it will deepen their understanding of how things work.
But necessary? It's self evident that it's not necessary because many don't know it and write great software despite this. And if deciding what sorts of optional things one should master, it's fairly low on the list.
I completely understand the advocacy. I used to tell people that without fluency in assembly they couldn't consider themselves competent. That might have been true when I said it. It's not true any more, it not a fundamental skill any more because it's not necessary except for certain tasks that all but a few won't encounter. We can't reasonably require that everything that is not necessary for all but a few should be required, there would be too many things. It's now an optional skill.
Very few things are truly necessary to know, so I was working from the premise that such studies would be undertaken as a way of rounding out someone's knowledge. The direct practical applications of that knowledge to programming are rare, I agree.
I have taught myself to never say that you need to know X to be a great programmer. You'll note that's not what I said with respect to designing CPUs. When I was a hot-shot kid who fancied himself something special, I used to think and say to people that great programmers needed to know X, Y and Z, which just so happened to be things I enjoyed and knew a lot about. After close to a decade of working with a lot of different programmers, many good and some very great, I've found that there's really no easy one-size-fits-all set of prerequisite knowledge once you get beyond the basics that everyone agrees are important to master. I pride myself on being well-rounded and having an equal mastery of high-level and low-level elements, but I can't honestly say that by itself makes me better than someone who is more exclusively focused on either of the two ends. It's mostly a matter of personal inclination.
If someone is interested, yes, I absolutely encourage them to pursue that interest and yes it will deepen their understanding of how things work.
But necessary? It's self evident that it's not necessary because many don't know it and write great software despite this. And if deciding what sorts of optional things one should master, it's fairly low on the list.
I completely understand the advocacy. I used to tell people that without fluency in assembly they couldn't consider themselves competent. That might have been true when I said it. It's not true any more, it not a fundamental skill any more because it's not necessary except for certain tasks that all but a few won't encounter. We can't reasonably require that everything that is not necessary for all but a few should be required, there would be too many things. It's now an optional skill.