CS13-软件工程
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, Spring 2022, Spring 2021, Spring 2016
- 课程视频:无
- 课程教材:参见课程网站的课程 notes
- 课程作业:4 个编程作业 + 1 个 Project
资源汇总
在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPig/MIT6.031-software-construction – GitHub 中。
完成了这门课的作业并记录了笔记, 代码开源在 pengzhangzhi/self-taught-CS/Software Construction – Github。
UCB CS169: software engineering
课程简介
- 所属大学:UC Berkeley
- 先修要求:无
- 编程语言:Ruby/JavaScript
- 课程难度:🌟🌟🌟🌟
- 预计学时:100 小时
伯克利的软件工程课程,不同于很多传统的软件工程课强调各种类图、文档设计 (plan and document 模式),这门课专注于最近逐渐流行起来的敏捷开发 (Agile Development)模式,利用云平台提供软件即服务 (software as a service)。为此,课程设计者编写了 Software as a service 这本教材,通过 Ruby/Rails 框架来阐释 SaaS 这个概念,并且有丰富的配套编程练习。
这门课在 Edx 这个由 MIT 和 Harvard 大学发起的在线教育平台全资料开源,大家可以在 Edx 自行搜索 Agile SaaS Development 这门课程进行学习。课程内容基本按照教材的顺序带你一步步以敏捷开发的方式搭建一个软件并免费部署在云平台上。
课程资源
- 课程网站:http://www.saasbook.info/courses
- 课程视频:参见 Edx 课程主页。
- 课程教材:Software as a service
- 课程作业:参见 Edx 课程主页。
资源汇总
在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPig/CS169-Software-Engineering – GitHub 中。
CMU 17-803: Empirical Methods
课程简介
- 所属大学:CMU
- 先修要求:面向从事软件工程实证研究的博士生开设,虽然没有硬性先修要求但最好有一定的计算机基础
- 编程语言:不限
- 课程难度:🌟🌟🌟
- 预计学时:100 小时
这门课专注于一个相对“陌生”的领域——包括但不限于软件工程领域的实证研究,由 Bogdan Vasilescu 讲授,他在实证研究和开源软件研究方面非常深入。
这门课是 CMU 为从事该方向研究的博士生开设的,涵盖一系列定性与定量研究方法,如访谈、定性编码、调查设计以及多种数据统计分析方法,帮助学生了解、学习与从事实证研究。课程还会介绍挖掘和整合 GitHub 和 Stack Overflow 等软件存储库中的数据,并运用统计建模、社交网络分析等数据分析技术。
尽管计算机领域在传统上更注重工程技术,但对于工具、技术的设计、评估以及其可能的社会价值来说,实证研究是必需的。例如评估新算法或新技术框架,对某个领域进行相关数据分析,去了解从业者可能面临的挑战。这门课可以扩展和补充专注于技术领域视角。对于想要从事涉及软件工程领域实证研究的科研方向的朋友,这门课可能是一个很好的入门课程。
课程资源
- 课程网站:Spring 2024, Fall 2022, Spring 2021, Fall 2018
- 课程视频:Spring 2024, Fall 2022
- 课程教材:未公开,每节课前会有阅读材料
- 课程作业:未公开
资源汇总
这门课中用到的所有资源都汇总在 bvasiles/empirical-methods – GitHub 中。