COMP 410 Syllabus Fall 2012

Course Instructor: David Stotts office: 144 Brooks, 962-1833 http://www.cs.unc.edu/~stotts

Course Web page http://www.cs.unc.edu/~stotts/COMP410/

Office Hours: See web site, TBA. I’m around much of the time; feel free to call

Teaching Assistants: See web site.

Meetings: Class will meet TR, 11:00 to 12:15 in FB009. First class is Tues, Aug 21, 2012.

Texts: Data Structures and Algorithm Analysis in Java, M.A. Weiss, 3rd. edition, Addison Wesley, 2012; ISBN-13: 978-0132576277 (2nd ed. will work fine if you can get one)

Email: Please direct all class emails to the class accounts:

stotts.comp410 at gmail.com Any email sent to my personal UNC account risks getting lost in the huge pile of other stuff I get every day. I will communicate with you via your email addresses given in faculty central for the class. Please get in the habit of scanning your email often for information from me about the class. The titles of the email message will contain “COMP 410”.

Web page: The course web page is http://www.cs.unc.edu/~stotts/COMP410/ Some course material will be distributed only on the web. We will also use Sakai for class assignments and grades.

Software: We will develop Java programs in this class. You may use your favorite IDE but in class I will use the jGRASP environment, which is compact, efficient, and a free download. Instructions are on the course web page. We may also do some work with ML, a functional programming language. The ML interpreter is also a free download, and will run on your laptop. If we use ML, it will be elementary and a small part of the class programming.

Supplies: You should have some means of backing up your programs (e.g. flash drive, SD chip, CD/DVD writer, etc.). Do not allow your dog to eat your homework.

Exams: There will be two examinations – one midterm and a final (to be held in the time slot given in the campus exam schedule, which is Thursday Dec. 13 at 12:00 noon for Fall 2012). All in-class exams will be closed book, closed notes, closed computers, closed cell phones, closed classmates, closed everything other than your brain.

Grading: Approximately 40% of your grade will be based on homework/programming assignments; approximately 60% will be based on exams. This is subject to revision.

Your programs will be graded for both correctness and style. You will turn in an electronic copy of your program (through Sakai, vie email, or by posting on your web site, stay tuned for instructions each assignment). Correctness will be determined by the TA and/or instructor actually running the program. The style grade is determined from viewing the source code.

More information about style requirements will be given later. Each program will be graded on a 100 point, negative scale. That is, you start with 100 points and we deduct points for errors of various kinds. Programs assigned later in the semester will be weighted more heavily than the earliest programs.

Programs: There will be approximately five graded assignments, a mixture of programming and math/pencil-pushing. Each assignment will have a specific date/time deadline; late programs will be penalized as follows: 10% per day. It is always better to turn in something, even if it is very late, than to turn in nothing.

Honor Code: I am very serious about the honor code. It’s very easy to cheat in many COMP courses thanks to the digital world; it’s also very easy for us to detect plagiarism. So don’t do it! Observe the University Honor Code. You are encouraged to work together for better understanding of the course material and assignments. But do your own actual coding by yourself. You may not collectively write a program with a friend or classmate and then several people submit copies of the same code.

Also, while working together can enhance your learning, too much reliance on others can be disastrous at exam time. Also, you are free to use any code that was presented in class, in help sessions, or in the course texts without permission or citation. You can use code that you found in other texts, but cite the source (no penalty). You may not use material from previous offerings of this course.

Et Cetera: Incompletes will be given only in dire emergencies such as illness or a family emergency. Documentation (such as a physician's note, dean’s note, etc.) will generally be required. Falling behind in your work is not an emergency.

Course personnel Include teaching assistants (TAs), and the instructor. They have the following duties:

 TA: TA will hold regularly scheduled office hours; they will be available by phone and email as well as at their office. Programming questions about algorithm design as well as any questions that cannot be handled by any attendants in campus computing labs should be taken to your teaching assistant or to the instructor. Problems with or questions about course details and administration should be initially discussed with a TA.

 The instructor: The instructor is available for assistance with any academic or administrative problem that your teaching assistant can't handle, or to register complaints. Office hours will be announced.

 NOTE: The staff of Academic Technology and Networks (ATN) and the Center for Instructional Technology (CIT) cannot be aware of the educational objectives of each instructor and of the progress of each section. Accordingly, they have been asked NOT to assist you. Please don't bug them with your bugs. Your TAs and your instructor are for that.

 PLEASE DO NOT CALL THE INSTRUCTOR or TAs AT HOME!

Criteria for Programs

 Correctness. Programs will be expected to be 100% correct. This will require you to think through all the possible types of input and test for correct handling of each type.

 Clarity. Programs must be readable by humans. This requires that they be based on clear thought and be well-presented and well organized. A good presentation requires well-written code, careful formatting and good comments. Choose descriptive variable and class names. Choose good algorithms (the main purpose of this class!)

 Cohesion. Programs should be as modular as possible. Make good choices of classes and methods. Methods in a class should belong together, and serve purposes that are related to the reason the class exists. Methods should perform one main task. If you need two main tasks done, make two methods. Good modularization leads to ease of re-engineering, extension and modification, and reuse.

 Coupling. Classes/modules must interact via their methods. Strive for “proper” coupling. Too much coupling implies bad cohesion in modules. No coupling… well that’s impossible… if classes do not interact, then they are independent systems and not one program. A good design strikes a balance between cohesion and coupling.