Skip to content

Commit

Permalink
[UPDATE] Reorganize the intro to programming section (#593)
Browse files Browse the repository at this point in the history
* reorganize intro to programming

* nits

* nits
  • Loading branch information
PKUFlyingPig committed Apr 13, 2024
1 parent b1f5aca commit 4979dda
Show file tree
Hide file tree
Showing 30 changed files with 45 additions and 38 deletions.
18 changes: 9 additions & 9 deletions docs/CS学习规划.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,28 +141,28 @@ As a computer science student, I often hear arguments about the uselessness of m

> Languages are tools, and you choose the right tool for the right job. Since there's no universally perfect tool, there's no universally perfect language.
#### Shell
#### General

- [MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md)
- [Harvard CS50: This is CS50x](编程入门/C/CS50.md)

#### Python

- [CS50P: CS50's Introduction to Programming with Python](编程入门/CS50P.md)
- [Harvard CS50: This is CS50x](编程入门/CS50.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/CS61A.md)
- [CS50P: CS50's Introduction to Programming with Python](编程入门/Python/CS50P.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/Python/CS61A.md)

#### C++

- [Stanford CS106B/X: Programming Abstractions](编程入门/CS106B_CS106X.md)
- [Stanford CS106L: Standard C++ Programming](编程入门/CS106L.md)
- [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)
- [Stanford CS106L: Standard C++ Programming](编程入门/cpp/CS106L.md)

#### Rust

- [Stanford CS110L: Safety in Systems Programming](编程入门/CS110L.md)
- [Stanford CS110L: Safety in Systems Programming](编程入门/Rust/CS110L.md)

#### OCaml

- [Cornell CS3110 textbook: Functional Programming in OCaml](https://cs3110.github.io/textbook/cover.html)
- [Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful](编程入门/Functional/CS3110.md)

### Electronics Fundamentals

Expand All @@ -184,7 +184,7 @@ Signals and Systems is a course I find very worthwhile. Initially, I studied it

Algorithms are the core of computer science and the foundation for almost all professional courses. How to abstract real-world problems into algorithmic problems mathematically and solve them under time and memory constraints using appropriate data structures is the eternal theme of algorithm courses. If you are fed up with your teacher's rote teaching, I highly recommend UC Berkeley's [UCB CS61B: Data Structures and Algorithms](数据结构与算法/CS61B.md) and Princeton's [Coursera: Algorithms I & II](数据结构与算法/Algo.md). Both courses are taught in a deep yet simple manner and have rich and interesting programming experiments to integrate theory with knowledge.

Both of these courses are based on Java. If you prefer C/C++, you can refer to Stanford's data structure and basic algorithm course [Stanford CS106B/X: Programming Abstractions](编程入门/CS106B_CS106X.md). For those who prefer Python, you can learn MIT's introductory algorithm course [MIT 6.006: Introduction to Algorithms](数据结构与算法/6.006.md).
Both of these courses are based on Java. If you prefer C/C++, you can refer to Stanford's data structure and basic algorithm course [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md). For those who prefer Python, you can learn MIT's introductory algorithm course [MIT 6.006: Introduction to Algorithms](数据结构与算法/6.006.md).

For those interested in more advanced algorithms and NP problems, consider UC Berkeley's course on algorithm design and analysis [UCB CS170: Efficient Algorithms and Intractable Problems](数据结构与算法/CS170.md) or MIT's advanced algorithms course [MIT 6.046: Design and Analysis of Algorithms](数据结构与算法/6.046.md).

Expand Down
18 changes: 9 additions & 9 deletions docs/CS学习规划.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,28 +141,28 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是

> Languages are tools, you choose the right tool to do the right thing. Since there's no universally perfect tool, there's no universally perfect language.
#### Shell
#### General

- [MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md)
- [Harvard CS50: This is CS50x](编程入门/C/CS50.md)

#### Python

- [CS50P: CS50's Introduction to Programming with Python](编程入门/CS50P.md)
- [Harvard CS50: This is CS50x](编程入门/CS50.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/CS61A.md)
- [CS50P: CS50's Introduction to Programming with Python](编程入门/Python/CS50P.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/Python/CS61A.md)

#### C++

- [Stanford CS106B/X: Programming Abstractions](编程入门/CS106B_CS106X.md)
- [Stanford CS106L: Standard C++ Programming](编程入门/CS106L.md)
- [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)
- [Stanford CS106L: Standard C++ Programming](编程入门/cpp/CS106L.md)

#### Rust

- [Stanford CS110L: Safety in Systems Programming](编程入门/CS110L.md)
- [Stanford CS110L: Safety in Systems Programming](编程入门/Rust/CS110L.md)

#### OCaml

- [Cornell CS3110 textbook: Functional Programming in OCaml](https://cs3110.github.io/textbook/cover.html)
- [Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful](编程入门/Functional/CS3110.md)

### 电子基础

Expand All @@ -184,7 +184,7 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是

算法是计算机科学的核心,也是几乎一切专业课程的基础。如何将实际问题通过数学抽象转化为算法问题,并选用合适的数据结构在时间和内存大小的限制下将其解决是算法课的永恒主题。如果你受够了老师的照本宣科,那么我强烈推荐伯克利的 [UCB CS61B: Data Structures and Algorithms](数据结构与算法/CS61B.md) 和普林斯顿的 [Coursera: Algorithms I & II](数据结构与算法/Algo.md),这两门课的都讲得深入浅出并且会有丰富且有趣的编程实验将理论与知识结合起来。

以上两门课程都是基于 Java 语言,如果你想学习 C/C++ 描述的版本,可以参考斯坦福的数据结构与基础算法课程 [Stanford CS106B/X: Programming Abstractions](编程入门/CS106B_CS106X.md)。偏好 Python 的同学可以学习 MIT 的算法入门课 [MIT 6.006: Introduction to Algorithms](数据结构与算法/6.006.md)
以上两门课程都是基于 Java 语言,如果你想学习 C/C++ 描述的版本,可以参考斯坦福的数据结构与基础算法课程 [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)。偏好 Python 的同学可以学习 MIT 的算法入门课 [MIT 6.006: Introduction to Algorithms](数据结构与算法/6.006.md)

对一些更高级的算法以及 NP 问题感兴趣的同学可以学习伯克利的算法设计与分析课程 [UCB CS170: Efficient Algorithms and Intractable Problems](数据结构与算法/CS170.md) 或者 MIT 的高阶算法 [MIT 6.046: Design and Analysis of Algorithms](数据结构与算法/6.046.md)

Expand Down
2 changes: 1 addition & 1 deletion docs/使用指南.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ After procedural programming, the second semester of the freshman year usually i

Second, try to learn some productivity-enhancing tools and skills, such as Git, Shell, Vim. I strongly recommend the [MIT missing semester](编程入门/MIT-Missing-Semester.md) course. Initially, you may feel awkward, but force yourself to use them, and your development efficiency will skyrocket. Additionally, many applications can greatly increase your productivity. A rule of thumb is: any action that requires your hands to leave the keyboard should be eliminated. For example, switching applications, opening files, browsing the web - there are plugins for these (like [Alfred](https://www.alfredapp.com/) for Mac). If you find an daily operation that takes more than 1 second, try to reduce it to 0.1 seconds. After all, you'll be dealing with computers for decades, so forming a smooth workflow can greatly enhance efficiency. Lastly, learn to touch type! If you still need to look at the keyboard while typing, find a tutorial online and learn to type without looking. This will significantly increase your development efficiency.

Third, balance coursework and self-learning. We feel angry about the institution but must also follow the rules, as GPA is still important for postgraduate recommendations. Therefore, in the first year, I suggest focusing on the curriculum, complemented by high-quality extracurricular resources. For example, for calculus and linear algebra, refer to [MIT 18.01/18.02](./数学基础/MITmaths.md) and [MIT 18.06](./数学基础/MITLA.md). During holidays, learn Python through [UCB CS61A](./编程入门/CS61A.md). Also, focus on good programming habits and practical skills mentioned above. From my experience, mathematics courses matter a lot for your GPA in the first year, and the content of math exams varies greatly between different schools and teachers. Self-learning might help you understand the essence of mathematics, but it may not guarantee good grades. Therefore, it’s better to specifically practice past exams.
Third, balance coursework and self-learning. We feel angry about the institution but must also follow the rules, as GPA is still important for postgraduate recommendations. Therefore, in the first year, I suggest focusing on the curriculum, complemented by high-quality extracurricular resources. For example, for calculus and linear algebra, refer to [MIT 18.01/18.02](./数学基础/MITmaths.md) and [MIT 18.06](./数学基础/MITLA.md). During holidays, learn Python through [UCB CS61A](./编程入门/Python/CS61A.md). Also, focus on good programming habits and practical skills mentioned above. From my experience, mathematics courses matter a lot for your GPA in the first year, and the content of math exams varies greatly between different schools and teachers. Self-learning might help you understand the essence of mathematics, but it may not guarantee good grades. Therefore, it’s better to specifically practice past exams.

In your sophomore year, as computer science courses become the majority, you can fully immerse yourself in self-learning. Refer to [A Reference Guide for CS Learning](./CS学习规划.md), a guide I created based on three years of self-learning, introducing each course and its importance. For every course in your curriculum, this guide should have a corresponding one, and I believe they are of higher quality. If there are course projects, try to adapt labs or projects from these self-learning courses. For example, I took an operating systems course and found the teacher was still using experiments long abandoned by UC Berkeley, so I emailed the teacher to switch to the [MIT 6.S081](./操作系统/MIT6.S081.md) xv6 Project I was studying. This allowed me to self-learn while inadvertently promoting curriculum reform. In short, be flexible. Your goal is to master knowledge in the most convenient and efficient way. Anything that contradicts this goal can be “fudged” as necessary. With this attitude, after my junior year, I barely attended offline classes (I spent most of my sophomore year at home due to the pandemic), and it had no impact on my GPA.

Expand Down
2 changes: 1 addition & 1 deletion docs/使用指南.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

其二就是尝试学习一些能提高生产力的工具和技能,例如 Git、Shell、Vim。这里强烈推荐学习 [MIT missing semester](./编程入门/MIT-Missing-Semester.md) 这门课,也许一开始接触这些工具用起来会很不习惯,但强迫自己用,熟练之后开发效率会直线提高。此外,还有很多应用也能极大提高的你生产力。一条定律是:一切需要让手离开键盘的操作,都应该想办法去除。例如切换应用、打开文件、浏览网页这些都有相关插件可以实现快捷操作(例如 Mac 上的 [Alfred](https://www.alfredapp.com/))。如果你发现某个操作每天都会用到,并且用时超过1秒,那就应该想办法把它缩减到0.1秒。毕竟以后数十年你都要和电脑打交道,形成一套顺滑的工作流是事半功倍的。最后,学会盲打!如果你还需要看着键盘打字,那么赶紧上网找个教程学会盲打,这将极大提高你的开发效率。

其三就是平衡好课内和自学。我们质疑现状,但也得遵守规则,毕竟绩点在保研中还是相当重要的。因此在大一,我还是建议大家尽量按照自己的课表学习,但辅以一些优质的课外资源。例如微积分线代可以参考 [MIT 18.01/18.02](./数学基础/MITmaths.md)[MIT 18.06](./数学基础/MITLA.md) 的课程 Notes。假期可以通过 [UCB CS61A](./编程入门/CS61A.md) 来学习 Python。同时做到上面第一、第二点说的,注重好的编程习惯和实践能力的培养。就个人经验,大一的数学课学分占比相当大,而且数学考试的内容方差是很大的,不同学校不同老师风格迥异,自学也许能让你领悟数学的本质,但未必能给你一个好成绩。因此考前最好有针对性地刷往年题,充分应试。
其三就是平衡好课内和自学。我们质疑现状,但也得遵守规则,毕竟绩点在保研中还是相当重要的。因此在大一,我还是建议大家尽量按照自己的课表学习,但辅以一些优质的课外资源。例如微积分线代可以参考 [MIT 18.01/18.02](./数学基础/MITmaths.md)[MIT 18.06](./数学基础/MITLA.md) 的课程 Notes。假期可以通过 [UCB CS61A](./编程入门/Python/CS61A.md) 来学习 Python。同时做到上面第一、第二点说的,注重好的编程习惯和实践能力的培养。就个人经验,大一的数学课学分占比相当大,而且数学考试的内容方差是很大的,不同学校不同老师风格迥异,自学也许能让你领悟数学的本质,但未必能给你一个好成绩。因此考前最好有针对性地刷往年题,充分应试。

在升入大二之后,计算机方向的专业课将居多,此时大家可以彻底放飞自我,进入自学的殿堂了。具体可以参考 [一份仅供参考的CS学习规划](./CS学习规划.md),这是我根据自己三年自学经历总结提炼出来的全套指南,每门课的特点以及为什么要上这门课我都做了简单的介绍。对于你课表上的每个课程,这份规划里应该都会有相应的国外课程,而且在质量上我相信基本是全方位的碾压。由于计算机方向的专业知识基本是一样的,而且高质量的课程会让你从原理上理解知识点,对于国内大多照本宣科式的教学来说基本是降维打击。一般来说只要考前将老师“辛苦”念了一学期的 PPT 拿来突击复习两天,取得一个不错的卷面分数并不困难。如果有课程大作业,则可以尽量将国外课程的 Lab 或者 Project 修改一番以应付课内的需要。我当时上操作系统课,发现老师还用着早已被国外学校淘汰的课程实验,便邮件老师换成了自己正在学习的 [MIT 6.S081](./操作系统/MIT6.S081.md) 的 xv6 Project,方便自学的同时还无意间推动了课程改革。总之,灵活变通是第一要义,你的目标是用最方便、效率最高的方式掌握知识,所有与你这一目标违背的所谓规定都可以想方设法地去“糊弄”。凭着这份糊弄劲儿,我大三之后基本没有去过线下课堂(大二疫情在家呆了大半年),对绩点也完全没有影响。

Expand Down
2 changes: 1 addition & 1 deletion docs/数据结构与算法/6.006.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
- 课程难度:🌟🌟🌟🌟🌟
- 预计学时:100h+

MIT-EECS 系的瑰宝。授课老师之一是算法届的奇才 Erik Demaine. 相比较于斯坦福的 [CS106B/X](../编程入门/CS106B_CS106X.md)(基于 C++ 的数据结构与算法课程),该课程更侧重于算法方面的详细讲解。课程也覆盖了一些经典的数据结构,如 AVL 树等。个人感觉在讲解方面比 CS106B 更加详细,也弥补了 CS106B 在算法方面讲解的不足。适合在 CS106B 入门之后巩固算法知识。
MIT-EECS 系的瑰宝。授课老师之一是算法届的奇才 Erik Demaine. 相比较于斯坦福的 [CS106B/X](../编程入门/cpp/CS106B_CS106X.md)(基于 C++ 的数据结构与算法课程),该课程更侧重于算法方面的详细讲解。课程也覆盖了一些经典的数据结构,如 AVL 树等。个人感觉在讲解方面比 CS106B 更加详细,也弥补了 CS106B 在算法方面讲解的不足。适合在 CS106B 入门之后巩固算法知识。

不过该课程也是出了名的难,大家需要做好一定的心理准备。

Expand Down
File renamed without changes.
10 changes: 6 additions & 4 deletions docs/编程入门/CS50.md → docs/编程入门/C/CS50.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,13 @@

## 课程资源

- 课程网站:[2022](https://cs50.harvard.edu/x/2022/), [2023](https://cs50.harvard.edu/x/2023/)
- 课程视频:[2022](https://cs50.harvard.edu/x/2022/), [2023](https://cs50.harvard.edu/x/2023/)
- 课程网站:[2024](https://cs50.harvard.edu/x/2024/), [2023](https://cs50.harvard.edu/x/2023/), [2022](https://cs50.harvard.edu/x/2022/)
- 课程视频:原版参考课程网站,也可以在 B 站找到[中文字幕版](https://www.bilibili.com/video/BV1HW4y1A7Yi/?spm_id_from=333.999.0.0&vd_source=a4d76d1247665a7e7bec15d15fd12349)
- 课程教材:无
- 课程作业:[2022](https://cs50.harvard.edu/x/2022/), [2023](https://cs50.harvard.edu/x/2023/)
- 课程作业:参考课程网站。

## 资源汇总

@mancuoj 在学习这门课中用到的所有资源和作业实现都汇总在 [mancuoj/CS50x - GitHub](https://github.com/mancuoj/CS50x) 中。
@mancuoj 在学习这门课中用到的所有资源和作业实现都汇总在 [mancuoj/CS50x - GitHub](https://github.com/mancuoj/CS50x) 中。

@figuretu 将有价值的提问讨论以及相关学习资源整理在共享文档 [CS50 - 资源总目录](https://uufyjevghz.feishu.cn/docx/DP78d2U5TosTOTx9QCbcjp8GnBh) 中。
File renamed without changes.
2 changes: 1 addition & 1 deletion docs/编程入门/DeCal.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ To compensate for the inability to use remote servers and to familiarize with th
## Course Resources

- Course Website: [Official Site](https://decal.ocf.berkeley.edu/)
- Course Videos: Available on the official course website, [Bilibili](https://www.bilibili.com/video/BV1rs4y1T7zJ/?share_source=copy_web) has an incomplete transfer that only includes the first part.
- Course Videos: Available on the official course website, [Bilibili](https://www.bilibili.com/video/BV1rs4y1T7zJ/?share_source=copy_web) has an incomplete translation that only includes the first part.
- Course Textbook: No specified textbook, but each week's labs contain enough reading material for in-depth study.
- Course Assignments: Available on the official course website.
2 changes: 1 addition & 1 deletion docs/编程入门/DeCal.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
## 课程资源

- 课程网站:[官网](https://decal.ocf.berkeley.edu/)
- 课程视频:见课程官网[B站](https://space.bilibili.com/483435468/video) __
- 课程视频:原版视频见课程官网[B站](https://space.bilibili.com/483435468/video)也有搬运。
- 课程教材:无指定教材,但每一周的 labs 之中都有足够的阅读材料供你深入细节。
- 课程作业:见课程官网

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 comments on commit 4979dda

Please sign in to comment.