A *(Learning Lounge) course about _(Programming Language)s.

<u>Starting Forth</u> by Leo Brodie is a great first approach to programming. Lets you understand basic concepts to understand how a computer works, with a paradigm good for low-level and high-level programming alike.

The TeachScheme! project has many good books.

<u><a href="http://mitpress.mit.edu/sicp/sicp.html">The Structure and Interpretation of Computer Programs</a></u> is a very insightful intro to many programming paradigms. It requires the reader to be quite good at abstract thinking, and a background in math or physics helps a lot.

Here are just some examples of what to study and gain some experience in after that:

<ul>
<li><u><a href="http://www.paulgraham.com/onlisptext.html">On Lisp</a></u> by Paul Graham, on the power of macros.

A D. B. LAMkins wrote <u><a href="http://psg.com/~dlamkins">Successful Lisp</a></u> that will help if lack of familiarity with _(Common Lisp) is a problem.

<li>Self (http://www.cetus-links.org/oo_self.html) (as an example of prototype-based oo but also as a first contact with self-contained reflective dynamically compiled systems (alternatives: _(Squeak), _(Lisp machines)))
<li>Something on _(Meta-Object Protocol)s and aspect-orientation.
<li>_(O'Caml) or _(Haskell) for functional programming, rather than _(Standard ML).
<li>_(Mercury) or _(Mozart/Oz) for modern declarative programming, rather than _(Prolog).
<li>_(jocaml) (http://para.inria.fr/) or _(Mozart/Oz) or _(O'Haskell) (http://www.cs.chalmers.se/~nordland/ohaskell/) for parallellism and distribution.
</ul>