我眼中的编程之美 -管理资料

管理资料 时间:2019-01-01 我要投稿
【www.unjs.com - 管理资料】

    很多人都说编程的人怀揣着一个改变世界的梦想,无数的年轻人投身其中,用梦想和思考改变世界,

我眼中的编程之美

。微软亚洲研究院的八名程序员和实习生集体创作出了一本“编程之美”,用文字和符号与同道人沟通共同的编程梦想,并把它献给微软亚洲研究院成立十周年。下面,让我们来听听其中一名实习生作者所理解的编程之美。

    作者:陈远 西北工业大学硕士

    我应该算是最早知道将要编写《编程之美-微软面试指南》这本书的少数几个人之一,那时邹欣老师正在对《移山之道》进行最后的润色,而我还在学校里上研究生课程,生平第一次接受正统的计算机专业教育。当邹老师问我要不要参与编写时,做为一名自诩的“文学青年”而不是“计算机高手”,我毫不犹豫地答应了。

    我本科读的是航空学院,在大二时闲得无聊抱着玩的心态才开始真正自学编程的,然后凭着热情和兴趣就一头扎了进来。但是,我心里一直有种隐隐的痛,我可以熟练使用ASP.NET、AJAX很快地做出一个网站来,却对一些基本的数据结构、算法一知半解。唯一一次认真去读《数据结构》那本书还是保研考试前一夜临时抱佛脚,通宵看了排序、树、图之类常考的重点。虽然最后考出来成绩不错,但自己斤两多少,自己最清楚。所以实际上我对许多公司偏重算法的面试一直以来都抱有一种畏惧感和神秘感,而且非常仰慕那些受过ACM、ICPC训练过的同学,尤其是那些能很快分析出问题复杂度的人。

   

    但是毕竟我不是科班出身,而且只在学校里面做过一些简单的网站项目,这让我在很长一段时间里都抱有一种误解,即认为工程能力和算法解题能力是不相干的两回事,佐证就在于有些人可以很轻松地解出一些算法题却无法用C#写一个真正可用的软件;而像我一样的人可以轻车熟路写出一个“看上去很美”的CMS系统,但面对一些课本上的算法题时却手足无措。而且更要命的在于,简单的网站做多了,我逐渐认为做工程不需要所谓的算法,算法好只能让人拿到更高的课程分数或是竞赛奖项,而在计算机科学这一非常讲究实践的领域中,只有良好的工程能力才有办法真正把某个项目实现。于是在很长一段时间里,我对那些能通过解出很难的算法题拿到很好offer的人都比较嗤之以鼻,并对那些公司的招聘标准感到疑惑不解——明明是我的实践经验和能力上更强,凭什么不要我而是他们呢?

    我觉得自己最大的幸运在于,随后的一些经历让我很快走出了这个误区。在本科的最后一个学期,我幸运地获得了一个前往微软亚洲研究院实习的机会(面试时考了我一道智力题而不是算法题),在实习过程中,我才“真正”地做了一个软件项目,并且通过和其他实习生的交流,“耳濡目染”地看到了许多现实中的研究性软件的开发过程,这些经历带给了我许多前所未有的体验,

管理资料

我眼中的编程之美》(https://www.unjs.com)。在现实的软件开发中你会看到各种形式各异的需求,比如在一定数量的帖子中找出发帖最多的“水王”,在这之前我开发过的网站最多也不过几千条记录,所以即使我简单地重复遍历所有记录也能实现这一功能,但是当你面对的是十万甚至百万级别的现实数据时,问题就从最基本的“实现”变成了“更快更高效地实现”了!令我感到汗颜的是,我往往只能用效率最低的复杂度实现类似的功能,而面对如何更优雅更高效地实现它时,我常常感到力不从心。

    这些经历让我逐渐意识到,我所沾沾自喜的工程实践能力实际上只是一种“实现”的能力,而在解决现实世界的实际问题时,更需要的是一种“优美的实现”,因为只有在可接受的时间或空间约束条件下的实现才是真正能解决问题的答案。而如何找到所谓的“优美的实现”,一个人算法能力在这里就起到了决定性的作用。算法实际上是对现实问题的抽象,因为现实问题是复杂的,我们可以把它抽象成模型。寻找合适的数据结构表示问题模型,并通过分析,寻找到对应的解决算法,这种抽丝剥茧的思维方式将会使得开发者事半功倍。那句著名的“软件=算法+数据结构”并非空穴来风,我也从这些经历中逐渐理解了微软等公司的招聘标准实际上没有错,因为他们需要找的是能真正通过分析解决实际问题的人。如果把工程实践能力比作一辆车的轮子,那只说明这辆车具有了移动的能力,而让这辆车能又快又稳的运行,则需要算法分析能力这台强劲的发动机驱动,这两种能力是相辅相成的。

    我觉得自己比较幸运的是,在我逐渐明白了这些道理后,参与编写了《编程之美》这本书。编书的过程也是我自己动手解里面一道道有趣题目的过程,期间我对一个个优美、巧妙的解法拍案叫绝,在遇到难题或想不通的时候,就通过与其他编者一起讨论解决,这些经历都让我不断体会到“解法之美”和“问题之美”。《编程之美》的许多题目实际上都来源于现实项目中所遇到的具体问题,它们或是实际问题的简化,或是改头换面以其他有趣的场景表示出来。但是万变不离其宗,通过把问题抽象化,并运用算法分析寻找解决方案将是解题的利器。这种思考方式也是我们希望通过本书传递给读者们的。祝大家能在阅读的过程中体会到“美”的无处不在。

    相关文章阅读:

    做题的乐趣——《编程之美》

    编程之美:中国象棋将帅问题

    《编程之美》读书笔记:中国象棋将帅问题

    《编程之美》读书笔记:烙饼问题与搜索树

    《编程之美》读书笔记:一摞烙饼的排序问题

    《编程之美》一道题目的讨论——“求二进制数中1的个数”

    《编程之美》读书笔记:买书折扣问题的贪心解法

    推荐:www.msra.cn/bop

    来自:http://blog.sina.com.cn/s/blog_4caedc7a010094at.html

最新文章
推荐文章