不会算法不懂数据结构不明原理的程序员能走多远? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
muyege
V2EX    程序员

不会算法不懂数据结构不明原理的程序员能走多远?

  •  2
     
  •   muyege 2015-07-08 10:07:56 +08:00 14178 次点击
    这是一个创建于 3757 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT,大专没教数据结构,算法也没学过,工作3年了,现在学还来得及不?有学习路线推荐吗?

    第 1 条附言    2015-07-08 17:47:51 +08:00
    多谢大家的回答,但是我还是没有得到我的答案,学习数据机构和算法应该是走一个什么样子的路线呢?或者再具体点应该看什么书呢?或者看什么代码呢?网上有人说看谭浩强,但是又有人说他连代码都不会写,请学习过的筒子给些意见或建议,不胜感激
    69 条回复    2021-07-06 00:16:25 +08:00
    bengol
        1
    bengol  
       2015-07-08 10:09:32 +08:00 via Android
    转管理,管懂算法的码农
    66beta
        2
    66beta  
       2015-07-08 10:12:45 +08:00
    谁跟你说学过了就一定能记住,嘎嘎嘎...
    lzsadam
        3
    lzsadam  
       2015-07-08 10:22:23 +08:00
    那就得看其它方面的能力了~
    Exin
        4
    Exin  
       2015-07-08 10:24:13 +08:00
    就数据结构这方面的教材来说,其实也没多少内容,看个一个月就摸透了。但是之后记不记得住另说,我是忘得差不多了
    hahastudio
        5
    hahastudio  
       2015-07-08 10:26:02 +08:00
    算上昨天那个不感冒 js 的前端,真是感叹是不是现在程序员门槛太低了
    以后是不是会拍脑门想需求的就叫程序员了
    hahasong
        6
    hahasong  
       2015-07-08 10:29:21 +08:00
    虽然没学,但是你平时在开发中基本都用过了,只是你没发现而已。楼上说的对,学过的也不一定记住了
    Mac
        7
    Mac  
       2015-07-08 10:55:10 +08:00
    ctrl-c ctrl-v会就可以了
    loolac
        8
    loolac  
       2015-07-08 11:00:32 +08:00
    走着走着就会了
    neo2015
        9
    neo2015  
       2015-07-08 11:01:37 +08:00
    我们只是GitHub的搬运工
    rock_cloud
        10
    rock_cloud  
       2015-07-08 11:10:20 +08:00
    @hahastudio 门槛低很正常,本来工具和语言的发展就是降低门槛的,比如现在程序员已经基本不需要学习很复杂的基础知识就可以完成大部分需求,说不定以后真的就是提需求就自动出程序呢(参考拖控件的VB)。
    当然有深厚功底的程序员的工资比普通程序员的多几个零就是另外一码事了~~
    cz208209
        11
    cz208209  
       2015-07-08 11:14:16 +08:00
    @hahastudio 有同感啊
    F281M6Dh8DXpD1g2
        12
    F281M6Dh8DXpD1g2  
       2015-07-08 11:36:12 +08:00
    @hahastudio 如果你还在打孔编程的话,倒是可以感慨下,如果不是我就呵呵了
    hahastudio
        13
    hahastudio  
       2015-07-08 12:15:27 +08:00
    @liprais
    不是,你看最近的这些问题
    写程序不学数据结构和算法
    做前端不想写 js

    再发展下去就是当程序员不想写程序了
    monnand
        14
    monnand  
       2015-07-08 12:15:41 +08:00
    其实能走很远,只不过是拿着多少钱走,在什么环境下走的问题。
    HanSonJ
        15
    HanSonJ  
       2015-07-08 12:55:51 +08:00
    我是这样学习的,重新把所有数据结构的代码都打一遍,理解它的思想

    详情可以看我的github, https://github.com/Hanccc/Data-Structure
    OceanOverflow
        16
    OceanOverflow  
       2015-07-08 12:57:14 +08:00
    即使算法数据结构很差也不意味着不能写出好的程序啊,学好这些只能多造几个轮子罢了。上回homebrew的作者不就正是可以说明这件事情吗。
    ddou
        17
    ddou  
       2015-07-08 13:01:19 +08:00
    可以走的足够远(时间足够长),但是不会足够高
    F281M6Dh8DXpD1g2
        18
    F281M6Dh8DXpD1g2  
       2015-07-08 13:03:58 +08:00
    @hahastudio
    人类是站在前人的肩膀上的,现在你还要打孔么还要手写汇编么还要用磁带文件系统么
    如果他写的程序能够完成他的功能的话,"写程序不学数据结构和算法"又有什么关系呢。
    程序是写来解决问题的,其他都不重要。
    dorentus
        19
    dorentus  
       2015-07-08 13:08:45 +08:00   1
    不学数据结构和算法怎么能用好别人造的轮子?
    OceanOverflow
        20
    OceanOverflow  
       2015-07-08 13:14:55 +08:00
    @dorentus 学好英语看人家写的文档啊。: ]
    sneezry
        21
    sneezry  
       2015-07-08 13:16:45 +08:00 via iPhone   1
    闻道有先后,啥时候都不晚
    Andiry
        22
    Andiry  
       2015-07-08 13:16:51 +08:00
    @liprais 嗯,程序能够完成功能就行,哪怕比别人慢几个数量级也没关系
    F281M6Dh8DXpD1g2
        23
    F281M6Dh8DXpD1g2  
       2015-07-08 13:18:45 +08:00
    @Andiry 偷换概念了吧
    “解决问题“ != "程序能够完成功能"
    hahastudio
        24
    hahastudio  
       2015-07-08 13:18:52 +08:00
    @liprais 话是没错,但那是对普通用户啊
    总用别人包装好的魔法盒子,渐渐地你就不再是魔法师了,就应该归到麻瓜那一列了
    F281M6Dh8DXpD1g2
        25
    F281M6Dh8DXpD1g2  
       2015-07-08 13:23:50 +08:00
    @hahastudio 每个人都在用别人包装好的魔法盒子:-)
    Andiry
        26
    Andiry  
       2015-07-08 13:28:32 +08:00
    @liprais “如果他写的程序能够完成他的功能的话,"写程序不学数据结构和算法"又有什么关系呢。”
    原话还给你
    Email
        27
    Email  
       2015-07-08 13:37:15 +08:00
    感觉软件工程的思维还有做事的态度也很重要.

    打比方说一个功能,
    我们不管这个人基础如何会不会算法会不会数据结构.
    他完成了,并且对自己写的功能有充分的测试再交付.省心
    当然这个测试就看个人的能力了,到底是通过代码来覆盖测试用例.
    还是自己手动地去把该功能的种种分支都测试完毕了.

    总之一句话, 这个人靠谱. 很重要对吧.

    其实没什么考究的, 作为程序员,还是要会算法更吃香.
    如果说算法用不上, 说明你还没到达一定的高度 对吧.
    bk201
        28
    bk201  
       2015-07-08 13:38:40 +08:00   3
    先写程序再去学这些东西,会有种豁然开朗的感觉。先学这些东西再编程很容易陷进去出不来。
    CommandZi
        29
    CommandZi  
       2015-07-08 13:47:53 +08:00
    @sneezry 赞,别人起码有学习这个的意识和态度。而不应该像某些人一样地冷嘲热讽。
    sankooc
        30
    sankooc  
       2015-07-08 14:14:05 +08:00
    其实只需要知道有这么个东西就行 具体的即使学了工作上不用的话 也会忘的
    beimenjun
        31
    beimenjun  
    PRO
       2015-07-08 14:17:54 +08:00   1
    其实数据结构和算法,是很有意思的一个地方。仔细理解不一定很快能体现在工资里,但是对于不少人而言,数据结构和算法很可能是一个人真正热爱编程或者“真正认为编程其实是一件很Cool的事情”的起始。

    因为这其实是很具有美感的一类东西。
    paulagent
        32
    paulagent  
       2015-07-08 14:20:20 +08:00
    说不准未来有一天,真有人造个机器人,写程序,程序员的工作就变成流水线工人,专门监视机器人了
    caiya21
        33
    caiya21  
       2015-07-08 14:35:14 +08:00
    这个还是要学习下把
    lecher
        34
    lecher  
       2015-07-08 14:43:34 +08:00   5
    如果不会算法不懂数据结构,永远只能做拿到架构、明确的需求、基本的实现步骤(甚至伪代码)之后,去写实现代码这个层次的工作。

    比如说架构一下项目结构,分析一下系统瓶颈,优化功能提高效率这类附加值更高的岗位,是没机会去做的。因为没有算法和数据结构的功底,根本不能去分析出问题的原因,也没办法去做优化的工作。

    大家都说epoll模型比selector模型处理网络请求效率高,为什么?
    如果系统某个功能很忙,要不要用请求队列,怎么计算会有多大的延时,数据一致性怎么解决?
    大家都说nosql很快,为什么?在什么地方使用nosql合适?用了的话可以节省多少处理时间,减轻多少负载?
    要做一个推荐系统,要怎么处理数据?会产生多大的负载?计划任务需要间隔多长时间?

    如果上面的问题没有能力分析,那下面的问题呢?

    要做一个逆序列表的事情,用什么方式效率和健壮性比较好,为什么?
    如果一个列表有多个数据源的数据需要组合,用什么方式合并成一个列表显示比较好?
    如果有一组图片要加载,怎么实现优先加载最后查看的图片?
    lecher
        35
    lecher  
       2015-07-08 14:54:25 +08:00   6
    会算法和数据结构,不见得在工作中有多么突出的表现。也不见得工资会高多少。
    但是真要遇到了问题,算法和数据结构的思想,绝对可以帮助我们有效的分析问题、量化数据。因为算法和数据结构就是计算机运行的思维方式,如果都不会,还怎么去分析?靠看别人写的报告?还是靠蒙?
    学完了不用,可能会生疏,但是只要认真的去思考过,思路是不可能忘的。
    学过的知识用不上只能说明岗位需求没有用到,不代表它没有用。高等数学的很多东西,大部分人是够不上它的运用门槛的,但是实际分析问题的时候,会借鉴到很多当初学习过程所使用的思路去分析问题。这些思路才是真正的知识财富。
    fuxiaohei
        36
    fuxiaohei  
       2015-07-08 15:00:45 +08:00
    学数据结构这些更像练内功
    不过,一般情况下拼招式就可以分胜负
    mougua
        37
    mougua  
       2015-07-08 15:09:29 +08:00
    同意 28楼 的,先写,多写,再去补内功
    zonghua
        38
    zonghua  
       2015-07-08 16:55:56 +08:00
    ( - ) 写一个类去列出文件夹的所有文件与目录,发现这个就是树结构的遍历。
    zonghua
        39
    zonghua  
       2015-07-08 16:56:38 +08:00
    @hahasong 对啊,就像我楼上回答的,我是菜鸟。
    anjianshi
        40
    anjianshi  
       2015-07-08 17:46:11 +08:00
    我就想说,那么多军校出来的,最后谁也没打赢毛主席
    muyege
        41
    muyege  
    OP
       2015-07-08 17:48:52 +08:00
    @anjianshi 这个
    beimenjun
        42
    beimenjun  
    PRO
       2015-07-08 17:57:01 +08:00
    看了更新,天了噜,学习数据结构看谭浩强。

    另外楼主如果觉得@anjianshi 的这个言论很有道理的,不多说了,只能祝顺利了。
    hitmanx
        43
    hitmanx  
       2015-07-08 18:25:06 +08:00
    数据结构和算法我感觉还是很重要的,倒不一定说要自己实现一个红黑树之类的,而是对于它基本有个概念。举个简单的例子,比如什么场景下适合用std::map,什么情况下用std::tr1::unordered_map,两者背后的数据结构分别是什么,常见操作的复杂度分别是多少,占用空间又是多少。如果应用得当,在一些场景下,程序效率提高几十倍都是很有可能的。

    像我们这种非科班出身的,肯定没在学校里学过这门课,不过其实自学也不难。如果英文可以的话,我强烈推荐<Algorithms>这本书(现在好像是第四版),里面每种常见的数据结构都有极为详细的介绍,配以大量的详细到令人发指的图,看起来就像单步调试一样清晰。我当初就是看的这本书入的门,另外coursera上有作者的同名课程视频教程。
    kzzhr
        44
    kzzhr  
       2015-07-08 18:27:49 +08:00
    你看西游记或者金庸小说,真正叼的都是靠内功,比如太上老君的牛鼻环,比如段誉的六脉神剑。拿个大锤或者大砍刀的妖怪都是一下死一片的。
    数据结构和算法就算内功部分。
    chmlai
        45
    chmlai  
       2015-07-08 18:31:25 +08:00
    不远.
    justahappy
        46
    justahappy  
       2015-07-08 18:36:51 +08:00
    你去博客园看看那些写.net的, 算法功底都比较差,学历比较低,见啥喷啥,只会windows,你觉得这类人能走多远。
    zhicheng
        47
    zhicheng  
       2015-07-08 19:45:13 +08:00 via Android
    能走多远取决于你想走多远,别拿不会做借口。以前混的不好的同学经常问我,不会英语和数学能不能学会编程。我就纳闷了,既然知道自己不会英语和数学,为什么不去学一下。
    tracebundy
        48
    tracebundy  
       2015-07-08 19:57:40 +08:00
    刷题
    akira
        49
    akira  
       2015-07-08 20:02:54 +08:00
    随便找一本大学的数据结构与算法的教材,看完就差不多了。
    muyege
        50
    muyege  
    OP
       2015-07-08 20:14:39 +08:00
    @zhicheng 说的好!我检讨~
    ericls
        51
    ericls  
       2015-07-08 20:26:22 +08:00 via Android
    可以边用边学啊 何必呢
    unionx
        52
    unionx  
       2015-07-08 20:59:46 +08:00
    感觉只要能把代码写得比较清楚,就能走挺远的
    osto
        53
    osto  
       2015-07-08 22:33:42 +08:00
    不会算法也可以走远,
    但会了会走得比较飘逸(智商优越的幻觉)
    以楼主提问的水平推测,学了对平时工作是没啥直接作用的.
    等你要面试集中学学即可.
    推荐roadmap直接刷leetcode, 不会再查书.
    等你leetcode都刷过了, 足以秒杀国内90%的程序员..
    到时候你也知道针对工作需要学到什么程度了和如何按需学习了
    chairuosen
        54
    chairuosen  
       2015-07-08 22:48:35 +08:00
    你可以做一个前端
    wudikua
        55
    wudikua  
       2015-07-08 22:52:43 +08:00
    刚毕业得会,以后的话就靠你做过的事来炫吧
    miss417
        56
    miss417  
       2015-07-08 23:02:41 +08:00
    要想做的深入,会一点算法是必须的,懂得原理则是必须的。
    sivacohan
        57
    sivacohan  
    PRO
       2015-07-08 23:25:14 +08:00 via Android
    其实你翻书看看,就会发现算法没有你想的那么难。专注于一点来攻破效果很好。
    其实算法真正的难点是什么时间选择什么算法。以最简单的排序算法来举例。算法的时间复杂度其实是严重依赖于数据的有序性的,对于不同语言,稳定排序和不稳定排序的表现也不同。
    关注于问题的解决,然后再关注问题解决方法的优化,比单纯的刷题,刷算法有意义的多。
    而且,到目前而言,我遇到的问题,也没有超出排序,查找,压缩。
    worldcao
        58
    worldcao  
       2015-07-08 23:25:56 +08:00
    @anjianshi 有理
    ChiangDi
        59
    ChiangDi  
       2015-07-08 23:28:26 +08:00
    学一段时间就好了。
    insaneguy
        60
    insaneguy  
       2015-07-08 23:32:41 +08:00
    感觉身边搞过 ACM-ICPC 的人学东西都很快,而且逻辑分析能力都很强,这应该和他们进行过的算法训练有关吧。

    我是大二下学期才算正式接触编程的(非计算机专业),当时跟一个老师做C++相关的项目,连栈(stack)是什么都不知道,也不知道时间复杂度、空间复杂度为何物,经常想到哪写到哪,结果就是写出来的东西乱七八糟,根本完不成老师布置的任务。大三选修了计算机学院的“数据结构基础”课程,发现对提高自己编程能力很有帮助。大部分时候虽然不会自己去实现数据结构和算法,但清楚什么场景下应该选取哪种数据结构和算法才能更好地解决问题。

    英文好的话直接去 coursera 上课,配合<Algorithms>这本书一起看:
    https://www.coursera.org/course/algs4partI
    https://www.coursera.org/course/algs4partII

    中文的资源我看过计蒜客的<程序设计竞赛入门>(http://www.jisuanke.com/course/8),讲解+练习的形式,比较基础,但感觉入门很合适的。
    delavior
        61
    delavior  
       2015-07-09 08:08:20 +08:00
    我也是,估计过不了多久就得转行了。
    wilsoncao
        62
    wilsoncao  
       2015-07-09 09:14:53 +08:00
    感觉不远。。。其实我也不知道。。。
    mouhong
        63
    mouhong  
       2015-07-09 09:31:21 +08:00
    @lecher 要说推荐系统,那还得说到数学,要不然对模型优化完全没概念,做推荐系统完全不懂数学就和写程序不懂算法一样。算法肯定是重要的,越是工作久了项目复杂了就越能感觉到,不过话说我算法很菜,晚上赶紧补习去T_T
    mouhong
        64
    mouhong  
       2015-07-09 09:34:07 +08:00
    @justahappy
    “你去博客园看看那些写.net的, 算法功底都比较差,学历比较低,见啥喷啥,只会windows,你觉得这类人能走多远。”
    -----------------------
    不想说太多,但我真心觉得这不是一个程序员该说出来的话
    hienchu
        65
    hienchu  
       2015-07-09 11:25:45 +08:00
    个人觉得,不是因为不懂这些走不远,而是因为走得不够远才不懂这些。。。
    jsyangwenjie
        66
    jsyangwenjie  
       2015-07-09 15:12:38 +08:00
    你可以转产品经理啊
    bramblex
        67
    bramblex  
       2015-07-09 15:48:11 +08:00
    @anjianshi 这不代表毛主席学的就比军校的少呀?
    foxkiller
        68
    foxkiller  
       2015-07-09 22:04:29 +08:00
    这和下围棋不学定式是一样的。
    要么 你是天才,真下棋的时候全靠算路,每盘棋都造轮子。
    要么,你一个定式下错一盘棋都输,或者下错一个定式后面得杀大龙才能扳回来十几二十目.
    charlie21
        69
    charlie21  
       2021-07-06 00:16:25 +08:00
    ydys
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2356 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 67ms UTC 15:52 PVG 23:52 LAX 08:52 JFK 11:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86