COURSE · 6.1040
6.1040 软件设计
课程从真实需求出发,用概念(Concept)描述用户可观察的行为,再用模块化与同步(Sync)组合功能。 学习主线是“问题框架 → 概念与行为 → 模块化组合 → Web 与 AI 实现 → 用户与社会影响验证”。 Vue、Node、MongoDB 和 LLM 是实现工具;课程真正训练的是可迁移的设…
- DOMAIN
- 编程与软件工程
- STATUS
- complete
- COURSE ID
- 6.1040
- RELATIONS
- 暂无结构化数据
LECTURE NOTES · 24
来自目录与 frontmatter课程资料与说明
来自课程 index.md6.1040 软件设计
TL;DR
- 课程从真实需求出发,用概念(Concept)描述用户可观察的行为,再用模块化与同步(Sync)组合功能。
- 学习主线是“问题框架 → 概念与行为 → 模块化组合 → Web 与 AI 实现 → 用户与社会影响验证”。
- Vue、Node、MongoDB 和 LLM 是实现工具;课程真正训练的是可迁移的设计判断力。
课程介绍
| 项目 | 信息 |
|---|---|
| 学期 | Fall 2025 |
| 先修 | 6.1020 Software Construction;6.042 Mathematics for Computer Science |
| 教材 | Daniel Jackson, The Essence of Software: Why Concepts Matter for Great Design |
| 官网 | 6.1040 Software Design |
本课程是关于设计的。你将学习如何设计出“符合目的”的软件:既能满足用户需求,又具备灵活性、强大功能且易于使用。设计发生在技术与人的交汇点上。然而,设计绝不仅仅关乎用户界面;本课程的很大一部分内容,是在探讨 如何塑造用户所体验的底层功能。
课程讲授的设计材料不仅包含经典的传统内容,如:
- 用户界面设计(例如:以用户为中心的计算、概念模型的作用);
- 状态与动作/数据建模;
- 模块化。
还包含更前沿的尖端内容,如:
- 功能设计(基于概念);
- 使用LLM进行软件设计;
- 使用LLM生成代码;
- 将 AI 智能体(AI Agents)作为组件融入系统。
尽管本课程的核心关注点并非技术,但你将学会成为一名熟练的 Web 全栈开发人员所需的所有工具。这些工具包括:
- 用于维护代码库的 GitHub、
- 用于托管静态网站的 GitHub Pages、
- 用于后端开发的 Node/Express、
- 用于部署 Node.js 的 Heroku、
- 用于绘制原型图的 Figma、
- 用于持久化存储的 MongoDB,
- 以及一个前端响应式框架( Vue)。
这门课符合行业标准吗?
学生们有时会问,我们在课上讲授的设计方法是否是目前行业中使用的标准方法。当然不是! 如果它是的话,你在工作中就能学到,也就不需要一个 MIT 的学位了。或者换句话说:教育的作用是塑造未来(包括你的未来!),而不是去重述过去。
这门课确实会教你几种目前在行业中最行之有效的技术,但如果仅仅如此,那它将是一门相当平庸的课程。特别是,我们讲授“概念设计”,是为了赋予你更强大的能力,让你成为一名远比仅靠在岗摸索或参加 UX 训练营更优秀的设计师。
MIT 的课程有一个悠久的传统,即讲授源自科研的全新方法,而这些方法有时要在几十年后才会被工业界广泛采用。你们的一位讲师曾是初代 6.170 课程的 TA,当时该课程使用的编程语言是 CLU——这是最早的面向对象语言之一(由 Barbara Liskov 发明,她也因此等成就荣获图灵奖)。在那个时候,极少有程序员了解“对象”,直到几十年后,各种语言才开始具备 CLU 当时就有的特性。甚至当 Java 出现时,它的设计中还存在一些缺陷(例如“原始类型”和“对象类型”之间的区分),而这些缺陷在二十年前的 CLU 中就已经被消除了!
该讲师还曾担任 6.001 课程的分班讲师,当时的教材是《计算机程序的构造和解释》(SICP,俗称“巫师书”)。一些学生曾抱怨说,这门课是用 Scheme 讲授的——这是一种当时没人使用的函数式语言,而不是像 C 语言那样“实用”的语言。令人惊叹的是,现在 Scheme 已经诞生了大约 50 年(LISP 甚至更古老),而直到过去这几年,函数式语言才真正成为所有优秀的程序员都渴望了解和使用的语言。
关于这一点还有另一种视角:虽然工业界的大多数人还没有学过概念设计,但最顶尖的那批人早就一直在使用这类思想了。 概念设计诞生于对数百款应用程序的深入研究,从中提炼出它们或优秀或糟糕的经验教训。通过这种方式,它将那些工业界人士可能需要历经多年、不断试错才能习得的最佳实践,进行了沉淀并显性化。
学习主线
找到真实问题 → 用 purpose、principle、state、actions 定义概念 → 用模块化标准拆分职责 → 用 Sync 显式组合 → 实现并验证。
| 阶段 | 核心问题 | 对应讲次 |
|---|---|---|
| 问题框架 | 这个问题是否真实、重要且值得解决? | Lec 1 |
| 概念与行为 | 软件向用户承诺什么行为? | Lec 2–3 |
| 模块化组合 | 职责如何拆分,概念如何避免耦合? | Lec 4–5、11 |
| 人机 AI 交互 | AI 适合承担什么,如何保留人的控制权? | Lec 6–9 |
| 工程实现 | 如何把设计落成可读、可靠的前后端系统? | Lec 10、12–16 |
| 设计验证 | 用户是否理解并受益,系统会造成什么外部影响? | Lec 17–18 |
| 迁移与收官 | 如何把方法迁移到行业架构和完整项目? | Lec 19–20 |
讲次索引
| 讲次 | 主题 | 核心内容 |
|---|---|---|
| Lec 1 | 开始设计 | 真实需求、问题框架与失败模式 |
| Lec 2 | 概念设计 | purpose、principle、state、actions 与 Sync |
| Lec 3 | 设计行为 | action、trace、不变量与数据模型 |
| Lec 4 | 模块化设计 I | 关注点分离与职责混杂 |
| Lec 5 | 模块化设计 II | 分离、完整、独立与组合增益 |
| Lec 6 | 人机 AI 交互基础 | 锐边与钝边、增强而非替代 |
| Lec 7 | AI 交互设计 I | 心智模型、可修正性与线框图 |
| Lec 8 | AI 交互设计 II | 结构化交互、Agent 与混合主动权 |
| Lec 9 | LLM 代码架构 | Prompt、评估、安全与成本 |
| Lec 10 | 用 AI 编写概念代码 | 上下文工程与概念实现 |
| Lec 11 | 理解同步 | 扁平架构、因果矩阵与执行流 |
| Lec 12 | 现代 AI Coding 工具 | Agentic Coding、Review 与认知债务 |
| Lec 13 | 响应式前端与 Vue | 状态驱动视图与组件边界 |
| Lec 14 | 视觉设计 | 布局、字体、色彩与设计批评 |
| Lec 15 | 软件工程全景 | Web 架构、Session、JWT 与安全边界 |
| Lec 16 | 后端设计 | 异步请求、数据库查询、Sync 与部署 |
| Lec 17 | 用户测试 | 研究方法、原型验证与设计修订 |
| Lec 18 | 价值敏感设计 | 利益相关者、长期影响与责任创新 |
| Lec 19 | 设计经验总结 | 行业架构映射与可迁移设计思想 |
| Lec 20 | 项目展示 | 期末项目时间线与交付闭环 |
关键框架
概念规格
一个概念由四部分定义:purpose 说明价值,principle 描述用户视角的运行故事,state 保存必要事实,actions 用前置条件与效果描述状态变化。
模块化与 Sync
用三个问题检查模块化:职责是否分离、同一职责是否完整、概念能否独立理解和演进。概念不直接读写彼此状态,而由 Sync 按 when → where → then 显式组合。
AI 功能
先判断任务的错误容忍度。高风险或不可逆操作应把生成与执行分离,并提供来源、确认、局部修改、撤销和人工接管;模型输出始终按不可信输入验证。
设计验证
启发式评估和认知走查适合低成本预检;用户测试观察真实理解与行为;价值敏感设计进一步检查间接利益相关者、长期影响、普及后的系统效应和价值冲突。
配套作业
| 作业 | 目标 |
|---|---|
| 问题框架 | 用利益相关者与证据验证真实需求 |
| 阅读与编写概念规格 | 练习状态、动作、不变量与设计取舍 |
| Markdown 与课程作品集 | 建立可版本化、可发布的课程交付方式 |