--- name: lecture-skill description: | CS 课程系统性学习 Skill。融合横纵分析法与结构化写作质检体系,用于深度学习一门计算机科学课程(含 lecture notes、syllabus、paper list),最终输出一份结构完整、有个人洞察的学习报告。 触发词包括但不限于:学习这门课、帮我梳理一下这个课程、研究一下这门 CS 课程、输出学习报告、课程分析、lecture notes 整理、帮我搞懂这门课。 适用于用户丢来一个课程主页(如 https://cs.brown.edu/courses/csci1650/)说"帮我学习一下"或"帮我写个学习报告"的场景。 不要用于简单名词解释(如"什么是 OS"),也不要用于写公众号文章。 --- # CS 课程系统性学习 你正在执行一次 CS 课程的系统性深度学习,最终产出一份**结构完整、有个人洞察的学习报告**。 ## 核心方法论 本 Skill 的核心原则是:**纵向追知识深度,横向追资源广度,交汇出学习策略与个人洞察**。 - **纵轴**:追踪课程涉及知识领域的起源、关键论文、版本迭代、概念演进,以及该课程自身的教学脉络(从 syllabus 第一周到最后一周的知识建构逻辑)。 - **横轴**:以当前时间点为切面,将该课程与同类顶级课程(MIT/Stanford/CMU/Berkeley 等)进行对比,识别差异化视角与资源互补。 - **交汇点**:基于纵轴的历史脉络与横轴的资源对比,给出针对该课程的**最优学习路径、隐藏的难点预警、以及个人化的知识串联建议**。 --- ## 前置准备 ### 明确研究对象 拿到用户输入后,确认以下信息。如果用户直接给了一个课程 URL,不需要追问,直接开始: 1. **课程主页 URL**:课程的官方网站或 syllabus 页面 2. **课程名称与编号**:如 CSCI 1650 3. **开课院校与教授**:如 Brown University, Prof. XXX 4. **特别关注点**(可选):用户是否有特定想深入的方向?如 "重点帮我看 project 部分"、"我想知道前置知识要求" ### 环境检查 - 检查 PDF 转换脚本是否可用(本 Skill 自带 `scripts/md_to_pdf.py`,基于 WeasyPrint)。依赖安装命令:`pip install weasyprint markdown --break-system-packages` - 检查是否有 web-access skill 可用(路径 `/mnt/.claude/skills/web-access/SKILL.md`),优先使用其浏览器 CDP 能力获取课程页面中的动态内容。 --- ## 第一步:联网信息收集 研究报告的质量取决于信息的丰富度和准确性。**必须联网搜索**,不能仅靠已有知识。 ### 并行搜索策略 使用子 Agent 并行搜索提高效率。建议分工: - **子 Agent 1 — 课程纵轴信息**: - 用 WebFetch 完整抓取课程 syllabus、lecture notes、schedule、reading list - 提取每周主题、核心概念、必读 paper、assignment/project 设计 - 调研该课程涉及的核心技术/概念的起源与发展(关键论文、里程碑版本、算法迭代) - **子 Agent 2 — 课程横轴信息**: - 搜索同类课程:同一主题在 MIT/Stanford/CMU/Berkeley 等校的课程编号与 syllabus - 搜索该课程的替代学习资源:经典教材、YouTube 公开课、OCW、著名 blog/tutorial - 搜索该教授的学术背景和研究方向(帮助理解课程视角) - **子 Agent 3 — 社区与口碑**(复杂课程才需要): - 搜索学生对这门课的评价(Reddit、知乎、Course Hero、GitHub 上的 project 实现) - 搜索该课程的历年考试/作业难度讨论 **子 Agent 联网工具使用指南**(写入每个子 Agent 的 prompt): > 你需要联网获取信息。使用以下工具: > - **WebSearch**:用于搜索发现信息来源 > - **WebFetch**:当已知具体 URL 时,定向提取页面内容 > - 如果环境中安装了 web-access skill,优先加载它并遵循其指引 > - 搜索策略:先用 WebSearch 发现线索,找到具体 URL 后用 WebFetch 深入提取 > - 多次搜索、多个关键词组合,不要只搜一次就放弃 > - 一手来源优于二手来源:课程官方页面 > 教授个人主页 > 权威学术资源 > 社区讨论 > - **学术类内容必查 arXiv/Google Scholar**:如果课程涉及论文,通过 arXiv API 或 Scholar 获取相关论文信息 ### 信息来源优先级 | 信息类型 | 一手来源 | |---------|---------| | 课程安排/阅读材料 | 课程官方 syllabus、lecture notes | | 教授研究方向 | 教授个人主页、Google Scholar、DBLP | | 技术/概念原理 | 原始论文(arXiv、ACM DL、IEEE)、经典教材 | | 学生口碑 | Reddit r/csMajors、知乎、GitHub Issues/Projects | | 同类课程对比 | 各校官方课程页面、OCW | ### 信息充分性自检 - 纵轴:能梳理出该课程每周的知识建构逻辑吗?核心概念的历史演进清楚吗? - 横轴:同类课程列表完整吗?有没有遗漏该领域的标杆课程? - 来源:关键事实有可靠来源支撑吗?有没有只靠单一来源就下判断的? 信息不够就再补搜,不要凑合。 --- ## 第二步:纵向分析(知识深度轴) 完整还原该课程的知识建构逻辑与所涉概念的演进历史。 ### 内容要求 **课程内部纵轴**: - 按 syllabus 的周次或模块顺序,梳理课程的教学脉络 - 每一周/模块的核心学习目标是什么? - 知识点之间的依赖关系: Week N 的内容为什么必须排在 Week N-1 之后? - 课程的"隐藏结构":教授是否在某个节点埋了一个需要前后贯通才能理解的"大概念"? **概念外部纵轴**: - 该课程涉及的核心理论/技术/系统是如何诞生的?最早的关键论文是什么? - 经历了哪些重要的版本迭代或范式转变? - 当前学术界/工业界对这一概念的共识和争议分别是什么? ### 篇幅 3000-8000 字。知识体系庞大的课程(如 OS、DB、PL)靠近上限,专题研讨课靠近下限。核心原则是把知识的来龙去脉讲清楚,不要为了压缩而跳过重要细节。 --- ## 第三步:横向分析(资源广度轴) 以当前时间点为切面,将该课程与同类资源进行系统性对比。 ### 竞品/同类课程识别 根据课程主题,主动搜索以下院校的同类课程: - MIT(6.xxx 系列) - Stanford(CSxxx 系列) - CMU(15-xxx 系列) - UC Berkeley(CSxxx 系列) - 其他:Princeton、Cornell、ETH Zurich 等 ### 对比维度 至少覆盖以下方面: **教学设计对比**: - 各课程的 prerequisite 要求差异 - 讲授顺序差异:为什么 A 校先讲 X 后讲 Y,而 B 校相反? - 实践环节差异:project 驱动的课程 vs. 理论推导驱动的课程 **内容侧重对比**: - 同一主题在不同课程中的深度差异 - 教授的个人研究视角如何影响课程内容(如某教授是 PL 方向出身,其 OS 课可能在内核调度上着墨较少,而在 Rust/类型系统上着墨较多) **资源可及性对比**: - 哪些课程有完整的 video lecture? - 哪些课程开源了全部 assignment 和测试用例? - 哪些课程有活跃的学生社区或 GitHub 实现? ### 篇幅 2000-5000 字。视同类课程数量调整,每个主要对比对象至少展开 500 字以上的独立分析。 --- ## 第四步:横纵交汇洞察 这是报告的核心精华段。把纵向知识脉络和横向资源对比结合起来,给出对该课程的**个人化学习建议**。 需要回答的核心问题: 1. **这门课的独特视角是什么**:基于纵轴的历史和横轴的对比,这门课在教学设计或内容选择上有什么与众不同的地方?这个差异是有意的取舍还是局限? 2. **最优学习路径**:如果我要自学这门课,应该按照课程本身的顺序走,还是有更优的学习路径?哪些前置知识必须提前补齐?哪些内容可以跳过或延后? 3. **资源互补方案**:这门课缺少什么(如没有视频、project 不够完整)?可以用哪些外部资源来补齐? 4. **难点预警**:基于 syllabus 和历年学生反馈,哪些 week/assignment 是公认的难点?为什么难?如何提前准备? 5. **知识串联建议**:学完这门课后,它应该与哪些后续课程或研究方向连接? ### 篇幅 1000-2500 字。 --- ## 写作风格 学习报告需要在"学术严谨"和"阅读流畅"之间找到平衡。它不是冷冰冰的 syllabus 摘要,而是一篇能让人从头读到尾、并且真正获得学习策略的文本。 ### 借鉴的核心写作元素 **节奏感**:句子时长时短,段落之间跳跃自然。不要每段都一样长。一句话自成一段可以制造重点。好的节奏像波动,每次围绕主线偏出去一点,再用一句"扣主线句"拉回来。 **叙事驱动**:纵向部分要有故事弧线。比如一个概念为什么在某个时间点突然爆发,之前的铺垫是什么,转折点是什么。不要写成"Week 1 讲 A,Week 2 讲 B"的流水账。 **知识自然带出**:背景知识是"聊着聊着顺手掏出来"的,不要"下面我来给大家科普一下"。 **敢下判断**:鼓励给出观点和洞察,但每个观点必须有事实支撑。先摆事实,再给判断。是推测的明确标注。 **层层剥开的修辞**:不直接讲结论,用"现象→表面解释→更深的追问→核心洞察"的方式展开,让读者参与到思考过程中。 **回环呼应**:开头或纵向部分埋的细节,在交汇洞察或结尾 callback 回来。前后因果的闭合感是让报告从"信息流"变成"作品"的关键。 ### 需要克制的元素 - **过强的口语化**:报告可以有适度的交流感,但不要过于随意。 - **去小标题化**:研究报告需要清晰的章节结构和小标题导航。 - **标点使用**:可以正常使用冒号和破折号,保证信息传达效率。 ### 绝对禁区 无论什么文体都要避免以下 AI 味标记: - 套话:"首先...其次...最后"、"综上所述"、"值得注意的是"、"不难发现" - 空洞形容词:"赋能"、"抓手"、"打造闭环" - 教科书开头:"在当今计算机科学快速发展的时代"、"随着技术的不断进步" - 高频踩雷词:"说白了"、"意味着什么?"、"这意味着"、"本质上"、"换句话说"、"不可否认" - 空泛工具/概念名:不说"某个算法"、"某个系统",要说具体名字 - 编造场景:如果某个信息搜不到,诚实标注"该信息暂缺",绝不编造 ### 用人话写 避免空洞的概括性陈述,用具体的细节和例子代替。比如不要写"该课程在这一阶段深入讲解了并发控制",而要写"从 Week 5 开始,课程用整整三周展开并发控制:先从两阶段锁的直觉讲起,再到 B+ 树中的锁耦合,最后落到 ARIES 恢复协议". --- ## 第五步:生成报告 报告写完后,默认输出为 Markdown 格式。如果用户需要 PDF,使用本 Skill 自带的 `scripts/md_to_pdf.py` 脚本转换。 ### Markdown 写作注意事项 - 第一行用 `# 标题` 作为报告标题(如 `# Brown CSCI 1650: Software Security 学习报告`) - 紧接标题后可用 `> 研究时间:... | 课程院校:... | 教授:...` 格式写元信息 - 用 `##` 作为主要章节标题(纵向分析、横向分析、横纵交汇等) - 用 `###` 和 `####` 作为子章节 - 表格使用标准 Markdown 表格语法 - 引用使用 `>` 语法 - 加粗使用 `**文本**` ### 报告结构模板 ``` 封面页(PDF 时自动生成) 目录 一、课程概览 [一句话定义课程主题,以及它在 CS 版图中的位置] 二、纵向分析:知识建构与概念演进 [课程内部脉络 + 外部概念历史,3000-8000字] 三、横向分析:同类课程与资源对比 [与其他顶级课程的对比,2000-5000字] 四、横纵交汇:学习策略与洞察 [针对该课程的个人化学习建议,1000-2500字] 五、信息来源 [所有引用的来源列表,标注 URL 和访问时间] ``` ### PDF 转换流程 1. 先完成 Markdown 稿件,保存为 `[课程名]_学习报告.md` 2. 安装依赖(如未安装):`pip install weasyprint markdown --break-system-packages` 3. 运行转换脚本: ```bash python [skill目录]/scripts/md_to_pdf.py input.md output.pdf --title "课程名" --author "CS Lecture Learn" ``` 4. PDF 文件命名为 `[课程名]_学习报告.pdf`,保存到用户工作目录 --- ## 质检清单 交付前自检: - [ ] 纵轴梳理了课程每周/每模块的教学逻辑,不是 syllabus 的照搬? - [ ] 核心概念的历史演进有足够深度? - [ ] 横轴对比了至少 2-3 个同类顶级课程或资源? - [ ] 对比维度覆盖了教学设计、内容侧重、资源可及性? - [ ] 交汇洞察给出了具体可执行的学习建议,而非前面内容的缩写? - [ ] 最优学习路径、难点预警、资源互补方案都覆盖到了? - [ ] 写作风格有节奏感、有可读性?不是冷冰冰的 syllabus 摘要? - [ ] 没有触犯绝对禁区里的任何一条? - [ ] 所有关键事实标注了信息来源? - [ ] 搜不到的信息诚实标注了"暂缺",没有编造?