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:
Class Accounts
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.
Labs
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.
Quizzes
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.
Projects
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.
Exams
This course has two midterms and a final.
Readings
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.
Grading
There are 300 total course points, broken down like so:
Category | Points | Percentage of Total Grade |
---|---|---|
Labs | 45 | 15% |
Quizzes | 30 | 10% |
Project 1 | 15 | 5% |
Project 2 | 30 | 10% |
Project 3 | 30 | 10% |
Midterm 1 | 30 | 10% |
Midterm 2 | 45 | 15% |
Final | 75 | 25% |
Your letter grade will depend on the number of course points you have at the end of the semester:
A+ | A | A- | B+ | B | B- | C+ | C | C- | D | F |
Awarded for special achievement | [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])
Late Policy
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.
Cheating Policy
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.