about:blank

编程与生活一样, 都是严肃而富有艺术的
随笔 - 14, 评论 - 73, 引用 - 1

导航

关于

其实我是蜘蛛侠...
另一个blog: http://yishan.cc/blogs/nickledson

标签

每月存档

最新留言

  • re: 我眼中的编程之美
    写得真好!
    by magicboy(匿名) on 2008/3/18 15:51:40
  • re: 我眼中的编程之美
    赞一个,把算法能力和项目工程能力区别开来对待是现在很多一线开发人员的通病,我曾经也深陷这个误区不能自拔
    by Anrs(匿名) on 2008/3/13 8:35:41
  • 回复: Hard Drive
    很有同感,我喜欢!!!!!!!!!
    by borcala(匿名) on 2008/2/18 20:47:00
  • 回复: Hard Drive
    很有同感,我喜欢!
    by borcala(匿名) on 2008/2/18 20:46:00
  • 回复: Hard Drive
    看来还是有些人关注这本书的:) <br> <br>&gt;&gt;lzz, xjb: <br>我一直都是&quot;敏于思而疏于行&...
    by VincentChen(匿名) on 2008/2/15 21:19:00
  • 回复: Hard Drive
    Hard Drive = 用力开车的意思。 <br> <br>但是“用力开车”查不到这样的书。
    by ralph(匿名) on 2008/2/14 17:20:00
  • 回复: Hard Drive
    有中文版本嗎?
    by 阿牛(匿名) on 2008/2/14 16:47:00
  • 回复: Hard Drive
    有中文版本嗎?
    by rockniu(匿名) on 2008/2/14 16:47:00
  • 回复: Hard Drive
    Hard Drive 翻译成中文是什么?是硬盘么?
    by drive(匿名) on 2008/2/13 13:38:00
  • 重要但不紧急的事
    事儿真多。 有重要的事,有紧急的事,有紧急但不重要的事,也有重要但不紧急的事。(详细的论述参见 “超级高效人士的超级6+1个习惯”或者其他时间管理的书籍) 对于IT 行业的人来说,读书,是一件重要但不...
    by Joycode@Ab110.com(匿名) on 2008/2/12 13:32:00
  • 回复: Hard Drive
    那lz是如何行动的呢?
    by lzz(匿名) on 2008/2/12 12:01:00
  • 回复: Hard Drive
    成功的道理很多,但关键是如何行动
    by xjb(匿名) on 2008/2/10 16:40:00
  • 回复: Hard Drive
    深受触动 谢谢楼主!
    by helixapp(匿名) on 2008/2/9 0:20:00
  • 回复: Hard Drive
    有点意思,新年快乐……
    by false(匿名) on 2008/2/8 19:12:00
  • 回复: Hard Drive
    写得非常不错,思路不错,顶一个,新年快乐……
    by 91cn00(匿名) on 2008/2/8 18:26:00
  • 回复: Hard Drive
    路过,顶一下。再祝新年快乐。
    by 问道优酷(匿名) on 2008/2/8 15:09:00
  • 回复: 对判定网页爬虫算法的一点思考
    X为间隔数组,那么Y就是相对于开始的时间么…… <br>所以你这个意思就是点击时间和点击序号线性相关么…… <br>假如加入随机化,我很怀疑这个是否成立…… <br>...
    by Henry(匿名) on 2008/2/8 12:19:00
  • 回复: 发两个刚做的web part
    发个源码噻,大家一起学习进步
    by webpart开发者(匿名) on 2008/1/4 9:29:00
  • 回复: 发两个刚做的web part
    请教 怎样把自己做的web part 运用到网站上
    by zmn(匿名) on 2007/11/14 13:38:00
  • 回复: 发两个刚做的web part
    怎么没源码啊``给我发个好吗 <br> xhlvsxzj@163.com
    by `(匿名) on 2007/11/1 16:21:00

广告

我眼中的编程之美

[本文同时发表于微软亚洲研究院官方博客: http://msrasia.spaces.live.com/blog/cns!BB976602FC1C503F!1152.entry ]

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

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

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

我觉得我最大的幸运在于,随后的一些经历让我很快走出了这个误区。在本科的最后一个学期,我幸运地获得了一个前往微软亚洲研究院实习的机会(面试时考了我一道智力题而不是算法题J),在实习过程中,我才“真正”地做了一个软件项目,并且通过和其他实习生的交流,“耳濡目染”地看到了许多现实中的研究性软件的开发过程,这些经历带给了我许多前所未有的体验。在现实的软件开发中你会看到各种形式各异的需求,比如在一定数量的帖子中找出发帖最多的“水王”,在这之前我开发过的网站最多也不过几千条记录,所以我即使用最简单的遍历也能很快实现这一功能,但是当你面对的是十万甚至百万级别的现实数据时,问题就从最基本的“实现”变成了“更快更高效地实现”了!令我感到汗颜的是,我往往只能用效率最低的复杂度实现类似的功能,而面对如何更优雅更高效地实现它时,我常常感到力不从心。

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

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

posted on 2008-03-12 21:52:20 by cy  评论(2) 阅读(4541)

Powered by: Joycode.MVC引擎 0.5.2.0