PomonaComputer Science 52
Fundamentals of Computer Science
Fall 2008
Course Page Syllabus Assignments Resources



Course Overview: The goal of this course is to give you an understanding of the breadth of topics that are the foundation of the field of Computer Science. While it is not possible to introduce you to all of Computer Science in one semester, you will be exposed to the following topics: algorithms and complexity, computer architecture and organization, programming languages with a solid understanding of functional programming, finite automata and computability.

Prerequisite: Computer Science 51 or instructor's permission.

Time and Place: Tuesday and Thursday, 2:45 to 4:00 in Lincoln 1135.

Instructor
Professor Sara Sood
Edmunds 224
sara@cs.pomona.edu
Office Hours:
Mondays 10am-noon and 1:15-2:30pm,
Wednesdays 2 - 4pm,
Fridays: 1:15 - 2:30pm,
and by appointment.

Course assistants
Lucy Vasserman and Ian Carr
Edmunds 227 and 229 (lab spaces on the second floor of Edmunds)
Lab hours:  Sundays 8 to 10pm - Lucy,
                    Mondays 8 to 10pm - Lucy and Ian,
                    and Thursdays 7 to 9pm - Ian.

Course Web Page: www.cs.pomona.edu/classes/cs052/
You should visit this page DAILY for course announcements, assignments, and resources. Announcements will be posted on the main page, while assignments will be posted on the page titled "assignments". Be sure to also check out the page titled "resources" for useful texts and tutorials.

Textbooks:
While this is not meant as an exhaustive text for the class, we will use:
Ullman, Jeffrey D. (1998) Elements of ML Programming: ML97 Edition. New Jersey, Prentice Hall.

See the course resources page for online texts and other material.

Computer Systems: We will be using the Linux systems of the Computer Science Department. To obtain an account, go to http://www.dci.pomona.edu and follow the link "Request an account." Do this right away! Check with Matthew Bradley in Edmunds 219 if you have questions or problems.

Assignments
Assignments will be approximately weekly. Each are due in the dropbox at the time specified on the assignment. No late work will be accepted except for serious illness or similar emergencies (notify and work with the Dean of Students and the instructor on these occassions).

Submitting your assignments:
Assignments must be submitted via the "drop box" using the "submit" script as described in Assignment 0 before the time at which they are due. We'll discuss this in class, and the course assistants can help you with this if you have any problems. Each file you submit must include a descriptive header comment that provides the name(s), date, assignment number, etc. The files are to be named in the manner described in each individual assignment. Failure to follow this convention leads to headaches for the TAs and loss of points.

Important: The code in the files you submit must compile and run without errors. The only permitted warning is "calling polyEqual" No partial credit will be given for a submission that does not compile.

Collaboration:
I encourage you to collaborate on the assignments; however, there are few ground rules:
  1. You may (but don't have to) work with ONE other student on the assignments (excluding Assignment 0 which must be completed independently).
  2. You may not work with the same person for more than two assignments. Reason: You should learn to work with different people, and I want to make sure that no student is depending too heavily on another.
  3. Collaboration on assignments must be truly collaborative; sitting together and programming, alternating being the "driver" and "passenger."
  4. In cases where you do work ith a partner, you may submit one copy of the code (include both of your last names in the folder name as described above), but you must each complete and submit a separate "collaboration" report (see #5).
  5. Everyone (either working alone or with a partner) must submit a collaboration report. In this short report, list who you talked to about the assignment and in what manner, describe how well you and your partner (if you had one) collaborated and what role each of you played in the assignment. You should not share these with each other. If you did not work with a partner, your report should list who you talked to about the assignment and what exactly you talked about. Name your collaboration report collaboration.pdf (.doc, .txt, or .rtf filetypes are also acceptable here). Use the "submit" script to submit this document in the dropbox.
Grading:  Grades in the course are based on four components.

Assignments 48%
Midterm examinations 32%
Final examination 16%
Attendance and participation 4%

Class attendance is required. Attendance and class participation will be reflected in your grade. There may be opportunities for extra credit throughout the semester. I'll announce those opportunities in class as they arise.

Examinations: The dates of the in-class midterms are October 2nd and November 6th and the final examination is December 19th at 2pm.

Topics: The course falls into four sometimes-overlapping parts. The list below shows typical topics within each part.
  • Programming in the functional paradigm: structure, abstraction, correctness, recursion, and efficiency.
  • Algorithms and complexity: searching and sorting, O-notation.
  • Formal systems: BNF notation, context free languages, type inference and unification, secrecy and authentication.
  • Models of computation: data representation, circuits, finite automata, Turing machines, and Random-access machines.
We will use the programming language SML for most of the work in the class. In the section on models of computation, we will use the packages JFLAP and ISCAL. Toward the end of the class, you will gain some experience with the programming language Python.

Policy on Academic Honesty: In the past, there have been a few unfortunate instances in which students in the class have presented work other than their own. See pages 41–43 of the 2008–2009 Pomona College Catalog for the college's policy on academic honesty. Students from other colleges are governed by the policies of their home campuses.

You are allowed (encouraged, even!) to discuss general approaches to solving problems, but all work you submit must be your own. Working “together” or presenting variants of the same file is not acceptable. Do not exchange programs or program fragments in any form—on paper, via electronic mail, or by other means. Identical, or nearly identical, papers will be considered conclusive evidence of plagarism. Copying solutions from any source, including the web or previous CS 52 students, is not allowed. Contact the instructor if you have questions about what is appropriate collaboration.
Plagiarism will result in the following actions:
  1. In the first instance, a no credit will be given for the work submitted, and a letter reporting the incident will be sent to the office of the Dean of Students.
  2. In the second instance, a grade of F for the course will be given, and the matter will automatically be referred to the Academic Discipline Board at Pomona College or the equivalent body at another college.
Additional Information:  The following items are not part of the course but are of interest to Computer Science majors and potential majors.
  • If you are interested in Computer Science as a major, you ought to subscribe to Pomona College's Colloquium mailing list. It lists news, talks, and special events of interest to the Computer Science community at Pomona College. To subscribe, go to https://www.dci.pomona.edu/mailman/listinfo/Colloqsignuponly.
  • You may also be interested in subscribing to Harvey Mudd College's list, cs-info-l, which has similar announcements from HMC. Send an e-mail message to listkeeper@hmc.edu with the phrase "subscribe cs-info-l" in the body (not the subject line!) of the message. Do this from the account where you want to receive the mail.



Course Page Syllabus Assignments Resources