CS 61A 是加州大学伯克利分校 (University of California, Berkeley) 计算机系的第一节入门课程. 曾被评为世界最好的5节计算机课之一. CS 61A是一节既包罗万象, 又深刻探索计算机思维和技能的课程.
课程介绍 (Introduction)
源课程网站: CS 61A 该链接直通当前学期课程状态, 本学习手册将基于每年课程内容的不同之处折中取材, 我们会在每一部分标注该取材的课程年份与链接 (if available). 请注意, 此学习手册根据本人自己的总结和改版, 会有自己的添加和删改. 此教程非学校官方发布.
课程大纲 (Guidelines)
从内容上讲, 本课程将会分为几个阶段: 1. 从计算机思维入手理解编程的本质, 熟悉编程思路, 结构, 熟悉Python的语法和各类用法. 2. 基础的数据结构, 类的概念与利用 3. 更多数据结构, 算法入门, 贯通编程习惯与思维养成 4. 学习Scheme, 了解编译机制 5. 学习SQL, 了解数据库系统 6. 附加课题(数据结构, 并行机制, 光线追踪, 逻辑运算, 机器学习等)
从结构上来讲, CS 61A分为Lecture, Lab, Homework, 和Discussion 共四部分构成. 其中Lecture为课程, 和Discussion为讲解, Lab和Homework为练习和提升. 本课程将会参照源课程的内容进行练习分配.
源课程安排为每周的Lab与Homework, 一共3场考试, 与共4个专案项目 (projects). 我们会适当进行重新安排. 因为CS 61A已经将教授水平到了一定的极致, 很难再进行改动, 不去真正的上课很难体会到那种震撼, 我只求能够尽量还原课程所带来的计算机世界的美妙~
什么是计算机科学 (Computer Science)
计算机科学是一门探究哪些问题可以通过计算解决, 如何解决解决这些问题以及我们会利用什么样的技术的学科
计算机领域的分支很多, 主要包括系统 (System), 人工智能 (Artificial Intelligence), 图像处理 (Graphics), 安全 (Security), 网络 (Networking), 编程语言 (Programming Language), 理论 (Theory), 科学运算 (Scientific Computing) 等等... 其中每个领域分支都有自己的子分支. 例如人工智能 (AI) 领域包括 决策判断 (Decision Making), 机器人 (Robotics), 自然语言处理 (Natural Language Processing) 等. 再往下深究, 每个问题领域都会有不断的新问题提出, 转换为计算机领域的问题, 以及尝试寻找解决方案等一些列操作. 大体的结构, 我们可以通过以下结构大体了解:
课程准备 (SetUp)
安装 Terminal
Terminal 是计算机使用终端, 你可以通过对Terminal输入指令来对计算机进行操作. 不论你使用任何一种计算机系统 (Windows, macOS, Linux), Terminal对于CS 61A来讲都是至关重要的.
macOS/Linux
如果你在使用macOS/Linux, 你应该已经有一个叫做Terminal的程序了, 打开它即可. #### Windows 如果你在使用Windows系统, 我们建议你下载Git Bash作为你的Terminal. 一般情况来讲, 你只需跟从默认的下载和安装流程, 除了一种情况. 当你到达 Configuring the terminal emulator to use with Git Bash 这一步的时候, 一定要选择第二个选项 Use Windows' default console window. 这很重要! 否则你的Terminal将无法工作!
安装 Python 3
系统 | 下载 |
---|---|
Windows | 下载 |
macOS | 下载 |
Ubuntu | sudo apt-get install python3 |
Other | 下载 |
macOS
如果你有任何疑问, 可以点击观看此介绍视频 (视频中使用的是老版Python 3, 但是安装流程相同). 本视频基于YouTube, 若你没有VPN, 可以大致参考此百度经验.
Windows
在下载Python3的时候, 请确保你勾选了“Add Python 3.6 to PATH”这一项, 这可以使你能够从Terminal命令行启动并运行Python.
安装文本编辑器 (Install Text Editor)
常用的文本编辑器有Atom, Sublime Text3, Emacs, Vim等. 可以根据自己的喜好进行安装使用. > 这里个人建议, 作为初学者, 可以先选用Atom或者Sublime Text3. Emacs和Vim虽然同样功能强大, 但是更适合有一定经验水平的人使用. 若你已经有熟知的文本编辑器, 继续使用就可以了, 如果你刚刚接触, 我个人推荐你使用Atom文本编辑器, 因为它是完全开源的软件, 所以有很多很方便安装又好用的插件, 可以在今后的使用中很好的提高效率.
使用 Terminal (Using the terminal)
我们可以理解Terminal是计算机的控制台, 我们平时看到的屏幕上显示的内容, 都是图形化了每一个文件, 程序等等. 而在Terminal内我们可以将计算机当作一个大目录, 我们可以穿梭于各个目录之中, 查看文件, 并给予计算机指令 (通过在命令行中输入) 进行操作.
首先, 我们先打开Terminal, 开始检查我们的安装是否完整和正确.
当你一开始打开Terminal的时候, Terminal会显示在你的根目录 (Home Directory) 处, 见上图, 根目录用~来表示.
如果你看到的Terminal和图中的不完全一样, 不用担心. 重点是查看是否在$的左侧有~. 在他们前面也可能还标记着你计算机的名字.
Python编译器 (Python Interpreter)
你可以输入以下命令以检测是否正确安装了Python: 1
python3
>>>
开头的. 这代表着你已经进入了Python并可以属于Python命令了. 当你成功进入python以后, 你可以输入exit()
或按键Ctrl-D
退出.
如果你在使用Windows系统并发现输入
python3
没有效果, 可以尝试输入python
或者py
. 如果都没有效果, 可能你需要查看你是否安装时添加了Python的路径.
文件管理 (Organizing Files)
本节你讲学习如何通过Terminal来进行文件管理.
目录 (Directories)
你将使用的第一个命令是ls
, 尝试在Termial中输入 1
ls
ls
命令将列出当前目录下的所有文件 (files) 和文件夹 (folders). “目录”是文件夹名称的另一种称呼 (例如Documents目录). 因为你现在在根目录 (Home Directory), 你应该能看到根目录下的所有文件和文件夹名称被列出.
变更目录 (Changing Directories)
我们使用cd
命令来进入另一个目录. 现在让我们来尝试进入桌面目录 (Desktop Directory). 首先我们先确认我们目前处于根目录 (检查命令行是否有~
), 并且用ls
来检查是否目录下有Desktop
(桌面)目录. 完成后, 输入以下命令, 进入Desktop
目录. 1
cd Desktop
我们也有一些方式能返回到之前的目录: * cd ..
(两个点) ..
意思是”父目录“ 即 ”上一级目录“. 现在, 你应该在Desktop
目录, 你的上级目录是根目录 (~
), 输入cd ..
将带你回到上一级目录. * cd ~
(波浪线). 回忆一下我们之前说过的, ~
意思是根目录. 故此此命令将带你回到根目录. * cd
(无后缀). 为cd ~
的快捷方式
创建新目录 (Making New Directories)
我们将要学习命令mkdir
, 可以理解为make directories的缩写. 让我们在桌面创建一个名为cs61a
的目录来储存我们的课程内容: 1
mkdir cs61a
ls
命令加以验证.
现在, 让我们再创建一些目录. 首先请确认当前处于~/Desktop/cs61a
目录. 然后, 让我们在cs61a目录中创建名为"projects"和"labs"的目录: 1
2
3cd ~/Desktop/cs61a
mkdir projects
mkdir labls
), 你应该看到两个目录 (projects
和labs
).
下载任务文件 (Download the Assignment)
首先, 请点击链接下载第一个lab任务lab00.zip. 它其中包含了你的第一个lab任务 (将作为下一节课的资料, 本节课程不要求完成). 下载以后, 我们来找到它. lab00.zip
应该被下载到名为Downloads
的目录里. 我们利用ls
命令进行查看: 1
ls ~/Downloads
lab00.zip
.
解压缩启动文件 (Extracting Starter Files)
在你进行任务之前, 你应先将任务文件解压缩出来. 不同的系统有不同的解压缩方式, 如有疑问, 可以在网络搜索一下. > 你可以使用terminal来在命令行中解压缩文件. 首先进入文件所在的目录 > 1
cd ~/Downloads
unzip
命令和文件名称来进行解压缩: > 1
unzip lab00.zip
当你成功解压缩lab00.zip
以后, 你应该得到一个名为lab00
的文件夹, 它其中应该包含一下文件 (利用cd
和ls
进行查看): * lab00.py
: 你将会在此做添改的模版文件 * ok
: 一个用来测试和提交的程序 * lab00.ok
: ok
的结构文件
移动文件 (Moving Files)
将lab文件移动到你先前创建的目录中: 1
mv ~/Downloads/lab00 ~/Desktop/cs61a/lab
mv
命令 (move)会将~/Downloads/lab00
目录移动到~/Desktop/cs61a/lab
目录中. 现在, 我们可以进入lab文件进行操作. 尝试利用cd
来引导进入该目录, 如果你遇到了困难, 请参考一下命令: 1
cd ~/Desktop/cs61a/lab/lab00
命令行总结 (Summary)
以下是对刚刚提到和利用到的terminal命令的小结: * ls
: 列出 (list)当前目录下的所有子目录 (文件, 文件夹) * cd <path to directory>
: 进入某特定目录 (change directory) * mkdir <directory name>
: 建立名为xxx的新目录 (限文件夹) (make directory) * mv <source path> <destination path>
: 将某目录移动(move)到另一目录中位置. 我们所接触到的以上内容隶属于UNIX系统命令. 你可以进入UNIX tutorial (自源课程网站, 英文), 或是UNIX 入门指南 来获得更多有关命令行的更多知识与解释.
自Part 1 起我们将开始正式介绍课程内容并参与练习作业等. 请注意, 本学习手册不完全按照原课时进行, 我将会对课程安排进行适当的调整.