课程大纲与课程政策

概述

CS 61 系列是计算机科学的入门课程,特别强调软件和以程序员的视角看待机器。

  1. CS 61A 专注于抽象的概念,允许程序员根据适合问题的方式思考,而不是由计算机硬件决定的底层操作。
  2. CS 61B 处理更高级的软件工程方面,例如构建和分析大型程序。
  3. CS 61C 专注于机器以及它们如何执行程序。

在 CS 61A 中,我们感兴趣的是教你编程,而不是如何使用某一种特定的编程语言。我们考虑一系列管理程序复杂性的技术,例如函数式编程和面向对象编程。

CS 61A 主要使用 Python 3 编程语言。Python 在工业界和学术界都是一种流行的语言。它也特别适合探索本课程所教授的主题。它是一个开源语言,由庞大的志愿者社区开发,该社区以其贡献者的多样性而自豪。

掌握特定的编程语言是 CS 61A 的一个非常有用的副作用。然而,我们的目标不是规定你在未来的努力中使用什么语言。相反,我们希望一旦你学习了编程涉及的概念,你会发现学习一种新的编程语言只需要几天的工作。事实上,在课程期间,你将被要求学习至少两种其他语言,Scheme 和 SQL。

完整的讲座主题、阅读材料和作业列表出现在讲座日程中。

先修课程

Math 1A 被列为 CS 61A 的 corequisite(核心辅修课程)。也就是说,可以同时修读。Math 10A 或 Math 16A 也可以。如果不知道或没有学习微积分,也可以修读 CS 61A。完成任何作业都不会要求掌握微积分概念。然而,修读微积分是练习 CS 61A 中定期出现的算术和代数的好方法。

CS 61A 没有正式的编程相关先修课程,因为没有先验经验的学生也可以在课程中取得成功,但在没有任何编程经验的情况下修读该课程通常非常有挑战性。没有先验编程经验修读该课程的学生通常必须花费更多时间来完成作业,并且往往在课程中获得的期末成绩较低。大多数 CS 61A 学生都有显著的前置编程经验。典型的背景包括至少一门相当于 CS 10 的课程,或 AP 计算机科学考试得分 3 分或以上。有关此主题的更多信息,请参阅前学生的建议

如果你发现前两周完成所有必修课程作业很有挑战性,我们强烈建议你先修读另一门课程。稍后修读 61A 可能会有更好的体验。推迟一个学期修读 CS 61A 不太可能影响你的学位进度或以其他方式让你落后,但尽管有此建议仍继续在 CS 61A 中挣扎可能会导致困难的学术情况,从而影响你未来的机会。最好以对课程材料的强掌握完成 CS 61A,即使这意味着推迟一个学期,而不是匆忙完成。

桥梁课程

以下是一些更适合没有先验编程经验的学生的加州大学伯克利分校课程。我们推荐在 CS 61A 之前修读这些课程。

CS 10:计算之美与乐是一门入门计算机科学课程,类似于 CS 61A,但进度更适中。CS 10 涵盖变量、函数、递归、算法复杂性、面向对象编程和许多其他相关的 CS 61A 主题,整体内容重叠约为 50%。CS 10 在学期开始时使用 Snap!,一种基于块的编程语言,使学生能够专注于概念理解,而不必担心陌生的语法。期中考试后,课程过渡到 Python(61A 使用的主要语言)。CS 10 还涵盖超越编程的重大想法和社会影响,向你展示计算之美与乐。

Data 6:数据计算思维导论是一门数据科学入门课程,结合了推理和计算思维,应用于定量社会探究的基础。可以在 Data 8 之前修读,但不是其先修课程。

Data 8:数据科学基础是一门数据科学入门课程,旨在让所有伯克利学生都能访问和使用。本课程专为没有先验编程经验的学生设计。它教学生用 Python 编程,但涵盖的语言子集比 CS 61A 小得多。课程的大部分内容集中在数据处理和统计技术上,这些技术是使用计算机回答有关世界的问题的核心。在 61A 之前修读 Data 8 是获得先验编程经验的好方法,但修读 CS 10 是更好的方法。

