[Novalug] [OT] The "real low level" of computers (it's not what you think)-- WAS: Packages v. ports v. source
Bryan J. Smith
b.j.smith at ieee.org
Mon Mar 29 09:53:31 EDT 2010
Couple of any anal and very opinionated notes ...
1. [Anal] It's called "computer organization," not "computer architecture"
This is one of those anal clarifications that go along with "engineering technology"
v. "engineering." Many times, a majority transpose them while only a minority of
"angineers" (anal engineers, like myself, or so I've been told ;) recommend such
clarification. Data organization, system and functional processing is collectively
known as "computer organization." Computer architecture is completely unrelated.
It's a major differentiation between math, programming and computer science and
electrical and computer engineering. ;)
2. [Opinion] Very much _strongly_ disagree with learning assembler since '90s
I agree with everything you state about 3G and 4G languages. However, I will
continue to argue that unless you are building boot loaders and firmware as your
job function, you skip going below 3G C. Virtually everything you will ever do, even
doing hardware-level, can be done in C, and in-line assembler "straight from the
programmer's guide." Furthermore, I wish 4G programmers would just learn a 3G
language like C, even if they don't utilize it. It's on this point that I think the
assembler is a distraction, when 4G programmers should focus on learning
something like C. C will teach you 100% of the computer organization that
Only boot loaders and firmware need to worry about going below that, and not for
efficiency -- but basic setup. It's wholly unused and wholly ineffective for virtually
all development done today. Unless one is going to study the internals of a
particular microprocessor, they will never "outsmart" the engineers that designed
it. C is the "lowest" one should go with a superscalar microprocessor and,
increasingly, the number of superscalar microcontrollers available. Again, I am
very opinionated on this, but it is one of the strongest views I continue to maintain
on the matter.
Learning 3G C should be the focus for today's 4G programmers, even if they never
use C. It teaches absolutely 100% of the computer organization programmers
will ever be exposed to -- unless they want to get an EE degree and study real,
modern "computer architecture" and not classical, '70s design. ;)
----- Original Message ----
From: Peter Larsen <plarsen at famlarsen.homelinux.com>
Learning the details of each processor instruction etc. would be futile
if all you want to learn is to create end-user applications.
However, learning basics of a computer architecture. Learning how arrays
are allocated vs. dynamic lists; learning the principals of variables
and data types; and the OS process architecture to understand threading,
shared memory etc. are vital concepts for any programmer. They all
spring from how the processor works and while you don't need to
understand the details of the processor, you must understand the
conceptual levels of "how it works".
For that reason, an "introductional course" in assembler would be very
helpful for any serious programmer. I'm by no means an assembler
programmer, but it was part of my final exams back when I was young and
pretty, to design a basic Von Neumann
(http://en.wikipedia.org/wiki/Von_Neumann_architecture) machine and
explain their components. I even worked out a instruction flow with
papers representing the basic OP codes to teach some of my fellow
students that was struggling with the concepts. From personal
experience, it has been tremendous valuable moving forward to understand
why things work the way they do.
More information about the Novalug