教程文档知识库【免费下载链接】computer-science Path to a free self-taught education in Computer Science!项目地址https://gitcode.com/GitHub_Trending/co/computer-science点击查看免费下载本篇指南围绕 OSSUOpen Source Society University计算机科学自学课程表中的Systematic Program Design系统化程序设计简称 SPD课程展开完整覆盖其推荐版本、分阶段学习路线、Dr. Racket 开发环境的关键配置以及作为课程综合检验的 Space Invaders太空入侵者期末项目规格。读完本文你将掌握如何在 OSSU 课程体系内从零开始推进这门 13 周的编程方法学课程正确配置课程所需的 Racket 教学语言环境并理解期末项目的行为规格与测试要点为后续进入 Class-based Program Design 等课程做好准备。课程概览一门教编程方法而非教一门语言的课程Systematic Program Design 由加拿大不列颠哥伦比亚大学UBC开发托管于 Edx 平台OSSU 明确推荐学习其Edx 存档版本课程标识分别为course-v1:UBCxSPD1x2T2015、course-v1:UBCxSPD2x2T2015、course-v1:UBCxSPD3x3T2015三部分。课程官方的自我定位非常特别引用如下This programming course takes a unique approach, as it focuses on learning a systematic programming method rather than a programming language. This practical approach will help you channel your creativity so that you can program well in any language.这门编程课程采用独特的方法它聚焦于学习一种系统化的编程方法而非某一门编程语言。这种实践导向会帮助你引导创造力使你在任何语言中都能写出好程序。从课程页 coursepages/spd/README.md 的内容可以看出SPD 在 OSSU 课程表中的定位是Core CS → Core programming核心编程板块的第一门课。根据仓库根目录的 README.md 课程表它要求13 周、每周 810 小时、无任何先修课程讨论频道按课程进度分为两部分第 6A 周之前与第 6B 周之后各一个频道。该板块的Topics covered明确列出了本课程所承载的知识点functional programming函数式编程、design for testing面向测试的设计、program requirements程序需求、common design patterns常见设计模式、unit testing单元测试以及Lisp-family languages (via Racket)经由 Racket 学习的 Lisp 系语言。值得注意的背景是仓库的 CHANGELOG.md 中保留了Link from Systematic Program Design Part 2 course的变更记录说明该课程页在本仓库中是持续被维护与修订的活跃条目。选课版本决策存档版 SPD 还是付费版 How To Code课程页的 FAQ 用了大量篇幅解释 SPD 与How To CodeHTC的关系这是学习者最先需要做出的决策。核心逻辑是区分两种学习动机为了知识The KnowledgeOSSUT 默认学习者是为知识而来。知识是免费的——你不需要提交作业只需要动手做作业。此时应选择SPD 存档版它因课程已过期expired而完全免费且资料开放程度更好可以看到答案与示例解法对获取知识而言绰绰有余。为了证书The Certificate证书无法免费获得必须付费。而 SPD 课程本身已过期、无法颁发证书所以想要证书的话应当选择仍然活跃的How To Code课程并付费购买。课程页给出的 TL;DR 结论可以概括为为知识而来 → 选 SPD免费但已过期资料开放 为证书而来 → 选付费版 How To Code仍为活跃课程此外课程页还提供了两个替代入口分别覆盖课程前半段至第 6A 周与后半段第 6B 周起用于存档版无法访问时的备选方案。完整学习路线从注册到 TA Solver 收尾课程页的 Instructions 章节是针对 Edx 存档版编写的不适用于其他版本请按以下步骤推进。1. 注册与入学该课程在 Edx 上没有主页但这并不影响学习。打开上文给出的存档版课程链接对应UBCxSPD1x2T2015登录如尚未登录后直接选课enroll即可开始。2. 第 1A 周至第 6A 周按照课程总览course overview依次完成Week 1A 到 Week 6A的内容观看视频、完成练习exercises然后解决问题银行problem bank中的题目。3. 完成第 6A 周后的 Space Invaders 期末项目完成第 6A 周后进入课程的第一次综合项目——经典街机游戏 Space Invaders具体操作说明见 课程页 coursepages/spd/space-invaders-instructions.md。这是课程中编写的最大程序需要综合运用此前学到的几乎所有设计方法详见后文期末项目规格一节。4. 第 6B 周及以后完成项目后继续推进Week 6B 及之后的所有模块同样遵循看视频 → 做练习 → 解决问题银行题目的节奏。随后观看课程提供的额外视频播放列表补全课程内容。5. TA Solver 收尾题完成全部课程模块后完成TA solver 问题对应的 starter 文件为ta-solver-starter.rkt位于 OSSU 维护的 spd-starters 仓库的final/目录下。题目要求与说明均写在 starter 文件内作为整个课程设计能力的最终检验。6. Problem Bank建议全部做完课程的问题银行problem bank标签页包含大量附加题目。课程页明确建议全部解决以巩固理解——它是性价比极高的练习资源。7. Starter Files 的获取方式课程中部分 starter 文件的原始链接已失效。课程页给出的解决办法是从 OSSU 维护的spd-starters仓库下载可直接获取包含全部 starter 文件的 zip 压缩包覆盖课程所有部分所需的起始代码。8. 练习提交与答案核对练习exercises无法提交作答但可以点击Show Answer查看答案——请诚实地核对自己的答案。问题银行problem bank的题目同样无法提交但提供了示例解法sample solutions可以将自己的解法与之对照匹配。9. 讨论与求助渠道卡住时可以随时提问课程页提供了两个按进度划分的讨论频道第 6A 周之前的讨论一个频道第 6B 周及以后的讨论另一个频道均面向本课程学习者开放。Dr. Racket 环境配置课程专用设置清单课程官方建议使用Dr. RacketIDE 完成学习。虽然理论上存在用其他 IDE 完成课程的途径但课程页明确指出为其他 IDE 配置问题 starter 文件不值得付出这份努力configuring the problem starter files for other IDEs is not worth the effort因此强烈建议直接使用 Dr. Racket。以下是课程页给出的四项关键配置。1. 切换常量风格true false emptyDr. Racket 默认使用较新的常量记法#true #false ()而课程教学中使用的是旧式记法。切换步骤如下在菜单栏点击Language Choose Language选择课程所需的语言BSL、ISL 或其他变体点击窗口左下角的Show details展开细节在Constant Style字段中选择true false empty重新运行文件确认新配置生效。如上图所示语言选择对话框的 Output Style 区域中Constant Style单选组默认可能处于#true #false ()切换到true false empty后即可与课程教学中的布尔值与空表写法保持一致。2. 启用自动闭合括号、方括号与引号在Edit Preferences Editing 标签页 General Editing 子标签页中勾选Enable automatic parentheses, square brackets, and quotes复选框如上图所示该复选框位于 General Editing 页面的设置列表首位。启用后编辑器会自动配对圆括号、方括号与引号大幅减少 Lisp 系语言书写中最常见的括号配对错误。3. 整文件重排缩进Ctrl I在 Dr. Racket 编辑器中按Ctrl I即可重排整个文件的缩进快速规范化代码排版。4. 整词删除Alt Backspace如果使用 Windows 或 Linux 系统可使用Alt Backspace删除整个单词而非逐字符删除提高编辑效率。5. 视频无法观看时的替代渠道如果因某些原因无法在 Edx 上观看课程视频课程页提供了该课程的 YouTube 频道播放列表作为替代渠道可完整观看全部课程视频。随机行为的测试check-random课程 FAQ 专门解答了如何测试应当输出随机值的函数这一问题使用check-random进行测试。这在Space Invaders 期末项目中是必需的——因为入侵者随机出现在屏幕顶部这一行为本质上是不确定的无法用普通的等值断言如check-expect直接检验。check-random的作用是对随机输出的函数进行多次求值验证其结果始终落在预期的取值范围内例如入侵者的初始 x 坐标始终在屏幕宽度之内从而把随机约束在游戏设计允许的区间内。这体现了课程面向测试的设计思想在不确定性场景下的延伸不是放弃测试随机行为而是把随机行为的约束边界本身变成可断言的性质。FAQ 深度解读为什么这门课如此另类这门课很无聊能跳过吗不能。课程页给出的理由非常明确这门课起初可能显得枯燥但它很可能改变你的思维方式。许多起初觉得无聊的学生在完成课程时反而成了它的拥趸。尤其要警惕早期内容尤其是求值规则 evaluation 的规则对于理解代码如何工作、如何被执行在课程后续部分起着举足轻重的作用——跳过早期等于自断根基。为什么用 BSL 教学用行业标准语言不是更合理吗课程页给出了两条刻意为之的理由Lisp 是计算机科学家的通用语——这里的计算机科学家指 PhD 级别的算法研究者。无论出于好的还是历史性的原因这是现实如果你想阅读学术论文white papers就需要能读懂 Lisp。BSL 是进入 Lisp 世界的良好入门——一旦度过括号地狱你就能读懂所有 Lisp 方言。这门课不教语言教的是设计本身。计算机科学不是教你用一门语言、不是教你写代码、也不是教你成为全栈工程师它本质上是有着广泛实用价值的、被严格限定的应用数学——剥掉所有限定性语言之后它就是数学因而拥有完全独立于实现语言的上层规则。课程刻意构建在一次性学生语言throwaway student language之上目的就是让你不关注语言、而关注你在用语言做什么课程不在乎public static void main或 PEP 8 风格而是想看到在任何语言中都成立的程序组织方式。BSL 把你从风格检查、运行时问题、代码分块、编译和编码环境的负担中解放出来——课程页的比喻是这是一份礼物收下它Its a gift. Take it.因为设计模式本身已经足够难了。为什么有 HTC 和 SPD 两个版本为什么推荐存档版见前文选课版本决策一节。一句话总结OSSU 假设你是为知识而来知识可以免费获得SPD 存档版资料开放度更好且足以获取全部知识若为证书而来则需要选择并付费购买仍活跃的 How To Code 课程。能用另一种编程语言完成这门课吗不建议。课程与它使用的语言深度绑定课程中嵌入图片与富文本块等特性课程页建议使用课程指定的语言。虽然课程中的概念适用于任何语言但用另一种语言完成课程不现实且只会浪费时间。能用其他 IDE 吗我不喜欢 Dr. Racket。课程中的程序在代码中嵌入了图片和富文本块这意味着这些文件无法被其他 IDE 打开。虽然理论上可以先把 starter 文件为其他 IDE 准备就绪但这一准备过程本身就离不开 Dr. Racket而且花在这上面的时间完全可以用来学习课程概念。期末项目规格Space Invaders 实战课程页将 Space Invaders 项目位于 coursepages/spd/space-invaders-instructions.md定位为Week 6A 的综合设计任务完成该项目的程序设计并使用check-random等课程后期引入的测试手段验证随机行为。项目定位与前置准备这是课程中规模最大的程序需要运用课程学到的几乎全部内容。课程页给出的重要建议是在下载 starter 文件之前先花时间熟悉游戏本身并完成程序的领域分析domain analysis——即先梳理清楚游戏中存在哪些对象坦克、导弹、入侵者、墙壁、屏幕边界、每个对象具有什么属性位置、速度、方向以及对象之间的交互规则再进入编码。这正是课程所强调的先设计、后编码方法论的直接应用。游戏行为规格游戏有众多版本本项目对 Space Invaders 的行为规格界定如下这是验收测试与设计的根本依据坦克Tank位于屏幕底部按左右方向键时左右移动。若按下左方向键坦克将持续以恒定速度向左移动直到按下右方向键为止即方向由最近一次按键决定而非按住才动。导弹Missile按空格键时坦克从其当前位置竖直向上发射导弹。入侵者Invader随机出现在屏幕顶部以45 度角运动碰到墙壁后反弹并以 45 度角向另一方向继续运动。游戏结束条件当任意入侵者到达屏幕底部时游戏结束。设计提示领域分析先行先定义清数据类型如坦克位置、入侵者位置与速度、导弹状态等再设计各对象的行为函数与相互触发的事件最后接入交互循环。随机行为的约束化入侵者随机出现必须被约束在屏幕宽度内这既是游戏体验的需要也是check-random测试的前提——断言多次随机求值的结果始终落在合法区间。规模管理这是你写过的最大的程序建议严格沿用课程的分步设计方法设计 Recipe从数据定义、函数契约、示例到实现与测试避免一次性堆砌大量代码。课程衔接与后续方向SPD 在 OSSU 的 Core programming 板块中处于承前启后的位置。根据 coursepages/class-based/README.md 的说明紧接着的Class-based Program Design课程正是在 Systematic Program Design 基础上的延伸它将学习者从基于 Racket 的函数式编程范式过渡到基于 Java 的面向类class-based范式并为后续的Object-Oriented Design课程做准备而 README.md 课程表显示Programming Languages课程也以 SPD 为先修。换言之SPD 学习的设计方法论将直接复用到后续所有核心编程课程中——这也再次印证了课程页方法优于语言的定位。版权许可与致谢课程页的 Credits 部分注明问题 starter 文件与 Space Invaders 项目说明取自 Edx 平台的Systematic Program Design课程遵循CC BY-NC-SA署名-非商业性使用-相同方式共享4.0许可协议。这意味着你可以在遵守相同许可条款的前提下自由使用、学习与分享这些材料但需注明出处并不得用于商业目的。OSSU 课程表正是基于这类开放许可才得以构建出这条免费的自学计算机科学之路。赞分享教程文档知识库【免费下载链接】computer-science Path to a free self-taught education in Computer Science!项目地址https://gitcode.com/GitHub_Trending/co/computer-science点击查看免费下载相关推荐OSSU计算机科学课程系统性程序设计学习指南OSSU计算机科学课程系统性程序设计学习指南 引言为什么需要系统性程序设计学习 你是否曾经遇到过这样的困境学习了多种编程语言但在面对复杂问题时仍然无从教程文档知识库如何使用 pypdf 快速处理 PDF文本提取、合并与加密一次讲清如何使用 pypdf 快速处理 PDF文本提取、合并与加密一次讲清 pypdf 是一个纯 Python 编写的 PDF 处理库可以拆分、合并、裁剪和转换 P教程文档知识库如何用OCRmyPDF实现文档智能分类从扫描PDF到自动化归档的完整实战指南如何用OCRmyPDF实现文档智能分类从扫描PDF到自动化归档的完整实战指南 在数字化办公时代企业每天都会产生大量扫描文档——发票、合同、报告、简历等纸质文OCRCLI上一篇Data Cleaning Agent 上线前安全评审实录ai-data-science-team 五大风险发现、修复落地与沙箱化执行指南下一篇LeetCode 846「一手顺子」全解排序、堆、有序映射与哈希映射四种策略深度剖析Hand of Straights创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考