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:
- code in C++
- design and organize object-oriented code
- handle complex object-oriented concepts, like complex inheritance and virtual functions
- recursion
- design generic algorithms using template classes
- utilize the C++ standard API to save coding - Standard Template Library and Strings
- test code effectively with a combination of cout and unit testing
- design efficient code and evaluate code for efficiency
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
- Absolute C++ by Savich (3rd edition)
- some UNIX book, the standard course book is UNIX, Third Edition by Ray and Ray
- UD UNIX account
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:
- 50% - labs + projects
- 40% - quizzes + midterm + final
- 10% - attendance/participation
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 |
|---|---|---|
| mastery of course material; can code basically anything in C++ or else learn any additional material quickly | ||
| average understanding, may need some help in a few areas, but can code anything with some help | ||
| below average understanding, needs a lot of help, but has the potential to handle larger projects with extensive effort and help | ||
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) |