CS 61BL Data Structures and Programming Methodology, Summer 2015
Instructor: Joseph Moghadam
Wednesday, 3-5 PM, 2050 Valley Life Sciences Building
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:
  • There are 12 hours a week spent in lab, and unfinished lab becomes homework. Expect to spend more than twice the amount of time you spent on 61A homework on 61BL homework per week (assuming you took 61A during the Fall or Spring).
  • There are three projects in the 8 weeks of the course.
  • There are three exams in the 8 weeks of the course.
  • There is reading for the course, though it is more important in the first half of the course than in the second half.
  • 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.
    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.
  • Midterm 1 is 10 July, 7-9 pm
  • Midterm 2 is 31 July, 7-9 pm
  • The final is 14 August, 3 - 6 pm
  • 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.
    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:
    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):
    for _ in range(30):
    normal_letters = ('C-', 'C', 'C+', 'B-', 'B', 'B+', 'A-')
    for letter in normal_letters:
        for _ in range(15):
    for _ in range(51):
    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
  • If you get an idea for how to do something from another student or from online (e.g. from a Stack Overflow post), please include a comment in your code citing your source. Failure to cite sources will be considered cheating.
  • Do not host your code publicly online, such as on a public Github account. This will be considered cheating.
  • Labs: High level collaboration is allowed (sharing conceptual ideas, overall approaches to solving problems, etc.), but do not share code outside your partnership. Make sure all the work you turn in is the work of you and your partner.
  • Projects: For project 1, you may discuss high-level conceptual ideas with other students, and overall approaches to solving problems, but all work you turn in must be your own. You may not look at the code written by any other students. For projects 2 and 3, essentially no collaboration is allowed outside of your group.
  • Quizzes and Exams: Do not look at the work of other students or communicate with other students during exams. Do not consult any outside sources (textbooks, notes, the internet, etc.) except for the allowed one page of notes for each exam.
  • 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.