# MIT 6.031: Software Construction

## 课程简介

- 所属大学：MIT
- 先修要求：掌握至少一门编程语言
- 编程语言：Java
- 课程难度：🌟🌟🌟🌟
- 预计学时：100 小时

这门课的目标就是让学生学会如何写出高质量的代码，所谓高质量，则是满足下面三个目标（课程设计者原话复制，以防自己翻译曲解本意）：

> Safe from bugs. Correctness (correct behavior right now) and defensiveness (correct behavior in the future) are required in any software we build.
>
> Easy to understand. The code has to communicate to future programmers who need to understand it and make changes in it (fixing bugs or adding new features). That future programmer might be you, months or years from now. You’ll be surprised how much you forget if you don’t write it down, and how much it helps your own future self to have a good design.
>
> Ready for change. Software always changes. Some designs make it easy to make changes; others require throwing away and rewriting a lot of code.

为此，这门课的设计者们精心编写了一本书来阐释诸多软件构建的核心原则与前人总结下来的宝贵经验，内容细节到如何编写注释和函数 Specification，如何设计抽象数据结构以及诸多并行编程的内容，并且会让你在精心设计的 Java 编程项目里体验和练习这些编程模式。

2016年春季学期这门课开源了其所有编程作业的代码框架，而最新的课程教材可以在其最新的教学网站上找到，具体链接参见下方。

## 课程资源

- 课程网站：[latest](https://web.mit.edu/6.031/), [Spring 2022](https://web.mit.edu/6.031/www/sp22/), [Spring 2021](https://web.mit.edu/6.031/www/sp21/), [Spring 2016](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-005-software-construction-spring-2016/)
- 课程视频：无
- 课程教材：参见课程网站的课程 notes
- 课程作业：4 个编程作业 + 1 个 Project

## 资源汇总

@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.031-software-construction - GitHub](https://github.com/PKUFlyingPig/MIT6.031-software-construction) 中。

@pengzhangzhi 完成了这门课的作业并记录了笔记, 代码开源在 [pengzhangzhi/self-taught-CS/Software Construction - Github](https://github.com/pengzhangzhi/self-taught-CS/tree/main/Software%20Construction)。
