CSCI 1730: C++ and Systems Programming (Spring 2004)
Quick Links
Class mailing list home page
Lectures
Course Text
Grading Policy
Class Schedule
Programming Assignments
Late Work
Exams
Academic Honesty (important)
Withdrawals and Incompletes
Course Overview
This course will cover C++ and systems programming. Specifc
topics within C++ include:
- Basic elements of C++ (all of the "C" components)
- Arrays and Pointers
- Classes
- Overloading
- Inheritance
- Polymorphism
- Templates
Within systems programming, we will cover:
- Files, Directories
- File Systems
- Processes
- Signals
- Pipes
- Sockets
Note that this document can be found at
http://www.cs.uga.edu/~dkl/1730/Spring04/syllabus.html.
Lectures: TTh 2-3:15, and W 2:30-3:20; all days in Hardman Hall 101
Final Exam: Tuesday, May 4, 3:30-6:30pm
Office: GSRC 219C, 542-9269
I am a faculty member in the Computer
Science Department at the University of Georgia. My main areas of
research are parallel and distributed computing, operating systems, and
mobile computing.
Email: dkl@cs.uga.edu
CSCI 1730 email: We will be using a listserv for the class
mailing list. To sign up for the listserv,
go to this
address. To send email to the list, send mail to sysprog@greenhouse.cs.uga.edu.
Where to send email: Unless you are asking a
personal question that you only want me to read (e.g., you are very
sick,
you have a situation that warrants a deadline extension, you want to
know about your grade), please send email
to the class account.
Note on email questions: If you are asking a
question regarding one of the programs, you must include in the message
how you have tried to solve the problem you are emailing about.
Otherwise, we will not be able to help you.
Office Hours: T 12:15-1:45, W 8:30-10, and by appointment
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: I will not
help any student that is not using some kind of debugger. For
example, if you come in to obtain help with a segmentation fault that
you are trying to debug, and you cannot answer the question "On what
line is the program crashing?", I will not help you. Note that we
will cover how to use a debugger in class --- it is not hard.
TA: Bryan Veal
Email: veal@cs.uga.edu
Office Hours: M 1:30-3, W 10:30-12, GSRC 301
Prerequisite: CSCI 1302
The course is nearly full, and 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.
Reading Materials
The required textbooks for the course are C++: How to program by
Deitel and Deitel, as well as UNIX Systems Programming by Stevens.
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.
Note also that this class requires that you learn C++, with the
assumption that you already are proficient in Java. We will be
moving quickly through the syntax of C++, with a lot of reading
assigned. You will be expected to keep up. Doing the
reading will
be a big part of this.
Lectures
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.
Several of the lectures will be PowerPoint slides designed by the
authors of the course textbook.
To download them (modified by me), click here.
Grading
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. Graduate students will be graded on a different scale than
undergraduate students.
There will be several programming assignments, a
midterm, and a final. Their approximate weights will be as follows:
- Programming assignments: 50%
- Midterm: 20%
- Final: 30%
Please note that these are tentative. Relative weights of
assignments can change, although I would expect them to end up fairly
close to those listed above.
Also, you will not
pass the course with a grade of C or better unless you get a C or better
on one of the exams. Please understand what this means---if you
get all A's on the programs, but fail both of the exams, you will not
receive a passing grade in the class. Note: I do not expect this
situation to arise.
Important: Your grade will be the one you earn. If you need
this class to graduate, I suggest that you earn a C or better.
Under no circumstances will your graduation status, visa status, or HOPE
status affect your grade. This includes situations like: (1) your
parents are coming for graduation, (2) your relatives are flying in from halfway
around the world for your graduation, (3) you have a job lined up and
have to start immediately, (4) you got all A's up to this point, and you
have never received a grade below a C, and/or (5) you will have to leave the
country if you do not achieve a certain grade.
The class schedule will be updated quite often; you should reload this
page often. Please note that due dates can change, although they
will never be made earlier.
Reading Assignments
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.
Programming Assignments
Please note that many assignments in this class build 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 likely that some of the test cases will be exactly the
same from project to project. In my experience teaching this
course, I have found that the most common reason for students
struggling is getting behind in the projects. Do not let this
happen.
Links to the programming assignments can be found on the
Class Schedule page.
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 zero on the assignment (it is
possible that a few points will be given for programming style, etc.,
but your score will be very 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. Note that if your program does not compile,
your score will be zero.
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. Note
that there is a minimum penalty for the bug, which is always at least
10 points per bug. So, if you had 2 bugs that caused you to lose
15 points, you are not eligible to receive any points back.
A tentative list of programs to be assigned is:
- Warmup C++ Program
- "Getting Used to Pointers" Program
- List Package
- Template List Package
- Overloading/Inheritance assignment
- Shell (will be divided into several assignments)
Late Assignments
All assignments are due at the start of class. Please
note: if your assignment is even one second late, it's late, without
exception. You will have to turn the assignment in before the
time it is due. I will not say "you missed by 1 minute, so it's
ok." Note that in prior years, I have given zeroes to people
that are just seconds late. There will be no exceptions, including
the case where your DSL, cable modem, or dialup connection from
home fails to work.
Furthermore, you will have to understand that the turnin
program on atlas is not instantaneous, so if you wait until one minute
before the program is due and the turnin program takes over a minute,
the program will be considered late.
I will try to schedule assignments around the due dates of
other computer science courses.
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. You
probably think that no one would ever use such excuses, but if you did
--- you would be wrong. On the other hand, 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. The systems go down once a month for backups, for a total
of a few hours. That is not a hardship. However, if there is an
unscheduled downtime for a significant period of time, I will make an
adjustment in the due date --- as long as the downtime occurs close to
the due date.
Exams
There will be one midterm 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. This includes the final --- do not plan a trip assuming
that I will change your final exam date, because I will not.
Cheating
Cheating will not be tolerated in this class. You are allowed to
discuss the programming assignments with other students. However, these
must be general discussions. For example, discussing the need
for using pointers is perfectly fine; however, telling one
exactly how the pointers are used is not. Any duplication of
even one line
of code is a violation of the academic honesty policy. 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 on the assignment and a transcript notation; the latter
item will certainly hinder your efforts to find a good job. 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.
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. Note that the last time I taught CSCI 1730, 5 out of
the 40 students were caught cheating.
If you cheat, we will catch you.
Note also that copying code from the Internet is also strictly
prohibited.
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.
Withdrawals and Incompletes
You may drop the class during the first four 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.
Warnings
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. Ask previous students
about the workload in this class. I expect you to treat this class
professionally.
Dissemination of Information
I will be using the Web as much as possible for this course. Handouts
will be rare. All lecture notes will be on the Web.
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.
You must sign...
You must sign the statement below and return this document to me.
Failure to return this document by Wednesday, January 14 will result in
your forced withdrawal from the class.
By signing at the bottom of this document I state that I have read
the entire syllabus and agree to abide by its terms.
Signed: