我会直接承认我是个懒人
我小时候语文书上有一篇课文《懒惰的智慧》,它说,正是懒惰激励了发明,促进了人类的进步
没有什么教育的延迟性,我当场就意识到它的好,将之树立成我人生的指导原则
包括计算机学习
平时该喝喝、该玩玩、该躺躺,计算机课程还是没挂过科,准确来说是均分 90+,也没有为leetcode 题苦过手
因为,为了偷懒(bushi,为了节省春光),我会下意识思考可以省力的方法
这里把我的计算机懒人学习方法分享出来
明白全局
首先,找一本概论书籍,《计算机科学概论》就很好,明白计算机到底是什么。
我有一个 NLP 老师,来自中科院。他的观点就是,在学一门技术前,要:
- 了解其定义,它是什么
- 了解其背景,它有什么意义
- 然后才是它的具体内容
也就是说,明白我们为什么要学它,这样就有了学习的动力,同时对计算机有一个全局概览,然后学习事半功倍。
学会编程
然后,明白程序员到底在做什么?
程序员只是一个翻译,用编程语言来告诉计算机,如何做事。(电脑:你在教我做事?
编程语言的重点,一在逻辑结构,二在数据结构。
1、逻辑结构
编程语言的逻辑,归根结底就是三种:顺序、分支、循环,来描述计算机做事的顺序。
顺序就是顺序执行,分支就是条件判断,循环就是从一至终的迭代。
例如,“把这片区域动物里的所有鸭子放进池塘”,这是自然语言的说法。对于编程语言就是:
- 遍历这个区域的所有动物(这是循环结构)
- 遇到一只动物,判断它是不是一只鸭子🦆(这是分支结构)
- 是鸭子就放进池塘,不是也无所谓,都继续查看下一只动物
- 直到查看完所有动物
总体来说,自上而下都是顺序结构,中间偶尔会插上循环和分支,来做逻辑转换
2、数据结构
除了视为做事顺序的逻辑结构,还有处理的介质,也就是变量。变量的结构我们用数据结构来描述。
这就是为什么《数据结构》这门课,是计算机系学生课程的核心基础课。
这里不多说,看书就好,严蔚敏教授的《数据结构C语言版》就很好。
进入开发
懂了语言后,那如何开发呢?
不管选定哪门语言哪个方向,是前端、后端、算法、测开、数分?
以下三点都是核心点,这是程序开发的核心
- 你的程序的运行环境是什么
- 程序的输入是什么
- 你要得到一个什么样的结果
像前端,
- 运行环境是浏览器,或 app 内的 webview ,主要使用语言是 JS
- 接收来自用户交互的输入,或服务端/后端传来的数据
- 得到的结果是一个符合预期的 UI 画面
运行环境即是程序执行的平台环境,平台环境各异,从而衍生出不同的语言风格。程序员要做的事情就是
- 熟悉这个运行环境,写符合这个环境调性的代码。即避免踩坑
- 针对输入,写执行过程,以得到一个结果。这个是我们上面说的手艺了,即教计算机做事。
计算机应用开发的新知识基本都是出于这两点。
对于运行环境,为它服务的标准化组织会更新相应的标准。
对于获得结果,应用框架层出不穷。
但只要明白我们的目的,就能从新的技术中摘取自己想要的部分,不需全盘接受,可以有效避免秃头(这种计算机知识的诅咒🌝)
重视数学
关于写执行过程这步,其实就是简单的数理逻辑。
像顺序、分支、循环,不简单吗?
计算机+高中数学知识,就可以当好一个业务开发。
逻辑简单,代表着代码不复杂,代码可读性好。再讲究点最优实践,兼容性好点。这就是可维护性够好的好代码了。
这时候你已经是一个熟练的切图仔,或是很好的 CRUD Kid 了。
但学习更多的数学,才能接触到计算机的更多面
例如学好概率论几乎就可以当一个AC leetcode 面试题
线性代数是计算机图形学的入门课,正如高数是深度学习的前置。
计算机的这些应用领域,数学就成了重点,编程语言则回归本质,只是一门手艺。像一个入门级的神经网络,你可以用 python 写,也可以用 R 语言写,这无关语言,重心是其中的数理逻辑。
