CS201: Intro to Computer Science

Submitting HW
Assignment 1
Assignment 2
Assignment 3
Assignment 4
Assignment 5
Assignment 6
Assignment 7
Assignment 8
Assignment 9
Assignment 10
Assignment 11

Spring 2008

Course Overview:

From the bluebook:


Introduction to the concepts, techniques, and applications of computer science. Topics include computer systems (the design of computers and their languages); theoretical foundations of computing (computability, complexity, algorithm design); and artificial intelligence (the organization of knowledge and its representation for efficient search). Examples stress the importance of different problem-solving methods.
After CPSC 112a or b or equivalent.

          Time: 11:35-12:50 MW
          Place: TBD

CS201 is the basic introductory course for Computer Science; in particular, it is not a "service'' course on programming, or computer literacy, or whatever.  Its purpose is to teach the principles of computing and information processing, with attention given to all levels of the computing hierarchy: from machines, to operating systems, to programming languages, to theory of computation.  Details about course coverage can be found in the syllabus.

The pre-requisite of CPSC 112 is not strictly necessary -- if you have done any programming at all, you should be fine, and even if you've done none at all, you may still be fine.  It will be more important for you to be pretty good at thinking abstractly.  I hesitate to say "good at math", because most people will equate that to having a strong background in calculus, whereas we will not use any calculus at all in this course.  If you're a logical thinker, and are good at solving problems, you should be fine.  If you have any questions about your preparedness, feel free to email me with a description of your background.


Prof. Paul Hudak
Office hours:  by appointment -- send me email and I will make time for you
Office: 308 AKW (Arthur K. Watson Hall, 51 Prospect St)
Phone: 432-1235
Email: paul.hudak@yale.edu

Teaching Fellow:

Amittai Aviram
Office Hours:  1:00-3:00pm on Fridays
Office: 311 AKW
(Arthur K. Watson Hall, 51 Prospect St)
Phone: 646-483-2639
Email: amittai.aviram@yale.edu


There are two required textbooks for the course:

The New Turing Omnibus -- 66 Excursions in Computer Science
by A.K. Dewdney
Computer Science Press, New York, 1993
ISBN 0-7167-8271-5

The Haskell School of Expression --
Learning Functional Programming through Multimedia

by Paul Hudak
Cambridge University Press, New York, 2000
Paperback - ISBN: 0521644089
Hardcover - ISBN: 0521643384

Both books should be available now in the Yale Book Store -- if not, please let me know.

Programming Language:

This is not a programming course per se, indeed an underlying theme is that Computer Science is more than just programming.  On the other hand, programs are concrete manifestations of many abstractions underlying Computer Science, and thus it is helpful to use a programming language to convey many of the ideas in this course.  We will use the functional language Haskell for this purpose.  You will find that Haskell is quite a bit different from other programming languages that you have used, but it is well suited to this course, and will hopefully expand your understanding of what a programming language is.  Pretty everything you'd ever want to know about Haskell can be found at the website haskell.org.

(Other instructors teaching this course use the Scheme programming language.   In some ways Haskell can be viewed as a strongly-typed variant of Scheme.)

Computing Resources:

The Haskell implementation that we will use is called GHC, and it is installed in the Department's educational computing cluster (call the Zoo), which is located on the third floor of A.K. Watson Hall (the Computer Science Department, at 51 Prospect Street).  You can also easily download your own version of GHC from haskell.org/ghc.

Please visit: zoo.cs.yale.edu/cgi-bin/accounts.pl to register for this class in the Zoo, even if you already have an account in the Zoo.   By registering for the class, a work directory will be created for you earmarked for this class.

Details on how to use Haskell and GHC will be forthcoming.

Web Page and Newsgroup:

This web page (plucky.cs.yale.edu/cs201)  will the source of programming assignments, solutions, and other relevant information.  Be sure to check the website regularly -- it may contain important information, such as hints for and/or corrections to homework assignments!  We will also use the Yale "classes*v2" server, at classesv2.yale.edu, for general announcements.

Required Work:

There will be (more-or-less) weekly problem sets. The work will be graded by your TA and returned, along with solutions, nominally within one week.  Late work will be accepted at the discretion of the instructor and/or TA and will generally be subject to a late penalty, unless accompanied by a Dean's excuse.  Assignments turned in after solutions have been published will not be accepted, even with a Dean's excuse, although alternative make-up work may be authorized.

Please work on the homework bit by bit over the week, rather than leaving it to a marathon session the night before it is due.  This will give you a chance to mull things over and to ask appropriate questions in any help sessions that we might schedule.  It will also prevent over-crowding in the Zoo.  You should do the required reading, textbook exercises, and other preparation before beginning programming assignments, since it is generally much more efficient to test, debug, and run a program that you have planned carefully than to try to do the planning as you go.  (A non-trivial percentage of the assignments, by the way, will not involve any programming at all.)

It should go without saying that when you hand in (electronically or otherwise) a paper with your name on it, I assume that you are certifying that this is your work, and that you were involved in all aspects of it.  It is Ok to work with other students on the concepts underlying an assignment, but you are expected to do the actual assignment on your own, based on your own level of progress with the material.


Your grade will be based on a combination of homework assignments and exams, with a significant weight on the former.  That is, you are expected to do all of the homework assignments (except one, as discussed above)!  Negligence in completing problem sets will result in a low grade, even if performance on exams (mid-term and final) is good.