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