最佳实践是将网络课件同源代码结合使用,具体学习资料见此处
本课内容总览:
- 课程介绍
- 课程安排
- Hello World
1. 概述
什么是61B?
- 编写运行高效的代码
- 好的算法
- 好的数据结构
- 高效编写代码
- 设计、编译、测试并调式大型程序
- 使用编程工具: git、Idea、JUnit以及各种命令行工具
- Java(不是本课的重点)
假设具备编程基础知识
- 面向对象编程,递归、列表和数
1.1 为什么学习算法或数据结构
- 日常生活中很多地方都用到了它们,比如:搜索引擎的联想词
- 我们文明目前进程的主要推动力,比如:电动汽车、chatGPT、AlphaGo
- 称为更好的程序员,在工作中,运用正确的数据结构和算法
- 为了理解宇宙,科学越来越依赖于模拟和复杂数据分析,而不是简单的观察和清晰的方程式
- 为了常见美好的事务,比如: 3D渲染、3D动画等
1.2 学习方法
学习的一小部分:
- 新材料介绍:讲座/阅读
学习的大部分:
- 理论:讨论课、学习指南、理论作业。
- 编程、工具使用、问题分解方面的学习:实验室、编程作业、项目。
- 设计方面的学习:Projects2和3。
2. 课程安排
2.1 获取信息的地方
官方课程资源
非官方: Google、Stack Overflow、其他网络编程课程、各种在线文档等。
2.2 课程细节
- 对于候补名单上的学生:如果你完成了项目0,我会尽力在第4周之前让你进入课程,但不能保证成功。
- 我们应该能够容纳所有人,但我不能百分之百地保证。
- 要注册讨论区域或实验的话,请看: 网址
- 请在Ed讨论区发布管理问题或发送电子邮件至cs61b@berkeley.edu。
- 请不要直接通过电子邮件向我发送此类问题
2.3 课程结构
第一阶段:Java编程密集型入门
- 第1周至第4周。
- 一份基于浏览器的编程作业(此HW0为可选作业)
- 四个实验室介绍不同的工具(从本周开始)
- 两个项目(proj0和proj1)
- 第二次期中考试时间待定
第二阶段: 数据结构
- 第5周至第10周
- 极为重要且基础性的材料:在课程中的这一部分,可以预期计算机科学的工作面试将非常侧重
- 一份编程作业(HW1)和一份应对考试的理论作业(HW2)
- 应用和更深入的数据结构洞见。
- 一个非常大的个人项目(Proj 2),截止日期为4/2,检查点截止日期为3/12。
- 实验室:
- 实验室5:项目1的同行评审。
- 两个实验室实现数据结构(哈希表和二叉搜索树)。
- 剩余的实验室集中在项目2上。
- 第三次期中考试时间为3/17,待定。
第三阶段: 算法和软件工程
- 第10-14周
- 项目:
- Proj 3: 建立你自己的世界:一个开放式的项目,你和你的搭档可以按照自己的设计构建一个2D世界,具备物理性质。在课程的最后一周的实验室中完成。
- 实验室致力于项目。
- 一份理论作业,截止日期为5/3。
日程安排请见: 网址
2.3.1 实验和讨论
实验室/讨论课的出席不是必须的
- 必须开启摄像头才能参加
- 如果你不开摄像头,则会提供离线版本
实验室:
- 实验室截止日期为每周五晚上11:59
- 对“合理努力”的实验室可以获得全部学分
- 只需通过一些自动评分测试即可获得全部学分
2.3.2 合作政策
合作:
- 您需要自己提交所有作业和项目 0、1、2 的解决方案。
- 对于实验,您可以选择与一个伙伴一起工作。
- 对于项目 3,您必须有一个伙伴。
所有独立项目、作业和实验的代码必须是您自己完成的:
- 可以与他人讨论并帮助调试。
有关课程网站上的更多详细信息,请自行了解!
2.3.3 每周调查和学习指南
每周日截止的周调查问卷
- 检查您的进度并报告出勤情况。
- 免费积分,但不允许迟交!
- 最低分的四个将被删除。
每节课都有学习指南。
- 提供讲座的简要概述。
- 提供(通常为)C级,B级和A级的考试题目。
- A级问题通常足够难,我预计助教们会遇到困难,所以请友善对待!
- 学习指南包括一个检查练习。不计分,但很有用!
2.3.4 考试
- 除了可以携带作弊笔记之外,考试是闭卷的。
- 考试难度将会相当高(中位数为60-65%)。
- 在期末考试上表现优异可以提高总体考试分数。
- 如果您的期末成绩统计上更好,它可以替代您的两个中期考试。请查看课程网站上“clobbering”一节了解详细信息。
考试日期:
- 第一次期中考试:2月10日,时间待定。将会适应不同时区。
- 第二次期中考试:3月17日,时间待定。将会适应不同时区。
- 期末考试时间:5月11日,太平洋时间上午8点。将会适应不同时区。
- 不会有替补考试(请查看考试替代政策)。
- 一种例外情况:与其他课程的期末考试直接冲突。
2.3.5 课程成绩
分数分配:总共12,800分,成绩将由您的总分确定。
- 期中考试:共计3200分。
- 期末考试:共计3200分。
- 项目:共4480分。
- 作业:共计960分(每个作业320分)。
- 实验课:共计640分(每个实验课64分)。
- 每周调查:共计320分(每个调查32分)。
2.3.6 延迟提交和导师GSI
任何作业/实验/项目的迟交将不被接受。没有任何作业/实验/项目会被抛弃。
- 你应该认真对待截止日期!
- 如果需要,可以使用自动扩展系统来申请延期。
- 最多6个滑动天数。
- 每个作业最多3个滑动天数。
- 不要期望其他课程会有类似的延期。61B课程并不像EE16A或CS70等累积性课程那样强烈。 在第2周,你将选择一个指导助教。
- 如果你没有选择一个,一个将被分配给你。
- 指导助教将跟踪你的进度,并在他们感到有潜在问题时与你联系(或让其他人联系)。
- 如果你进度落后,请联系指导助教。
2.3.7 课程进度
我们会非常快地开始。
- 可选的 HW0 已经发布。
- 介绍 Java 语法。
- 需要1-4小时。
- 建议和朋友一起完成!
- 建议在您的实验课之前完成。
- 强烈建议在周五的讲座之前完成。
- 实验1和实验1设置都可用。
- 实验1设置:如何设置您的家庭计算机(在实验1之前完成)。
- 实验1:如何使用各种工具。
- 项目0于周五发布。截止日期为1月29日星期五(学期开始后9天)。
- 如果可能,请在周六开始,特别是如果您是 Java 的新手。
- 练习基本的 Java 功能。
- 要获得完全学分,需要解决一个非常具有挑战性的算法问题。
3. Hello World
3.1 Java和面向对象编程
Java是一种面向对象的语言,有严格的要求:
- 每个Java文件必须包含一个类声明*。
- 所有的代码都在一个类*中,包括辅助函数、全局常量等。
- 要运行Java程序,通常需要使用public static void main(String[] args)定义一个主方法。
3.2 Java和静态类型
Java是静态类型的!
- 所有变量、参数和方法必须声明类型。
- 类型永远不会改变。
- 表达式也有类型,例如,“larger(5, 10) + 3”的类型为int。
- 编译器在程序运行之前检查程序中所有类型是否兼容!
- 例如,String x = larger(5, 10) + 3将无法编译。
- 这与Python等语言不同,后者在执行期间执行类型检查。
3.3 反思静态类型语言
优点:
- 捕捉到某些类型的错误,使得程序员更容易调试代码。
- 可以减少最终用户计算机上出现类型错误的可能性。
- 使得代码更易于阅读和理解。
- 代码可以更高效地运行,例如不需要进行昂贵的运行时类型检查。
缺点:
- 代码更冗长。
- 代码不够通用,例如之前必须有两个不同的 larger 函数。
3.4 接下来的安排
本周安排:
- HW0:现在已发布。让你有机会自行探索Java基础知识。
- Lab1:如何编译和运行代码。如何检查作业的起始文件并提交它们。如果可能的话,在实验室之前完成HW0!
- Lab1设置(可选):如何在自己的计算机上编译和运行代码。
- Project 0(周五发布)。必须单独完成。
- 下一堂课:公共静态啥啥啥实际上是什么意思。
4. 课程导引
4.1 课程代码
本课代码都在这里: 网址
4.2 概述
我们第一个Java程序。打印Hello World:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
主要语法特征。我们的第一个程序展示了Java的几个重要语法特征:
- 所有的代码都在类中。
- 被执行的代码在一个被称为main的函数或方法中。
- 花括号用于表示代码的开始和结束,例如类或方法声明。
- 语句以分号结尾。
- 变量有声明类型,也称为“静态类型”。
- 变量必须在使用前声明。
- 函数必须有返回类型。如果一个函数不返回任何值,我们使用void。
- 编译器确保类型一致性。如果类型不一致,程序将无法编译。
静态类型检查是 Java 中最好的功能之一(在我看来)。它为我们提供了比没有静态类型检查的语言更多的优势:
- 在程序运行之前就检查了类型,使开发人员可以轻松地捕获类型错误。
- 如果您编写了一个程序并分发了编译版本,它(大部分)可以保证不会出现任何类型错误。这使得您的代码更可靠。
- 每个变量、参数和函数都有一个声明的类型,使程序员更容易理解和推理代码。
静态类型检查也有一些缺点,稍后将讨论。
编码风格。编码风格在61B和现实世界中都非常重要。代码应该按照教科书和讲座中描述的适当的注释。
命令行编译和执行。使用javac编译程序,使用java执行程序。我们必须在执行之前进行编译。
4.3 练习
本次讲座无作业要求。但我们强烈建议您完成可选的HW0,其中涵盖了许多基本的Java语法知识。