ENGIN 7:计算机编程与数值方法导论是计算机编程和数值方法的基础,强调 Python 和一些 MATLAB 中的工程应用。

Alternative Courses

以下是一些替代的加州大学伯克利分校课程,它们提供与 CS 61A 类似的内容,但不一定等同

Data C88C:数据科学中的计算结构(也称为 CS 88)是一门编程与计算入门课程,涵盖约 CS 61A 内容的 70%。这两个课程之间共享许多相同的作业、实验和讨论问题。

Data C88C 是 3 个单元(而不是 4 个),每周有 2 次讲座(而不是 3 次),每周有 2 小时的讨论课(而不是 3 小时),并且总主题和作业较少。两门课程都非常适合学习编程。CS 61A 进度更快。修读 Data C88C 并想学习 CS 61A 中省略的主题的学生可以在未来的学期修读 CS 47A(或自学)来实现。

For the Data Science major and minor, the content in Data C88C is sufficient. For the Computer Science major and minor, the additional content in CS 61A is important. If you are certain that you want to major or minor in Computer Science, CS 61A is the right introductory course.

Students who complete Data C88C can either proceed directly to CS 61B or subsequently take CS 61A, a path that offers a substantial amount of review because of the high topic overlap between the courses. (Review can be very helpful for some students!) However, you cannot take Data C88C for credit after having taken CS 61A.

Info 206A: Introduction to Programming and Computation is a 2-unit introduction to programming that overlaps with many topics in the first eight weeks of CS 61A. Professor Hany Farid has placed all of the videos and exercises for this course online, and these are an excellent resource to supplement CS 61A.

课程形式

课程包括许多学习活动:讲座、实验、讨论、答疑时间等。尝试所有活动,找出哪些课程组件组合对你最有帮助。

讲座与视频

There are four 80-minute live lectures per week. In addition, there is a video playlist for each lecture. We recommend watching the corresponding video(s) from the video playlist before attending live lecture or section. Live lecture may not cover all course material, so you should attend lecture, lab, and discussion.

Section

每周讨论课包括基于编程的实验作业和讨论环节。

有 12 个实验点和 12 个讨论点。因此,必须参加并完成所有实验环节/作业和讨论环节才能获得学分。实验 0 和讨论 0 不授予学分,因为学生可能仍在进行课程注册,但仍需要完成实验 0(因为它是为课程中其余作业设置的)。

如果需要申请请假,请发送电子邮件至 cs61a@berkeley.edu(而不是你的实验/讨论助教)。

Lab

In lab, students work with each other to solve the set of programming problems in each week's lab assignment. To receive credit for lab section, you must complete and submit the lab assignment with all questions answered correctly and you must attend and have your TA take your attendance by answering the checkoff questions.

Discussion

Discussions are in groups of 4-8 students. Your discussion group will work through practice problems together. To receive credit for discussion section, you must attend the entirety of the discussion and have your TA take your attendance.

答疑时间

答疑时间是随时可参加的辅导课程,你可以在其中提问关于材料的问题,获得作业指导,并在小组环境中与同伴和课程工作人员一起工作。请参阅答疑时间表并前来参加。

作业

除了基于编程的实验作业外,还有基于编程的家庭作业和项目。

家庭作业

每周家庭作业让你将讲座和讨论课上学到的概念应用到更具挑战性的问题。家庭作业通常在周四发布,截止日期为下周周三或周四。

不允许使用任何人工智能工具,除了集成到ok中的61A-bot,ok是每次作业提供的程序。学生这样做将受到分数惩罚。当然,你也不允许使用互联网上的解答。

人们编写程序的方式由于大语言模型的扩展普及性和准确性而迅速变化。到目前为止,AI 还没有取代人们在软件开发中的角色。理解编程语言以及如何使用它们解决问题的人比不理解的人更有能力创建有用的程序,而最有技能的人从技术中受益最大。因此,学习解决编程问题似乎仍然是学生时间的良好利用。

部分 credit。 家庭作业满分为 2 分,每个错误的问题扣 1 分。

项目

项目是较大的作业,旨在以有趣的方式结合课程中的想法。

你被允许并鼓励与伙伴进行结对编程。确保轮换角色,以便你们双方都理解完整的结果。你也可以在所有项目中单独工作,尽管建议使用伙伴。

