This course will serve as an intensive introduction to the design and implementation of significant software projects, as well as an introduction to object-oriented programming using C++. Specifc topics include:
Note that this document can be found on the Web at http://www.cs.uga.edu/~dkl/1302/Fall99/syllabus.html
Office: GSRC 219D, 542-9269
CS 1302 email: cs1302a@gemini.cs.uga.edu
I am a faculty member in the Computer Science Department at the University of Georgia. My main area of research is parallel and distributed computing.
Office hours are for you. Please do not hesitate to come to my office. Office hours will usually be very busy right before an assignment is due; if you start the assignments early and come to my office well before they are due, you have a better chance of avoiding the rush. Due to my busy schedule, I cannot accept drop-ins outside of office hours.
I will also be available by appointment; please send me email to set one up. Please note that I will not be able to accept all requests for appointments, especially around program due dates. If you do wish to see me outside of office hours, you need to make an appointment. I am more likely to accept appointments on Tuesdays and Thursdays --- Mondays and Fridays are my research days.
Finally, please keep in mind that office hours are not a substitute for missed lectures.
There is one additional rule with regard to office hours: After we learn about using debuggers, I will not help any student that is not using some kind of debugger.
Office Hours: Monday, 3-4pm, GSRC 307
There are students trying to add this course, so if you do not have the prerequesite, I will be forced to drop you from the course.
The required textbooks for the course are Object-Oriented Programming Using C++ by Pohl and Data Abstraction and Problem Solving with C++ by Carrano. You will be expected to read any assigned material. We will not be able to cover all assigned reading in lecture. Please note, however, that you are responsible for any assigned material. Specifically, exam questions covering reading material are fair game.
Attendance at lectures is optional. You are, however, responsible for all material covered in lectures. We will often be discussing material different from the textbook. I feel that the lectures are the course; I will do my best to make them interesting. I believe that you won't just be able to read the notes and succeed.
You should come to lecture prepared. Ideally this means you have read the assigned material in advance. I am aware that this will not always be possible -- at least review the previous lecture.
"Lecture" is really a misnomer. Ideally, we will have a discussion as opposed to me just lecturing. Please do not hesitate to ask questions; you might think your question is dumb, but more likely, many people are wondering about the same thing.
Grades will be assigned on the usual A-F basis. Grading will be absolute; there will be no "curve". Achieving a 90% will guarantee an "A", 80% a "B", and so on. However, when the final grades are given, it could be the case, for example, that an 85% gets an "A". Do not confuse this with a curve, however. If everyone does A work (as I hope), everyone will get an A. If everyone does C work, everyone will get a C. So that you know your grade at all times, four fictitious students will be given grades for each assignment and exam. These students will be named "Min A", "Min B", etc., indicating the minimum score for each grade.
There will be at least four homework assignments, seven programming assignments, two midterms, and a final. Their approximate weights will be as follows:
Please note that these are tentative. Relative weights of assignments can change upon the whim of the instructor. Also, you will not pass the course with a grade of C or better unless you get a C or better on at least one of the exams.
The class schedule will be updated quite often; you should reload this page often. Please note that due dates can change up on the whim of the instructor.
It's a good idea to read the assigned material before lectures. You can find the material that will be covered in each lecture on the Class Schedule page.
Written assignments will cover the material in the book and in lecture. Because these are not graded, you are free to work collaboratively.
The programming assignments will be written in C++, and submitted to cs1302 using the "submit" command. You are welcome to use your own C++ development environment, but you must submit a working version that runs on UNIX. Hence, I suggest that you thoroughly test your program on UNIX before submitting.
Furthermore, each program submitted with a makefile and must compile using the make command. If it does not, you will be penalized.
You will work individually on all projects.
Part of each assignment may include turning in a design document; if so, this document will count as part of the grade. You will be expected to turn in a typed, formatted, or word processed document; handwritten documents will receive no credit.
Programs must be written according to the class style guidelines. If you do not follow the guide, you will receive zero credit on that component of the grade.
Tentatively, the projects will be:
Please note that other than programming assignment 1, each assignment in this class builds on previous ones. This means that it is vital that you correctly implement each assignment. You will not be excused from assignment N just because you did not get assignment N-1 to work correctly. Further, it is possible that some of the test cases will be exactly the same from project to project. Note that I will not be handing out the solutions to each assignment, either. This means that if you do not keep current in the class, you will likely have trouble.
Your projects will be tested by the TA or me. Test cases are generally pass (full credit) or fail (no credit). This means that if you fail every test case, you will get a very poor score on the assignment (part of the grade will cover your programming style, but your score will be poor nonetheless). You are responsible for testing your programs to ensure their correctness. Note that just getting the program to compile is not enough; similarly, just getting the program to pass a few test cases is not enough. You are welcome to share test cases; this is often the best way to ensure that your program works.
It is sometimes the case that one small bug caused a disproportionally large number of test cases to fail. In such a case, you may be eligible to correct your mistake and get some of the points back. See me if you believe you have such a case.
All assignments are due at the start of class. Over the course of the semester, each person will receive 3 late days. These can be used in any combination on the programming assignments and should allow you to schedule around deadlines in other classes you are taking. Note that a weekend counts just as regular days do; in other words, if an assignment is due Friday and is turned in Monday, it is 3 days late. When you have no late days left, you will lose 10% per day, without exception. If an assignment is more than 3 days late, you will receive a zero on the assignment. Late days cannot be used after classes have ended. Please note: if your assignment is even one second late, it's late, without exception.
Please start early on programming assignments. I will warn everyone of this several times, but surely people will ignore these warnings (computer scientists, by nature, are procrastinators). However, the fact remains that in the real world, there is a penalty for lateness, unless you happen to be working for Microsoft. One suggestion: if you think that you can do a program in 3 days and you have 2 weeks to do it, do it during the first three days.
If you are sick and have appropriate documentation, always let me know as soon as you get sick. It will be to your disadvantage to tell me after the fact that you were sick; you may not be excused from the regular due date.
Please keep in mind that social events (e.g., fraternity/sorority parties, football games, all-night Quake contests) are not acceptable excuses for late work and will be immediately rejected. If you have a conflict that is school sponsored (and academic to some extent), I will consider but not necessarily grant a request for an extension.
Note that scheduled downtimes are not an excuse for late work.
There will be two midterms and a final. The exams will be open book and open notes; however, you may not bring in any other books besides the course text. The exams will not be simple regurgitation of the material covered in class; rather, they will be designed to see if you understand the material.
Without prior arrangement, any missed exam will result in a grade of zero.
Cheating will not be tolerated in this class. You are allowed, and in fact encouraged, to discuss the programming assignments with other students. However, these must be very general discussions. For example, discussing the need for using an array versus using a linked list is fine; however, discussing how to insert to a list or an array is not. If you have any doubts about what you are doing, ask me. I hand over all cheating cases directly to the Academic Honesty department. Their punishment, if you are found guilty, carries with it a minimum of a failing grade in the course and a transcript notation. This means that if I catch you cheating, you're not just going to get away with an F on that assignment; the punishment is much stricter than that. So, simply put, don't cheat.
Note that copying materials from the Web is a violation of academic honesty. There are many other schools that teach C++; it is even possible that there may be code posted that could help you on an assignment. Copying anything from any Web site is forbidden and will be considered exactly as cheating on assignment. Furthermore, accepting code written by other students in previous or current offerings of this class will be considered a gross violation of the academic honesty policy. If I catch you doing that, I will not only hand over the case to Academic Honesty, but I will also recommend that you be suspended from school. Again, if I catch you copying code, I will do my best to make sure you get the harshest penalty possible, including expulsion from the university.
Please note that unfamiliarity with the rules and regulations of the academic honesty environment at the University of Georgia will not be grounds for leniency. In other words, if you come from a background where collaborative work is the norm, you must realize immediately that it is not allowed in this class, unless cleared by me first.
You may drop the class during the first three days without an annotation ending up on your transcript. Thereafter until the drop day, you may drop the class with an annotation. An incomplete will only be considered in a case where there is a documented medical evidence and you are making satisfactory progress in the course. If you have a medical emergency and are not making satisfactory progress after the drop date, you may be offered a late withdrawal; this is up to the instructor.
First, you are responsible for reading and understanding this entire syllabus. I will hold you to the rules set forth within this document. Second, any computer science programming course involves a significant amount of work. This class will have more work than most computer science courses. If you do not feel you have the time to spend, you may want to think about taking a different course. I expect you to treat this class professionally.
I will be using the Web as much as possible for this course. Handouts will be rare. In addition, I will create a mail alias for the course, which will allow me to "post" information in a place where everyone will surely see it.
Class announcements, such as due date and assignment changes, will be made by email notification and/or on the Web. You are therefore responsible for checking these two places. If you make an error because you did not check the Web and your email, I will hold you fully responsible.