[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [K12OSN] a prospective client - k12ltsp and logo

Steve Wright wrote:
> Jonathan Bartlett wrote:
> K12OSNis not the forum for this really, but here goes..
> >
> >I've actually found that it is writing in assembler that enables you to
> >have an understanding of the hardware.
> >
> What commercial programmers need to understand the hardware ?  Kernel
> hackers ?  Firmware for wireless cards ?
> In Linux, for example, the hardware is fully abstracted by the kernel,
> so why would you want to learn how to write software to deal with hardware ?

And I suppose you think every application you use is more than efficient
enough in its usage of memory, CPU, and other resources?  Please read my
previous post in this thread.  Most commercial programmers need to
"understand the hardware".

(You have confused device-driver level knowledge of hardware with a basic
understanding of computer architecture.  I don't think this discussion is
about bits in registers on an ethernet card, it is about how the CPU
processes instructions and how memory is accessed for code and data.)

> >  It is _very_ hard for people to go
> >from programming in the abstract to learning the nuts and bolts of how
> >computer memory operates.
> >
> Why do you need to know "how memory operates" ?  Isn't this all
> abstracted by the kernel ?

We're not talking about MMUs and TLBs here.  Given a two dimensional
array and a task that needs to look at each element in the array, how
do you access the elements.  If you don't understand a typical memory
architecture, you might well access the elements down the columns
rather than across the rows and end up with a program that runs
substantially slower than it could.

This is but a single text-book example.  Laying out data structures,
even linkage ordering can all significantly affect program performance.
I come from the embedded systems side of things, so I am a little more
sensitive to this kind of thing, but I guarantee you that companies
like Oracle have a lot of engineers who really know how the hardware
works, and they're not writing device drivers.

> >[....]
> >If you have no basis for programming at all, I think it's much better to
> >start with learning how the computer itself operates, then working up to
> >how good programmers put this into practice.
> >
> For computer scientists, hardware designers, kernel hackers, I would
> tend to agree with you.

I think any student that really has an interest in programming would
be well-served by a strong background in computer architecture. 
Otherwise, they will be at a disadvantage against those that do.
For the students taking programming courses because the alternative
would be P.E., they would zone out before you could get through a
discussion of what an ALU is.

> My point is ; Re-inventing the wheel regarding 'hardware drivers',
> 'memory operation' and other arcane specialist topics, is not required
> for general programmers writing applications - indeed, if a programmer
> designing a website had to deal with the specific foibles of the
> ethernet card, the job would not get done.
> A tiny percentage of programmers will have an inclination in the fields
> of kernel modules, adapter firmware, and porting to obscure platforms.
>  The industry needs these people, for sure, but I think as "teachers in
> schools", we will alienate, more than enable students to be involved in
> the software industry if we "specialize" them too early.

Given your take on the discussion, I agree.  As I stated above, though,
I think you missed the point (at least the one I was trying to make.)


> >  That's the approach I'm
> >working on in my book that I'm writing (well, it's kind of stagnating
> >right now) -
> >
> >http://www.eskimo.com/~johnnyb/computers/ProgrammingGroundUp/ProgrammingGroundUp.pdf
> >
> Thank you for making your work public.  8-)
> kind regards,
> Steve

Don Christensen       Senior Software Development Engineer
djc cisco com         Cisco Systems, Santa Cruz, CA
  "It was a new day yesterday, but it's an old day now."

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]