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!|http://www.teach-scheme.org/) project has many good books.

<u>_(The Structure and Interpretation of Computer Programs|SICP)</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), as an example of prototype-based oo but also as a first contact with self-contained reflective dynamically compiled systems. Alternatives: _(Squeak), _(Lisp machine)s.
<li>Something on _(Meta-Object Protocol)s and _(aspect-oriented programming).
<li>_(OCaml) or _(Haskell) for functional programming, rather than _(Standard ML|ML).  <i>What's wrong with SML?</i>
<li>_(Mercury) or _(Mozart/Oz) for modern declarative programming, rather than _(Prolog).
<li>_(JoCaml) or _(Mozart/Oz) or _(O'Haskell) for parallellism and distribution.
</ul>