首页
/ CMU 17-803: Empirical Methods — 在 cs-self-learning 中入门软件工程实证研究的完整导读

CMU 17-803: Empirical Methods — 在 cs-self-learning 中入门软件工程实证研究的完整导读

2026-09-07 14:26:13作者:郜逊炳

导读

本文基于 CS 自学指南(cs-self-learning)仓库中的课程页面 docs/软件工程/17803.en.md 展开,系统介绍卡内基梅隆大学(CMU)面向博士研究生的软件工程实证研究课程 17-803:Empirical Methods。你将了解这门课为何在“以工程实现为主流”的计算机教育中不可替代、它覆盖的定性与定量研究方法体系、历届公开的课程资源形态,以及如何将其纳入你的科研自学路线。读完本文,你能结合仓库内源码与文档证据,独立判断这门课是否适合自己,并知道从哪些页面获取完整课程入口。

课程定位:元信息一览

文档开篇给出的课程画像如下:

维度 信息
开课单位 CMU(卡内基梅隆大学)
目标受众 从事软件工程实证研究方向的博士生
先修要求 无硬性门槛,但最好具备扎实的计算机基础
编程语言 不限(Any)
课程难度 🌟🌟🌟(三星)
预计投入 100 小时

需要注意的是,虽然课程页面把它标记为“无硬性先修要求”,但授课对象是博士研究生,且作业与论文通常需要读写代码、处理数据,因此文档原文特别提示“最好有一定的计算机基础”。这个难度评级在仓库语境中属于中等档位——相比同分支下 MIT 6.031(🌟🌟🌟🌟)与 UCB CS169(🌟🌟🌟🌟)都低一档,核心原因在于它并不考核某一门语言的工程技巧,而是考验研究方法论的掌握与运用,属于“思路型”而非“强度型”课程。

为什么需要这门课:实证研究与“纯工程”视角的互补

17-803 的选题在传统 CS 课程体系中相对“陌生”:绝大多数课程教你如何构建系统(编译器、数据库、OS、Web 应用),而实证研究回答的是另一类问题——如何科学地评估工具、理解开发者与用户、从真实数据中提炼证据

文档原文点明了它在研究链路中的位置:

  • 评估新算法或新技术框架的实际效果;
  • 针对某个领域进行相关数据分析;
  • 了解一线从业者在实践中真正面临的挑战。

换言之,当技术方案被提出后,需要有人用可复现、可辩护的方法去回答“它到底有没有用、在什么条件下有用”。这正是软件工程实证研究承担的角色。文档同时强调,这类能力“可以扩展和补充专注于技术领域视角”,对于一个以构建技能为主线的自学计划,17-803 是一块很好的方法论拼图。

事实边界说明:以上论断均出自课程页面原文对课程意义的阐述,本文不夸大其为“最优”或“唯一”实证课程,仅如实呈现其定位。

课程内容地图:课程会教你什么

根据文档,17-803 的教学内容横跨定性(qualitative)与定量(quantitative)两大研究方法阵营,可归纳为以下几个相互衔接的能力模块:

  1. 质性研究方法

    • 访谈(interviews):面向开发者、维护者等真实用户收集一手经验材料;
    • 定性编码(qualitative coding):将访谈文本、问题报告等非结构化数据系统化、打标签、归纳主题的方法。
  2. 量化研究方法

    • 调查设计(survey design):如何设计问卷、控制偏差、保证样本代表性;
    • 多种数据统计分析方法(various statistical analysis methods):涵盖从描述统计到假设检验与回归建模的一整套分析工具。
  3. 软件仓库数据挖掘(Mining Software Repositories)

    • 课程专门介绍如何抽取与整合 GitHub 与 Stack Overflow 等软件仓库/问答平台中的数据,例如提交历史、Issue、Pull Request、代码片段与社区问答文本;
    • 并在此基础上应用**统计建模(statistical modeling)社交网络分析(social network analysis)**等技术手段揭示开发协作结构、知识传播模式与生态演化规律。

可以将其理解为一条完整的研究流水线:提出问题 → 访谈/问卷获取证据 → 仓库数据挖掘扩大证据面 → 统计建模与网络分析得出结论。这正是现代软件工程实证论文的标准骨架。

需要提醒:17-803 本身更接近“方法论训练营”,它不会系统重讲机器学习或统计学原理,而是聚焦“如何把研究问题落到可执行、可信的证据链上”。若你尚不具备基础的统计学与数据分析能力,建议先补齐数学与概率统计基础,再进入实证方法学习(可参考仓库 docs/数学进阶docs/数据科学 分支的课程)。

授课背景:Bogdan Vasilescu 与开源软件研究

课程由 Bogdan Vasilescu(文档内链入其主页)讲授。文档明确指出,他在实证研究与开源软件研究方面有非常深入的积累。这一点直接塑造了课程的两大特征:

  • 大量使用 GitHub / Stack Overflow 等真实开源数据作为教学素材与作业数据集;
  • 强调研究的可复现性与方法严谨性,符合软件仓库挖掘(MSR)社区的主流范式。

