This is a list of what are (mostly as far as I _(SkrjabLin) understand) the most major and basic topics which one needs to master in order to be able to constructively participate in Tunes research and development at its current stage. (with "Tunes" currently meaning the different projects, by different people (i.e. currently the projects of _(Franois-Ren Rideau), _(Brian T. Rice) (the _(Arrow system), _(Slate)) and _(Alexis Read)), that more or less try to accomplish Tunes' specs, and are reported about on Tunes' mailing list.)

Suggested texts/books/papers to read are also given. This bibliography has been chosen using a mixture of the criteria (in no certain order of importance) Onlineness, Quality (i.e. wellwritten/pedagogical/correct etc.), Freeness.

Everybody is invited to make this page more complete and correct: filling in the gaps, replacing bad text with better, and removing unnecessary material. Keep it limited to the most central topics and the most central texts on these topics, preferrably listing just one or two recommended books -- the best and most consise ones.

So, the purpose of the page is to speed up for newcomers, as much as possible, the process of getting some deeper clues and overview of Tunes, not to list in an unstructured manner every possible resource that has some little relevance to some obscure part of the project (there is already the _(Review) area, several parts of which do something like that).

<h2>Organisation</h2>

The topics below have been ordered in something like quasi-college-courses, and these courses are sorted in larger categories.

The idea is like this: for now, it appears you have to have a basic understanding of roughly all of the stuff below in order to help with Tunes, and that's quite a lot. [It takes some time, but it's not impossible: myself I didn't know very much at all and didn't think I was really fit for all the formal mathematical things here, but now, after some half year of studies on spare time only, I already feel quite knowledgeable about at least some Tunes-aspects. You will probably make it quicker than me, since you're probably cleverer, or may have more knowledge already. You also have this Lounge to guide you. S.] But in trying to reach this final goal, you might, on the way, through some little strategy and planning in your learning, achieve guru-ship in some of the sub-subjects. Such gained knowledge may be usable also in non-Tunes-related contexts.

Also observe the category of <em>End Goals For Learning</em> below. The idea is that all other stuff mentioned on this page should be a prerequisite to at least one of these End Goals. For now, there are only very general end goals, but it is hoped that in the future, when some sort of basic foundation has been laid for Tunes, there will exist limited sub-tasks for Tunes R&D (some of which might correspond to the _(SubProject)s) with more limited knowledge prerequisites, and those would then be listed here.

<h2>End Goals For Learning</h2>

<ul>
<li>_(Tunes 101): Intro to tunes for the usual C++ programmer. Prerequisites: none.</li>
<li>_(Tunes 102): Deeper insights. Prerequisites: most stuff in comp-sci category below.</li>
<li>_(Slate 101): the Slate language. Prerequisites: comp-sci-directory, or something like that.</li>
<li>_(Arrow 101): Grasping the _(Arrow system). Prerequisites: Logics and Maths.</li>
<li><a href="http://www-cse.ucsd.edu/users/goguen/projs/halg.html">Hidden Algebra</a>.</li>
</ul>

<h2>Programming Languages, Etc.</h2>

<p><ul>
<li>_(PL 101): a somewhat gentle introduction to modern programming paradigms. Prerequisites: none.</li>
<li>_(Joy 101); _(Monads 101). Prerequisites: in order to get some deeper understanding, _(Category Theory 101).</li>
</ul>

<h2>System Design and Implementation</h2>

<ul>
<li>_(Persistence 101)</li>
</ul>

<h2>Basic Logic / Maths / Comp Sci</h2>

<ul>
<li>_(Appetizers): books that give you a broad insightful view of what computers can or cannot do.</li>
<li>_(Category Theory 101). Prerequisites: none, if you read the right book.
<li>_(Basic Logic 101): classical predicate logic, metalogic, turing-machines/recursion theory/proof theory, model theory, a little set theory etc. Prerequisites: none.</li>
<li>Intro to abstract/modern algebra (alt. "Discrete Maths").</li>
<li>_(Basic Computer Science): lambda calculus, the Curry-Howard isomorphism and more.</li>
<li>_(Programming Language Semantics 101)</li>
</ul>

<h2>Tunes-Central Topics In Theoretical Comp-Sci</h2>

Prerequisites for these are, typically, _(PL 101) and various things from the category Basic Logic/Maths/Comp-sci above.

<ul>
<li>_(Reflection 101)</li>
<li>_(Rewrite Logic 101)</li>
<li>_(Partial Evaluation 101)</li>
<li>_(Linearity 101): linear logic, naming, typing.</li>
<li>_(Parallelism 101): concurrency and distribution.
</ul>

<h2>Diverse Topics in Logic / Maths</h2>

<ul>
<li>_(Coinduction 101).</li>
<li>_(Arrow Logic 101).</li>
<li>_(Substructural Logics 101): Said to be one useful part of a deeper formal understanding of the Arrow system. The connection will perhaps be explained soon in a new Arrow paper. Prerequisites: _(Basic Logic 101).</li>
</ul>

<h2>Philosophy</h2>

<em>Philosophical semantics</em>: This very wide and undefined topic is very central to Tunes. Don't know what would be recommendably relevant material, though.

<h2>Other Resources</h2>

<a href="http://www.cs.uu.nl/~franka/ref">Programming language theory texts online</a>: A few central online cs texts. Many of the links on this page are taken from there.

<h2>To Do</h2>

Short descriptions of the ways in which the different topics relate to Tunes.

For each topic, one or a few essential papers, and a pointer to some resource.