This is the main website for CS 62: Data Structures and Advanced Programming (Spring 2017).
Lectures: Monday, Wednesday, and Friday 10:00–10:50 a.m. in Edmunds 101
Labs (2 sections): Wednesday 1:15–2:30 p.m. and 2:45–4:00 p.m. in Edmunds 229
Java Structures by Duane Bailey, \displaystyle \sqrt{7} edition (available for free online)
This course teaches fundamental object-oriented design, programming, and debugging techniques via weekly programming assignments in Java. It also covers basic computer science theory needed to analyze the efficiency of algorithms, including “big-O” notation. In the latter half of the course, we will cover techniques for parallelism and concurrency, as well as memory management using the C programming language. We will also cover how to use a variety of tools essential to software development, including version control, debugging, and profiling tools.
In this course, you will be expected to design and write a collection of programs, ranging from very short programs to more elaborate systems. You will also be expected to analyze the performance of programs using “big-O” analysis, and understand how to use common data structures to design solutions to programming problems.
By the end of this course you should have a good understanding of the object-oriented design, coding, and debugging of programs in Java and C, and have a good understanding of how one might analyze programs for correctness and efficiency. In particular, you will understand the trade-offs involved in selections of different data structures and algorithms to solve computational problems.
To do well in this course, you should be comfortable writing small to medium-sized programs (<10 pages of code with several interacting classes) in Java. The knowledge assumed is generally equivalent to that of CSCI 051 as offered at either Pomona or CMC or the Computer Science advanced placement exam. You should also be familiar with concepts from CSCI 052 such as recursion.
If you have any doubts as to whether your programming experience is sufficient for this course, please talk to the instructor as soon as possible. If you have never programmed in Java then you will have to put in significant extra work to succeed.
This course is a prerequisite for most upper level Computer Science courses.
This course is taught by Peter Mawhorter. His website lists contact information and office hours.
The teaching assistants are Daniel Rosenbaum, Victor Machado, Sarp Misoglu, and Sarah Jin.
Mentoring sessions will be held according to the following schedule:
| Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday |
|---|---|---|---|---|---|---|
| 8–10 p.m. | 8–10 p.m. | 8–10 p.m. | 2–4 p.m. 8–10 p.m. |
This class includes weekly programming assignments which will put you in situations where you aren’t done as the deadline approaches, and there are various means by which you could copy another student’s code and submit something which passes most of the automated tests we use for parts of the grading. Don’t do that. Not only is it easy for us to tell when this happens, but it will result in you (any anyone who intentionally assisted you) getting a zero on that assignment and losing a letter grade in the class. A second infraction will result in you failing the class.
For more ambiguous cases, a detailed policy is available, and it is your responsibility to be aware of these rules. In particular, you may help each other to a limited degree with the assignments, and there are some places where you are explicitly allowed to work in pairs. Note that whenever you get help with an assignment from a fellow student, you must put a comment in your code mentioning who helped you with what, so that we don’t accidentally accuse you of cheating.
If you require academic accommodations of any form, please get in contact with the instructor during the first week of classes so that we can figure out how best to handle lectures, labs, assignments, quizzes, and exams.
Class time will be focused on lectures designed to cover the necessary course material for assignments and exams. To efficiently learn this material, we suggest that you print out the lecture notes (which will be available in compact format) before class and take notes by hand. You should also do the reading listed on the lectures page before each class. If you need to use a laptop or cellphone during class, kindly sit in the back row to avoid distracting other students. Note that Pomona policy prohibits video or voice recording of classes without instructor permission in order to maintain the privacy of your fellow students. If these guidelines impact your learning, (for example if you need to take notes on your laptop but also need to sit near the front to see the slides) please just let the instructor know.
Your overall grade in the class will be determined by your mastery of both the practical and theoretical subject matter. Labs and assignments will help you develop practical programming skills, while quizzes and exams will test your theoretical knowledge in addition to asking questions about practical programming. The breakdown of the various grade items is as follows: