计算概论学习笔记(2)

感谢北大李戈老师讲解的计算概论。

【道阻且长,行则将至】

很多年没有intensive coding,现在这个系列是coding retake,一点点回忆之前的知识,希望能重回到一线。主要内容包括C,C++,Pytorch学术前沿项目学习和实践,预计会在2024年内完成。


1. Skill,训练得技能!!!编程不能只学Knowledge

2. 须抓大放小

3. 多练简单题

4. 选一本薄的书 (个人认为,参考书必要不大,该课程已经可以构建较全的知识体系,其余应该通过QA-driven方式借助互联网学习)

我发现李戈老师上编程课的思路挺独特,底层逻辑就是:培养大家对于程序的兴趣,喜欢和程序待一起,日久生情,设计了一条特别缓的学习曲线,让大家的内心有特别好的接纳范围。因为说到编程,大家或多或少会有一定的畏难情绪,这对于大多数人而言,大学前并未接触过。

感性认识计算机

1. 写程序就是告诉计算机要做什么。我们怎么跟计算机说,它才能听懂。 涉及两个问题:

Q1. 应该说些什么?(计算机能接收的内容范围)- 本质

Q2. 以什么形式 说?

2. 假如你的大脑是一台计算机

这是个很意思的事情,给了个数列找最大最小,作为自己思维的觉察者,去观察自己是怎么找到的。>> 存储特别的数,然后不断用新的数和特别的数进行比较大小,更新特别的数,等遍历了数列,就能输出最大最小。

其实,我们写程序跟这个过程是一模一样的。 (我也是这次回过来看才恍然大悟,觉得"假设..."具有精妙之处)

3.如果你来设计一门编程语言 ~ 形式

转换角色,能激发大家对语言设计更深层的体会(太棒了!!),很容易就有了global picture,也不容易陷入到繁琐的语法中。

如果我们来设计编程语言,这个时候可能就需要回到"假如你的大脑是一台计算机",提出以下经典3问:

Q1. 是不是任意单词计算机都应该认识? NO

Q2. 数、计算符号?

Q3. 多少元逻辑才怎么表示纷繁复杂的逻辑?(我最喜欢问题3,这就是从表象的纷繁复杂发掘了本质,这点很不简单

4. 快步走进C程序一二三

顺序结构、分支语句(if)、循环语句(for)、常用的结构:数组

程序可读性:必要的注释

5. 没有解决方案就没用程序

回溯S1提到的,我们写程序就是要从"应该说什么"以及"以什么形式说"两方面去告诉计算机。

显然,解决方案就是"应该说什么",语法和规则就是"以什么形式说"。

切饼问题

Warining: 没用解决方案的时候,千万不要着急动手去求解!

6. 现有构想,再些程序

++描述一个问题并不容易++(现在是在用结构化程序设计来进行描述)

顿悟!!!现实世界要清楚、无歧义描述一个事情也不是很容易

7.体验结构化编程

能感知清晰的结构化程序设计的思想:'模块思维'、模块内"高内聚"、模块间"低耦合"