Course Overview

Course Description

Content
Principles of computer science illustrated and applied through programming in the object oriented language C++. Programming projects illustrate computational problems, styles and issues that arise in computer systems development and in all application areas of computation.

Basically, this is a course designed to teach you C++ and object-oriented programming. Those two general topics encompass many of the learning objectives below. In addition to those goals, the course should hone your programming skills, such as recursion, testing, and computational complexity.

Structure
Learning is structured in three areas: lectures, labs, and personal practice. Lectures will cover the theoretical material that you need to know and will evaluate your understanding of the content through quizzes and exams. Labs will challenge you with programming problems, pushing you to really understand how to program in C++. Personal practice will refine the basic understanding of labs and can transform you from an acceptable or good C++ coder into a materful coder.

Objectives
After successfully completing this course, students should be able to:

Instructor Information

Biography
I'm a PhD candidate in the Computer and Information Sciences Department. My PhD specialization is natural language processing, which seeks to both understand and generate real text/speech/etc using computer software. I remember being first interested in computers in 7th grade, and in high school, I took a few programming courses and did a programming internship in Java. I went to The College of New Jersey for my bachelor's in computer science, and came to UD for grad school from there.

Teaching Philosophy
Generally speaking, university courses should be difficult. They should push you just outside of your comfort zone and challenge you to learn more than you would by yourself.

When I think about running a class, I think of it as leading a team. And it's really a two-way process. If something doesn't make sense, let us know and we can try to work together to figure it out. Miao and I are here to help you learn. Since there are so many students and we have so much to do, things are formalized, but really I think of it as mentoring, but with limited time, so that's why there are so many rules, like with grading and office hours.

Programming can seem daunting at first: sometimes you'll see code and you understand most of it, but you'll see one line that doesn't make any sense to you even though all the symbols make sense by themselves. Similarly, you may write a program and it doesn't work, but you go through every line and can't see any reason why it shouldn't work. It's just hard, there isn't an easy way around it. But as you gain practice, it becomes easy. The more you program, the faster you'll get. You may start off taking hours to figure out what's wrong with your code, but as you code and fix bugs more and more, most bugs in this class will start to take minutes or seconds to identify and correct.

TA Philosophy
The TA is there to give out, oversee, and grade labs. Miao will help you if you're stuck, but she isn't there to sit and debug your code. She is there as a backup help in case you can't figure it out on your own (checking the assignment, checking the book, etc). Don't expect much help if you haven't tried to fix your problem yourself. Part of the point of this course is to get you to the point where you're a knowledgable, self-sufficient C++ coder, and we can't do that if people don't try to be self-sufficient.

Course Requirements

Materials

Required

Lab assignments

Labs
Labs are designed so that an advanced student can complete them within the lab session. They will generally be designed to apply the material covered in lecture.

Projects
Projects are just harder, more involved labs. Typically the code solves a more interesting problem.

Quizzes & Exams

Format
The quizzes will generally be around 1-2 pages and are designed to see who's paying attention in lectures and understanding their labs. The exams will be longer, designed to take about half of the lecture period for advanced students to complete. Exams are designed to thoroughly test your knowledge of the course.

Dates & Locations
Dates to be announced, but expect 2 quizzes and 2 exams.

Attendance & Participation

Attendance will be taken in both lecture and lab. Participation will be tracked in lecture -- all you have to do is get involved in the discussions.

Grading & Policies

Lab policies

How labs will work
You'll be given a new lab at the beginning of every lab section. The intention is that you will have the lab period plus a week, and then turn it in at the beginning of the next lab session. Because sometimes people need extra help, we will accept labs until the end of the lab session (8pm) without penalty.

