What's this course all about?
This course is the sequel to CS 61A. In 61A, you learned how to solve problems using programming; you were concerned primarily with the correctness of your program. In 61BL, you will learn not just how to solve problems, but how to solve them well. You will be concerned with the speed, efficiency, and maintainability of your solution.
What's the difference between CS 61B and 61BL?
The courses cover the same content. They count for exactly the same kinds of credit as well. The difference is in the structure of the course. 61BL is lab-based, meaning you will spend proportionally more time in lab and proportionally less time in lecture. We hope you will enjoy learning-by-doing in this course.
In addition, 61BL is a partner-based course, where most of the programming is done with another person. 61BL strives to create a collaborative rather than competitive environment.
What are the prereqs for this course?
CS 61A, E 7, or some equivalent (though be wary of if your intro programming course does not match the rigour of CS 61A).
You cannot take 61A and 61BL out of order, and you cannot take the classes concurrently either. The exception to this rule would be transfer students who already have significant programming experience in Java, since they have an unfortunate need to rush through lower division classes.
You do not need prior programming experience in Java for this course, but you do need prior programming experience in some language. You should have been exposed to object-oriented programming in that language.
What sort of time commitment should I expect?
A lot. This is a summer course, which means it is run at twice the speed of a normal course. In addition, 61B naturally has more involved programming than 61A, and 61BL has even more. We strongly recommend not taking any other courses alongside 61BL.
We cannot predict how many hours you will spend on the course; some students take more time programming than others. However, we can at least give you a brief breakdown of what you will have to do in this course:
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.
Lab sections meet every Monday through Friday, except for Wednesdays and July 4th (observed). 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 their section). Regardless of which section you choose attend, you must attend that section consistently.
Lab coding assignments must be turned in for credit. Portions of each lab will be graded on correctness, not just completion. You cannot drop any labs, but lab grades are capped at 90% -- this means you can miss 10% of the lab points without missing any points at all.
Monday and Tuesday labs are due before your lab time on Thursday (e.g., if you have lab at 8am, your Monday and Tuesday labs are due Thursday at 8am). Thursday and Friday labs are due before your lab time on Monday.
Along with your Thursday/Friday lab, you must also fill out the weekly self-reflection form. Self-reflections are turned in individually rather than in partnership.
Each lab section will have a short written quiz in it that tests the material from the previous lab. Quizzes are meant to encourage you to keep up with the course material and to help the TAs see where their students are having trouble.
You cannot drop any quizzes, but quiz scores are capped at 70%. This means you can miss 30% of the quiz points without missing any points at all.
There are three projects in this course. Projects are larger and more challenging assignments than you would typically find in a lab. The first project is done alone. The second and third are done in groups of 3 or 4.
The latter two projects will have small amounts of extra credit available.
This course has two midterms and a final.
You are expected to complete all lab readings. Additional reading assignments will be posted on the course calendar. T he textbooks we are using this semester are:
- (required) Head First Java, 2nd edition, by Kathy Sierra and Bert Bates
- (optional) Data Structures and Algorithms in Java, Michael T. Goodrich and Roberto Tamassia. This textbook contains a complete and coherent summary of most of the course material, and will be helpful for students who like textbook learning.
There are 300 total course points, broken down like so:
|Category||Points||Percentage of Total Grade|
Your letter grade will depend on the number of course points you have at the end of the semester:
|[265, 300]||[250, 265)||[235, 250)||[220, 235)||[205, 220)||[190, 205)||[175, 190)||[160, 175)||[130, 160)||[130, 0]|
One potentially confusing point is that there are 23 labs, each of which receives a score out of 5. These are then capped at 90% and scaled to 45/300. Similarly, there are 23 quizzes, each of which receives a score out of 5. These are then capped at 70% and scaled to 30/300. There are also 15 extra credit points available in the course.
Seem complicated? Here is a python script that calculates your grade:
from __future__ import division from math import ceil letter_grades =  for _ in range(130): letter_grades.append('F') for _ in range(30): letter_grades.append('D') normal_letters = ('C-', 'C', 'C+', 'B-', 'B', 'B+', 'A-') for letter in normal_letters: for _ in range(15): letter_grades.append(letter) for _ in range(51): letter_grades.append('A') def calculate_grade(lab, quiz, proj1, proj2, proj3, midterm1, midterm2, final, extra_credit): ''' Prints out your total course points and letter grade. Each input is the raw total points you got in that category. e.g. the max lab can be is 23 * 5 = 115 ''' lab_percentage = min(.9, lab / 115) / .9 lab_points = 45 * lab_percentage quiz_percentage = min(.7, quiz / 115) / .7 quiz_points = 30 * quiz_percentage total_points = (lab_points + quiz_points + proj1 + proj2 + proj3 + midterm1 + midterm2 + final + extra_credit) total_points = int(ceil(total_points)) print('Total points: ' + str(total_points)) print('Letter grade: ' + letter_grades[total_points])
We cannot give credit for late labs. However, please submit late labs anyway, as you will receive feedback on them. Late labs may also be considered if your grade is on the border between grade buckets.
You have three total slip days for use on projects (not on labs). A slip day cannot be broken down by hour. This means that if you go one hour into the next day, you use the entire slip day. If you turn in a project after using all of your slip days, your project's score is capped at 10%.
If you use a slip day on a project, you cannot get the extra credit for that project.
Regarding the procedures for dealing with cheating, please view the department's policy's here.
One instance of cheating on a project or exam will result in immediate failure of the course.
Cheating on labs or quizzes will result in receiving negative points according to that assignment's worth.
Cheaters may not be confronted until the 7th week of the course. If a cheater confesses of their own conviction before the 7th week, the cheater will receive a lighter punishment: they will simply get a 0 on the cheated assignment. If there is more than one instance of cheating, regardless of confession, the student will certainly fail and we will recommend the cheater's expulsion to the school.