《编程之美》大批判

有点标题党,其实只是一点点个人看法而已。

其实这本书已经看过有一阵了,不过还是想批判一下。不管宣传得如何,其实这本书说来其实还是一个面试题汇编,而且更像是给应届生看的。因为其中的题目基本都和实际应用没多大关系,就像以前数学的应用题,给一些算法问题套了一个故事而已。但是,因为这本书套了一个微软的名头,很容易让人误以为实际情况中就应该这么做。其实如果把故事给扒了也许会更好些。还有就是,与C/C++语言结合的太紧,有些问题用其他语言很容易做一个比较高效的方法。

书里的题目多数难度上也还好,多半我也能做出一个不差的解。不过有一些就偏了一点。如果没专门去研究过算法(有些题目在别的书上见过),一般人光靠脑袋估计是想不出来的。

比如第一个 cpu 占用率曲线,我知道可以用 sleep/idle 让 cpu 睡觉,但是除非对 windows 很熟悉的才可能知道得到 cpu 频率之类的函数。也许这是考找资料的能力?

比如那个双线程高效下载,这个问题的出现倒是恰好对上了 《unix编程艺术》里对 windows 的一个批评。每个应用都做了太多的事情,重复实现功能。其实这个问题的解答虽然不算很难,但是线程同步到底是个麻烦的事情。其实如果用进程来实现这个功能,一个进程负责下载,一个进程负责写文件,然后用管道连起来,就可以运用管道来实现缓冲了。系统自己会处理好同步这些事情。另外,如果系统本身提供一个下载程序,比如 wget ,就只需要调用它就可以了,完全不用费力开发,而且通常会更可靠。

那个发帖水王的问题,如果遍历一遍帖子列表,用 hash 表(MS 的 STL 里带了)来统计每个用户的发帖数,然后遍历一下这个 hash 表就可以找到发帖最多的人。复杂度也是 O(n) 。有不少语言自带了这种结构。其实这个问题的特殊之处在于要你去根据超过一半这个情况去做优化,后面的扩展问题也是类似情况。这其实是脱离实际应用的。

又比如那个找出故障机器,如果抛掉应用题的那个壳,作为考思路的题倒也不错。但在实际情况中,这种不具备扩展性的方法是不合适的。而且通常来说,服务器都是分机房分组的。一组机器就算有 10000 个,遍历整个列表也是很快的。而且这个操作一般也就是一个定时任务,其实就没啥必要去做优化。

最后引用一句话,过早优化是万恶之源。

 

7 thoughts on “《编程之美》大批判

  1. vIstaswx

    本来就是应试的。
    不过不仅是给应届生用的;有时候OI也派得上:有相当一部分经典问题在这本书上有解 :p
    打酱油路过

    Reply
  2. DigitalSonic

    这本书其实我也看了,当时为了应付算法的笔试和面试,不过后来也没派上什么大用,其中很多题目平时都不太会遇到,就当看着玩了

    Reply
  3. YQ

    其实从这样的角度来看,你说的是有道理的~
    不过,你也知道,那些题目大部分都是来面试应届生的,而面试应届生重点应该考察的是思维能力和基础。
    从我面试这么多公司的经验来看,对于挑选应届生的态度和标准,国内的公司远远比不过Google,MS之类的优秀公司,也就注定离顶级公司存在着巨大差距。

    Reply
  4. D.c.

    再引用一句话:
    Rules of Optimization: Rule 1: Don’t do it. Rule 2 (for experts only): Don’t do it yet.

    Reply
  5. 小花

    所以说…面试和很多考试一样,是很不靠谱的。它只能让人知道,考试的时候我应该这样去想,大概会符合出题者的思路…
    另外的感慨是,这本书的出版和宣传工作做的确实很不错-_-|||

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.