CSCI 2320 - Syllabus



Location and Time - Halsell 340, 11:20-12:35pm TR

Professor - Dr. Mark Lewis, Office: HAS 201K, Phone: 999-7022, e-mail: mlewis@trinity.edu. The best way to reach me typically is by e-mail. I check it frequently and try to respond promptly.

Office Hours - 2:30-4:30 MWR or by appointment. I'm in my office a lot so you should free to drop by. If you are coming from lower campus you can always call or write a short e-mail to see if I'm in and available at that time.

Text - "Introduction to Algorithms" by CLR and a C++ reference book. We have made "C++: The Core Language" by Gregory Satir and Doug Brown and optional text that they sell in the bookstore. It is a small, fairly inexpensive book that is aimed at people who already know C. If you already have a C++ reference book that you like you can stick with it. There are many other possibilities if you don't like the style of the O'Reilly books. Personally I like that style, but if you want lots of long examples it doesn't give you that. The main drawback of "C++: The Core Language" is that it doesn't cover many of the more advanced features of C++ that we will be using in this class. O'Reilly also publishes a more complete reference that you might consider if you don't want the light introduction. That book is "Practical C++ Programming" by Steve Oualline.

At some point if you find yourself doing extensive C++ programming you should also consider getting "The C++ Programming Language" by Bjarne Stroustrup. It is a no hold barred double barreled presentation of the C++ programming language. It's not light reading by any means, but it is about as complete as you are going to get without going to the 700+ page specification. You should also look into "Effective C++", "More Effective C++", and "Effective STL", all by Scott Meyers, if you do C++ programming for a living at some point. They are very informative and actually somewhat fun to read.

You will also continue using Java, but as you hopefully learned last semester, most of what you need for that can be found on the web unless you get into some more advanced topics. You will have an opportunity to get into one or more advanced topics this semester if you choose to use them in your design.

Course Description - This course is the third and final course in general programming for computer science majors, following the guidelines established by the Association for Computing Machinery. The primary focus of this course is to teach you the proper creation and use of data structures. This will include looking at the order analysis of various operations on different data structures and seeing how they perform in real testing with large data sets. To help diversify your programming abilities we will also be learning the C++ programming language and all of your assignments will include components that must be completed in C++. The course will also try to help teach you more about the process of constructing software and the best practices of our field including not only coding practices, but also testing and design practices.

As my previous students can attest, the courses that I teach are aggressive. I have one overriding objective in my courses and that is to make you think. If I make you think new thoughts for most of the semester I will have done well. If I give you new ways to think thoughts (old and new), then I will truly have succeeded. This course is not about busy work, though inevitably a fair bit of work will be required. Exactly how much work you have to put in will often be inversely proportional to how much you think about the work that you should be doing. Writing programs on the scale of most of the assignments for this course requires a significant amount of design and thought to make sure that what you are trying to do will actually accomplish what you want it to and that it will do it correctly. Failure to think nearly always leads to more work for you in the end.

Assignments - The assignments in this course will all be based around a single problem and you will be working on them in small groups. Each assignment and the project as a whole are broken into two pieces. One of the pieces is an application that collects information and acts on user desires. The other piece is setting up data structures that you will use as part of that application to store and work with the data. A description of the project for the semester can be found here.

For each assignment you will be expected to not only submit code that properly solves the problem, but also a design for that program that illustrates your thought processes in creating that program. The designs will be due a week before the programs themselves are. They will constitute 20% of the grade for each assignment and will not be accepted late (see below for late policy on the programs themselves). You will also submit a modified design with the final program that reflects the changes you had to make while writing the actual implementation. The designs will be a combination of UML diagrams produced by Together and the generated documentation from the doc comments you add to the subbed out code.

For each assignment you will also submit a written report of the work you and the other members of your group did for that assignment. It should include a description of what each group member worked on and how the design decisions were made. It should also chronicle any changes that you made to older parts of your code in that particular assignment.

