- Artificial Intelligence - The August 1st and
August 4th
entries discuss the use of disembodied robots called
spiders to search the web looking for information. The
entry on August
30th deals with machine learning for detecting junk
email and the September
10th entry is about algorithms motivated by
evolutionary biology. For additional study, I recommend the
introductory text by Russell and Norvig [1995] and a good
introduction to probability and statistics such as [DeGroot, 1986]. The text by Dean,
Allen and Aloimonos [1995] is less
advanced and less comprehensive than Russell and Norvig but it
includes an introduction to programming and AI algorithms in Lisp.
Mitchell [1997] provides a good
introduction to machine learning.
- Computer Architecture - The entries on July 21st, July 26th and July 27th
provide a very basic introduction to computer architecture with an
emphasis on the logical design of modern computers and the
interface between hardware and software. The text by Hennessy and
Patterson is one of the best introductions to the subject at the
college level [1997].
- Databases - I don't have a lot to say about databases
in this journal, but I present a brief introduction to related
ideas in logic programming on July 5th and
demonstrate how to build an application using the relational model
and an open-source database on July 6th. I
learned about databases from Ullman [1988] but the text by Silberschatz,
Korth and Sudarshan [Silberschatz et al., 2001]
provides a more modern perspective.
- Operating Systems -
There are operating system topics sprinkled throughout this
journal but the sequence, July 27th, July 28th, July 29th, July 30th, July 31st,
touches on interrupts, subroutines, lightweight threads, task
management, semaphores, virtual memory and several other topics
important in the study of modern operating systems. I like
Silberschatz, Galvin and Gagne [Silberschatz et al., 2001]
as an introductory text. I also recommend Tanenbaum [1996] for issues pertaining to
networking that are only peripherally related to operating systems
but I mention them here because I don't emphasize networking and
distributed computing issues elsewhere in this journal.
- Philosophy - I wasn't at all shy about talking about
philosophical issues that relate to determinism and free will, August 8th,
things that think, August
16th, and ethical and moral quandaries raised by
the prospects of machine intelligence, September 6th.
Dennett is my favorite computer-savvy philosopher, e.g., [Dennett, 1998], but I actually prefer
the philosophical musings of computer scientists, e.g., [Knuth, 2001] and [McDermott, 2001].
- Programming Languages - I touched on Lisp and Scheme
in a series of entries, July
9th, July
11th and July
12th, using lightweight threads to write robot
programs in C, July
28th, and object-oriented programming and Java, August 24th and
August 28th.
I recommend [Abelson and
Sussman, 1985] or [Felleisen
et al., 2001] as an introduction to Scheme and, more
generally, computer programming. If you feel compelled to go the
object-oriented route right off the bat, then I recommend that you
steer clear of C++ and try Java [Budd,
2000].
- Theoretical Computer Science - I touched briefly on
analyzing data structures and algorithms, July 14th, and
graphs and graph algorithms in particular, July 15th. I
also provided a high-level overview of computational complexity
and the theory of NP-completeness, September 2nd.
I recommend Papadimitriou [1994] for a comprehensive
introduction to computational complexity and Cormen, Leiserson,
Rivest and Stein [2001] for a
solid treatment of algorithms and methods for their analysis.