ucr-cs100:基于 Unix/Linux 生态的开源软件开发实践课程项目

open source software construction course

分支5Tags0
文件最后提交记录最后更新时间
10 年前
10 年前
10 年前
11 年前
11 年前
11 年前
11 年前
10 年前

cs100 - 开源软件构建

本课程将探讨如何成为一名黑客。 “黑客”一词蕴含多重含义。 它意味着:

  1. 渴望了解计算机工作的原理原因

  2. 追求高效 / 杜绝重复劳动

  3. 使用并贡献开源软件

  4. 洞悉软件的边界情况

  5. 以富有创意且超乎预期的方式使用工具

  6. (偶尔)我们会将上述所有技能融会贯通,对某些事物进行剖析与重构

黑客精神是一种思维模式。 我无法将其强加于你——这需要你主动去接纳。 例如,本课程会介绍许多新工具: 名为 git 的版本控制系统, 名为 vim 的编辑器, 名为 gdbvalgrindcppcheck 的调试工具, 我们还将深入探讨如何使用 bash shell 和 Linux 操作系统。 这些工具初看可能有些陌生。 一开始使用它们或许会让你感到不适应。 但这些工具都非常强大。 掌握它们将使你成为一名效率显著提升的程序员。 一旦熟练掌握,你便再也不愿回到过去的工作方式。

本课程中,你将参与两个主要项目:

  1. 前四次作业将引导你逐步构建自己的 Unix shell。 这是你迄今为止所承担的最大项目。 你将以开源项目的形式进行开发, 并在不同阶段与同学协作。

  2. 最后一次作业要求你通过改进所选项目的文档,为开源社区贡献力量。 本课程的许多必读材料正是由往届 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 文档的思考(第一部分)第二部分 系统调用:进程管理(forkwaitexecperror);测验
3 系统调用教程 相关章节 系统调用:进程管理(forkwaitexecperror
3 位运算符 系统调用:文件管理(openclosereadwrite
3 系统调用教程 相关章节 系统调用:文件管理(openclosereadwrite
4 William Coates 的 Valgrind 教程 调试工具(gdbvalgrindcppcheck
4 Jeff Atwood 的 如何成为一名更优秀的程序员 调试工具(gdbvalgrindcppcheck
4 系统调用教程 相关章节 系统调用:目录管理(readdirstat);测验
5 Y Combinator 的 我们愿意投资的创业想法 和 Paul Graham 的 创业融资 Shell 脚本:I/O 重定向与管道
5 Patrick McKenzie 关于程序员薪资谈判的文章(篇幅较长,无需全文阅读) Shell 脚本:I/O 重定向与管道
5 Shubhro Saha 的 为什么工程师应该写作;《经济学人》的 良好写作风格指南 编写优质文档
6 系统调用:I/O 重定向与管道(pipedup
6 系统调用教程 相关章节 系统调用:I/O 重定向与管道(pipedup
6 ESR 的经典 Master Foo 系列 Shell 脚本:使用 iffor 进行流程控制;测验
7 正则表达式 Shell 脚本:环境变量(exportPATHHOMEEDITOR
7 Shell 脚本:环境变量(exportPATHHOMEEDITOR
7 系统调用:信号处理(signalsigaction
8 系统调用:信号处理(signalsigaction
8 系统调用教程 相关章节 Shell 脚本:环境变量(exportPATHHOMEEDITOR
8 系统调用:环境变量(getenvsetenv);测验
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++ 的理解比你更深入,能够发现比单纯复制粘贴更为复杂的作弊行为。

项目介绍

open source software construction course

定制我的领域