[Novalug] [OT] Ideal C Courses -- WAS The "real low level" ofcomputers
Bryan J Smith
b.j.smith at ieee.org
Tue Mar 30 20:42:39 EDT 2010
On Tue, 2010-03-30 at 23:48 +0000, jecottrell3 at comcast.net wrote:
> Hmmmm, I'm not sure which one you mean goes with the "Learn Proper".
I mean someone who has formal computer science (CS) and/or formal
developer training in a language. Other than a CS minor, I have
neither. I have stated, repeatedly, that I am not a proper coder, my
objects and methods are not well thought out or written.
Instead, I studied semiconductors and systems design. I did not study
proper computer science and related software algorithms nearly as much.
That was my point. I wouldn't lecture a CS major on how one should
write reusable code. In the same context, a number of people here want
to tell everyone else where the "low level" is at.
I'm here to break the myth that assembler teaches one about "computer
architecture," let alone try to break through to the sanity that just
teaching "computer organization" with C is just as "low level." The
continued assumptions to the contrary is why many developers are turned
off to the concept of learning anything below their 4G language.
> But what I am becoming pretty clear about is that, as you say, your
> mindset is different than most people. In any case, your postings seem
> to be devoid of learning thru "hacking", but I think is why most
> people area attracted to programming.
And you base this on what? More assumptions.
First off, having a formal education doesn't mean I am not self-taught
Like many, I started with BASIC, then Pascal, then C -- at age 9. I
played with 6800 and x86, programmer guides from Moto and Intel. I even
wrote a loader and some I/O firmware by the time I was a teenager.
I thought, like many of you, that I understood how computers worked.
But I also grew up in an engineering household (civil engineering). I
learned trigonometry and drafting (including with CAD) early on. So
when I entered college, instead of going into computer science, I chose
electrical engineering. Why? Someone sold me on the fact that I didn't
know jack. Guess what? They were correct.
I only minored in computer science because many of my engineering
classes closed early to freshmen (and I could not take some until I was
a sophomore and had seniority over freshmen myself -- long story).
SodDo not mistake that formal education for not learning by doing.
In fact, as I explained, engineering** courses are often about throwing
you a problem, not teaching someone formally on C or assembler. That's
completely different than computer science, where you will have a good
dozen "programming" courses. As someone who had an existing, strong
background in "computer organization," I helped others. I had no
problems doing the work in those few courses (and easily made As).
What my education did was expand my assumptions, and broke them.
[ **NOTE: In fact, engineering used to be a PhD level education until
the British challenged the notion that pure education with minimal
internship was worthy of a license to practice. That's when engineering
became a compressed, 4-5 year undergraduate program plus 4-5 years of
experience, prior to licensure. The concept that engineers cannot
survive on book experience, and must learn technology from technicians,
is an ideal that continues today in American, Canadian and most other,
British-based engineering curriculum. The very concept of engineering
is that technology and knowledge, including from non-engineers, is just
as important. ]
> ... cut general emotional, subjective commentary ...
> Yeah, you could start with C and look at the generated instructions,
> but since you are never gonna actually USE them (why bother, C is much
> more comfy) they won't MEAN as much.
Huh? The point here is to learn "computer organization." Remember, _I_
stated -- in my _originally_ post -- that arguing one should learn
assembler to learn computer organization, over C, is a '70s technology
mindset. It has not been true as of the '90s.
The more we throw this "elitist" non-sense that, "you must learn
assembler, it's the lowest level of how computers work," the more we not
only put off people who _should_ learn computer organization, but the
more we proliferate _incorrect_ information at the same time.
Modern, superscalar IC designs have C targets that are far better, far
more complete, than anyone can learn assembler on that target. The
limitation is that one is not an engineer that designed it, below the
ISA, and understands how the assembly should be coded and flow for
proper usage. As such, you should write in C and then look at the
generated objects. From that, you will learn _more_ about how to write
code for modern, superscalar ICs.
Everything you need to directly assemble can be done in-line in C.
Everything you need to control CPU states, paging, etc... can also be
done in C. Everything possible out of computer organization can be done
in C. If you want to learn only basic C syntax and leave it at that, I
can't help you. But if you want to write modern code for various
targets that actually work, and work best, then you want to use C.
> Now obviously, since we disagree, my viewpoints aren't Universal, but
> I'd be willing to bet that my viewpoint is shared by most of the
> people on this list, as well as most of the excellent hackers out
> there. Feel free to ask the best developers you know.
>From post 1, I 100% _stated_ that I am in the _minority_. That doesn't
mean I am mistaken. If popularity was the rule, then engineers would
have never invented the modern microprocessor. Programmers and CS
majors would have prevented them from making the processor "too complex
for them to understand."
Bryan J Smith <b.j.smith at ieee.org>
More information about the Novalug