Welcome to the Theory of Computation course! (CS3102)

We can still add some people into the class, as long as we don't exceed the room/seats capacity (please Email me an explanation why you would like to add this class, and I'll give you permission to enroll in SIS). If you would like to audit this course, or just informally sit in on any of the lectures, that's fine too. Basically, I never turn away anyone who seeks knowledge.

Please read the CS3102 Syllabus, and read especially carefully the cheating policy on page 3 of the syllabus.

All CS3102-related materials (including the slide sets) will be posted at the CS3102 Web site. The first problem set and first homework assignment are already posted there. The problem sets are lists of various problems that you should work on throughout the semester, and most of the homework problems (which will be turned in and graded) as well as exam questions will come directly from these problem sets (or will be minor variations thereof). Your best strategy is therefore to solve as many problems as you can from the problem sets ASAP thoughout the semester.

Our textbook is Sipser's Introduction to the Theory of Computation, Second Edition (published in 2005). (The Third Edition of this book recently came out, but it is similar and much more expensive than the Second Edition, so we will use the Second Edition instead.) For your convenience, a searchable PDF version of the textbook is available (but please respect copyright laws and also purchase a copy).

Please read the very useful summary, which lists the definitions of most of the important concepts that we will cover in this class. Please refer to this summary throughout the course.

Here are some fun articles and videos that you should read / watch, covering numerous fascinating topics in algorithms, theory, exotic computation models, technology, and possible technology futures. These essays and videos will introduce you to many new ideas and will help expand your mind, your thinking processes, and your problem-solving skills.

The homework readings in this class consists of a minimum of 36 items from the recommended readings list. The required ones are highlighted in red font there, while the rest are "electives". The readings item types should constitute a diverse mix, with a minimum of at least 15 videos, at least 15 papers / Web sites, and at least 6 books. Any items above 36 will count towards extra-credit.

The minimum writeup requirements are a 2-paragraph description for each paper / video / Web site, and a 2-page description for books (longer writeups are of course welcomed also). Each writeup should summarize what you learned from it, what you found interesting / surprising, etc. At least two submissions are due each week on Monday (by 11:59pm, beginning the second week of classes, i.e. Mon Jan 22) with no late submissions accepted, and more than two submissions per week are of course very welcomed and highly recommended. However, no more than two submissions per day are allowed (if more than two submissions occur on a given day, only the first two will be credited). This policy (which will be strictly enforced) is designed to help you avoid "cramming" at the end of the semester, and also to help you retain more of the knowledge by pacing it more evenly over time. Please use the CS3102 submission form to turn in all readings. (In the extremely rare cases that this Web form doesn't work, please Email your submission to homework.cs3102@gmail.com.)

Please watch before midnight Monday Jan 22 the "Time Management" video lecture of Randy Pausch (given at UVa in Nov 2007), as well as his "Last Lecture". The "Time Management" video in particular is one of the best ever on this topic, and the hour that you spend watching it will pay you back by a factor of thousands over your career in terms of time saved and productivity gains. The slides for the "Time Management" lecture are available also, along with more information about Randy Pausch. (BTW, Randy's lectures and book are required reading for all entering students at CMU.)

Another particularly good article is "Who Can Name the Bigger Number?". Please read this article ASAP as well, submit a couple of paragraphs describing what new or surprising things you learned from this article.

Another fascinating video that you should watch soon is "Powers of Ten", which presents a wonderful visual depiction of the power of exponentials, in terms of the scale of the physical universe. Also play with the related interactive app Scale of the Universe (which is also available as an iPhone app). Please watch these three videos (and app) ASAP (and please submit your feedback using the CS3102 submission form, i.e. a couple of paragraphs describing what new / surprising things you learned from each).

I also included on the CS Readings Web page links to good Wikipedia articles on various topics relevant to this course, as well as links to several interesting books. For example, an excellent classic (and easy to read) tutorial book on problem solving is Polya's "How to Solve It" (also available as a searchable PDF here). Please read this book ASAP (it is on the required reading list for this course).

Another great easy-reading fun book on infinities and other deep and subtle mathematical concepts is Rucker's "Infinity and the Mind" (also available in searchable PDF format here). Finally a fascinating Pulitzer-Award -winning book about logic, intelligence, self-reference, and paradoxes is "Godel, Escher, Bach" Mind" (also available in searchable PDF format here). Note that all of these three books are also on the required reading list for this course.

In addition, you will find selected TED talks on the reading list, covering a wide range of topics and ideas in science, technology, engineering, and education. Some of these articles / Web pages / books / videos are required reading (highlighted in red font), while the rest are "electives". Please sumbit a short summary of each reading (1-2 pagraraphs per paper / video / Web page, and 1-2 pages per book), at the rate of at least two per week (due on 11:59pm each Monday), to a minimum total of at least 36 for the entire semester (and any above 36 will count towards extra credit). No late submissions will be accespted, and at most two submissions per day are allowed (to help you avoid cramming / procrastination). Book writeups will receive more extra credit than shorter papers / video writeups. The readings item types should constitute a diverse mix, with a minimum of at least 15 videos, at least 15 papers / Web sites, and at least 6 books.

If you come across additional great articles / Web pages / books / videos that you think also belong on this list, please let me know, and I'll consider adding them.

To dive deeper into cutting-edge research in algorithms and theory, please refer to recent papers from the leading algorithms and theory conferences and journals.

Remember: while I can *introduce* you to lots of cool ideas, it is then up to you to do the remaining "heavy lifting" yourself - i.e., following up on class discussions by reading up on these topics in greater detail, going to other sources, solving lots of problems, working in groups, meeiting with the TAs often, etc. (Classroom time is relatively short, and as researchers and scientists, a lot of of your individual learning needs to occur outside of the classroom.)

I hope that you enjoy the above materials and resources as much as I do!

Finally, please start working on the problem sets and please work in study groups on these problems. Keep in mind that many of the midterm and final exam questions will come almost verbatim from these problem sets! We observed over the years that people who regularly meet with TAs and consistently attend the weekly problem-solving sessions tend to earn a better grade in this course (by over a full letter-grade) compared with people who do not do these things consistently.

An interesting (extra-credit) problem is to write a program (say in C++ or Java) that prints itself out (i.e., prints its own source code exactly), without reading any files, buffers, input devices, Web sites, or any other external input sources. In other words, the self-contained compiled code should print out verbatim its own source code, without accessing any external data sources whatsoever. This is a simple example of artificial self-replication, a rich and fascinating topic pioneered by John von Nuemann.

We look forward to sharing with all of you a fascinating journey of discovery, insights, and problem solving!

Gabe


Dr. Gabriel Robins
Professor of Computer Science
Department of Computer Science
School of Engineering and Applied Science
University of Virginia
151 Engineer's Way
P.O. Box 400740
Charlottesville, VA 22904-4740
(434) 982-2207
robins@cs.virginia.edu