因此,即使你不是 CMU 学生,只要按照其公开的课程站点节奏学习,也能接触到该领域一线研究者组织的方法论内容。

课程资源盘点与自学可行性评估

文档“Course Resources / 课程资源”部分对资源的公开程度做了如实交代,这对自学者非常重要,整理如下:

资源类型 公开情况 版本/形态
课程网站 ✅ 公开 多届存档:Spring 2024、Fall 2022、Spring 2021、Fall 2018
课程视频 ⚠️ 部分公开 Spring 2024 有播放列表、Fall 2022 有单独录像
课程教材 ⚠️ 不直接公开 “每节课前提供阅读材料”,按周分发
课程作业 ❌ 未开源 文档明确标注 not open-source
资料汇总 ✅ 公开 集中维护在 bvasiles/empirical-methods 仓库(bvasiles 为授课教师本人)

给自学者的三点实操判断:

  1. 主体可自学的部分是「讲座 + 阅读清单」。多届课程网站长期在线,配合教师本人维护的 empirical-methods 资料仓库,足以支撑“看视频 → 读材料 → 内化方法论”的自学闭环。
  2. 作业无法获得官方评分与反馈。文档明确作业未开源,这意味着你无法通过官方判题器验证,需要自行设计小型实证练习(例如对某个 GitHub 项目做一次访谈式调研或仓库数据分析)来检验掌握程度。
  3. “每课前阅读材料”说明课程依赖原版论文阅读。这部分需要在课程站点中按周查找,适合有一定英文论文阅读能力的学习者。

由于本文遵循仓库内只输出仓库相对路径的规范,以上各资源的完整外链清单请直接查阅课程页原文:docs/软件工程/17803.en.md;中文对照版见 docs/软件工程/17803.md

它在仓库中的位置:软件工程分支的第三门课

在仓库 mkdocs.yml(软件工程导航项,约第 202–205 行)中,17-803 与另外两门课共同构成“软件工程”分支:

课程 文件 侧重
MIT 6.031: Software Construction docs/软件工程/6031.en.md 写出高质量代码:规格、测试、抽象与并行正确性
UCB CS169: Software Engineering docs/软件工程/CS169.en.md 敏捷开发与 SaaS,用 Ruby/Rails 实践
CMU 17-803: Empirical Methods docs/软件工程/17803.en.md 软件工程实证研究的方法论

三条路线恰好覆盖软件工程能力的三个层次:个人写码质量(6.031)→ 团队/产品级工程过程(CS169)→ 对该领域的研究与评估(17-803)。如果你按顺序或按需组合学习,就能同时具备“能写好代码”“能按工程化流程交付”“能用科学方法评价技术方案”三种视角。

从仓库的读者分群逻辑看(见 docs/使用指南.md),17-803 最贴合其中“心有所属”一类读者:即核心专业课已较扎实、已确定科研方向并希望在特定细分领域纵深发展的人;同时,任何计划撰写软件工程方向研究论文的同学,都可以把它作为入门课。

学习路线建议:如何把 100 小时花在刀刃上

结合文档给出的 100 小时学时与资源公开度,推荐如下自学节奏(供参考,非课程官方安排):

  1. 第 1–2 周(约 20 小时):建立全景——用 Spring 2024 讲座视频与课程网站了解实证研究的整体流程与术语体系,重点关注“研究问题 → 证据 → 结论”的论证链条。
  2. 第 3–6 周(约 40 小时):方法轮训——按访谈 / 定性编码 / 问卷设计 / 统计建模 / 社交网络分析几个模块逐个过一遍讲座与课前阅读材料,每个模块配合文档所讲的 GitHub、Stack Overflow 数据挖掘场景做小练习。
  3. 第 7–10 周(约 40 小时):综合实战——选定一个真实的软件工程问题(例如评估某工具在开源项目中的采用情况),完整走一遍“收集仓库数据 → 构建模型/分析 → 撰写报告”的流程,模拟论文写作。

提示:本仓库只承担“指路与解读”职能,所有课件、视频与阅读材料均托管在课程方公开渠道,需自行前往课程页原文链接获取。

结语

CMU 17-803 的价值不在于多掌握一门框架或语言,而在于为“技术判断”注入科学方法:当你要评价一个系统、理解一群开发者、或预测一项技术的走向时,访谈、编码、问卷、统计建模与社交网络分析构成了可依赖的证据工具箱。对于立志投身科研、尤其是软件工程实证方向的读者,将 docs/软件工程/17803.en.md 中这条 100 小时的路径纳入自学规划,是补齐“构建”之外“评估”能力的高性价比选择。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.81 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
596
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
920
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.79 K
1.02 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
519
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
390