不允许使用任何人工智能工具来帮助你完成项目。甚至不允许使用课程其他部分可用的人工智能工具。学习如何自己构建这些项目很重要。当然,你也不允许使用互联网上的解答。

项目根据正确性评分,成功完成的每个问题都会获得分数。

AI工具与互联网

本节改编自Michael Ball 教授的 DATA C88C SP26 课程大纲

虽然你可以搜索概念性问题,例如"如何在 Python 中向列表添加项目",但你在任何情况下都不得搜索课堂上布置的具体问题

此政策适用于你使用 AI 工具、搜索引擎或与同伴交谈——这些都是有用的资源!

在你的作业上,你将被要求引用你咨询的来源,类似于研究论文。(虽然不那么正式。)代码就像写作和想法,它从许多先前的例子和想法中构建而来,我们应该引用它们。

通常,你应该尽量减少在作业中使用 AI 工具,并且只将它们用于一般概念性帮助。避免从互联网或 AI 工具复制粘贴代码片段。虽然打字本身不是学习,但调试和理解代码的过程是,重要的是放慢速度思考代码在做什么,这是需要培养的关键技能。

AI工具可接受使用的一些示例

你可以做一些事情,或向 AI 工具寻求帮助:

  • 请求解释概念
  • 请求语法示例
  • 请求解释错误消息的含义以便你可以自己调试代码

AI工具不可接受使用的一些示例

你不能做一些事情,或向 AI 工具寻求帮助:

  • 作业上的自动完成代码建议
  • 请求具体作业问题的帮助
  • 请求作业的代码片段(或完整解答)
  • 请求它为你执行整个调试代码的过程(例如,测试失败所以你将代码复制并粘贴到 ChatGPT 中并要求它找出问题)

建议

尝试一些这些提示:

  • "我正在学习 [主题]。你能在 Python 中给我展示一个 [概念] 的示例吗?"
  • "[概念 A] 和 [概念 B] 之间的权衡是什么?"
  • "你能解释这个错误消息的含义吗:[错误消息]?我在哪里可以了解更多关于它的信息?"
  • "请提供关于 [主题] 的文档链接。"

考试

将有两场(主要)考试:

  • 期中考试将于 7/13 周一 7pm-9pm 举行。
  • 期末考试将于 8/11 周二 7pm-10pm 举行。

考试将在校园内各教室现场纸质进行。

有任何一场考试有时间冲突(例如,注册了另一门有冲突考试时间的课程)的学生可以参加补考:

  • 补考期中考试将于 7/14 周二 8am-10am 举行。
  • 补考期末考试将于 8/12 周三 8am-11am 举行。

我们将在每场考试前在 Ed 上发布通知,告知无法参加考试的学生。

考试学习指南:

测验

将有 5 次每周测验(在第 1 周、第 4 周(期中)和第 8 周(期末考试)以外的其他周)。测验将在计算机基于测试设施 (CBTF)中进行,时长 50 分钟。每次测验前 1 周,你将能够在下周一或周二预约 CBTF 时段,以最适合你的日程安排。

豁免考试与未完成

如果你无法参加测验或期中考试,请在考试前cs61a@berkeley.edu 说明你的情况。因批准原因无法参加测验或期中考试的学生可能会被豁免该考试。可能批准的原因包括:疾病、医疗并发症和课程冲突。请注意,学生只能被豁免一次测验。

如果被豁免测验或期中考试,他们的考试分数将在课程结束时通过回归估算。我们将使用你的其他测验分数来计算回归后的测验分数,并使用期末考试来计算回归后的期中分数。这将以不会平均帮助或伤害你的最终成绩并且考虑考试难度的变化性的方式完成。

学生不能被豁免期末考试。但是,因批准原因并且已完成课程作业的学生可以通过发送电子邮件至 cs61a@berkeley.edu 申请未完成。收到未完成成绩的学生可以通过参加未来 CS 61A 课程的期末考试来完成课程。

合理便利(DSP 及其他)

