Introduction to Computer Science II -- Course information

Be sure to read all of this page!


Description

Knowing the basics of algorithmic thinking and programming is a good start, but there's must more beyond that. What types of problems can be solved this way? Are there different ways of structure a program that might better suit some problems? What about more intricate algorithms and data structures? With these ideas in mind, this course will have two goals:

  1. Examine, in some depth, the topic and underlying concepts of object oriented programming (OOP).
  2. More thoroughly develop algorithmic problem solving skills and the ability to express solutions through programming.

Object orientation provides another layer of abstraction beyond the creation of procedures (a.k.a. functions or methods). It not only allows you to define new kinds of data (beyond the primitive types such as int, char, float, etc.), but also to define the methods that operate on that type of data. From this basic idea comes a number of ways to extend and refine known data types, encouraging the creation well-encapsulated solutions. Using OOP, we will quickly find that the focus of solving a problem becomes less the sequence of steps performed by a specific method, and more the structural and functional relationship between parts of the program. (Sound like gibberish? That's OK -- it will make sense before too long.)

We will begin with a review of basic Java. The we will be dig into OOP, concepts, all the while using those concepts for increasingly complex problems. Some of our focus will also be on producing elegant code -- after all, programming is writing, and intended, at least in part, for other people to read. As we hone our programming and problem solving skills, we will explore a set of interesting uses of computation, including cellular automata, machine learning, and data compression (and perhaps others).

The basic topics are given below, grouped (loosely) into categories. We will address these topics in some kind of interleaved order:


Lectures, labs, and materials

We will meet three times per week for a 50 minutes each. The class lectures are WF at 1 pm in SMudd 205, and the lab is M at 1 pm in SMudd 014. Note that sometimes we will vary the use of labs and lectures in a given week -- watch the course annoucements for such changes.

You are responsible for the material presented in every lecture. There is no attendance policy, but I strongly recommend that you attend all lectures. If you miss one, it is your responsibility to obtain the material that you missed.

If you must miss a class meeting due to illness, please contact me as soon as is reasonable. We will then make arrangements to address the material and discussion that you may have missed.

If you must miss a class meeting due to another commitment (e.g., a musical performance, an athletic contest), then do not contact me. How you choose between scheduling conflicts is for you to decide. If you choose to miss a class meeting in order to do something else, then you are responsible for the material that you miss; moreover, you should not expect that I will help you to address that missed material. If any work is due at the time of the class meeting that you miss, then I expect you to submit it beforehand.

There is no text book for this course. If you really want one as a reference, come and talk to me, and we'll try to find one that suits your needs. Keep in mind that the web can, if used wisely, be a handy resource for programmers.


Projects and their submission

There will be a more-or-less continual stream of projects throughout this course. New projects will typically be assigned during one of our labs so that we can discuss and begin work on their solutions. These projects will, at times, build on previous projects. It is therefore important not only that you complete each assignment correctly and in a timely fashion, but also structure in a way that modifications and additions are easier; that is, you should write modular, well encapsulated, well documented code.

You will use the College UNIX servers, remus and romulus, for your programming work. While you may choose to program on another platform, your programming ultimately must compile and run on the UNIX servers, since those are the machines on which I will test it. Submissions will be performed electronically from remus and romulus, and graded work will be returned to you electronically as well.

The policy for late submissions is simple: A project not submitted by its deadline will receive a failing grade.

Here are the critical rules regarding extensions for an assignment:

This class will move from one project to another too quickly for late submission to be regularly handled. I will seek to grade and return your work to you quickly, and that will be possible only if all submissions are provided by the given deadlines. Those deadlines will always be explicitly and clearly stated.


Exams

There will be three exams:

  1. Mid-term #1 will be a 50 minute exam during a regular lecture or lab time during the 5th week of the semester. This exam will cover material from weeks 1 through 5.
  2. Mid-term #2 will be a 50 minute exam during a regular lecture or lab time during the 10th week of the semester. This exam will cover material from weeks 6 through 10.
  3. The final examination will be 3 hours. This exam will cover material from the entire semester. The final exam will be held on Thursday, December 20, from 2 pm to 5 pm in Seeley Mudd 204.

Each exam may ask questions both from lectures and from projects. I am likely to ask you to apply ideas and methods in combinations that we have not yet explored; that is, I expect you to understand the material well enough to use it in ways that are novel to you.


Grading

Your grade for this course will be calculated based on the following forumla:

Note first that although the projects will likely take much more of your time and effort, the exams count substantially toward your final grade. Also note that there are no participation points. This absence is not at all a recommendation that you sit quietly. To the contrary, I highly recommend that you participate in class, not because it earns you points, but because it is the best way to ensure that you are on top of the material and understand it well.


Academic honesty


Your responsibilities and my availability

I hope that this page has made clear the structure and intent of the course, and well as the expected workload and your responsibilities. By presenting this information at the onset, I hope to avoid using our valuable time on misunderstandings and negotiations.

I will be available to meet with you about the material, projects, exams, lectures, or any other aspect of the course. Simply email me and we will set a time to meet as soon as possible. You can also try to find me in my office (SMudd 406) or the Faculty Research Lab (SMudd 015).


Scott F. H. Kaplan
Last modified: Mon Aug 27 10:47:44 EDT 2007