The work you submit for your assignments should be a product of you and your group members exclusively. You should feel free to confer with your fellow students or other people you might know about general questions dealing with the design of your programs or about specific syntactic problems. Having other people write code for you, or working from other people's code will be considered cheating and will carry repercussions as dictated by the student handbook. In general, the safest route when you have questions about assignments is to come talk to me. It should be said that this should in no way preclude you from studying the concept of computer programming with your follow students. Only discussions specific to the assignments are potentially risky. To help give you a good time to talk to me about code, I will be holding open labs on Monday afternoons during my office hours so that it is easier to work with many of you at the same time.

Coding Practices - You are expected to follow certain coding practices for any code that you turn in as work in this course. In this sense I'm fairly lenient. I only require uniform indentation and reasonable documentation. For this class I'm requiring some documentation comments for all classes and methods so that javadoc documentation can be generated for your code. The design work should force you to write enough documentation that incorporating it into the code will be easy. I will not help you to debug any code that it not well indented. I don't care exactly how you decide to align brackets or put in white space (though some white space is helpful), but you have to be uniform, and all blocks of code should be indented beyond what the surrounding code had been.

Grades - The grade for this course will be composed of four components. These components and what the entail is discussed below. This table summarizes how each component contributes to your grade in the course.

Component
Percentage
Assignments (8)
50%
Tests (2)
30%
Quizzes (6 drop 1)
10%
Class Participation
10%

Assignments - The nature of the assignments was discussed in the previous section of the syllabus. Eight assignments will be given over the course of the semester and each will contribute equally to this portion of your grade. Unless otherwise specified, all assignments will be due on the date shown on the course schedule. Late assignments will be deducted 10 points for each day that they are late. After 5 days they will not be accepted. The last assignment is due during the finals period. We will discuss when you should turn it in at the end of the semester.

Tests - There will be two tests during the course of the semester. The first is an in-class midterm exam and the second is the final. Each will count for 15% of your course grade. See the lectures page for the date of the first test. The final will be held during the normally scheduled time, 6:30pm on 12/12. If you are going to miss a test I MUST be told in advance, even if it is a phone call 5 minutes before class. If you have to take a makeup exam odds are good that it will be at least slightly more difficult than the original.

Quizzes - There will also be six quizzes given during the course of the semester. These quizzes serve many purposes in this class. First, it gives both you and I information about how well you are understanding the material in the class. Second, and more importantly, they will help you prepare for the test and the final. The quizzes will be short, 10 minutes, however, they will have questions that are similar in format to what you can expect to see on the tests (only fewer of them). They will be given promptly at the beginning of class to help insure that you arrive on time, and they will often cover material from the reading for that day to help provide you with incentive to actually do the readings. Note that these quizzes do not have a huge impact upon your grade. Because one of them is dropped, there will be no make-up quizzes.

Class Participation - I like you to participate in class. Discussion is typically far more entertaining than listening to me drone on for 50 minutes. It can also be more educational as the people most inclined to understand your confusion on certain points will be your piers. This part of the grade will actually come from 3 sources. The first is attendance. You can't participate in class if you aren't there. The second is verbal participation during class. I do keep track of this over the course of the semester and it does matter. Third, you can send me links to interesting things that you might happen to find on the web. If I think that they are significant enough, I will link them to the course web page. Each link you send me is worth participation points.

Extra Credit - During the course of the semester there will be a number of opportunities for you to receive extra credit. Most of the assignments should include extensions that you can do for extra points. In addition, I typically place extra credit problems on the quizzes and tests. You can also receive extra credit for displaying that you are thinking about the course material in a substantive way outside of class. This includes sending me links to sites that you think might be either helpful or just of interest to your fellow students. I'm considering also giving extra points at the end of the semester for students who participate at TopCoder.com and extra points to the student with the highest ranking there. This should not take away significant time from your normal studies though.