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

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

  •  2
     
  •   muyege · Jul 8, 2015 · 15047 views
    This topic created in 4143 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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

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

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

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

    像我们这种非科班出身的,肯定没在学校里学过这门课,不过其实自学也不难。如果英文可以的话,我强烈推荐<Algorithms>这本书(现在好像是第四版),里面每种常见的数据结构都有极为详细的介绍,配以大量的详细到令人发指的图,看起来就像单步调试一样清晰。我当初就是看的这本书入的门,另外coursera上有作者的同名课程视频教程。
    kzzhr
    kzzhr
    Jul 8, 2015
    44
    你看西游记或者金庸小说,真正叼的都是靠内功,比如太上老君的牛鼻环,比如段誉的六脉神剑。拿个大锤或者大砍刀的妖怪都是一下死一片的。
    数据结构和算法就算内功部分。
    chmlai
    chmlai
    Jul 8, 2015
    45
    不远.
    justahappy
    justahappy
    Jul 8, 2015
    46
    你去博客园看看那些写.net的, 算法功底都比较差,学历比较低,见啥喷啥,只会windows,你觉得这类人能走多远。
    zhicheng
    zhicheng
    Jul 8, 2015 via Android
    47
    能走多远取决于你想走多远,别拿不会做借口。以前混的不好的同学经常问我,不会英语和数学能不能学会编程。我就纳闷了,既然知道自己不会英语和数学,为什么不去学一下。
    tracebundy
    tracebundy
    Jul 8, 2015
    48
    刷题
    akira
    akira
    Jul 8, 2015
    49
    随便找一本大学的数据结构与算法的教材,看完就差不多了。
    muyege
    muyege
    OP
    Jul 8, 2015
    50
    @zhicheng 说的好!我检讨~
    ericls
    ericls
    Jul 8, 2015 via Android
    51
    可以边用边学啊 何必呢
    unionx
    unionx
    Jul 8, 2015
    52
    感觉只要能把代码写得比较清楚,就能走挺远的
    osto
    osto
    Jul 8, 2015
    53
    不会算法也可以走远,
    但会了会走得比较飘逸(智商优越的幻觉)
    以楼主提问的水平推测,学了对平时工作是没啥直接作用的.
    等你要面试集中学学即可.
    推荐roadmap直接刷leetcode, 不会再查书.
    等你leetcode都刷过了, 足以秒杀国内90%的程序员..
    到时候你也知道针对工作需要学到什么程度了和如何按需学习了
    chairuosen
    chairuosen
    Jul 8, 2015
    54
    你可以做一个前端
    wudikua
    wudikua
    Jul 8, 2015
    55
    刚毕业得会,以后的话就靠你做过的事来炫吧
    miss417
    miss417
    Jul 8, 2015
    56
    要想做的深入,会一点算法是必须的,懂得原理则是必须的。
    sivacohan
    sivacohan
    Jul 8, 2015 via Android
    57
    其实你翻书看看,就会发现算法没有你想的那么难。专注于一点来攻破效果很好。
    其实算法真正的难点是什么时间选择什么算法。以最简单的排序算法来举例。算法的时间复杂度其实是严重依赖于数据的有序性的,对于不同语言,稳定排序和不稳定排序的表现也不同。
    关注于问题的解决,然后再关注问题解决方法的优化,比单纯的刷题,刷算法有意义的多。
    而且,到目前而言,我遇到的问题,也没有超出排序,查找,压缩。
    worldcao
    worldcao
    Jul 8, 2015
    58
    @anjianshi 有理
    ChiangDi
    ChiangDi
    Jul 8, 2015
    59
    学一段时间就好了。
    insaneguy
    insaneguy
    Jul 8, 2015
    60
    感觉身边搞过 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
    delavior
    Jul 9, 2015
    61
    我也是,估计过不了多久就得转行了。
    wilsoncao
    wilsoncao
    Jul 9, 2015
    62
    感觉不远。。。其实我也不知道。。。
    mouhong
    mouhong
    Jul 9, 2015
    63
    @lecher 要说推荐系统,那还得说到数学,要不然对模型优化完全没概念,做推荐系统完全不懂数学就和写程序不懂算法一样。算法肯定是重要的,越是工作久了项目复杂了就越能感觉到,不过话说我算法很菜,晚上赶紧补习去T_T
    mouhong
    mouhong
    Jul 9, 2015
    64
    @justahappy
    “你去博客园看看那些写.net的, 算法功底都比较差,学历比较低,见啥喷啥,只会windows,你觉得这类人能走多远。”
    -----------------------
    不想说太多,但我真心觉得这不是一个程序员该说出来的话
    hienchu
    hienchu
    Jul 9, 2015
    65
    个人觉得,不是因为不懂这些走不远,而是因为走得不够远才不懂这些。。。
    jsyangwenjie
    jsyangwenjie
    Jul 9, 2015
    66
    你可以转产品经理啊
    bramblex
    bramblex
    Jul 9, 2015
    67
    @anjianshi 这不代表毛主席学的就比军校的少呀?
    foxkiller
    foxkiller
    Jul 9, 2015
    68
    这和下围棋不学定式是一样的。
    要么 你是天才,真下棋的时候全靠算路,每盘棋都造轮子。
    要么,你一个定式下错一盘棋都输,或者下错一个定式后面得杀大龙才能扳回来十几二十目.
    charlie21
    charlie21
    Jul 6, 2021
    69
    ydys
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4243 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 153ms · UTC 08:20 · PVG 16:20 · LAX 00:20 · JFK 03:20
    ♥ Do have faith in what you're doing.