《算法导论》(CLRS)是我经常强烈推荐的一本算法教材(这是我写的学习指南),经常被大家问,这书到底有啥用?嗯,其实我的答案因人而异的。比如......

一位大一新生问我,CLRS真的有用吗?我就问,你怎么理解有用?他说,就是以后工作了,做个码农,天天就靠它吃饭,一工作就拿起来能用,算法导论可以吗?我说:啊啊哈哈,可以的吧...... 他接着问,不对啊,都是理论在里面,怎么可能有用?我说,是的,是没啥用的...... 他就问,哪你为啥推荐,这不是...... 我差点就回答,没错,是的,我其实就是为了坑你!哈哈~

这段对话的潜台词是这样的,CLRS都是理论,好难,难而且以后可能用不上,陡峭的学习曲线,收获不大,为什么要学?而我回答的潜台词是:怕难说明你菜,不学就不学,没人逼你。我之所以推荐是因为:如果要学习算法,要入门,算法导论是不二的教材选择。如果你认为有,没关系,学去!没什么好争论的。条条大路通罗马,找自己适合的道路,不断前进。

另一个例子,是我同学,我大学本科同学。他说,说真的,我工作了20年,写了10年代码,学习算法导论这种东西,有啥用啊?只有你这种搞理论的家伙才会认为它有用吧?我说,老兄,你错了,其实算法导论对我也没啥用。他说,操!怎么可能?你还整天推荐呢......

其实,CLRS对我真没有用!为啥?很简单,CLRS里面的算法结构都超级简单:方法只有分治、贪心、动态规划,数据结构无非是列表、链表、树,最复杂也不过是棵红黑树。当真在我的科研中,随便碰一个难题,你都无法在算法导论中找到任何思路。无论椭圆曲线、环上的带误差学习还是各种多线性映射等等,都需要重头再来,重新审视,从”无“当中寻找出路。你还能指望啥?

以上这段对话中,我同学的潜台词是:CLRS太难,也许只有搞高深科研的人才能用到。我的潜台词是:CLRS只是入门书而已,离高深的东西还差个跟斗云的距离......

总结,CLRS无论是入门者还是从业者都会说它太难,或者太简单。从它的定位来看,它就是一本大一新生的算法入门书!纠结啥,看吧,学吧!至于它有啥用...... 我怎么回答得出来呢?

关于“有没有用”,想起了《通信原理》的第一节课单老师分享的乔布斯说过的一句话,图片来自课堂上的幻灯片:

当时我搜索了一下,在阮一峰博客发现了这段话:

You can't connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in future. You have to trust in something - your gut, destiny, life, karma, whatever. This approach has never let me down, and it has made all the difference in my life.

你展望人生的时候,不可能把这些点连起来;只有当你回顾人生的时候,才能发现它们之间的联系。所以你必须有信心,相信这些点总会以某种方式,对你的未来产生影响。你必须相信一些事情----你的勇气、命运、人生、缘分等等。这样做从未令我失望,反而决定了我人生中所有与众不同之处。

