open source software construction course
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 10 年前 | ||
| 10 年前 | ||
| 10 年前 | ||
| 11 年前 | ||
| 11 年前 | ||
| 11 年前 | ||
| 11 年前 | ||
| 10 年前 |
cs100 - 开源软件构建
本课程将探讨如何成为一名黑客。 “黑客”一词蕴含多重含义。 它意味着:
-
渴望了解计算机工作的原理与原因
-
追求高效 / 杜绝重复劳动
-
使用并贡献开源软件
-
洞悉软件的边界情况
-
以富有创意且超乎预期的方式使用工具
-
(偶尔)我们会将上述所有技能融会贯通,对某些事物进行剖析与重构
黑客精神是一种思维模式。
我无法将其强加于你——这需要你主动去接纳。
例如,本课程会介绍许多新工具:
名为 git 的版本控制系统,
名为 vim 的编辑器,
名为 gdb、valgrind 和 cppcheck 的调试工具,
我们还将深入探讨如何使用 bash shell 和 Linux 操作系统。
这些工具初看可能有些陌生。
一开始使用它们或许会让你感到不适应。
但这些工具都非常强大。
掌握它们将使你成为一名效率显著提升的程序员。
一旦熟练掌握,你便再也不愿回到过去的工作方式。
本课程中,你将参与两个主要项目:
-
前四次作业将引导你逐步构建自己的 Unix shell。 这是你迄今为止所承担的最大项目。 你将以开源项目的形式进行开发, 并在不同阶段与同学协作。
-
最后一次作业要求你通过改进所选项目的文档,为开源社区贡献力量。 本课程的许多必读材料正是由往届 cs100 学生撰写的。 如果你的项目完成出色,未来数年的 cs100 学生都将从你的成果中受益!
课程结束时,你应当能够自如地运行自己的开源项目,并为他人的项目贡献代码。
授课教师
| 职位 | 姓名 | 办公时间(WCH 110) |
|---|---|---|
| 讲师 | ||
| 助教 |
重要提示: 若需就课程相关事宜联系授课教师,请通过 github 提交 issue。 我们将在课堂上讲解具体操作方法。 这一系统与您可能熟悉的 piazza 系统类似,但在开源软件开发领域更为常用。
课程安排
我们的课程将大致遵循以下时间表。 请在课前完成指定阅读材料。 我会不定期进行随堂测验,以确保大家确实完成了阅读任务。
| 周次 | 日期 | 阅读材料 | 主题 |
|---|---|---|---|
| 1 | Daniel Lemire 的 高效学习方法(推荐阅读,非必选) | 课程介绍;vim 的使用 | |
| 1 | ESR 的 Unix 概述 | 使用 git 进行版本控制 | |
| 1 | ESR 的 常见软件许可证介绍;《纽约客》的 GNU 宣言三十周年回顾 | 使用 git 进行版本控制 | |
| 2 | Paul Graham 的 大学生该如何度过大学时光 | 使用 git 进行版本控制 | |
| 2 | Ian Malpass 的 给未来软件工程师的建议;Linus Tolvalds 关于开发 git 原因的访谈 | 使用 git 进行版本控制 | |
| 2 | Lucas Xu 的 Makefile 教程;Alexander Ortiz 的 如何编写 README 文件;ESR 关于 Unix 文档的思考(第一部分) 和 第二部分 | 系统调用:进程管理(fork、wait、exec、perror);测验 |
|
| 3 | 系统调用教程 相关章节 | 系统调用:进程管理(fork、wait、exec、perror) |
|
| 3 | 位运算符;宏 | 系统调用:文件管理(open、close、read、write) |
|
| 3 | 系统调用教程 相关章节 | 系统调用:文件管理(open、close、read、write) |
|
| 4 | William Coates 的 Valgrind 教程; | 调试工具(gdb、valgrind、cppcheck) |
|
| 4 | Jeff Atwood 的 如何成为一名更优秀的程序员 | 调试工具(gdb、valgrind、cppcheck) |
|
| 4 | 系统调用教程 相关章节 | 系统调用:目录管理(readdir、stat);测验 |
|
| 5 | Y Combinator 的 我们愿意投资的创业想法 和 Paul Graham 的 创业融资 | Shell 脚本:I/O 重定向与管道 | |
| 5 | Patrick McKenzie 关于程序员薪资谈判的文章(篇幅较长,无需全文阅读) | Shell 脚本:I/O 重定向与管道 | |
| 5 | Shubhro Saha 的 为什么工程师应该写作;《经济学人》的 良好写作风格指南 | 编写优质文档 | |
| 6 | 系统调用:I/O 重定向与管道(pipe、dup) |
||
| 6 | 系统调用教程 相关章节 | 系统调用:I/O 重定向与管道(pipe、dup) |
|
| 6 | ESR 的经典 Master Foo 系列 | Shell 脚本:使用 if 和 for 进行流程控制;测验 |
|
| 7 | 正则表达式 | Shell 脚本:环境变量(export、PATH、HOME、EDITOR) |
|
| 7 | Shell 脚本:环境变量(export、PATH、HOME、EDITOR) |
||
| 7 | 系统调用:信号处理(signal、sigaction) |
||
| 8 | 系统调用:信号处理(signal、sigaction) |
||
| 8 | 系统调用教程 相关章节 | Shell 脚本:环境变量(export、PATH、HOME、EDITOR) |
|
| 8 | 系统调用:环境变量(getenv、setenv);测验 |
||
| 9 | |||
| 9 | |||
| 9 | ESR 关于 Unix 缺陷的思考;Poul-Henning Kamp 的 迷失在集市中的一代 | Unix 与开源软件的缺陷 | |
| 10 | 案例分析:邮件系统黑客技术与 ioccc.org | ||
| 10 | 案例分析:Stuxnet 与 Heartbleed | ||
| 10 | 期末测验 |
如果您有课程表上未列出但希望学习的内容,请告诉我! 本课程有很大的灵活性,可以学习各种有趣的知识。
作业提交截止日期如下:
| 作业 | 截止日期 |
|---|---|
| hw0 | |
| hw1 | |
| hw4 - 主题 | |
| hw2 | |
| hw4 - 初稿 | |
| hw3 | |
| hw4 - 终稿 |
作业每逾期一小时(向上取整),将扣减 10 分。
成绩
本课程不使用 ilearn。
相反,我们将使用一个名为 gitlearn 的课程管理系统。
该软件部分由往届 cs100 学生开发,
你可以通过为其做贡献获得可观的额外学分。
我们将把该系统作为 bash 编程和 Unix 哲学的案例研究。
有关详细信息,请参阅 gitlearn 代码库。
作弊政策
每个作业都有不同的协作政策。 有些作业是个人作业,有些是小组作业。 请严格遵守指定的政策!
我对作弊问题非常重视。 一旦发现学生作弊,该课程将给予 F 级评分。 然后我会将你的情况提交给学术诚信委员会,并建议将你从 UCR 开除。
你所有的代码都将通过自动作弊检测工具进行检查。 该工具非常优秀。 它对 C++ 的理解比你更深入,能够发现比单纯复制粘贴更为复杂的作弊行为。