• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hackzx
V2EX  ›  程序员

自学编程 9 年,想学算法,有可以推荐的书吗?

  •  
  •   hackzx ·
    Aunger-ops · May 28, 2020 · 8831 views
    This topic created in 2351 days ago, the information mentioned may be changed or developed.

    rt,题主从小学起开始自学编程,但总觉得每每会了入门了一门语言却很难有所提升,总感觉无论怎么学都跟大佬们相差了很大距离。由于没有老师,9 年来学会的东西很多,从前端到后端,从嵌入式到计算机软件,各类流行技术、框架,语言等等都有进修。

    始终觉得自己学的越多,越觉得自己菜的到家。

    今日浴室奇想,醒觉算法也许可以让我停滞的修为有所提升。但因为此前没有怎么接触了解过如何去体系化学习算法,想找些书看。有些编程基础,请问我应该找哪本书看会更适合呢?

    51 replies  •  2020-07-08 20:58:04 +08:00
    wujieyuan
    wujieyuan
    May 28, 2020
    1
    学许多语言有什么用, 关键要看自己的需求,需要什么就学什么, 啥都会一点还不如只精通一门
    hdbzsgm
    hdbzsgm
    May 28, 2020
    2
    统计学习方法 李航
    hackzx
    hackzx
    OP
    May 28, 2020
    3
    @wujieyuan 话是这样没错,就是因为总觉得在一个语言上迟迟没有进步,才跑去学另一门语言的
    em70
    em70
    May 28, 2020❤️1
    4
    提升语言能力的途径不是算法而是项目,9 年你做过多少有价值的产品? 有多少用户因你而受益?
    nguoidiqua
    nguoidiqua
    May 28, 2020❤️5
    5
    学再多都没用的,技术不是学术,得去用、去练才能掌握。只是看看原理做做题目,而没有运用到实践中去,那是不能真正融会贯通的。

    能够熟练运用书本上的知识了,才能谈提高。这个时候就需要去挑战自己能力的边界,去解决那些自己感觉棘手的问题,这个过程你可能要经过各种思考、尝试、查找资料,当你解决完一个又一个以前解决不了的难题之后,你的水平也就提高了。

    总之,要带着问题去学习,不要泛泛而学。与其考虑该看什么该学什么,不如好好想想你学编程是想干什么或是解决什么问题。找到这个目标之后,一路打过去就行了,然后再向另一个更高的问题出发。
    sudoy
    sudoy
    May 28, 2020
    6
    Learn by doing bro! 我也是自己学的,边学边应用到工作中,写出 bug 了再去 StackOverflow 搜,还可以上 V 站请教大佬
    hackzx
    hackzx
    OP
    May 28, 2020
    7
    谢谢楼上的各位前辈给的建议。

    我学编程也就是爱好吧,因为喜欢什么而去学什么。

    当然希望以后毕业也能投身到自己热爱的事业中去,我学习的方法也和 @sudoy 一样,一边做项目,一边学习,至今也做了许多项目,也都因为小和对自己写的菜的认识,也都没有开源。

    在网上也经常听说各位前辈也有一年经验干了两三年,没办法进步的事。想找算法书也是希望能有所提升
    lbfeng
    lbfeng
    May 28, 2020❤️1
    8
    coursera 上有 princeton 的算法课。看视频和里面的教材。
    hackzx
    hackzx
    OP
    May 28, 2020
    9
    其实写了那么多年代码,一直觉得自己都是在应用层逻辑上舞刀弄枪,只会用别人写好的库,遇到无解问题基本完蛋。这才是我感触最深,觉得自己与大佬相差甚远的重点。
    hackzx
    hackzx
    OP
    May 28, 2020
    10
    @lbfeng @hdbzsgm 十分感谢❤️
    zouzou
    zouzou
    May 28, 2020
    11
    编程是手艺活,系统点的话,大学里有专业叫计算机科学与技术,照着里面的课程学。
    Mistwave
    Mistwave
    May 28, 2020 via iPhone
    12
    算法 第四版 中译本也是相当好的
    就是上面所说的 Princeton 的算法课教材
    KousukeSakurako
    KousukeSakurako
    May 28, 2020 via Android
    13
    @hackzx 同感,目前正在学习数据结构和算法,以及离散数学
    sudoy
    sudoy
    May 29, 2020
    14
    @hackzx 我目前也都使用别人现成的库,尤其是 python 我想用的库都有人写好,MIT license 免费用,而且写的人水平还很高。但是你可以学一学自己造个轮子啊,找个简单但是你认为写的很好的库依葫芦画瓢
    ZztGqk
    ZztGqk
    May 29, 2020 via iPhone
    15
    看了下描述,建议先看一下 SICP,B 站有课程。
    Hieast
    Hieast
    May 29, 2020❤️6
    16
    算法就是指解决问题方法的清晰描述,我认为分布式网络的一致性算法、传输层的拥塞控制算法甚至量子计算机专用的退火算法都属于宏观上的算法,但是通常所指的算法是使用通用程序语言求解一般数学问题的方法。

    计算机解决一个应用问题的方法就是 1. 把应用问题建模成一个已有算法的数学问题 2. 实现该数学问题的算法 3. 把应用的参数传到算法里。
    业务架构师工作重点在第一步,算法工程师工作重点在第二步,开发工程师重点在第三步,这就是为什么很多人感觉自己只是调包侠。

    实话说恰饭的话用不上算法,会用顺序选择循环把参数传到合适的包里就能恰上饭了,但是既然你想学,那就说说我的看法。
    钢铁直男的学法是先学离散数学,熟悉计算机领域数学问题的描述方法,然后啃「算法导论」,能啃完前四部分应该就超过大部分人了。
    不那么头铁的方法是找资源更丰富的课程学习,我推荐学堂在线邓俊辉的数据结构,直接送上书的地址,视频、助教、示例代码、OJ 功能齐全。不要担心没有提升,我也没学完就找到工作了,后面就研究怎么恰饭了。就我观察 99% 的人是学不完的。学多少是能力,学不学就是兴趣啦,加油,祝你能打通。
    https://cloud.tsinghua.edu.cn/d/902db8d098bc4479b82e/files/?p=/%7Edeng/ds/dsacpp/dsacpp.pdf
    impl
    impl
    May 29, 2020
    17
    如果是小白入门的,可以看算法图解 grokking algorithms
    RangerWolf
    RangerWolf
    May 29, 2020❤️1
    18
    不知道楼主有系统学习过一些基础课程, 比如 数据结构、计算机系统?
    个人感觉好好学完之后,水平上升了一个层次
    PS: 我也是自学

    另外, 学完这些之后假如您还不需要立即找工作,比如正在读书。 建议找一两个你喜欢的开源项目,先看看人家的代码。如果你能有一些 commit 被合并进去, 以后找工作肯定是一大亮点
    CoderGeek
    CoderGeek
    May 29, 2020
    19
    基础在学校的时候容易学 年轻有精力 考试生啃都可以 后面就会越来越理解 2333
    HeapOverflow
    HeapOverflow
    May 29, 2020
    20
    每个语言每个框架都有做出来比较大的 project 吗?光学那么多东西又不用,学的再多有何用?
    djs
    djs
    May 29, 2020 via iPhone
    21
    楼主数学基础怎么样呢,我现在在看程序员的数学,补充一些然后再学习算法之类的
    findex
    findex
    May 29, 2020 via iPhone
    22
    编程是一辈子的事。算法其实都不难。关键在于理解。
    自学一下计算机原理。然后按照计算机的思路,用数学逻辑方法找最优解的时候就能体现出算法的魅力。不外乎编程语言。
    有理论基础,学算法的时候会快很多。

    Python 是节约时间,快速解决问题。这是一个解决问题的工程师思路。更好的解决问题,优化算法等,这是另一个思路。

    计算机科学才刚刚开始,感觉永远学不完。我也是自学而来的。不要有太大心理压力。也别被什么老板吹牛而被动敬畏。回过头来看看,那些都是毛毛雨。真正厉害的,不用吹,看看历史对他们的评价比自吹自擂更让人信服。
    ranio
    ranio
    May 29, 2020
    23
    语言是相通的,算法是灵魂。伯克利,斯坦福,MIT 的算法课找个对胃口的刷。
    hehheh
    hehheh
    May 29, 2020
    24
    算法做做 leetcode 其实挺好的,做 300,400 道,把最起码的二叉树,图搜索,dfs,bfs,stack 弄清楚其实就够了。我觉得对我的提升挺大的
    bojue
    bojue
    May 29, 2020 via iPhone
    25
    计算机基础学科的学习:现代操作系统,算法和数据结构,编译原理,网络
    wuweidong0107
    wuweidong0107
    May 29, 2020
    26
    跟算法一点关系都没,你的问题是你没有也不知道怎么建立知识体系。
    hanxiV2EX
    hanxiV2EX
    May 29, 2020 via iPad
    27
    学数学吧
    MrCurly
    MrCurly
    May 29, 2020 via iPhone
    28
    老哥大学还没毕业?
    pkm
    pkm
    May 29, 2020 via iPhone
    30
    《算法竞赛入门经典》《算法竞赛入门经典训练指南》《挑战程序设计竞赛》 配合 codeforces.com 食用
    busfool
    busfool
    May 29, 2020 via iPhone
    31
    找个老师教教吧 然后找份工作
    ifxo
    ifxo
    May 29, 2020
    32
    学算法需要精通数学吧,不过觉得很难的,不用学那么多语言,就学一门,各个方面都精通了,怎么可能越学越菜呢,多跟大佬交流下
    monkeyWie
    monkeyWie
    May 29, 2020
    33
    直接刷 LeetCode 吧
    gaigechunfeng
    gaigechunfeng
    May 29, 2020
    34
    绝对是人才!我虽然本科,研究生都是计算机专业。但真正开始写代码都读研了。

    非常后悔大学 4 年都浪费,没有好好学习。

    楼主这么早就学习编程,而且还很喜欢这行的话,绝对未来可期。
    Ariver
    Ariver
    May 29, 2020
    35
    直接刷 leetcode.
    hackzx
    hackzx
    OP
    May 29, 2020
    36
    十分感谢楼上前辈们的建议,我想我也有了大致的认识。❤️
    hackzx
    hackzx
    OP
    May 29, 2020
    37
    目前大一,电子科学与技术专业。下星期三就参加转计算机科学与技术专业考试。

    请问有转专业成功经验的前辈们指点些建议吗?
    Coverlove
    Coverlove
    May 29, 2020❤️1
    38
    lz 可以啊,年纪轻轻就有 9 年编程学习经验了。我虽然是计算机专业出身,但真正走向编程之路是大三下的实习阶段,现在有些后悔了。后生可畏啊
    24bit
    24bit
    May 29, 2020
    39
    数据结构与算法分析 - xx 语言描述
    wysnylc
    wysnylc
    May 29, 2020
    40
    下次我就简历加上十年编程经验
    namelosw
    namelosw
    May 29, 2020
    41
    大部分工作中其实很少用到算法,如果用的话一般也只是过度设计而已。

    找了很多算法入门的资料,其实没有太好的,只能反反复复看一看,最后从适合自己,或者自己感兴趣的入手。

    基本上分几类,严肃点的就是 CLRS,如果 CLRS 太复杂就从 Princeton 开始。另外 Amazon 前 CTO 写比较有意思,书名好像也叫算法导论,不过好像有人也翻译成引论,那本书主要专注于数学归纳法相关的算法,可以解决很多问题。
    还有就是课,比如 MIT 的 OCW 有 Erik Demaine 教的算法和高级算法和数据结构感觉不错。
    还有就是科普向的书,比如上面说的 Grokking algorithms,可以入门试试。
    还有就是一些旁门左道,比如我最近发现一本 Common Lisp 的算法书,打算试试。
    最后就是一些各领域的不同风格算法,比如分布式算法,比如 persistence data structure 的算法 - CMU 有一本 Okasaki 之类额。
    LoNeFong
    LoNeFong
    May 29, 2020
    42
    看山是山,看山不是山,看山是山, 反复横跳,很正常的
    keshawnvan
    keshawnvan
    May 29, 2020
    43
    极客时间上的数据结构与算法之美
    121121121
    121121121
    May 29, 2020
    44
    刷 acm 的题目
    HerrDu
    HerrDu
    May 29, 2020
    45
    编程学明白了?
    HerrDu
    HerrDu
    May 29, 2020
    46
    高纳德 出过一个系列的书,你先慢慢看着。
    ErgeAIA
    ErgeAIA
    May 29, 2020
    47
    兄弟,非得干这一行吗?
    irgil
    irgil
    May 29, 2020❤️1
    48
    我只推荐我看过的,
    先看算法第四版,有公开课。
    然后看 csapp,也有公开课。
    两个都要做课后作业 。
    然后学习 mit 6.828 。

    其次你还是学生,好好学线性代数、微积分、运筹学,很有帮助。
    ChanKc
    ChanKc
    May 30, 2020 via Android❤️1
    49
    Introduction to Algorithm 。不过这个的前置课程( prerequisites )是数据结构,线性代数(有涉及矩阵乘法)和高等数学(有涉及到无穷级数)
    dearmymy
    dearmymy
    May 30, 2020❤️1
    50
    @hackzx
    你在大学那就可以慢慢学了,算法前置技能太多了。数学,数据结构都是。建议你算法放到后面几年在动。
    geemaple
    geemaple
    Jul 8, 2020
    51
    《算法技术手册》/ Algorithms in a Nutshell

    《 STL 源码剖析》/ The Annotated STL Sources

    《算法心得:高效算法的奥秘》/ Hacker's Delight, 2nd Edition

    《数学之美》

    《编程之美 : 微软技术面试心得》
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2586 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 128ms · UTC 15:12 · PVG 23:12 · LAX 07:12 · JFK 10:12
    ♥ Do have faith in what you're doing.