今天,越来越多的工作是借助电脑完成的了。
在这种情况下,学习更多的计算机知识,无疑是有益的。
比如,了解硬件和操作系统的知识,可以在购买数码产品的时候做出更好的选择。而会写一些基本的程序,可以避免许多重复性的工作。
很多人把这些东西看得很深奥,其实不是。你未必非得成为专家,才能解决很多问题。因为,在计算机科学里,有一个重要的概念,叫做「抽象」 (abstraction)。
所谓抽象,实际上就是这样的思考方式,当我们考察一个物体(或者对象、系统)A 时,我们不关心 A 的内部组成(或者原理),只关心它的功能。
其实日常生活中,充满了抽象的思维方式。使用手机的时候,你只在乎能用它开微信,而不在乎它里面是什么处理器,多大的内存,或者多少像素的摄像头。又比如开车的时候,司机不会关心轮子什么材质或者发动机多少功率。
在计算机科学里,和「抽象」非常相关的一个词,是「模块化」。这两种思想,简直无处不在。
无论是开发一个普通的软件,或者是操作系统,又或者是网络协议,我们都不希望所研究的东西是一团乱麻。因为这样太复杂了。
通常,我们会将研究对象,拆分为多个相互独立的模块,分别进行研究。这样一来,当我研究某个模块的时候,只要关心该模块怎么组成;对于其他模块,则只需知道提供了什么功能即可,并不用知道它们是怎么实现 (implement) 的。
举一些例子:
- 开发软件的时候,通常都是在一开始想好整体架构,然后将各个模块分别实现。
- TCP-IP 网络协议,分为五层。每一层都在上一层的基础上,实现相对独立的一部分功能。加起来就保证了可靠的网络通信。
有了这些认识,其实就不难想到,写程序并不是一件很困难的事情。很多该有的东西,别人已经给你造好了。你以为你需要成为一个木匠,其实你要做的就是搭积木。