我们将为所有注册了伯克利残疾学生项目 (DSP)的学生提供合理的便利。为确保你获得适当的便利,请让你的 DSP 专家提交确认你的状态和便利的信件。

如果你没有注册 DSP,或正在 DSP 的入职过程中,你仍然可能有资格获得便利(例如考试时间延长或截止日期延长)。如果在学期中出现严重情有可原的情况,你也可能有资格获得便利。如果你认为可能需要便利,请发送电子邮件至 cs61a@berkeley.edu

重要提示:如果你有涉及考试的便利,请尽快确保向伯克利的系统提交信件,以便我们可以为你的便利做计划。我们无法总是在短时间内满足便利请求。

Assignment Extensions

If you need to request an extension, regardless of your DSP status, fill out this form before the original deadline. Submissions to this form will be visible to all course staff members, but if you have extenuating circumstances that you would like to keep private, please email cs61a@berkeley.edu (see Privacy).

All extensions will be considered on a case-by-case basis. There will never be a penalty for requesting an extension.

Joining CS 61A Late

Work submitted late will not receive credit, even if it is from a student who joined the course late. However, it is possible to submit assignments if you are not enrolled. Therefore, if you would like to take the course but are having enrollment issues, please submit all assignments by their due date.

To request to be added to course platforms so that you can submit, email cs61a@berkeley.edu.

Privacy

All DSP and accommodations-related materials for this course are kept in a repository separate from the rest of the course materials that is visible only to the instructors, selected staff, and staff course managers.

For any DSP and accommodations-related communications, please reach out to cs61a@berkeley.edu, which will put you in touch with our student support team. This inbox is only visible to staff members marked with "@" on the staff page. This inbox will be visible to future members of course staff, so if you ever have a communication that you wish to remain private, let us know and we can delete the email exchange once the conversation is resolved.

Resources

Technology

You will need a computer and internet to write code in this class. Professor Lisa Yan wrote a helpful guide about purchasing a laptop for use as a student at UC Berkeley. As mentioned in that guide, the Student Technology Equity Program provides free laptop loans for students.

Textbook

The online textbook for the course is Composing Programs, which was created specifically for this course, based on the classic textbook Structure and Interpretation of Computer Programs. Readings for each lecture appear in the course schedule. We recommend that you complete the readings before attending lecture.

Past exams appear on the Resources page.

Grading

Your course grade is computed using a point system with a total of 300 points, broken down as follows:

Category Num Graded Points per Unit Total Points % of Grade
Quizzes 5 12 60 20.00%
Midterm 1 60 60 20.00%
Final 1 80 80 26.67%
Projects 4
  • Hog: 10
  • Cats: 10
  • Ants: 20
  • Scheme: 20
60 20.00%
Homework 7 2 14 4.67%
Lab (Assignment and Attendance) 12 1 12 4.00%
Discussion Attendance 12 1 12 4.00%
Surveys 2 1 2 0.67%
Total Points 300 100.00%

See Section about Lab and Discussion 0.

There are also 4 extra credit points available to everyone for early submission of projects.

Each letter grade for the course corresponds to a range of scores:

             A  ≥ 285    A-  ≥ 270
B+  ≥ 255    B  ≥ 230    B-  ≥ 210
C+  ≥ 190    C  ≥ 180    C-  ≥ 175
D+  ≥ 170    D  ≥ 165    D-  ≥ 160

Your final score will be rounded to the nearest integer before being converted to a letter grade. 0.5 rounds up to 1, but 0.49 rounds down to 0.

A+ 成绩将由讲师自行决定分配。

没有曲线;你的成绩将只取决于你做得如何,而不是其他所有人做得如何。分数阈值基于学生在之前学期的表现。阈值通常不会根据学生表现进行调整,也永远不会提高。

在典型的学期中,50-60% 修读该课程以获得字母成绩的学生将获得 B+ 或更高。

许多学生以完美的家庭作业、项目、实验和讨论分数结束课程。这些课程部分不是为了评估,而是学习工具。

考试恢复

可以通过在期末考试中表现出改进来恢复期中考试中失去的分数。你每次考试的成绩(占总分的百分比)将至少是你期末考试成绩的 90%。例如,一个在期中考试中得 10/60 分,但在期末考试中得 60/80 (75%) 的学生将获得调整后的期中考试分数 75% * 90% = 40.5/60 分,因此除了已经得到的 10 个期中考试分数外,还将恢复 30.5 个期中考试分数。

