# What Is Covered in the Software Engineering Category of CS-Self-Learning?

> Explore the Software Engineering category in cs-self-learning covering agile SaaS development, software construction in Java, and empirical research from UC Berkeley, MIT, and CMU. Access bilingual docs.

- Repository: [Yinmin Zhong/cs-self-learning](https://github.com/PKUFlyingPig/cs-self-learning)
- Tags: getting-started
- Published: 2026-03-02

---

**The Software Engineering category in the cs-self-learning repository curates three university-level courses—UC Berkeley CS169, MIT 6.031, and CMU 17-803—covering agile SaaS development, software construction in Java, and empirical research methods, all organized under `docs/软件工程/` with bilingual documentation.**

The **PKUFlyingPig/cs-self-learning** repository provides a comprehensive roadmap for computer science self-study. Within this collection, the **Software Engineering category** serves as a dedicated hub for mastering industrial-grade development practices through curated university coursework. This category organizes resources for three distinct courses, each targeting a different facet of software engineering education.

## Core Courses in the Software Engineering Category

The repository's `docs/软件工程/` directory contains detailed guides for the following three courses:

### UC Berkeley CS169 – Software Engineering

**UC Berkeley CS169** focuses on **Agile development**, **SaaS architecture**, and **rapid prototyping** using **Ruby on Rails**. The course emphasizes practical web development skills with primary languages including **Ruby** and **JavaScript**.

Key resources include the textbook *Software as a Service* (available as PDF), EdX video series, official course websites, and GitHub repositories containing assignments. According to the repository structure, this course is documented in both `docs/软件工程/CS169.md` (Chinese) and `docs/软件工程/CS169.en.md` (English), with a difficulty rating of ★★★★★.

### MIT 6.031 – Software Construction

**MIT 6.031** teaches the fundamentals of writing **correct, readable, and change-ready code**. The curriculum covers **specifications**, **testing**, **concurrency**, and **design patterns** using **Java** as the primary implementation language.

Students access course notes, multiple semester websites, and a GitHub collection of assignment scaffolds and solutions. The documentation for this course resides in `docs/软件工程/6031.md` and `docs/软件工程/6031.en.md`, also rated at ★★★★★ difficulty.

### CMU 17-803 – Empirical Methods

**CMU 17-803** diverges from pure coding to explore **quantitative and qualitative research methods** for software engineering. Topics include **data mining of OSS repositories**, **statistical modeling**, and **social-network analysis**, making it largely language-agnostic with a focus on data analysis.

Resources comprise lecture videos, research-paper reading lists, and course material repositories. This course is cataloged in `docs/软件工程/17803.md` (Chinese) and potentially `docs/软件工程/17803.en.md` (English), carrying a ★★★★ difficulty rating.

## Standardized Documentation Structure

All three markdown files in the **Software Engineering category** share a **consistent four-section structure** that facilitates easy navigation and contribution:

1. **Course Introduction (课程简介)** – University affiliation, prerequisites, programming language, difficulty level, and estimated study time.
2. **Pedagogical Focus** – A concise narrative explaining learning goals, often quoted directly from the syllabus.
3. **Resource List (课程资源)** – Links to official course sites, video recordings, textbooks, and supplemental materials.
4. **Resource Aggregation (资源汇总)** – A pointer to the author's personal GitHub repository containing all artifacts and implementations used while studying the course.

This architectural pattern enables contributors to add new courses by simply creating a new markdown file under `docs/软件工程/` following the same headings.

## Automating Course Metadata Extraction

You can programmatically parse the **Software Engineering category** files to extract structured metadata. The following Python script processes all markdown files in the directory and prints a formatted table:

```python
import pathlib
import re

def parse_md(path):
    text = path.read_text(encoding='utf‑8')
    meta = {}
    meta['title'] = re.search(r'^# (.+)', text, re.M).group(1)

    meta['university'] = re.search(r'所属大学：(.+)', text).group(1).strip()
    meta['language'] = re.search(r'编程语言：(.+)', text).group(1).strip()
    meta['difficulty'] = re.search(r'课程难度：(.+)', text).group(1).strip()
    meta['hours'] = re.search(r'预计学时：(.+?) 小时', text).group(1).strip()
    return meta

root = pathlib.Path('docs/软件工程')
for md in root.glob('*.md'):
    data = parse_md(md)
    print(f"| {data['title']} | {data['university']} | {data['language']} | {data['difficulty']} | {data['hours']}h |")

```

Running this script against the repository generates a synchronized table of courses, keeping documentation in sync with the source files.

## Contributing New Courses to the Software Engineering Category

To maintain consistency in the **Software Engineering category**, new course entries should follow this markdown skeleton:

```markdown

# <Course Title>

## 课程简介

- 所属大学：<University>
- 先修要求：<Prerequisites>
- 编程语言：<Languages>
- 课程难度：🌟🌟🌟🌟
- 预计学时：<Hours> 小时

## 课程资源

- 课程网站：<Course website URL>
- 课程视频：<Video playlist URL>
- 课程教材：<Textbook or notes URL>
- 课程作业：<Assignment repository URL>

## 资源汇总

@<GitHubUser> 在学习这门课中用到的所有资源和作业实现都汇总在 [<Repo name> - GitHub](<Repo URL>) 中。

```

This template ensures that all entries in `docs/软件工程/` maintain the repository's high standards for bilingual, structured learning resources.

## Summary

- The **Software Engineering category** covers three distinct university courses: UC Berkeley CS169 (Agile/SaaS), MIT 6.031 (Software Construction), and CMU 17-803 (Empirical Methods).
- All documentation is stored in `docs/软件工程/` with bilingual support via `.md` (Chinese) and [`.en.md`](https://github.com/PKUFlyingPig/cs-self-learning/blob/main/.en.md) (English) file pairs.
- Each course entry follows a standardized four-section template: Course Introduction, Pedagogical Focus, Resource List, and Resource Aggregation.
- The repository provides executable Python examples for parsing course metadata and skeleton templates for contributing new courses.

## Frequently Asked Questions

### What programming languages are featured in the Software Engineering category?

The category covers **Ruby** and **JavaScript** for UC Berkeley CS169, **Java** for MIT 6.031, and language-agnostic data analysis tools for CMU 17-803. This diversity allows learners to study both web development frameworks and systems programming concepts.

### How does the repository indicate course difficulty?

Each course file in `docs/软件工程/` includes a difficulty rating within the **课程简介** section using a star system (★). Both CS169 and 6.031 rate ★★★★★ (five stars), while 17803 rates ★★★★ (four stars), helping learners gauge prerequisite requirements before enrollment.

### Can I add a new software engineering course to this repository?

Yes. Contributors can create a new markdown file under `docs/软件工程/` following the established four-section structure. The repository accepts both Chinese and English versions (`.md` and [`.en.md`](https://github.com/PKUFlyingPig/cs-self-learning/blob/main/.en.md) respectively) to maintain bilingual accessibility for international learners.

### Where can I find the author's personal implementations of these courses?

Each course guide in the **Software Engineering category** concludes with a **资源汇总** section containing a direct link to the author's personal GitHub repository. These repositories aggregate all assignments, notes, and supplemental materials used during the learning process.