转贴:品味编程之美
转自cychai的专栏:品味《编程之美》(原博客地址:http://blog.csdn.net/spring21st/archive/2008/09/04/2880143.aspx)
早就在CSDN上看到孟岩推荐的《编程之美——微软技术面试心得》这本书,当从吴淏手中接过来,看完序言,我就被吸引住了。
开篇的《面试杂谈》用一个小故事让我对微软、对面试有了更深的了解。面试并不一定是用难题、偏题、怪题来考到对方,笔试和面试考察的都是自己在编程、解决问题、与人合作等方面的全面能力。
网上经常流传着一些诸如“井盖为什么是圆的”、“海盗分金币”的微软的面试问题,现在再回想这些问题的时候,才明白它其实是更深层次地去引导发现问题,去分析问题和解决问题。
《编程之美》集中展示了高水平编程面试题目,它不仅仅授之以鱼,更是授之以渔。对每个问题都以启发性方式进行了权威详细的解答,并给出多种方法。和其他的讲述算法和数据结构的书籍不同,它不是讲解一些计算机和程序设计的理论知识,而是通过分析讲解实际生活中的一些问题,将其抽象为计算机程序设计问题,并找到最优算法。这种学以致用、举一反三的态度正是一个优秀的程序员所必备的。
在来微软之前,跟着老师一起做了企业的门户网站,总感觉做网站就是拖拖控件、使用提供的类,“实现”要求的功能,觉得大学里的数据结构、算法并不是那么重要。看到《编程之美》的实际的问题,想想当林春面试的时候,给我讲语言、运行时、SDK,当需要在数据量相当大的时候如何读取所需的数据,进行查询……我才明白在解决实际问题时,只有在可接受的时间或空间约束条件下的实现才是真正的“实现”,这时就充分体现出基础的重要性,这些都是建立在良好的程序基础和逻辑分析基础上的,而微软的面试也必考C语言,我想或许也是基于此。
在刚看到“让CPU占用曲线听你指挥”的题目后,看完要求,本能的反应就是先Google一下,这是一种方法,但是对于学习而言,这并不是一种最好的方法。应该首先分析一下问题的所在,这也是这本书教给我,印象最为深刻的。关键不在于答案,而在于思考问题的方法。这时就使用到了“操作系统”这门课的内容,反映到程序中,不就是进程的相关知识吗?但是如何去实现,那就要查阅相关的文档,在第二种解法中,我们就可以看到使用.net framework的 performanceCounter对象,方便的得到当前CPU的使用率,这样的学习方法,更全面的了解一个对象,以后遇到此类问题也都会有一个思路了。
在“构造数独”的问题当中,更多的使用数据结构中的内容,设计什么样的数据结构存储数独游戏中的各种元素?如何得到可行解?真的感觉“书到用时方恨少”,在学校学习数据结构的内容的时候,仅仅停留在一知半解的基础上,根本就没有做到活学活用,更别说用来解决问题。
Learn how to learn, 是我最需要的。知识本身是没有价值的,只有把知识用来解决问题才能创造价值。
书中对题目的剖析,通俗的文字,巧妙的思路,简明的算法,严谨的数学分析,让我充分感受到“编程之美”,也知道了自己距离真正的优秀的程序员还有很大的差距,正如沈向洋博士在序言所说“程序虽然难写,却很美妙”,“编程很辛苦,但是很有趣”,Nothing replaces hard work!唯有不懈的努力,才能尽情享受编程带来的快乐,享受思考的快乐。