第八周读书笔记 ——编程之美
本周在陈灿同学的介绍下,我也开始看编程之美这本书了。看的不多,仍然停留在第一章。虽然这本书全书只有四章,但是它并不是一本“洛阳纸贵”的薄书。恰恰相反,在我不多的阅读页数里,蕴含的知识和感悟可不算少。
书的序言从一个很有意思的例子开始,这也是我这篇读后感想重点谈的内容。这个例子说的是一场微软的面试,被面试的女生拿到了这样一个题目:“请写出一个程序,使得CPU的占有率维持成一条50%的直线”。面对这样一个“奇葩”题目,女生当然完全无从下手,哪怕面试官(邹欣老师)把笔记本借给她,让她上网查资料,她也没有办法在45分钟之内做出这道也许她从来没有见过的题目。待到面试结束,女生非常沮丧,而面试官也同样感到遗憾,因为就因为这一个问题,他也错失了继续了解这位面试者其他方面的机会。
毫无疑问地说,站在中国学生的角度上看,这样一道怪题,可以说是谁碰上谁倒霉。不仅仅是因为课堂里不讲这种类型的题目,更是因为自己从来没有从这样的角度去重新审视“编程”。如果没有头绪,那么很可能这一次面试就这么完结了。但是,如果我们暂时先抛开面试的功利性质,仅仅来衡量这道题目本身来看,其实它是一道非常有趣的编程问题。其有趣之处,在于其不仅仅是考察做题者的编码能力,更是在考察作者是否有对编程更深层次的理解。编程,绝不仅限于课本上的题目,或是某一个具体的算法,而是与整个计算机密切相关的。对计算机系统理解的层次不同,很大程度上决定了你的编程思想的上限。
说实话,在我看到这个题目的时候,我也会一脸懵逼的看着主考官,然后完全没有任何思路,甚至连那位女生所写的源码(见图)也许都写不出来。
的的确确,这道题目本质上跟我们平常练习的题目都差不多,只不过把问题变成了与计算机系统密切相关的任务让我来解决。但是我却完全没有思路,这说明我对这个问题的背景几乎完全不了解。光从这一点上来看,我好像白学了操作系统和微机原理,因为我完全没有从计算机系统去思考问题的思维。我想,如果我面试真的遇到了这种类型的题目,那么我对编程的理解和计算机系统的理解之间的不匹配,瞬间就会暴露无遗。
为什么我无法建立起这样的思维呢?我想,这正是我需要从这本书中找到的一个很重要的答案。我一直觉得自己对计算机理解的不够深刻,哪怕我学过操作系统,学过编译原理,我对计算机科学,仍然有一种力不从心的感觉。这也许是因为我对于每一门课程的理解,都是孤立无援、相互割裂的,这让我缺乏一个真正的高层思路,一个从整体去逼近每一门课程的概观思路。随着邹欣老师一步步带我领略答案,我才发现,其实具体的每一步的知识,尤其是计算机底层的知识(如指令执行时间的计算),我大概都在课堂上听到或者看到过,可是我没有的却是从问题的表面逐步深入所需要的知识和思维。这样子的思路,恰恰体现了我过度的“黑盒”思维——把计算机看成一个输入输出的黑盒子了,却没有想过要去想办法把这个黑盒子拆开好好看看。
回过头来说,邹欣老师所说的编程之美,不仅仅在于某一个算法,不仅仅在于某到题目的答案,而在于一种思想,就好像球类运动里所说的球商,在于一种探索的过程。的的确确,如果我可以对这个“黑盒子”的工作原理了解的更为透彻,那么更加优美简洁、性能更加高效的代码,也就自然而然地诞生了。
为此,我需要再继续的努力,多学习多看书,少吃零食多睡觉,每天积累一点点,日后能成栋梁材。