故事背景
- 从来没有思考一下或者问问自己,什么是计算机科学?
- 所以对计算机有一些误解
- 对科学也有一些误解
计算机
我以为看了《深入理解计算机系统》就真的懂计算机了。其实,是一点儿也不懂。停留在什么样的层面呢?知道。就好比一个智者,经历了沧桑,最后对我说了很多有哲理的话,因为我没有相应的经历所以我也只是听听,只是知道曾经有这么一个智者告诉了我某个道理,至于我理解了吗?应该是不理解的,不懂。也许直到有一天,自己有某个机遇,经历过了类似的东西,就会豁然开朗。
那停留在什么样的层面呢?
- 只是知道计算机大致架构体系。
- 只是知道需要用数字化的思维来理解这个世界。
- 只是知道用计算思维来跟计算机交流,可是什么是计算机思维呢?好像也从来没有 问过自己。
- 只是知道这些硬件,操作系统,编程语言,他们好像都是一种"设计",或者说更是一种行业标准规范,而这些标准规范来得是非常不容易的,因为需要大量的人力和物力去趟坑,最后爬起来的。
- 只是知道系统级编程和应用级编程。
- 只是知道系统软件就是对硬件的一个抽象,知道CPU,RAM,磁盘,网络。而网络就是一个I/O设备。
- 只是知道整个存储的架构体系。
- 只是知道问题的抽象,系统抽象和数据抽象的能力是比较重要的。总之,抽象事物的层级能力很重要。
- 只是知道计算机的基本概念。进程,线程,内存,寄存器,虚拟内存。
而这些基础的概念是怎么运作的,又是怎么影响程序的。都不理解。
知道一些计算机基本思想:
- 空间换时间。(内存和缓存的使用)
- 时间换空间。空间成为瓶颈,切分数据分批次处理。
- 分而治之。把任务切分,分开执行,既可以做到解耦,又加快了速度。
- 异步处理。消息中间件的使用。
- 并行。利用多核的优势同时处理一个业务逻辑。
- 离用户近一点儿。CDN。
- 一切可扩展。业务模块化,服务化(无状态化)。
科学
我以为小时候,说梦想要成为科学家。就明白什么是科学了。长大了,我发现对科学这个词是有一些误解的。以为动手抄写几行代码,跑成功了,就完事了。其实不是的。
反思
计算机
-
这种机器是建立在数学原理上的,是建立在已知事实上的。一般在使用或者编码过程中发现的问题,理论上都是可以解决的。至少需要培养自己这么一个信念,那怕是自己骗自己。
-
有事没事,还是应该写几行代码,好让CPU转一转,发发热,而不是一边想着变得优秀,一边又少实践,少练习,整个就是自己骗自己。还活在一种空想的状态中不能自拔,因为动手实践是一件痛苦的事情。
-
博览群书的前提是先读懂一本书,甚至这本书需要读两次。并且需要实打实地用手把书中的代码敲一次,然后写写心得体会。而不是看看理论,就开心地以为自己会了。当需要动手做出一个功能来的时候,才真的体会到理论的无力感,就是因为动手少了,实践少了。
-
把每一个小demo都敲出来,然后反复地测试,记录结果,分析记录结果的原因,最后得到一个比较好的做法。
科学
- 科学需要观察现象。做大量测试,然后记录每次测试的结果,去分析记录的数据,最后得到一个规律性的结果。这个才是科学的定义吧。
- 满足科学的条件是很辛苦的,因为很多时候,写完代码是不想做过多的测试的,累,总想着还有测试工程师呢。交给他们吧。其实错了,当真正问题发生了,就特别尴尬。所以,无论是怎样的一个小功能,自己还是需要做非常完备的测试,这个时间和精力的投入是非常有价值的。
小结
- 建立一种信念,相信计算机技术是可以达到自己预想的结果的,并且很稳定,如果实在不相信,那么请自己做大量的实验,甚至开启服务让它不知疲惫地跑上个几天几夜,看看出现了问题了吗。
- 无论怎样理论都代替不了实践。实践的越多,人与人之间的差距就会越大。
- 引用最经典的话:“我听过了,我就忘了;我看见了,我就记得了;我做过了,我就理解了”。
- 告诉自己动手实践看似慢一些,其实走的更快。