V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jianzong
V2EX  ›  问与答

读算法导论

  •  
  •   jianzong · 2014-07-12 11:10:42 +08:00 · 6486 次点击
    这是一个创建于 3788 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为我是转行做程序员的,所以想自学补充一些计算机基础知识。经计算机系的同学指点以及Quora指教,发觉算法导论是本好教材。

    只是看起来实在太慢了,年初给自己定的目标是半年内至少看完一本(一共三本)。但是因为工作时间少,导致前面看的后面就忘了,对许多知识点也只是有个模糊印象。

    其实我觉得算法还挺有意思的,大家有没有更好的学习方法建议呢。
    第 1 条附言  ·  2014-07-12 11:42:58 +08:00
    另外想请问CS的同学,你们觉得上学时候学习的哪些知识对自己帮助最大呢(或者建议非CS的人必须学习的)。
    30 条回复    2014-07-12 23:45:26 +08:00
    hitigon
        1
    hitigon  
       2014-07-12 11:22:10 +08:00   ❤️ 1
    算法导论不是只有一本么……
    roamlog
        2
    roamlog  
       2014-07-12 11:24:11 +08:00   ❤️ 1
    如果想补基础的话,我更推荐去啃这本 http://book.douban.com/subject/5333562/

    数据结构看这本可能会更容易一些 http://book.douban.com/subject/6424904/
    freedomSky
        3
    freedomSky  
       2014-07-12 11:27:14 +08:00
    如果只是想短时间入门,没必要整本的看《算法导论》(当然也要看你的就业方向)。
    选择一门语言(c?python?Go?java?),写点儿简单的代码,对编程有点感性的认识,
    然后数据结构、数据库、网络、操作系统搞起,这些熟悉一下基本入门了。
    jianzong
        4
    jianzong  
    OP
       2014-07-12 11:28:08 +08:00
    @hitigon 对。。暴露了我把它分开三本了。。。
    jsonline
        5
    jsonline  
       2014-07-12 11:29:18 +08:00
    你读算法导论是想做游戏开发么?
    现在Web开发、客户端开发都用不到算法导论。
    我这周也在读这本书,我已经做 Web 开发三年了。
    我倒是推荐初学者先看看C语言、数据结构这些。
    尤其是《代码大全》《软件沉思录》这两本书,能纠正国内程序员很多错误而又根深蒂固的理念!
    fangzhzh
        6
    fangzhzh  
       2014-07-12 11:29:27 +08:00
    也许你需要一个老师....
    jianzong
        7
    jianzong  
    OP
       2014-07-12 11:30:44 +08:00
    @freedomSky 嗯现在以及从事编程工作差不多一年了,写的是iOS和ruby。上半年看了鸟哥的私房菜把linux一些基本知识看了,觉得虽然很多知识日常工作中用不到,但是却能从多个层面加深对手上问题的理解。所以力所能及情况下,我比较倾向与更多地了解一些“基础”、“底层”的东西。
    jsonline
        8
    jsonline  
       2014-07-12 11:31:55 +08:00
    学C语言能让你对「软件是如何操作内存」有一个初步的了解。随便买一本畅销的、美国人写的C语言教程就好。
    虽然我现在主要写 JS/HTML/CSS,但我依然庆幸自己学的第一门语言是 C 语言,而不是 C++/Java 之类的高级(搞基?)语言
    jianzong
        9
    jianzong  
    OP
       2014-07-12 11:32:38 +08:00
    @fangzhzh 的确,如果当初本科选读计算机就好了。。其实想过申请国外的cs master的,可是好像大部分都需要本科是计算机专业的。
    jianzong
        10
    jianzong  
    OP
       2014-07-12 11:33:28 +08:00
    @roamlog 嗯我去了解下这两本书
    jianzong
        11
    jianzong  
    OP
       2014-07-12 11:36:10 +08:00
    @jsonline 我对游戏开发不太感冒,目前我也是web开发和iOS开发,只是觉得在计算机领域要深入下去,恐怕还是要把一些基础概念啃下来。虽然目前暂时能够胜任手上工作,但是运用高级语言的时候不能了解其后的原理,实在让我心惊惊。等会将大家推荐的书都补充到主题补充里面去:)
    jianzong
        12
    jianzong  
    OP
       2014-07-12 11:38:31 +08:00
    @jsonline 兄台有没有使用过learn C the hard way?我年初的时候也想了解下C语言,好像很多人推荐这个。话说现在我已经学了几门高级语言(iOS、ruby、javascript),学C语言的话,还必要重新学C么。
    jsonline
        13
    jsonline  
       2014-07-12 11:38:32 +08:00   ❤️ 1
    @fangzhzh 其实我心里一直有一个偏见:靠老师教来学编程的人,其实是不适合做程序员的。
    当然,只是我的偏见。
    jsonline
        14
    jsonline  
       2014-07-12 11:44:27 +08:00
    @jianzong 这就是我说的问题,如果一个程序员的入门语言比较高级(你列的几个都是),但是他又没有一个学过低级语言的朋友交流的话,很容易在使用高级语言一段时间后发现后劲不足。因为他会觉得和计算机之间隔着一层东西,无法深入。
    如果你已经熟悉C语言的指针的话,其实就没比较再学一边了,继续看算法导论就很好,可以深入了解数据结构、以及一些精巧的算法。

    如果你不熟悉C语言是如何操作内存的话,你可以试着用C把几个著名的排序算法都实现一边,边做边学。

    没必要像新手一样把一本书一页一页地看完。
    jsonline
        15
    jsonline  
       2014-07-12 11:45:17 +08:00
    更正:……其实就没必要再学一遍了……
    jianzong
        16
    jianzong  
    OP
       2014-07-12 11:50:15 +08:00
    @jsonline 嗯,那看来我就不从头学了,把C的几个关键问题看一遍,算法导论慢慢看就好。谢谢你的建议:)
    hitigon
        17
    hitigon  
       2014-07-12 11:51:45 +08:00   ❤️ 2
    三大课:操作系统,编译器,网络
    外加:算法(含数据结构)
    可选:计算机原理/架构
    jsonline
        18
    jsonline  
       2014-07-12 11:52:44 +08:00
    @hitigon 操作系统方面你有什么书籍推荐?
    66450146
        19
    66450146  
       2014-07-12 11:56:38 +08:00 via Android
    算法导论是一本非常特别的书。它既是一本教材,也是一本工具书,就看你怎么读它了。

    如果你把它当作一本教材,那就像上学的时候一样,一章一章看下去(有一些可以跳过),一个概念一个概念弄明白,刷掉课后习题。这本书的课后习题很棒!

    如果你把它当作一本工具书,那就先翻一遍对整本书有个粗略的印象,然后把最近用得上的代码实现一遍保存下来待查阅就可以了。

    无论是哪一种读法,只要用心坚持,都会对自己的算法分析能力有很大的提高,这是一本好书
    allenforrest
        20
    allenforrest  
       2014-07-12 11:57:48 +08:00
    @jsonline Unix 操作系统设计
    roamlog
        22
    roamlog  
       2014-07-12 12:28:43 +08:00
    如果能把我推荐的第一本书啃完并理会的话就已经已经非常屌了,其它的书先放一放都没什么关系
    hitigon
        23
    hitigon  
       2014-07-12 12:33:02 +08:00
    @jsonline Stevens的那几本比较实用,可以配合恐龙书等OS常规书入门。
    Vernsu
        24
    Vernsu  
       2014-07-12 12:56:17 +08:00   ❤️ 1
    不要看算法导论这本大部分程序员谎称自己读过的书了。可能看过的加起来都不到完整的一个章节。
    Fzzf
        25
    Fzzf  
       2014-07-12 13:48:23 +08:00   ❤️ 1
    @jsonline 1.如果补基础,就去读 @roamlog 推荐的CSAPP,没记错的话,也是CMU的CS基础课书籍,算法导论先不用看,CS专业的都没有几个有那个基础,数学基础不够,理解不了,看不下去
    2. 你们觉得上学时候学习的哪些知识对自己帮助最大? 这些知识都是相辅相成,一环接一环,你觉得哪个可以算最大?
    -----------------------------------
    ps:1.我觉得你可以看c写的一些代码的汇编形式(结合csapp的部分章节),可以让你对程序运行有更进一步的认识。
    2 现在计算机发展,抽象包装了很多东西,要想了解,操作系统的知识也是要的
    3 程序员有很多,语言也有很多,了解编程范式,编译原理,学好c,但不要以为学好c就能其它也就能掌握的好
    4 可以先不看算法导论,不代表不用学算法,用不到算法,只会是层次太低,最起码用别人代码,也知道人家是不是厉害
    5 不要问这种问题了,网上到处都是,不要盲目听我们这些人的回答,高手基本不会在这里乱逛,他们很忙。
    yxz00
        26
    yxz00  
       2014-07-12 13:51:42 +08:00   ❤️ 1
    除了要学算法,程序员还要能明白一个高级语言到机器码的过程。就是像c这样直白的语言,你要能看到每一句都能把它翻译成汇编,看到每一个数据在内存里面是怎么摆的。
    再去学动态语言的时候了解下他的垃圾回收模型就可以了。

    学算法说白了就是研究怎么让程序跑的更快。不懂程序到汇编的过程的人做优化方面的事情是很困难的。算法解决的是数学理论的问题,了解底层原理可以解决现实中的细节问题。
    zhaohaozeng
        27
    zhaohaozeng  
       2014-07-12 16:01:24 +08:00   ❤️ 1
    不要一上来就读 CSLR 用不着的东西你死命去读很容易失去目标 也得不到快乐 尤其后面的东西你看懂了也实现不了

    不如先看点基础 比如CSAPP 和 数据结构预算法(C 语言实现) 算法和功利性强的东西 竞赛指南之类的东西 剑指 offer 之类的 (看人家怎么实现的)
    guoxx_
        28
    guoxx_  
       2014-07-12 16:32:39 +08:00   ❤️ 1
    基础看csapp不错,能够对整个框架有一个基本的认识。对哪方面有兴趣的话可以再深入具体领域学习。
    操作系统建议看<<Modern Operating Systems>>。
    <<Structure and Interpretation of Computer Programs>>强烈推荐一定要看,可以说这本书拓宽了我编程时候的思路。原来一些死记下来的算法在看完这本书之后就觉得非常自然了。

    <<算法导论>>建议用一段时间突击一下,然后配合编程珠玑,找个平台刷题就可以了。leetcode不错,可以用来训练一下思维方式。<<算法导论>>这本书主要还是用来做手册,需要用的时候查阅一下。

    另外我也是自学的计算机,最近在学习图形学相关的内容,与楼主共勉。
    jianzong
        29
    jianzong  
    OP
       2014-07-12 20:12:07 +08:00
    @guoxx_
    @zhaohaozeng
    @roamlog
    @yxz00
    感谢楼上各位,我有了比较清晰的思路了,算法导论还是会继续翻,打算去图书馆翻翻CSAPP(以及各位推荐的书),如果不错就买来看。这些书够我业余时间学习很久了:)
    guoer
        30
    guoer  
       2014-07-12 23:45:26 +08:00
    感觉数据结构最重要
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   889 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:00 · PVG 06:00 · LAX 14:00 · JFK 17:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.