CS 32: Introduction to Computer Science II
Computer Science Department
University of California, Los Angeles
In this course, you will learn how to employ data abstraction to build programs larger than those you constructed in CS 31. You will learn how to use a variety of data structures in the course of solving problems, and importantly, how to analyze what data structures and algorithms are most appropriate for a given problem. In addition, you will deepen your understanding of modern programming by learning the principles of object-oriented and generic programming.
The URL for the course website is http://cs.ucla.edu/classes/summer15/cs32. You must check the site for announcements at least every other weekday. You must also check your email as regularly.
Instructor and Class Meetings
Office hours for the instructor and the TAs are on the class web page.
Schedule of Lecture Topics and Exams
|1||June. 22||Introduction, C++ Review||Chapter 1|
|June. 23||Data Abstraction, C++ Classes||Chapter 1|
|June. 24||Pointers, Dynamic Arrays, Resource Management||Chapter 3|
|2||June. 29||Linked Lists||Chapters 4 and 8|
|June. 30||Stacks and Queues||Chapters 6, 7, 13, and 14|
|July. 1||Advanced C++, Inheritance, Polymorphism||Chapter 3|
|3||July. 6||Inheritance, Polymorphism||Chapter 3|
|July. 7||Object-Oriented Design Principles, Midterm review|
|July. 8||Recursion||Chapters 2 and 5|
|4||July. 13||Midterm exam, part 1 (8:30 to 9:50)|
|July. 14||Recursion||Chapters 2 and 5|
|July. 15||Recursion||Chapters 2 and 5|
|5||July. 20||Templates, Iterators, STL|
|July. 21||Algorithmic Efficiency, Sorting||Chapters 10 and 11|
|July. 22||Sorting||Chapter 11|
|6||July. 27||Trees||Chapter 15|
|July. 28||Trees||Chapter 16|
|July. 29||Midterm exam, part 2 (8:30 to 9:50)|
|7||Aug. 3||NO LECTURE|
|Aug. 4||Tables, Tree-based Tables, Priority Queues||Chapter 18|
|Aug. 5||Heaps, Graphs||Chapter 17,20|
|Aug. 11||NO LECTURE|
|end of 8||Aug. 12||Final exam, 9:00 AM to 12:00 PM (Rolfe Hall 1200)|
The course textbook is Data Abstraction and Problem Solving with C++: Walls and Mirrors, Sixth Edition, by Frank M. Carrano, Addison Wesley, 2013. The Fifth Edition or even the Fourth Edition is acceptable as well.
Good C++ books we could recommend are Accelerated C++, by Andrew Koenig and Barbara E. Moo, Addison Wesley, 2000, and Thinking in C++, Second Edition, by Bruce Eckel, Addison Wesley, 2000; the latter book is available online for free.
Lecture and Discussion Sections
Lectures will present material from the course textbook, supplemented by additional subject matter. You are responsible for all material presented in all lectures.
In discussion sections, your TA will review material covered in the lectures, present subject matter not covered in the lectures, discuss homeworks and programming projects, and answer questions.
Programming Projects and Homeworks
You cannot learn how to write large programs without writing large programs. There will be four programming projects. Your program correctness score is based on your program's correctness as determined by our testing. The amount of time you spent working on the program is irrelevant; indeed, if you follow our software development advice, you'll probably spend less time and get a higher score than if you don't.
Since the projects cannot give you experience with all the material in the course, there will be five homework assignments in addition to the projects. These may require you to answer some questions and analyze or write small programs. Some of the work you put into the homework will do double duty: it will help you with a programming project or will serve as a good study guide for an exam. If you are seriously interested in mastering the course material, you will do every homework problem, even though not every problem of every homework assignment will be graded. (You won't know which problems won't be graded.)
Every C++ program you turn in for this class must run correctly under two compilers: Visual C++ 2013 or 2012 and either clang++ or g++ (either on a Mac or under Linux).
Programming projects and homeworks are due at 9 PM on the dates listed below. Late submissions will be penalized by 0.0027778% per second (which comes to 10% per hour), making a submission worthless if submitted after 7 AM the next morning.
|Project 1||Monday, June 29|
|Homework 1||Friday, July 3rd|
|Project 2||Tuesday, July 14|
|Homework 2||Wednesday, July 15|
|Homework 3||Monday, July 27|
|Project 3||Monday, August 3|
|Homework 4||Wednesday, August 5|
|Project 4||Tuesday, August 11|
|Homework 5||Tuesday, August 11|
The midterms will cover material from the lectures and the textbook. The final examination will cover material from the entire course. Missing the final for any reason will result in a final exam score of zero.
Your grade in the course will be determined from your total score, although a final exam score below 40 may subject you to a failing grade regardless of your total score. The total score is determined from the graded materials as follows:
The total points you earn from projects and homeworks (scaled to 0 through 100) will be capped at 30 points above the mean of your exam scores (scaled to 0 through 100). For example, if you average 90 on the assignments, your midterm score is 60, and your final is 40, then your assignment average is treated as only 80 (because that's 30 more than the mean of 60 and 40). In other words, your assignment scores won't count fully if you can't show from your exam scores that you learned what you should have from the assignments.
A request for reconsideration of the grading for an item must be made within one week of our sending you your score for that item.
You will not earn points on any of your coursework unless you have signed and turned in the Academic Integrity Agreement.
Advanced programming techniques including Java, user interfaces, databases, concurrency, and networking. Covers software design including object-oriented design, and user interfaces (desktop, web, and mobile). Software engineering including testing, debugging, the software lifecycle, and static analysis tools.
|Lectures||J Hour: 1:00pm-2:20pm on Tuesdays and Thursdays|
|Lecture Notes||Published after each class|
|Text||Effective Java is recommended but not required|
|Prerequisite||CSCI 0150, CSCI 0170 or CSCI 0190.|
|Instructor||John Jannotti (email@example.com)|
|Office Hours||CIT 449, Tue & Thu: 2:30-5pm|
|Projects||Four projects (Three individual, one pair) that increase in complexity throughout the term from a datastructure implementation with little interface, to a full-fledged graphical application integrating work done on all previous projects.|
|Group Project||One project of your own design. You will work in teams of four on a significant project that you think is important. You will convince your mentor TA that the work is worthwhile, specify its features, design and implement it throughout the term, culminating in a demo day.|
|Incompletes||Incompletes are granted only in exceptional conditions. For your own good, we strongly recommend keeping current. This class maintains a steady pace and each project builds off the previous. It is difficult to fall behind and catch up later.|
|Late Policy||Labs must be finished in the week they are assigned. For projects, the full late policy is described in the course missive.|
|Grading||Labs: 10%; Participation: 8%; Projects: 10%, 15%, 15%, 15%; Term Project: 27%|
|Course Time||Students will spend approximately 3 hours per week in class (40 hours total), and 20 hours total in labs. Homework and other out-of-class work is estimated at approximately 8 hours per week (120 hours).|
Lecture and Due Dates
|Jan 25||Intro||Stars out|
|Jan 30||Effective 32|
|Feb 8||Collections and Generics|
|Feb 9||Stars due, Autocorrect out|
|Feb 13||Design Patterns|
|Feb 15||Stars Review|
|Feb 20||NO CLASS|
|Feb 23||Autocorrect due, Bacon out||Team Forming|
|Mar 1||Autocorrect Review|
|Mar 2||Project Outline|
|Mar 8||User Interfaces|
|Mar 9||Bacon due|
|Mar 13||Object/Relational Mapping||Maps out|
|Mar 15||Bacon Review|
|Mar 22||UI Implementation|
|Mar 23||Maps CLI due|
|Mar 27||NO CLASS|
|Mar 29||NO CLASS|
|Apr 3||Thread Design||Concurrency|
|Apr 5||Team Design|
|Apr 10||Web Applications|
|Apr 12||Maps Review|
|Apr 13||Maps due|
|Apr 19||Embedded Languages|
|Apr 24||Java 8/9|
|Apr 25||Deployment (Optional)|
|May 2||Adversary TA Meeting|
|May 7-8||Demo Days|