Syllabus
CSCI 3310
Advanced Data Structures and Data Abstraction
Section 001
Spring 2008

Class meeting 2:00-2:50 MWF, Austin 304
Instructor Karl Abrahamson
Office Sci&Tech C-113
Office hours MWF 12:50-1:50;
TTh 4:50-5:50pm;
or by appointment
Phone 328-9689
Email abrahamsonk@ecu.edu
Course web page www.cs.ecu.edu/~karl/3310/spr08/
My web page www.cs.ecu.edu/~karl/
Text Data Abstraction and Problem Solving with Java: Walls and Mirrors by F. Carrano and J. Prichard.


Prerequisites

The prerequisite is CSCI 3300 or equivalent. You should be familiar with elementary data structures, pointers, and memory allocation.

This course offers more advanced material on the general topic covered in CSCI 3300, and so, according to university policy, you cannot repeat CSCI 3300 for credit after completing CSCI 3310. If you received a grade of less than C in CSCI 3300, or if you need to retake CSCI 3300 for any reason, do not take CSCI 3310 without consulting me.


Topics

This course covers two areas related to computer programming.

  1. It covers abstract data types, modular programming and object-oriented programming, including inheritance and polymorphism.
  2. It continues the study of data structures and algorithms begun in CSCI 3300.

The following is a partial list of topics to be covered.

  1. Abstract data types and modules.

  2. Using objects and classes.

  3. Inheritance and polymorphism.

  4. Virtual methods and abstract classes.

  5. Data structures for sets and tables.

  6. Introduction to algorithm design techniques.

  7. Establishing correctness of algorithms.


Competencies

After completing this course, a student should have the following compentencies.

  1. The student should comprehend principles of modular software design and abstract data types, and should be able to apply that knowledge to the creation of reliable and efficient computer software.

  2. The student should be able to develop moderate size computer software consisting of several well-designed modules, in an object-oriented manner, given the specifications for that software.

  3. Students should be able to develop algorithms for computational problems, including algorithms that require sophisticated representation of information, and be able to demonstrate the correctness of those algorithms.

  4. Students should be familiar with data representation schemes, and be able to select an appropriate scheme for a given problem.


Attendance policy

You are expected to attend class. You are responsible for announcements and assignments given in class. If you miss a class, it is up to you to obtain notes and any other information that was provided in the class. Excuses that you did not know about something because you did not come to class and did not obtain the information will not count for anything at all.

Those who do not attend class can count on doing poorly in this course. If you choose not to attend class, then you must live with the consequences of that decision, however bad they are, regardless of your reason for not attending class.


Incompletes

No incompletes will be issued in this course except for extraordinary circumstances, and even then only if you are nearly done already, and have done work of sufficient quality that it is realistic that you can pass the course. An incomplete will not be given simply because a student could not find the time to do the course work. By registering for this course, you are committing to finding time to do the work.


Grading

There will be a quiz approximately every other Wednesday, on Jan 23, Feb 6, Feb 20, Mar 5, Mar 26, Apr 9 and Apr 23. Grading will be as follows.

Seven quizzes 35%
A comprehensive final exam 21%
Two small programming assignments 6%
Three large programming assignments 30%
Attendance 8%

You will start with 8 points for attendance, and lose two points for each unexcused absence, up to a maximum of 8 points.

Cutoffs for grades will tentatively be 90% for an A, 80% for a B, 70% for a C and 60% for a D. Those cutoffs will not be raised.

Important Proviso

It is not possible to learn the material of this course effectively without actually "getting your hands dirty" and doing the programming. Accordingly: In order to pass this course, you must receive at least a 50% grade in the programming assignments. This outweighs the score computed by adding grades together.


Grading of programs

Each program must compile without fatal errors.

A program that does not compile automatically receives a score of 0, regardless of how close to correct it might be. The reason for this is that a program that does not compile cannot have been tested at all. I expect your programs to be tested thoroughly.

The program must be acceptably well indented. I need to be able to read your programs, and I will not read a program that is extremely poorly indented.

A program that is extremely poorly indented will receive a failing grade, regardless of how well it performs the task that it is required to do.

The following are broad guidelines for grading programs that compile and that are acceptably well indented. Many programs will not fit exactly into any of these classifications, but I will try to choose the best fit.

