Welcome to CS61BL: Data Structures and Programming Methodology!
What's this course all about?
CS61A covered high-level approaches to problem solving, providing you with a variety of ways to view programming problems (in terms of functions, objects, or rules). In CS 61BL, we move to a somewhat more detailed level of programming. As in 61A, the correctness of a program is important. In addition, however, much of 61BL will be devoted to analyzing potential tradeoffs in time and memory that arise from a variety of methods for structuring data. (The third course in the sequence, CS61C, continues the journey from high-level programming to the details of the machine level, covering the basics of computer architecture and revealing aspects of the computer that programming environments hide from you.)
CS61B is also the first place in the curriculum where students write relatively large programs (~1000 lines of code) from scratch. Course projects, we hope, will improve your skills in several areas of programming methodology:
- Design of programs that are easy to understand, relatively bug-free, and able to quickly accommodate changing constraints in problem specifications
- Development of thorough test data and organized test procedures
- Analysis of code to verify consistency with problem specifications or to determine efficiency bottlenecks
What's the difference between CS61B and CS61BL?
The traditional version of CS61B has loosely coordinated lecture, discussion, and lab sections. Ten years ago, we introduced a lab-centric version of the course (the "L" in 61BL stands for "lab") that trades lecture and discussion time for hands-on lab time. A common theme in computer science education research is that students learn to program by actually programming, not by listening to lectures about programming.
The two versions cover equivalent content. Students do about the same amount of total work in each version. In the lab-centric version, we integrate the various parts of the course better and supervise your work more closely. As a result, we are better able to provide help when you’re confused.
What sort of time commitment should I expect this summer?
Since there are only 8 weeks of Summer Session C (as opposed to 14 weeks of instruction plus RRR week and finals week during the Fall/Spring semesters), each day of Summer's CS61BL is equivalent to approximately two days of the Fall/Spring semester. During the normal school year, each course unit equates to 3 hours of work per week. This means you should expect to work about 24 hours per week for this course, including lab and lecture time.
The course staff (instructor and TAs) will check Piazza regularly and post important announcements there. You are responsible for keeping up with these announcements. Other students will also be able to help you on Piazza. Please avoid posting solutions to homework assignments before they are due (refer to the department's academic dishonesty policy). If in doubt, make a private post to the instructors. The course staff will delete posts and comments that are not constructive (e.g. questions that have already been answered, anything inappropriate, etc.). If your question is personal or not of interest to other students, post a private message on Piazza for the course staff. If you wish to talk with one of us individually, you can make an appointment with any of us by email. Otherwise, please reserve emails for questions you can't get answered during office hours, lab sections, or on Piazza.
Lab sections meet every Monday through Friday, except for Wednesdays and July 4th. You are expected to attend lab whenever your lab section meets. All lab work should be done in pairs. If you would like to attend a lab section that you are not enrolled in, you must get permission from the lab TA of the section you would like to attend (the TA needs to confirm that there is room in his/her section). Regardless of which section you choose attend, you must attend that section consistently. Lab material can be found here.
You are expected to complete all lab readings. Additional reading assignments will be posted here. The textbooks we are using this semester are:
- (required) Head First Java, 2nd edition, by Kathy Sierra and Bert Bates
- (optional) A Concise Introduction to Data Structures using Java, 1st edition, by Mark Johnson
There are a total of 300 course points:
|Category||Points||Percentage of Total Grade|
|Quizzes (capped at 70%)||30||10%|
|Homework Assignments (capped at 90%)||30||10%|
Your letter grade will depend on the number of course points you have at the end of the semester:
|[280, 300]||[265, 280)||[250, 265)||[235, 250)||[220, 235)||[205, 220)||[190, 205)||[175, 190)||[160, 175)||[130, 160)||< 130|
That is, your grade depends only on how well you do, not on how well everyone else does. Incomplete grades will be granted only for dire medical or personal emergencies that cause you to miss the final exam, and only if your work up to that point is satisfactory. You can view your scores by using glookup on the school accounts. This will be explained in the first lab.
During your first lab section, you will receive an instructional account login form and learn how to submit homework and project assignments online with the glookup system. Do not lose your account form.
There will be 20 homework assignments, which will consist of a mix of programming, online discussion participation, and project milestone checkoffs. Programming assignments are to be done in groups of 2-3. They must be submitted online via glookup (only one member of each partnership should submit) and are due before the following lab day after they are assigned (so a homework assigned on Tuesday is due on Thursday before your lab section begins). Project milestone checkoffs will happen during your lab section. Late homework will not be accepted. Each homework assignment is worth 5 homework points. The homework portion of your course grade will be equal to
min(30, 3/9 * homework points). In other words, your homework grade is capped at 90 homework points, then scaled to make up 10% of your course grade. Unlike in CS61A, homework submissions are graded on correctness, not effort. In addition, your code should have sufficient comments and be reasonably formatted.
There will be a closed-notes quiz at the beginning of (almost) every lab. Quizzes are meant to encourage you to keep up with the course material and for TAs to know where students are having trouble. You must be present in your lab section to take each quiz, which must be completed within the first 15 minutes of your lab section. There will be at least 25 quizzes, each worth 4 quiz points. The quiz portion of your course grade will be equal to
min(30, 3/7 * quiz points). In other words, your quiz grade is capped at 70 quiz points, then scaled to make up 10% of your course grade.
There will be two midterm exams and one final exam:
- Midterm 1: Wednesday July 9, 3pm - 5pm
- Midterm 2: Wednesday July 30, 3pm - 5pm
- Final Exam: Wednesday August 13, 3pm - 6pm
You may bring one handwritten double-sided crib sheet for midterm 1, two for midterm 2, and three for the final exam. All exams will take place in 2050 VLSB and 100 GPB. Check Piazza for which room you are assigned to.
There will be three review sessions:
- Midterm 1 Review: Sunday July 6 (100 GPB, 1-3pm)
- Midterm 2 Review: Sunday July 27 (100 GPB, 1-3pm)
- Final Exam Review: Sunday August 10 (100 GPB, 1-3pm)
There will be three projects:
- Project 1 (groups of 2-3) Due: Saturday July 12, 10:00pm PDT
- Project 2 (groups of 3-4) Due date: Saturday August 2, 10:00pm PDT
- Project 3 (groups of 3-4) Due date: Friday August 15, 10:00pm PDT
You will be assigned group partners from your lab section. After completing each project, you will be required to submit group evaluations along with your code. Each member of the team will submit his or her own group evaluation. However, as with homework assignments, only one group member will need to submit the code for each team. You will have a total of 24 "slip hours" for all three projects that can be applied toward satisfying project submission deadlines.
Edwin: Thursday 3pm - 5pm and Friday 11am - 1pm, both in 271 Soda (If these times do not work for you, feel free to email me to set up an appointment) TAs: You can visit your TAs during your lab section.
Your attention is directed toward the department's Policy on Academic Dishonesty. In particular, copying and presenting another person's work (in part or in whole) as your own constitutes cheating. Any student found to be cheating risks failing the course and being referred to the Center of Student Conduct.
Sometimes it can be difficult to draw the line between cheating and appropriate collaboration. Here are some general rules:
- Copying: Don't use solutions from the internet or other students (past or present). If you look up ideas/code snippets from a site like StackOverflow, make sure you credit your sources.
- No code rule: You should never view / have in your possession another group's homework or project code (in either electronic or hardcopy form).
- Sharing Code: If you do choose to use Git or some other version control system, make sure to keep your repos private. By having public CS61BL code repos, you risk failing the course.
- Give credit: If you receive significant ideas from someone/somewhere else, you must acknowledge your sources in your solutions. Not only is this good scholarly conduct, it also protects you from accusations of plagerism.
- When in doubt, ask: If you're not sure whether a particular situation constitues cheating, ask your lab TA or the instructor.
- Debugging: Here's an example. Suppose one of your classmates, not a group partner, asks you about a bug in his or her program. Don't copy his or her code for yourself. Don't give your own code to your classmate. Don't touch your classmate's keyboard or mouse. Instead, ask questions:
- Is there an error message? If so, what does it mean, and why shouldn't it have happened?
- What conditions would lead to that error message?
- What test cases demonstrate the error?
- Devise a case that demonstrates the error that's as simple as possible.
- Put a breakpoint at a place in the program that should be working correctly, then at places that are closer to the bug.
- Make sure you've tested subprograms.
The idea is to help your classmate figure the problem out for himself/herself. You should just be helping.