Syllabus
This document and others linked within it should be your PRIMARY source for understanding the expectations of this course. Be sure to read it carefully. You must contact the instructor for clarification if you receive information from any another source that is in contradiction to what is provided below.
Course Staff
Course instructor: Diba Mirza
- email: dimirza@cs.ucsb.edu
- Office hours time and location are available on course Google Calendar
- Homepage: https://www.cs.ucsb.edu/~dimirza/
Teaching Assistants
- Chutian (Kevin) Shen
- Kun Wan
TA office hours are available on our course Google Calendar
Undergraduate Tutors
- Andrew Huang
- Angela Yung
- Barbara Korycki
- Bryanna Phan
- Jimmy Le
- Natasha Lee
- Sayali Kakade
- Sean Shelton
- Sherry Li
- Shreyas CR
- Steven Fields
- Thien Hoang
The tutors will help with the labs and other instructional activities as part of a new pilot program.
Schedule
For lab, lecture and office hours please check the course Google Calendar For hw, lab and exam schedule, please check the assignment calendar
Resources
Required Resources
-
Textbook: Problem Solving with C++, Walter Savitch, Edition 9. Available for purchase at the UCSB book store
-
Peer Instruction : iClickers: The course lectures will follow a Peer Instruction format, a teaching model which places stronger emphasis on classroom discussion and student interaction. As part of this you will need to own an iClicker register it on the Gauchospace). Be sure to register your clicker by the end of the first week.
Exam Resources
You can find examples of previous quarter’s exams at the following links.
- http://www.cs.ucsb.edu/~pconrad/cs16/14F/exams/
But BEWARE—offerings of CS16 may vary in terms of their exact pace, and placement of exams. So these exams are a guide to the style of my exams, but NOT necessarily for specific content.
In addition, these exams from prior to F14 used the C programming language rather than C++, and went at a much slower pace, so treat them with even more skepticism.
- http://www.cs.ucsb.edu/~pconrad/cs16/10S/exams/
- http://www.cs.ucsb.edu/~pconrad/cs16/10W/exams/
- http://www.cs.ucsb.edu/~pconrad/cs16/09F/exams/
What this course is about
This course is the first in a three course sequence, CS16-24-32 that provides a foundation in data structures and algorithms for deeper study of Computer Science.
This is NOT an introductory programming course. This is an INTERMEDIATE programming course.
What you need BEFORE you take this course
This course will present C++ from the beginning; no prior knowledge of C++ is assumed. However, it IS assumed that you already have successfully completed CMPSC 8, or have an equivalent background in programming. You should be comfortable with all of the following:
|
|
What you SHOULD HAVE LEARNED BY THE END of this course to be ready for CS24
So, what is it that you need to know by the end of this course? Here’s the list of just a few of the things you’ll need to know to be ready for CS24 (the next programming course). You’ll have the opportunity to learn all of these things (though not necessarily in this order).
- A few of the basic data types of C++, including at least, int, double, char, bool, string
- The basic control structures of C++ (if/else, while, for etc.)
- Defining functions in C++, and passing parameters to functions in three different ways (by value, by pointer, and by reference)
- Scope and lifetime of variables in C++
- The use of “const” with parameters to functions
- Using arrays in C++, and C-strings (null-terminated character arrays)
- How arrays are passed to functions, and the relationship between arrays and pointers
- Defining and working with structs in C++
- Using structs to create singly linked lists where the space for the list nodes is allocated on the heap
- The difference between space allocated on the stack (e.g. local variables) and space allocated on the heap (with the new and delete operators)
- Converting from binary to decimal, octal, and hex, and back again—and how this relates to how C++ programs store various kinds of data in memory.
- The basic principles of recursion, and some idea of when a recursive solution is appropriate.
The swimming/guitar/painting analogy
You cannot learn to swim, play guitar, or paint from a textbook or a lecture. You can only:
- learn to swim by spending many hours in the pool,
- learn to play guitar by spending many hours playing the instrument
- learn to paint by spending many hours putting brush to canvas.
The same is true of programming. Programming is not a series of facts to be memorized—you cannot "cram" for a computer science exam. You must practice, practice, practice.
Course policies
Grade breakup by evaluation component
- Lecture and section partcipation: 2%
- Homeworks/Quizzes: 13%
- Lab assignments: 35%
- Midterm Exams (2 at 15% each): 30%
- Final Examination : 20%
Less than 75% iClicker response ≡ missing a lecture
Quizzes may occur at anytime, announced or unannounced. Missed quizzes may not be made up.
Thus attendance is required, and reading the assigned readings is required.
You must also read the this document with detailed course policies
Graded components
There are five components to this course, each of which has a special job to do:
- (1) Reading—Between each class, you'll have reading to do in the textbook. There is too much information you need to learn in this course for you to get all of it in lecture, so the readings are essential. The reading assignments for the next class can be found in each homeowrk assignment.
- (2) Homework—In almost every class, you'll be given a homework assignment that is due in the following class. (The exception is the class period immediately before an exam, where no homework will be given.)
These are typically pencil/paper type problems, though sometimes you'll need access to a computer to solve them. If you don't have reliable access to a computer at home (or in your dorm), please plan your schedule so that you can spend time in the CSIL computer lab between classes.
Homework assignments are completed on paper—they may NOT be submitted electronically—and may only be submitted in the class in which they are due. In this way, they also serve as an attendance check. Therefore, you may NOT turn in a homework assignment "on behalf of" an absent classmate, or have someone else turn in your homework for you—doing so in this course is a form of academic dishonesty.
Because I realize that sometimes each student must miss a class due to unavoidable circumstances, or illness, each student is permitted one "personal day/sick day" (one per quarter) where you may make up a missed homework assignment (without penalty) by coming in person during the instructor or TAs office hours. See details elsewhere on this syllabus.
- (3) Programming Assignments (Labs)—Programming assignments (also called labs) are given once a week, and are typically started in the Wednesday lab sessions, and finished on your own time outside of lab. You must however, read the assignment and attempt the parts that you do with little assistant as soon as the assignment is released. The assumption is that you at the very least read the assignment before section. Labs will typically involve pair programming, which is described later in this syllabus.
- (4) Lectures—Learning is something that you do as a student, not something that is "done to you" by a teacher. Therefore most of the learning you will do in this course takes place when you are actively involved in doing something challenging, i.e. during the homework assignments, and labs. Most of the information you will need to do those assignments will come from the reading.
Therefore, you may ask, what is the purpose of the lectures?
The purpose of the lectures in this course is to guide you through the readings, homeworks, and labs:- to provide an overview of how everything fits together
- to provide hands-on demonstrations of things you'll do on your own later
- to provide additional information that is not in the textbook
- to provide additional explanations about things in the text that might not be clear
- to provide an opportunity to ask questions, and hear answers to questions asked by others.
- (5) Exams—There are three exams in this course—two midterms and a final. You may wonder why there are two midterms in a course that is only ten weeks long. The reason is that I've found that in order to succeed at learning the material in this course, many students need two opportunities for feedback on how they are doing before the final exam. Students sometimes are doing better than they think they are, or not as well as think they are, and the exams provide a "reality check" === You may find the workload heavy === The workload in this course may feel heavy. It may even feel unreasonable compared to your other courses. However, I assure you that it is not unreasonable, given the goal of making you an skilled beginning programmer. Programming is a skill, and the only way to get good at it is lots and lots of practice, which takes lots and lots of time. The usual "folklore" rule of thumb is 8–12 hours per week for a normal college class. That means you should expect, at a minimum to put in 5–9 hours per week on this course, on top of the 3 hours 20 minutes you spend in lecture and lab each week.