logoalt Hacker News

zahlmanlast Wednesday at 4:12 PM1 replyview on HN

> The first reason is that programming is about problem solving, not fiddling with the details of some particular architecture, and ASM is pretty bad at clearly expressing solutions in the language of the problem domain. Instead of programming in the language of the domain, you're busy flipping bits which are an implementation detail.

"How do I use bits to represent concepts in the problem domain?" is the fundamental, original problem of computer science.

And to teach this, you use much simpler problems.

> ... reinforcing the notion that computer science or programming are about computing devices. It is not.

It is, however, about concepts like binary place-value arithmetic, and using numbers (addresses) as a means of indirection, and about using indirection to structure data, and about being able to represent the instructions themselves as data (such that they can be stored somewhere with the same techniques, even if we don't assume a Von Neumann machine), and (putting those two ideas together) about using a number as a way to track a position in the program, and manipulating that number to alter the flow of the program.

In second year university I learned computer organization more or less in parallel with assembly. And eventually we got to the point of seeing - at least in principle - how a basic CPU could be designed, with its basic components - an ALU, instruction decoder, bus etc.

Similarly:

> It is good for an astronomer to be able to operate his telescope well, but he isn't studying telescopes.

The astronomer is, however, studying light. And should therefore have a basic mental model of what a lens is, how lenses relate to light, how they work, and why telescopes need them.


Replies

lo_zamoyskilast Thursday at 3:33 PM

> "How do I use bits to represent concepts in the problem domain?" is the fundamental, original problem of computer science.

> It is, however, about concepts like binary place-value arithmetic

That is the original problem of using a particular digital machine architecture. One shouldn't confuse the practical/instrumental problems at the time with the field proper. There's nothing special about bits per se. They're an implementation detail. We might study them for practical reasons, we may study the limits of what can be represented by or computed using binary encodings, or efficient ways to do so or whatever, but that's not the central concern of computer science.

> In second year university I learned computer organization more or less in parallel with assembly.

Sure. But just because a CS major learns these things doesn't make it computer science per se. It's interesting to learn, sure, and has practical utility, but particular computer architectures are not the domain of computer science. They're the domain of computer engineering.

> The astronomer is, however, studying light.

No, physicists studying optics study light in this capacity. Astronomers know about light, because knowledge of light is useful for things like computing interstellar distances or determining the composition of stellar objects or for calculating the rate of expansion or whatever. The same goes for knowledge of lenses and telescopes: they learn about them so they can use them, but they don't study them.