I think there are two ways of approaching learning to guru level programing (not
that I think I'm guru but I can dream can't I?). These are learning a feature rich
high level language that abstracts the hardware as much as possible and work your
way down, or bare bones assembly and work your way up. There are a few things to
consider.

1. Either way your first language will not teach you everything. Assembly does not
give you the tools to make high level concepts (such as OO (Object Oriented)
programming, design patterns, good commenting etc.)  available since high level
concepts have more to do with organizing code than with functionality. A high level
language almost definitely won't teach you about registers, and probably won't teach
about the stack, the heap and other things that for writing efficient code and
understanding why something is going wrong or doesn't/won't work are really
important.
2. Assembly is not a very productive language, i.e. it takes a lot of work for a
very small amount of result. If you are the sort of person who wants to actually
build programs, see them do things and be useful assembly is probably not the best
route to go.
3. If you learn assembly first you will understand most things, as you climb up by
how they work. If you learn a high level language you will understand most things,
as you climb down, by what they do. In my opinion knowing everything by how it works
is better (when possible).
4. The way most books and other written resources (on the web, in magazine articles
etc.) are written they assume the high to low approach.

Ok so that's my weighing of assembly versus high level. I think the best way to
learn is to learn a high level then soon afterwards learn a bit of assembly and try
to meet in the middle. I wouldn't suggest learning x86 assembly first as it has
everything and the kitchen sink in it. Learn a simpler processor first. The
important thing is just to have an idea of what is going on at the hardware level so
that you understand what your code is doing.

Now as to which to learn Python or Pearl.  I haven't used Pearl very much and I have
only glanced at Python but if I were you I'd go for Python.

Pearl abstracts the hardware a lot and doesn't have features to facilitate OO
programming (with any language you can write object oriented code it's just easier
with an OO language). Python at least is OO.

Pearl is also "not flat" (as Larry Wall puts it) it tries to meet with the human
mind half way, which is great for doing things quickly but might be a bit dangerous
for a first language. You might learn to think more like the Pearl designers and not
so much like the computer. I've only glanced at Python so I'm not sure if it has
this feature/bug.

What I might suggest is if you want to thoroughly understand a machine and code for
that machine pretty quickly you might want to look at Java since Java Byte code runs
on a virtual machine you could just learn about that the JVM (Java Virtual Machine)
and Java. The Java Virtual Machine doesn't have an assembly language. There are
books on the JVM but I have not looked at them so I have no idea what audience they
are oriented towards (if they are for implementors of JVMs than the books probably
would not be of much use to you). I do know there are a lot of reading materials for
learning Java as your first language.

This message is probably overkill for a simple Python or Pearl question,
David

"Gabe Turner (officer)" wrote:

> Actually, I'd agree with this.  I once had to program a quicksort in MIPS
> assembly.  Yes, it required I do recursion in assembly.  It was far from
> fun... I don't think I really _understood_ recursion til I did that :)
> I also learned that programmng, behind the scenes, is just a bunch of
> gotos... How reassuring.
>
> Gabe
>
> On Wed, Sep 13, 2000 at 07:42:57PM -0500, Philip C Mendelsohn wrote:
> > Start with assembler.  Pay your dues.  I guarantee anything else will seem
> > easy afterwards.  (This is from the "if it doesn't kill you it will make
> > you stronger" school of thought. ;)
> >
> > Phil M


---------------------------------------------------------------------
To unsubscribe, e-mail: tclug-list-unsubscribe at mn-linux.org
For additional commands, e-mail: tclug-list-help at mn-linux.org