Course Syllabus

Course Description

CS88 is a connector to CS/INFO/STAT c8 "Foundations of Data Science" designed for students who would like a more complete introduction to Computer Science. This 2 unit course is tailored to leverage the material in c8, while extending it to cover much of the material address CS61A, but with a data-centric perspective. Whereas in c8 you will learn and use computational techniques to solve problems and to gain insight into inferential thinking, in CS88 you will learn how to construct substantial applications in a clear fashion using principles of program composition.

Like CS61A, this course concentrates mostly on the idea of abstraction, allowing the programmer to think in terms appropriate to the problem rather than in low-level operations dictated by the computer hardware. We are interested in teaching you about programming, not just how to use one particular programming language. We consider a series of techniques for controlling program complexity, such as functional programming, data abstraction, and object-oriented programming. You will master a programming language (python) while studying these general techniques. But, even more importantly, once you have learned the essence of programming and the concepts that appear in various forms in programming languages, you will be able to pick up other languages and other programming concepts rapidly.

Our goal with the new additions to the program is to provide students with a spectrum of options to fit their interests as they evolve with the undergraduate experience. If you are certain that you want to major or minor in Computer Science, CS61A is the right introductory course. You can take CS61A and still expand your horizons with C8. C8 provides an introduction to computational thinking from a rather different perspective than CS10 and opens a path to many connectors. You can expand C8 with greater depth in computer science with CS88.

It will prepare you for CS61B, should you want to grow from authoring complete applications to engineering them in a manner that is scalable and robust. And, if at that point you have discovered that your calling is deeply CS, there will be a path back to the minor or major.

In a nutshell, the 2 units of CS88 covers most of the concepts in CS61A, leveraging about 1 unit worth of introduction from c8 and stopping short of about 1 unit worth of development of the final (interpreter) project of 61A. CS88 has 3 projects, instead of 4, to put your conceptual understanding into practice, and these will connect back to your learning in c8.

Objectives

Develop a foundation of computer science concepts that arise in the context of data analytics, including algorithm, representation, interpretation, abstraction, sequencing, conditional, function, iteration, recursion, types, objects, and testing, and develop proficiency in the application of these concepts in the context of a modern programming language at a scale of whole programs on par with a traditional CS introduction course.

Outcomes

Students will be able to demonstrate a working knowledge of these concepts and a proficiency of programming based upon them sufficient to construct substantial stand-alone programs.

Course Format

Lecture: The course includes only one 50-minute lecture per week. It preceeds the lab and introduces concepts that will be more fully developed in lab and then internalized in homeworks.

Lab and Discussion Sections: The course includes one two-hour laboratory/discussion section each week. These sections are run by amazing Teaching Assistants who have been carefully selected for their ability, enthusiasm, and dedication to learning. Getting to know your TA is an excellent way to succeed in this course.

Participation in lab and discussion is essential and required.

Office Hours: Attending office hours is another excellent way to succeed in this course. Office hours are held by TAs and the instructor each week. A schedule appears on the staff page of the course website.

In office hours, you can ask questions about the material, receive guidance on assignments, work with peers and course staff in a small group setting, find project partners, and learn about computer science at Berkeley.

Optional Sections: In addition to the weekly class meetings, the course will include optional events that are designed to help you master the course material and complete the assignments. Details of these events will be announced as they approach.

Materials

The online textbook for the course is Composing Programs, which was created specifically for CS61A but is also the best basis for this course. Readings for each lecture appear in the course schedule. We will be jumping around a little due to the data-centric orientation of the course. You should complete the readings before attending lecture.

In addition, the course website links to all guides, handouts, and practice materials available for the course.

Programming Language

CS88 uses the Python 3 programming language. You will be introduced to it in c8, along with a particular, powerful data structure - Tables.

Python is a popular language in both industry and academia. It is also particularly well-suited to the task of exploring the topics taught in this course. It is an open-source language developed by a large volunteer community that prides itself on the diversity of its contributors.

Prerequisites

Math 1A is a co-requisite for CS88. (That is, it may be taken concurrently.)

There is no formal programming-related prerequisites for admission to

  1. There is no need for you to be familiar with any particular programming language. Some CS88 students have had significant prior programming experience, but many do not. The course is structured to make the concepts accessible to all its students, and to provide enough challenges to keep it interesting to all.

Computer Accounts

To set up an account on the lab computers, you need an account form, which you will receive in the first lab.

Ask Questions!

Your first and most important resource for help in learning the material in this course is your fellow students. Work closely with your project partner. You are responsible for helping each other learn.

If you have questions that others might have as well, regarding projects, homeworks, course policies, etc., post your questions to Piazza, the course discussion forum. Piazza allows you to answer questions from other students.

You should also ask many questions of the course staff, especially during lab sections and office hours. The best way to learn in this course is to attempt all assignments on your own, but ask questions frequently before you get stuck or frustrated.

You are welcome to email your instructor or TA directly. Contact information appears on the staff page of the course website.

Computer Resources

The computing laboratory in 105 Cory is our primary lab room and lab sessions will be held there. However, 271, 273, 275, and 277 Soda are available to students outside schedule lab sessions and the CS88 accounts can also be used from any EECS Instructional lab in Soda or Cory Hall.