To receive an A (90-100), a program should work on all of the test cases that I use. It should be well indented and well commented. Comments should be clear, correct and complete. Every function should have a clear and correct contract. The program should be broken into fairly short, well-thought-out functions. Variable and function names should be sensible. It should follow all guidelines and requirements that have been set for the program. It should compile without warnings.

To receive a B (80-89), a program should work on typical test cases, though it might fail on more esoteric cases. It should be well commented and well indented, though minor problems might be present. It should be broken into fairly short, well-thought-out functions, with a contract for each function. It should mostly follow the guidelines and requirements that have been set for the program. The compiler should not report serious warnings that reflect mistakes in the program.

To receive a C (70-79), a program should work on at least some test cases. It must be reasonably commented and indented, though some comments might be misleading or incorrect. It should be broken into reasonable functions. It should mostly follow the guidelines and requirements that have been set out for the program.

To receive a D (60-70), a program might not work correctly on any test cases, but the basics of the design must be present, and the mistakes must not be so serious that they show a fundamental flaw in thinking. The program should mostly follow the guidelines and requirements that have been set out for the program.

If you turn in a partial program, I will grade it based on roughly what portion has been completed. For example, if you do half of the work, and that half looks very good, you might receive a grade of 50%.


Advice for doing programming assignments

Start early. You will hit snags, and you can count on a programming assignment taking longer than you think it should.

Finish early. Do not wait until the deadline to finish up.

Test thoroughly. The most common mistake among inexperienced programmers is to assume that their programs work after very limited testing. Try different kinds of inputs. Try unusual inputs. Be sure that you have exercised every part of the program. I recommend that you not do tests by hand. Instead, create a script that does a collection of tests automatically. That way, after each change, you can run the script and see that everything is still working, or at least find out what is not working. You can even create the test script before you write the program. Remember that fixing one thing sometimes ruins something else that used to work, so you want to rerun tests that worked before.

Do not give up. You are going to encounter problems. Count on it. You are not the only one who has difficulties writing computer programs. Do not throw in the towel at the first snag. If something is wrong, first determine what it is, then fix it. If you cannot see how to diagnose or fix the problem, ask for help.

Do what the assignment asks for. Do not make up your own assignment. If you decide to make temporary modifications to aid in development, be sure that you go back and repair them before turning in the assignment. Reread the assignment before turning in your work. Pay attention to details. If the assignment says to read information from the standard input, do not read it from a file called mydata.txt.


Recommendations for success

  1. Attend class. Arrive on time.

  2. Do not allow yourself to fall behind. Work on the assignments early.

  3. Read your notes and the book twice. Take a break in between. You will learn much more that way.

  4. Get adequate sleep. Sleep is important both before and after you learn new concepts. Sleep before enables you to concentrate, and sleep afterwards is critical for moving new information into permanent memory.

  5. If you are having trouble, seek help soon. Do not wait until it is too late.


Asking questions by email

You are encouraged to ask questions about your programs when you are stumped, especially if you come up against a difficulty with the language. For example, if you cannot understand why your program gets a compile error, and you are stuck, ask for help. Ask questions early, to leave yourself time to make progress after receiving an answer.

You can ask questions is by email. Send questions to abrahamsonk@ecu.edu. Please use a subject indicating that you are asking a question for CSCI 3310, and always include your name in your email. A reasonable subject for a question about assignment 3 is

CSCI 3310 question about assignment 3
Do not expect immediate answers to your questions. I have received questions at 11:00pm for assignments due at 11:59pm on the same day. They obviously did not get answered.


Student conduct

Smoking is not permitted in classrooms. Please turn off telephones while in class.

Students are expected to abide by the university's Student Honor Code. The homework that you do is a critical part of your education. Each student is expected to do his or her own work. That does not mean you are not allowed to discuss your ideas with other students. Working in groups can be beneficial, and I encourage you to talk through ideas with other students. But outright copying is plagiarism, and is unacceptable. Students who copy other students' work, or who allow their work to be copied, or who copy their work from other sources, such as the internet, will receive no credit.


Weather emergencies

In the event of a weather emergency, information about ECU can be obtained through the following sources:

ECU emergency notices http://www.ecu.edu/alert
ECU emergency information hotline 252-328-0062


Students with disabilities

East Carolina University seeks to comply fully with the Americans with Disabilities Act. Students requesting accommodations based on a covered disability must go to the Department for Disability Support Services, located in Slay 138, to verify the disability before any accommodations can occur. The telephone number is 252-737-1016.