考试恢复仅适用于在期末考试时间周内参加期末考试的学生。收到未完成成绩的学生没有资格获得考试恢复。

迟到政策

如果你无法按时提交作业,你可以申请延期。对于超过延期截止日期的迟到工作:

  • 实验 不获得学分。
  • 家庭作业 不获得学分。
  • 项目:截止日期后 48 小时内提交将获得所得分数的 75%。截止日期后 48 小时或更长时间提交将不获得学分。

公民身份

我们期望所有与课程工作人员和其他学生的互动都将表现出对他人适当的尊重、考虑和同情。请记住要友好和体贴;我们的社区汲取了宝贵经验的广泛范围。如需进一步阅读,请参考伯克利社区原则伯克利校园学生行为准则

对于对课程工作人员或其他学生异常粗鲁或不尊重的行为,你的最终成绩将被课程讲师酌情降低至多一个完整的字母等级(例如,从 A- 到 B-)。如果你以哪怕最低限度的尊重和考虑对待他人,并且不参与主动伤害他人的行为,你不需要担心此政策。

合作学习

除了考试这一明显的例外,我们鼓励你在做课程活动时与朋友和同学讨论。如果你与他人一起工作,你将在本课程中学到更多。随意提问、回答问题和分享想法。

合作学习不同于分享答案。你不应该向其他学生展示你的代码或查看其他人的代码,除了:

  • 在实验期间,你可以随意分享,只要你们都在学习。
  • 对于允许伙伴的项目,你可以与你的伙伴分享任何内容。
  • 如果你已经完成了一个问题,你可以查看其他人的代码来帮助他们完成。

如果你在帮助另一个学生,不要只是告诉他们答案;他们将学到很少并且在考试中遇到麻烦。相反,尝试通过思考例子来引导他们自己发现解决方案。解决问题练习对计算机科学的进步至关重要。

由于你是合作工作的,请让你的项目伙伴了解情况。如果某些医疗或个人紧急情况使你长时间离开课程,或者如果你因任何原因决定退出课程,请不要把就悄悄消失!你应该通知你的项目伙伴,这样就没有人依赖你做你无法完成的事情。

学术不端

任何被发现在考试中合作的学生将在课程中获得 F。请不要成为这些学生之一。

在你自己解决作业之前阅读他人的家庭作业或项目解答将会招致分数惩罚。你可以事先与他人讨论问题,但你必须写下你自己的解答。此规则的例外是你可以与你的项目伙伴共享代码。

以下是你不应该做的事情的列表。此列表并非详尽无遗,但涵盖了大多数重大违规:

  • 不要从任何不是你的伙伴的学生那里复制代码。
  • 不要允许除了你的伙伴之外的任何学生从你那里复制代码。
  • 不要使用人工智能工具,如 GitHub Copilot、ChatGPT、Claude Code、Codex、Cursor 等来填写或更正你的代码。
  • 不要从在线来源复制解答,如 Stack Overflow、Pastebin 和 GitHub 上的公共存储库。
  • 在你完成作业之前,不要阅读他人对作业的解答
  • 在学期期间或之后不要公开发布你的解答。

如果你在网上找到解答,请匿名提交该解答的链接。当我们找到在线解答时,我们要求作者删除它。我们还记录解答并用它来检查抄袭。通过报告在线解答,你帮助保持课程对每个人的公平。

总之,我们期望你交上你自己的作品,参加你自己的考试,并完成由你和你的伙伴编写的代码的项目。

与其复制别人的作品,不如寻求帮助。你在这门课程中并不孤单!整个工作人员都在这里帮助你成功。如果你投入时间学习材料并完成项目,你将不需要复制任何答案。

临别思考

成绩和惩罚不是本课程的目的。我们真的只是希望你学习。整个工作人员非常兴奋能在本学期教授 CS 61A,我们期待见到如此庞大和热情的学生群体。我们希望你们所有人都能在这里取得成功。欢迎来到 CS 61A!