The one exception is the first lab, which will be due at the end of the first lab period (since it's a simple "Welcome to C++" sort of lab).

Late Policy
Labs are due by 8pm on the due date. Any labs turned in afterwards are late. The late penalty is 10% for the first day, 25% for the second day, and 50% for the third day. After the third day late (at 8pm), no late assignments will be accepted, they will be given no credit at all.

Lab attendance
We will take attendance in labs - present (P), absent (A), excused (E), and late (L). Students that leave early will be marked as (L). If you complete the new lab early (so that you don't have anything to do), you may leave early without penalty.

Submitting labs and lab grading
Miao will provide details on submitting labs and how they are graded, but here's a style guide I used to grade for C to help you understand how to write clean code.

Lecture attendance and participation

Lecture attendance will be marked the same way as labs - present, absent, excused, or late. If something comes up and you can't make lecture, let me know ahead of time via email.

The participation grade is there to make sure you're asking questions if you don't understand something. There aren't any dumb questions; usually if you don't understand something, there are at least two other people with the same question, so it's really in everyone's best interests for me to clarify the problem.

Academic Honesty

You will do all of your own work and none of anyone else's. I take cheating formally and file incidents with the Office of Judicial Affairs, which ensures that students caught cheating in multiple classes receive much more severe punishments.
Student Guide to University Policies: Code of Student Conduct

Grading

Grading breakdown
The course grade is broken down like so:

Final grade rule
The final course grade can't be more than one letter grade over your exam average.

Grade reviews
I'll do roughly two grade reviews during the semester, where I show you all the grades you have. The review is useful to spot out mistakes as well as see your overall standing in the course.

Grade disputes
If you think that you were given an unfair grade or that we made a mistake, contact the grader within a week of receiving the assignment. If you aren't satisfied with the TA's response for labs/projects, you can talk to me after talking to them about it.

How to get an A
I can't say it much better than Terry Harvey: How to Get an "A" in CISC105. You're going to have to pay careful attention to detail, work hard, and ask questions.

Letters and what they mean

Grade
Percentage Required
What this letter means
A
93
mastery of course material; can code basically anything in C++ or else learn any additional material quickly
A-
90
B+
87
B
83
average understanding, may need some help in a few areas, but can code anything with some help
B-
80
C+
77
C
73
below average understanding, needs a lot of help, but has the potential to handle larger projects with extensive effort and help
C-
70
D+
67
D
63
D-
60
F
below 60

Calendar

Date Topic Readings Labs/quizzes/exams
June 10 Intro to C++ Chapters 1-2 in C++ text, skim bits of UNIX book Lab 1, Lab 2 handed out. Lab 1 due.
June 12 the basics in detail Chapters 1-2, skim 3-5
June 17 no class, spend some extra time getting the lab done   Lab 2 due, Lab 3 handed out
June 19 functions and arrays details Understand Chapters 3-5 in detail  
June 24 assertions, structs/classes basics Look over Chapter 6 Lab 3 due, Lab 4 handed out
June 26 constructors, encapsulation, etc
store example
Understand Chapter 6 and parts of Chapter 7 Quiz
July 1 operator overloading, Ch. 7 cleanup, Ch. 8 (example) Chapters 7-8 Lab 4 due, Lab 5 handed out (may use my lab 4)
July 3 C strings Chapter 9  
July 8 strings wrapup, pointers overview, midterm overview Chapter 9, little bit of Chapter 10 Lab 5 due (may use my lab 4), Project 1 handed out (may use my lab 5)
July 10 midterm   midterm
July 15 pointers, command-line args, project most of Chapter 10 no new lab - work on project
July 17 best practices for coding, pointers wrapup    
July 22 midterms handed back   Project 1 due (may use my lab 5), no new lab
July 24 file IO, header files, namespaces (example for project 2)    
July 29 templates/STL overview, project 2 (map example) Chapters 16, 19 project 2 assigned
July 31 templates/STL/exceptions    
August 5 no class   extra credit due
August 7 extra lab session instead of class    
August 12 inheritance, polymorphism, etc   project 2 due
August 14 FINAL EXAM (IN CLASS) (project 1 example sol'n)