Current UCB students: If you are enrolled in the course, your Cal student ID serves as your card key and will automatically be activated for access to the Cory first floor labs (including entering the building) and (hopefully) the Soda second floor labs. You do not have to do anything, unless for some reason it doesn't work, then see below.

Concurrent/other students: You can fill out an application and obtain a white card key from 387 Soda Hall (the front desk). There is a small fee for access.

During scheduled lab sessions, only students enrolled in that particular section may be in the lab. At other unscheduled hours, any 88 student may use the lab on a drop-in basis.

Be respectful of the lab space. Please don't steal the chairs, and definitely do not eat or drink in the lab. Don't unplug anything; unplugged computers make our hard-working instructional computing team very sad. If you see someone disrupting the space, ask them to stop.

Projects and Homeworks

Each week there will be problems assigned for you to work on, most of which will involve writing and debugging programs. These assignments come in three categories:

  • Laboratory exercises are short, relatively simple exercises designed to introduce a new topic. You can complete these during the scheduled lab meetings and submit them then.
  • Homework assignments are more involved and are meant to illustrate and explore new topics. Homeworks are generally assigned on Mondays and due the following Sunday at 11:59pm. You are encouraged to discuss the homework with other students, but your final solution should be developed either alone or with one partner.
  • Projects are larger assignments intended to teach you how to combine ideas from the course in interesting ways. There are three projects during the semester. You are encouraged to complete projects in pairs; your partner should be another student in your section. (Working alone or with someone from another section is allowed, but not a good idea.)

The purpose of the homework is for you to learn the course material, not to prove that you already know it. Therefore, the weekly homeworks are not graded on the correctness of your solutions, but on effort. You will get full credit for an entirely wrong answer that shows reasonable effort!

Each homework is worth three points for a reasonable effort, zero points for a missing homework or one that seems to show no effort, or negative ten (-10) points for a solution copied from someone else. Detecting copied homeworks is very easy for our computers, so don't try.

The three programming projects are graded on the correctness and clarity of your solutions. If you work with a partner (which you should), work together to ensure that both group members understand the complete program you create.

Tests and Grading

Your course grade is computed using a point system with a total of 300 points, with the following distribution.

  • Midterm, worth 40 points.
  • The final exam, worth 60 points.
  • Take-home programming quizzes, worth 10 points.
  • Three projects, worth a total of 90 points
  • Homework, worth a total of 30 points
  • Participation, worth 10 points

The Midterm will held in the evening and is two hours long to give you more time to complete them than lecture would allow. You will be allowed to bring a fixed number of pages of notes to each exam. Details of this policy will be released as the exam approaches.

Incomplete grades will be granted only for dire medical or personal emergencies that cause you to miss the final, and only if your work up to that point has been satisfactory.

Learning Cooperatively

With the obvious exception of exams and take-home quizzes, we encourage you to discuss all of the course activities with your friends and classmates as you are working on them. You will definitely learn more in this class if you work with others than if you do not. Ask questions, answer questions, and share ideas liberally.

Since you're working collaboratively, keep your project partner and TA informed. If some medical or personal emergency takes you away from the course for an extended period, or if you decide to drop the course for any reason, please don't just disappear silently! You should inform your project partner, so that nobody is depending on you to do something you can't finish.

Academic Honesty

Cooperation has a limit, however, and in CS88 that limit is sharing code. Feel free to discuss the problems with others beforehand, but not the code that solves them. Homework and projects can be completed in pairs. You can share everything with your partner. Do not share your code with anyone but your partner, and do not read anyone but your partner's code. Do not post your solutions online. Do not use pastebin or github, which post your work publicly by default. Do not read solutions that you find online. Write your own programs and keep them to yourself.

If you find a solution online, please email a link to that solution to the instructor.

We expect you to hand in your own work, take your own tests, and complete your own projects. The assignments and evaluations are structured to help you learn, which is why you're here. The course staff works hard to put together this course, and we ask in return that you respect the integrity of the course by not misrepresenting your work.

The EECS Department Policy on Academic Dishonesty says, "Copying all or part of another person's work, or using reference materials not specifically allowed, are forms of cheating and will not be tolerated." The policy statement goes on to explain the penalties for cheating, which range from a zero grade for the test up to dismissal from the University, for a second offense.

Rather than copying someone else's work, ask for help. You are not alone in this course! The TAs, lab assistants, and instructor are all here to help you succeed. If you invest the time to learn the material and complete the projects, you won't need to copy any answers.

Late Policy

If you cannot turn in an assignment on time, contact your TA and partner as early as possible. Late project submission requires approval by your TA. Typically, projects will be accepted up to 24 hours after the deadline, but late projects will only receive 2/3 of the earned score. No credit will be given for late homework or for projects turned in more than one day late. Exceptions may be made for extraordinary circumstances.

Early Policy

On each project, you can earn an additional bonus point by submitting the project at least 24 hours before the deadline.

A Parting Thought

This document shouldn't end with a list of late penalties, because penalties and grades aren't the purpose of the course. We actually just want you to learn. We're very excited to have a brave and enthusiastic group of students in this first semester of CS88. We want all of you to be successful here.

And please help us all create a great course for future students who follow in your footsteps. Welcome to CS88.

Course Summary:

Date Details Due