乔布斯在斯坦福大学毕业典礼上的演讲 - 演讲 - 阮一峰的个人网站

    3 个月 后

    大一看算法导论是不是难了点,我大三看的感觉还不错。题外话个人感觉大学多看点算法导论、caspp这种书,比看effective c++、c++沉思录这种工程经验的书要好点

      naruto 是有点难。但是,如果大三看,其实,某种意义上讲,该生在CS的领域已经没有什么可发展前途了。学了好好面试做码农吧。

      • ase 回复了此帖
        1 年 后
        3 个月 后
        2 年 后

        ase 我觉得那位先生在这句话上,有过于武断、缺少礼貌的嫌疑:

        该生在CS的领域已经没有什么可发展前途了。学了好好面试做码农吧。

        种一棵树最好的时间是十年前,其次是现在。大三看并不会阻止你什么发展...说得难听点,只是数不清书籍中的其中一本而已。

          stimw 其实也是可以理解的,国内就业环境不允许你慢条斯理地发展。当然看各自的目标了,有耐心从现在开始种一颗树的人,也不会失败到哪里去,就看有没有这个耐心了

          stimw 从逻辑的意义上你绝对是对的,而且你说的每一个词都是对,我赞同。可能,我要为自己辩解的话,只能说,我通常都比较简单粗暴,而且希望给出一种比较简单有效的回答,而不是模棱两可,怎么都行的建议。于是,大家理解我这句话的时候,加上概率就可以:

          该生在CS的领域已经大概率没有什么可发展前途了。学了好好面试做码农吧。

          另外,很多研究生也在看《算法导论》,如果冲上去就说:你没前途!这个确实不怎么好,哈哈。但是,如果从世界范围看,那么多大一新生在看《算法导论》,那么这个结论大概率是对的。正因为这个世界的好书很多很多,而且还不断在涌现,所以越迟看这本导论,意味着你离这个世界其他好书的距离越来越来大。

          可能还要解释一点的就是,什么叫“在CS领域有前途”,那就是对CS领域有创新性贡献。这个判断就不针对个人,而是一种客观衡量标准。

          ase 这个我回答不了,因为不了解你。我的很多正确的回答都是针对个人的,放在大范围上看都不怎么对。

          你不是误解我说大三看《算法导论》没前途,所以就不看?这是误解,其实,大多数人都没什么前途的,难道不对?没看过的话,还是要看啊,因为这句话的后半句是:学了好好面试做码农,所以,我那句话可能修改为:

          该生在CS的领域已经大概率没有什么可发展前途了,学了好好面试争取做一个有前途的码农吧。

          计算机领域的经典无非就是:算法导论、CSAPP、SICP、ITOC、龙书等等。比如,大三学OS,那就找本操作系统的书看起来,这就有很多选择了,我暂时不能给出比较具体的建议。论坛里面已经有很多建议了。

          随着“成为码农”这条道路越来越内卷化,很多人从大二下就开始准备找工作了。随之而来的就是看谁八股文背得多,刷题刷得猛。想要所谓的“一步一个脚印”沉淀下来学习,在某种世俗意义上成为了奢侈的事情。

          但这并不意味着从大一扎实地学是错的,具体地说,看算法导论等书的学习方式是错的。因为你没有扎实的基础,高度的自律和执行力,全面的计算机科学的认知,你背了多少,你在工作岗位上就丢了多少。至少,算法导论、CSAPP、SICP等书是我实践过的可行的道路,尽管我是一起学习里比较差的学生。你不能说它ROI很低。因为你的认知是一张白纸的时候,很多所谓的速成方法其实只是投机取巧。当然,当你某个时候决定了考研或者别的道路的时候,如何取舍,如何利用规则,做到利益最大化,是个人的事情了。

          大一开始CSAPP的ROI应该是挺高的。如果对英语不抗拒。读完后上手更加工业化的开发,不管是网络编程、系统编程还是别的什么东西,比如后台开发,都有很大的帮助。当然,什么CV、AI、密码学等领域,对数学的要求更高些。

          我在一个C++的帖子里看到这么个说法:

          急功近利的面向API编程确实能够一步到位写出看上去很现代化的程序,但它实际上是以万变应万变,所以才总会跟不上时代——因为时代总在变。
          相反,有意识的挖掘根源、学习基本原理,确实以不变应万变。再过五十年,算法数据结构以及计算机基本原理都还是大同小异。一个是学习时候付出1点精力,然后无时不刻地精力-1,-1,-1,稍有怠惰就再也跟不上了;另一个是学习付出10点精力,然后一劳永逸。

          当然,迫于各种压力,写业务堆Java这种体力劳动是我混口饭吃的工作,C++某种程度上是爱好。也只能世俗意义上感谢父母,给了我不去拿命996,好好沉淀学习的机会了。

          © 2018-2025 0xFFFF