CS9-编程基础
MIT:Missing-Semester
课程简介
- 先修要求:无
- 编程语言:shell
- 课程难度:🌟🌟
- 预计学时:10 小时
正如课程名字所言:“计算机教学中消失的一个学期”,这门课将会教会你许多大学的课堂上不会涉及但却对每个 CSer 无比重要的工具或者知识点。例如 Shell 编程、命令行配置、Git、Vim、tmux
、ssh
等等。如果你是一个计算机小白,那么我非常建议你学习一下这门课,因为它基本涉及了本书必学工具中的绝大部分内容。
除了 MIT 官方的学习资料外,北京大学图灵班开设的前沿计算实践中也开设了相关课程,资料位于这个网站下,供大家参考。
课程资源
- 课程网站:https://missing.csail.mit.edu/2020/
- 课程中文网站: https://missing-semester-cn.github.io/
- 课程视频:https://www.youtube.com/playlist?list=PLyzOVJj3bHQuloKGG59rS43e29ro7I57J
- 课程中文字幕视频:
- 课程作业:一些随堂小练习,具体见课程网站。
UCB: Sysadmin DeCal
课程简介
- 所属大学:UCB
- 先修要求:无
- 编程语言:shell
- 课程难度:🌟🌟🌟
- 预计学时:20小时
来自 UCB 的一门讲解 Linux 的入门课程,比起定位相同的 MIT 的公开课 Missing Semester,Decal 讲解得更加系统、也更加清晰,这也是我推荐它的主要原因。比起 Missing Semester 更像是给已经开始编程但没有系统使用过这些工具的学生的查缺补漏,DeCal 更像是面向零基础的同学的课程。一共十二周的课程内容,包括 Linux 基础、shell 编程(还有tmux 、vim)、包管理、服务(Services)、基础计算机网络、网络服务、安全(密钥管理)、Git、Docker、Kubernetes、Puppet 和 CUDA。 十分适合新手了解和入门 Linux 环境相关内容。
美中不足的是部分课程作业需要在远程服务器操作,比如关于 ssh 的练习,需要 UCB 内部账号访问。但是大部分作业可以通过自己搭建的虚拟机 + 使用 Xshell 等工具或者直接使用 Linux 桌面版来操作练习,在听完完整课程和做完作业后,相信已经对 Linux 有最基本的了解了。
为弥补无法使用远程服务器的不足以及熟悉 linux 命令行的需求,在此推荐 bandit 。bandit 是一款来自OverTheWire 网站的 Wargame,为 CTF 爱好者提供免费的练习靶场。bandit 的前 15 个 level 都是基础的 linux 操作而不涉及任何 CTF 知识。这些练习也正好弥补了 DeCal 外校无法访问的部分(主要是远程链接、文件权限)等内容。
课程资源
Python语言
UCB CS61A: Structure and Interpretation of Computer Programs
课程简介
- 所属大学:UC Berkeley
- 先修要求:无
- 编程语言:Python, Scheme, SQL
- 课程难度:🌟🌟🌟
- 预计学时:50 小时
伯克利 CS61 系列的第一门课程,也是我的 Python 入门课。
CS61 系列是伯克利 CS 专业的入门课,其中:
- CS61A: 强调抽象,让学生掌握用程序来解决实际问题,而不关注底层的硬件细节。
- CS61B: 注重算法与数据结构以及大规模程序的构建,学生会用 Java 语言结合算法与数据结构的知识来构建千行代码级别的大型项目(一个简易的谷歌地图,一个二维版的 Minecraft)。
- CS61C: 关注计算机体系结构,让学生理解高级语言(例如 C)是如何一步步转换为机器可以理解的 01 串并在 CPU 执行的,学生将会学习 RISC-V 架构并自己用 Logisim 实现一个 CPU。
CS61B 和 CS61C 在本书中均有收录。
回到 CS61A,注意这不仅仅是一门编程语言课,而是会深入到程序构造与运行的原理。最后你将在第 4 个 Project 中用 Python 实现一个 Scheme 的解释器。此外,抽象将是这门课的一大主题,你将学习到函数式编程、数据抽象、面向对象等等知识来让你的代码更易读,更模块化。当然,学习编程语言也是这门课的一大内容,你将会掌握 Python、Scheme 和 SQL 这三种编程语言,在它们的学习和比较中,相信你会拥有快速掌握一门新的编程语言的能力。
注意:如果此前完全没有编程基础,直接上手 CS61A 需要一定的学习能力和自律要求。为避免课程难度过高而导致的信心挫折,可以选择一个更为友好的入门编程课程。例如伯克利的 CS10 或者哈佛大学的 CS50。
课程资源
- 课程网站
- 课程网站 (页面备份): fall2024, spring2022, fall2022, fall2020
- 课程视频: spring2024, fall2022, fall2020
- 课程教材
- 课程教材电子书
- 课程教材中文翻译
- 课程作业: fall2024
资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPig/CS61A – GitHub 中。
@InsideEmpire 在学习这门课中用到的所有资源和作业实现都汇总在 InsideEmpire/CS61A – GitHub
Harvard CS50P: Introduction to Programming with Python
课程简介
- 所属大学:Harvard University
- 先修要求:无
- 编程语言:Python
- 课程难度:🌟🌟
- 预计学时:30-40 hours
CS50的番外篇,依旧由 David J. Malan 授课。在该课程中你将学会 Python 的基础与进阶语法,以及各种 “Pythonic” 的编程方法。此外对于 Python 特色的代码库、代码测试以及错误处理,该课程也会较为深入地探究。
该课程无需任何编程基础,且相对平易近人。适合所有想要快速入门 Python 语言的各阶段学生。
课程资源
资源汇总
@mancuoj 在学习这门课中用到的所有资源和作业实现都汇总在 mancuoj/CS50P – GitHub 中。
MIT 6.100L: Introduction to CS and Programming using Python
课程简介
- 所属大学:MIT
- 先修要求:无
- 编程语言:Python
- 课程难度:🌟🌟
- 预计学时:50h+
这门课程是自2022年 MIT 课程改革以来,电气工程与计算机科学系的计算机科学与工程、人工智能与决策和电气工程与计算专业的入门必修编程课(与 6.100A 二选一)。课程涵盖了 6.100A 的全部内容,课程主题包括计算的基本概念、Python 编程语言、简单的算法和数据结构、测试与调试以及算法复杂度等。
授课教师 Ana Bell 教授在 EECS 系做了多年讲师,讲解深入浅出。这门课程共有26节课,课前提前下载好本课代码,与课程同步进行。课上课后作业练习充足,答案齐全(除 Problem Sets 不提供)。总体难度平滑,官网材料免费开源,适合计算机小白循序渐近地进入 CS 的世界。
课程资源
资源汇总
@Alidme 在学习这门课时,总结了关于此课程的相关文档 MIT6.100L 食用指南(持续更新)。此外,其在学习这门课的 Problem Sets 的实现都汇总在 Alidme/MIT6.100L – GitHub 中。
C语言
Harvard CS50: This is CS50x
课程简介
- 所属大学:Harvard
- 先修要求:无
- 编程语言:C, Python, SQL, HTML, CSS, JavaScript
- 课程难度:🌟🌟
- 预计学时:20 小时
连续多年被哈佛大学学生评为最受欢迎的公选课程。Malan 教授上课非常有激情,撕黄页讲二分法的场面让人记忆犹新(笑)。但因为它的入门以及全校公选的属性,课程内容难度比较温和,但是课程作业质量非常高而且全部免费开源,非常适合小白入门,或者大佬休闲。
课程资源
资源汇总
@mancuoj 在学习这门课中用到的所有资源和作业实现都汇总在 mancuoj/CS50x – GitHub 中。
@figuretu 将有价值的提问讨论以及相关学习资源整理在共享文档 CS50 – 资源总目录 中。
Duke: Introductory C Programming Specialization
课程简介
- 所属大学:Duke
- 先修要求:无
- 编程语言:C
- 课程难度:🌟🌟🌟🌟
- 预计学时:110 小时
非常好的课程,自我感觉收益非常大:
- 侧重基础和基本概念:如 frame、stack memory、heap memory 等讲得很透。
- 针对C最难掌握的指针,有好的练习和编程来加深和强化理解。
- 非常好的 GDB,Valgrind 上手训练,作业也会涉及一些基本的 Git 练习。
- 老师建议作业用 Emacs,所以对 Emacs 小白来说,是个不错的入门。如果你会用 Vim ,我建议你用 Evil 插件。这样你不会丢掉 Vim 的编辑功能,同时可以体会 Emacs 的强大。工具箱里同时有 Emacs 和 Vim 时,效率会有不少提高。Emacs 的 org-mode,和 GDB 的顺滑整合,等等等等,都会让你如虎添翼。
- 虽然可能需要付费,但我觉得值。
- 虽说课名是入门,但兼具广度和深度。
课程资源
- 课程网站:https://www.coursera.org/specializations/c-programming
- 课程视频:同上
- 课程教材:同上
- 课程作业:同上
资源汇总
@haidongji 在学习这门课中的作业实现都汇总在 Duke Coursera Intro C 中。因为时间关系,我最后一课最后一周的几个作业到目前还没有完成。
C++语言
Amirkabir University of Technology 1400-2: Advanced Programming Course
课程简介
- 所属大学:Amirkabir University of Technology
- 先修要求:无
- 编程语言:C++
- 课程难度:🌟🌟🌟🌟🌟
- 预计学时:50 小时
无意中发现的一个 C++ 课程。课程的 homework 质量很高,每个 homework 相互独立结构简单,且有完善的单元测试,非常适合用来学习 C++ 的编程。本课程共 7 个 homework,如下所示:
- 实现一个 Matrix 类以及相关函数。
- 实现一个模拟加密货币客户端/服务端执行过程的程序。
- 实现一个 Binary Search Tree (BST)。
- 实现 C++ 中的 SharedPtr 和 UniquePtr 智能指针。
- 使用继承和多态实现多个类。
- 使用 STL 库解决 4 个问题。
- 是个 python 项目,有兴趣的可以看看。
没找到课程的主页,只有在 github 有 homework 的源码(名字为 AP1400-2-HW 的那几个)。
课程资源
- 课程网站:无
- 课程代码:https://github.com/courseworks
- 课程教材:无
- 课程作业:7 homework
Standard CS106L: C++ Programming
课程简介
- 所属大学:Stanford
- 先修要求:最好掌握至少一门编程语言
- 编程语言:C++
- 课程难度:🌟🌟🌟
- 预计学时:20 小时
我从大一开始一直都是写的 C++ 代码,直到学完这门课我才意识到,我写的 C++ 代码大概只是 C 语言 + cin
/cout
而已。
这门课会深入到很多标准 C++ 的特性和语法,让你编写出高质量的 C++ 代码。例如 auto binding, uniform initialization, lambda function, move semantics,RAII 等技巧都在我此后的代码生涯中被反复用到,非常实用。
值得一提的是,这门课的作业里你会实现一个 HashMap(类似于 STL 中的 unordered_map
), 这个作业几乎把整个课程串联了起来,非常考验代码能力。特别是 iterator
的实现,做完这个作业我开始理解为什么 Linus 对 C/C++ 嗤之以鼻了,因为真的很难写对。
总的来讲这门课并不难,但是信息量很大,需要你在之后的开发实践中反复巩固。Stanford 之所以单开一门 C++ 的编程课,是因为它后续的很多 CS 课程 Project 都是基于 C++的。例如 CS144 计算机网络和 CS143 编译器。这两门课在本书中均有收录。
课程资源
- 课程网站:http://web.stanford.edu/class/cs106l/
- 课程视频:https://www.youtube.com/channel/UCSqr6y-eaQT_qZJVUm_4QxQ/playlists
- 课程教材:http://web.stanford.edu/class/cs106l/full_course_reader.pdf
- Assignment1下载网址:https://github.com/snme/cs106L-assignment1
- Assignment2下载网址:https://github.com/snme/cs106L-assignment2
- 课程作业:具体内容见课程网站,我做的时候一共是两个:
- 实现一个 WikiRacer 的小游戏
- 实现一个类似 STL 库的 HashMap
资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPig/CS106L – GitHub 中。
Stanford CS106B/X: Programming Abstractions in C++
课程简介
- 所属大学:Stanford
- 先修要求:计算机基础 (CS50/CS106A/CS61A or equivalent)
- 编程语言:C++
- 课程难度:🌟🌟
- 预计学时:50-70 小时
Stanford 的进阶编程课,CS106X 在难度和深度上会比 CS106B 有所提高,但主体内容类似。主要通过 C++ 语言让学生在实际的编程作业里培养通过编程抽象解决实际问题的能力,同时也会涉及一些简单的数据结构和算法的知识,但总体来说没有一门专门的数据结构课那么系统。
课程内容包括很多基础但实用的数据结构和算法以及相关概念:collections, ADT, recursion, BFS, DFS, backtracking, sorting, hash, pointer, linked list, BST, OOP, pass by value, pass by reference, stack allocation, heap allocation, memory management。此外课程还会教授一些实用技巧,比如如何使用 debugger 排错,在 assignment8 中你会通过阅读 debugger 中的内容逃出迷宫。
和 CS61A 一样提供代码框架和测试程序,虽然没有 CS61A 测试的那么详细,但是作业中也有要求可以自己添加测试用例。每一个作业都会给出一份详细的文档,一步一步地实现每一个 milestone, 最后便可以在 starter code 给出的 GUI 中观察到自己的数据结构和算法实现的效果,非常有成就感。每一个作业都对应非常有趣又实际的案例,比如最后的任务是实现 huffman encoding 来压缩文件和解压文件。
课程资源
- 课程网站:CS106B Latest, CS106B 2022 winter, CS106X Latest
- 课程教材:https://web.stanford.edu/class/cs106x/res/reader/CS106BX-Reader.pdf
- 课程视频:youtube spring 2015, bilibili 2018 winter
- 课程作业:详见 CS106B 2022 winter, 最重要的是9个 assignment
资源汇总
@akun0311 在学习这门课中用到的所有资源和作业实现都汇总在 akun0311/CS106B-X-CS106L – GitHub 中。
@Andy-xiaokang 在学习这门课中用到的所有资源和作业实现都汇总在 Andy-xiaokang/CS106B – GitHub 中。
关于 assignments 中版本不兼容的问题可以详见 readme
课程视频我推荐 youtube spring 2015 这个版本,授课激情,并且可以看到老师和学生之间在提问环节的精彩交互(几百名优秀 compiler 的观察总会提出一些有趣的问题)
Java语言
MIT 6.092: Introduction To Programming In Java
课程简介
- 所属大学:MIT
- 先修要求:无
- 编程语言:Java
- 课程难度:🌟🌟
- 预计学时:少于 15 小时
MIT 的 Java 入门课程,不需要有任何编程基础也可以开始学习。一节课是一小时 Lec (知识点讲解)+一小时 Lab (代码训练),整个课程是七节课。虽说是十四个小时的课时,真正学起来却很快,一天其实差不多就能结束。感觉是比较适合新手上手的强度。
课程内容包括了:
- 快速入门 Java 所需的基础知识概念,如第一节课的 Java 编译原理、经典代码 “Hello world” 、八大基础类型等。
- 如何拥有良好的代码风格,如第三节课强调的命名规范、缩进、空格使用等。
- 如何 Debug :第六节课的使用 Eclipse warning, Assertion 和第七节课的 Exception 等。
Lab 的 Assignment 倒不是很难,很多前一节课的 Assignment 后一节课 Lec 上就会讲到。唯一需要注意的就是代码是一个很注重实践的技能,新手入门写代码最重要的就是多写多练,无论是 Lec 还是 Lab 上的代码都不要偷懒不写。
学完这门课想要进阶的可以学习 MIT 6.005/6.031 。
课程资源
- 课程网站:Winter 2010
- 课程教材:How to Think Like a Computer Scientist – 如何像计算机科学家一样思考
- 课程作业:https://ocw.mit.edu/courses/6-092-introduction-to-programming-in-java-january-iap-2010/pages/assignments/
资源汇总
@SinanTang 在学习这门课中用到的所有资源和作业实现都汇总在 SinanTang/MIT6092-Introduction-to-Programming-in-Java_problem-sets – GitHub 中。
@sirrice 在学习这门课中用到的所有资源和作业实现都汇总在 sirrice/6092 – GitHub 中。
@Harbour-z 在学习这门课中用到的所有资源和作业实现都汇总在 Harbour-z/MIT6.092 – Github中。
Rust语言
Stanford CS110L: Safety in Systems Programming
课程简介
- 所属大学:Stanford
- 先修要求:最好有一定的编程背景并对计算机系统有初步的认识。
- 编程语言:Rust
- 课程难度:🌟🌟🌟
- 预计学时:30 小时
在这门课中你将会学习 Rust 这门神奇的语言。
如果你学过 C 并接触过一些系统编程的话,应该对 C 的内存泄漏以及指针的危险有所耳闻,但 C 的底层特性以及高效仍然让它在系统级编程中无法被例如 Java 等自带垃圾收集机制的高级语言所替代。而 Rust 的目标则是希望在 C 的高效基础上,弥补其安全不足的缺点。因此 Rust 在设计之初,就有带有很多系统编程的观点。学习 Rust,也能让你之后能用 C 语言编写出更安全更优雅的系统级代码(例如操作系统等)。
这门课的后半部分关注在并发(concurrency)这一主题上,你将会系统地掌握多进程、多线程、基于事件驱动的并发等若干并发技术,并在第二个 Project 中比较它们各自的优劣。Rust 中 “futures” 的概念非常有趣和优雅,这些基础知识对你后续对计算机系统相关课程的学习很有帮助。另外,清华大学的操统实验 rCore 就是基于 Rust 编写的,具体参见文档。
课程资源
- 课程网站:https://reberhardt.com/cs110l/spring-2020/
- 课程视频:https://youtu.be/j7AQrtLevUE
- 课程教材:无
- 课程作业:共 6 个 Lab 和 2 个 Project,作业文档和代码框架详见课程网站。其中两个 Project 非常有趣,分别是:
- 用 Rust 实现一个类似于 GDB 的 debugger
- 用 Rust 实现一个负载均衡器
CS 242: Programming Languages, Fall2019 week6 到 week9 关于 Rust 内容的讲解非常细致, 可以作为该课程的讲义补充。 另外, Ryan 在 https://reberhardt.com/cs110l/spring-2021/中补充了 2020 版本缺失的关于 Futures Trait 内容的视频。
资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPig/CS110L – GitHub 中。
在2022年 CS110L 没有开源作业源码的背景下,Rust 快速演进导致2020版本课程项目中所使用的库过于老旧。对此,@fung-hwang 尝试进行了适配(时间为2022.11)。其适配过程和作业实现都汇总在 fung-hwang/CS110L-2020spr – GitHub 中。也许当你开始本课程时 Rust 和这些库又发生了变化,但你仍可以参考并从中获得启发。
KAIST CS220: Programming Principles
课程简介
- 所属大学:KAIST
- 先修要求:其他任何一门编程语言
- 编程语言:Rust
- 课程难度:🌟🌟🌟
- 预计学时:40 小时
来自 KAIST 的 Jeehoon Kang 以及他所领导的 Concurrency and Parallelism Laboratory 实验室似乎是 Rust 语言的忠实拥趸,csidy 之中的 CS431 和 CS420 都是他们的杰作。自然,他们肯定会开发一款针对 Rust 的入门课程,也就是本课程。课程涵盖了 Rust 入门所需的绝大多数知识点。
本课没有指定官方教材,课程主页推荐采用 Rust book 学习,并在 slides 之中规划了大致的学习线路。虽然没有公开课程教学视频,不过完善的测试系统仍然可以使这门课作为 Rust 习题课来练手,部分习题可以作为 CS110L 的良好补充。如果在学习完 CS110L 之后仍然觉得需要更多练习,可以选择本课程。部分习题具有一定难度,Jeehoon Kang 对使用 AI 辅助编程持有鼓励态度,但是 AI 并不完美,核心工作仍需自己完成。
课程资源
资源汇总
互联网上并没有公开的参考答案,也并不确定本课程主讲人是否赞同这种公开答案的行为。如果遇到困难,课程的 ISSUE 之中可以找到关于作业的讨论。
KAIST CS431: Concurrent Programming
课程简介
- 所属大学:KAIST
- 先修要求:Rust 编程基础与对并发的初步了解
- 编程语言:Rust
- 课程难度:🌟🌟🌟🌟
- 预计学时:50 小时
CS431是一门讨论并发编程的课程,主要使用 Rust 语言。课程内容主要包括理论与实践两个部分。理论部分聚焦于建立并发情形下的编程模型,而实践部分则主要是理解 Rust 相关库中锁与无锁数据结构的实现原理。
这门课程同时配有一系列代码量不大但并不简单的作业来巩固你对并发编程的理解,从基于锁的并发安全缓存设计和链表,到无锁的哈希表和著名的 hazard pointer. 和众多高质量课程一样,这些作业质量较高且配有详细的本地测试,适合自学。
这门课程比我预想的要深入的多,我所知晓的关于自旋锁,互斥锁的知识在该门课程中都是最基础的,而对于 promising semantics, 访存模型和无锁数据结构的介绍让我对并发和 Rust 都有更深入的理解。
课程资源
函数式语言
Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful
课程简介
- 所属大学:Cornell
- 先修要求:了解一门命令式编程语言,类C语言
- 编程语言:OCaml
- 课程难度:🌟🌟🌟
- 预计学时:40 小时
课程评价: modern SICP
如果说编程入门的最好的课程是 SICP。在其之后,就是 CS3110。
如果你不知道什么叫函数式编程语言,或者只是听过这个名词,那么这门课程,正如它的名字,会让你体会到什么叫正确,高效和美。
CS3110 不仅局限于函数式编程,更是将理论和实用充分结合。课程内容更进一步,涵盖了 OCaml 语言基础,数据结构和算法,测试开发,形式证明,语言特性实现等诸多内容。而且内容之间并不割裂,而是递进和互补,非常值得学习。
主讲老师 Michael Ryan Clarkson,浸淫编程多年,用词简单,表述清晰,内容环环相扣,剖析一针见血。课程视频甚至用来练听力,听不懂开英文字幕理解起来毫不费力。
课程简史,摘自课程教材
CS3110 是康奈尔大学打磨 20 余年的课程。最初发源于 MIT6.001 SICP,在其基础上增加更严格方法和材料,涵盖函数式编程,环境模型,数据结构,算法和语言实现。2008 年,正式名称改为 CS3110,改用 OCaml 语言。2018 年秋季,开始编写课程教材。现任课程的主讲老师于 2021 年在 youtube 上公布了课程视频。
课程资源
- 课程视频油管: https://www.youtube.com/playlist?list=PLre5AT9JnKShBOPeuiD9b-I4XROIJhkIU
- 课程视频B站: https://www.bilibili.com/video/BV1dv4y127Ui/
- 课程教材:https://cs3110.github.io/textbook
- 课程作业:课程教材中 exercises 自选,难度 1 至 4 星,注意 3 星至 4 星的难度跨越很大。
资源汇总
@featherwit001 在学习这门课中用到的所有资源和作业实现都汇总在 featherwit001/CS3110_OCaml_Programming – GitHub 中。
Haskell: MOOC
课程简介
- 所属大学:University of Helsinki
- 先修要求:无
- 编程语言:Haskell
- 课程难度:🌟🌟
- 预计学时:因人而异
函数式编程正在越来越多的融合入现代编程语言。Java 的 Streams,JavaScript 的 Promises,以及在 ECMAScript 草案阶段的 Record & Tuple。在学习这些内容时,我总是感觉我在死记它们这些 api 的行为,虽然能够使用它们写出一些程序,但总感觉不到掌握了它们。究其原因,它们为什么存在?它们为什么是这样的?设计它们的思想是什么?学完函数式编程会给你答案。
虽然这门课的名字是 Haskell,但它的核心内容是函数式编程思想。就像学习面向对象程序设计,大概率不会选择 Java 之外的语言。
学习 Haskell,但重点不在于使用它。这门课会让你用刚刚够用的 Haskell 语法,刚刚够用的库函数,一丁点的工具,去解释核心的程序语义,也就是函数式编程的核心思想。这不会让你浪费时间陷入语言细节以及语言生态中,我觉得它是这门课的最大优势。
这门课覆盖的内容:
- Pure Function
- Lazy Evaluation
- Strongly Typed
- Type Inferred
- Curry
- Monoid / Functor / Monad / Applicative
如果你有编程经验,课程的 Part1 很简单,难度集中在 Part2 的十三章之后。课程的练习很棒,它有一种在做 CS61a 练习的感觉。练习的注释中有足够的提示,作业在你提交之后会给你标准答案,你还可以在官方的 Telegram 中提问或与他人讨论。
课程资源
- 课程网站:https://haskell.mooc.fi/
- 课程视频:无
- 课程教材:https://haskell.mooc.fi/
- 课程作业:https://github.com/moocfi/haskell-mooc
- 社区:https://t.me/haskell_mooc_fi
资源汇总
@showtheunli 在学习这门课中用到的所有资源和作业实现都汇总在 showthesunli/haskell-mooc – GitHub 中。(非常不建议在作业时,参考别人的实现)
by csdiy.wiki