我认为这个话题有助于自己找到自己看重程序的那一部分。
1 1rror 2020-12-06 12:08:24 +08:00 ![]() 这个我感觉不管说哪个更重要都有反驳的理由,两个缺一不可,讨论这个没啥意义阿。 |
![]() | 2 Kiske 2020-12-06 12:11:38 +08:00 ![]() 走路,是左腿重要还是右腿重要 |
3 wszgrcy 2020-12-06 12:11:52 +08:00 via Android 这个问题就像问吃早餐豆浆和油条哪个先吃一样…… |
4 aguesuka 2020-12-06 12:14:53 +08:00 via Android ![]() 算法 ∪ 数据结构 ≠ 程序 (算法 ∪ 数据结构) - 算法 ≠ 数据结构 重要 (算法) => undefine excpetion! 你问了一个不是很好的问题 |
![]() | 5 lixiang2017 2020-12-06 12:15:20 +08:00 via Android 程序=算法+数据结构 |
![]() | 6 liuch 2020-12-06 12:16:08 +08:00 这个问题..... 左腿重要还是右腿重要? |
![]() | 7 tiedan 2020-12-06 12:17:42 +08:00 算法+数据结构 = 程序 |
![]() | 8 abser OP |
![]() | 9 abser OP ![]() 以下来自上面博客的引用: 虽然说“程序设计=算法+数据结构”,然后我实际中的体会,数据结构更加重要。 因为结构定义了一个程序的架构,结构定下来了才有具体的实现。好比盖房子,数据结构就是房子的框架结构,如果一间房子很大,而你并不清楚这个房子的结构,会在这里面迷路。而对于算法,如果属于暂时不需要深究的细节部分,可以参考前面“区分主线和支线剧情”部分,先了解其入口、出口参数以及作用即可。 Linus 说: “烂程序员关心的是代码。好程序员关心的是数据结构和它们之间的关系。” 因此,在阅读一份代码时,厘清核心的数据结构之间的关系尤其重要。这个时候,需要使用一些工具来画一下这些结构之间的关系,我的源码分析类博客中有很多这样的例子,比如《 Leveldb 代码阅读笔记》、《 Etcd 存储的实现》等等。 需要说明的是,情景分析、厘清核心数据结构这两步并没有严格的顺序关系,不见得是先做某事再做某事,而是交互进行的。 比如,你如果现在刚接手某个项目,需要简单的了解一下项目,可以先阅读代码了解都有哪些核心数据结构。理解了之后,如果不清楚某些情景下的流程,可以使用情景分析法。总而言之,交替进行直到解答你的疑问为止。 |
![]() | 11 flawless 2020-12-06 12:43:23 +08:00 都不重要,业务最重要。 |
![]() | 12 imn1 2020-12-06 13:21:50 +08:00 这样说吧,接触算法的程序员并不多,做业务流程的是大部分,业务流程跟数据结构是紧密相关的 做核心算法的,就算你想加到程序里面,恐怕也要申请,不是程序员本身就能决定的 程序员能直接控制算法的,多是研究人员岗位,或者独立开发 至于基础算法会不会常用,就看项目有没有各种条条框框限制了,模块内优化还是需要的 |
13 JeffGe &nsp; 2020-12-06 13:33:22 +08:00 via Android ![]() 《五官争功》 |
![]() | 14 fline 2020-12-06 13:52:34 +08:00 ![]() 只有技术不好的人才纠结这种问题。。。 |
![]() | 15 autoxbc 2020-12-06 14:03:38 +08:00 ![]() 程序 = 算法 + 数据结构 × 程序 = 算法 * 数据结构 √ |
16 charlie21 2020-12-06 14:49:44 +08:00 via iPhone 写到一万行代码之前根本不需要考虑这个 |
17 Jooooooooo 2020-12-06 14:50:27 +08:00 都不重要 业务最重要 |
![]() | 18 zion03 2020-12-06 14:51:22 +08:00 ![]() 记得之前看过 Linus 评价 Git 的数据结构很稳定,好的数据结构设计能使代码更容易维护。 在工作中遇到的实际情况也是如此,算法只是程序的一小部分,随着需求的不断更迭,程序也需要不断的重构(当然,良好的设计模式能应对大部分需求的变更)。但如果数据结构出现了无法满足新需求的情况,重构起来会非常痛苦。 |
![]() | 19 zzzzzzggggggg 2020-12-06 14:53:51 +08:00 没有讨论的意义 |
![]() | 20 wellsc 2020-12-06 14:55:58 +08:00 程序=数据结构+算法,缺一不可 |
![]() | 21 mascteen 2020-12-06 16:19:22 +08:00 via Android ![]() 数据结构更重要,因为能用数据结构解决的问题就不要用算法解决 |
22 cccp2020 2020-12-06 16:23:06 +08:00 via iPhone ![]() 程序=复制+粘贴 |
![]() | 23 nicebird 2020-12-06 16:26:02 +08:00 考虑这种东西完全没有意义,连这两个都搞不明白,不要当程序员了。 |
![]() | 24 aonshuy 2020-12-06 18:09:42 +08:00 我认为辩证法更重要 |
![]() | 25 lijie0981 2020-12-06 18:16:43 +08:00 其实我觉得设计模式比较重要 |
![]() | 26 TangMonk 2020-12-06 18:53:16 +08:00 via iPhone 英语重要 |
![]() | 28 agagega 2020-12-06 18:59:25 +08:00 via iPhone ![]() 认真回答的话:大部分时候数据结构更重要。很多程序员可能用不到什么算法,但一定会接触到数据结构(比如三天两头就会有人吐槽的前后端接口格式!) |
![]() | 29 35aZ4P8mT576683q 2020-12-06 18:59:30 +08:00 via Android 目录结构更重要,笑 |
![]() | 30 no1xsyzy 2020-12-06 19:12:39 +08:00 ![]() 楼上认为接触不到算法的,感觉是受了狭义算法和广义算法的迷惑。 只有数据结构,没有(广义)算法,那你连操作数据结构都做不到,这个不叫程序,叫数据备份。 就是一个 strcmp 也是(广义)算法。 没有(广义)算法,你操作不了数据结构;没有数据结构,你(广义)算法操作啥? 至于业务重要,其实大部分程序员的工作不是设计业务(这是世界或者社会的活,轮不到你区区一个智人种个体),而是理解业务,再将业务转化为数据结构和算法(也就是计算机听得懂的方式)。 “业务”和“数据结构和算法”哪个重要?这个问题跟主题的问题也一样。 |
![]() | 31 ggbdpq 2020-12-06 19:17:06 +08:00 ![]() 除去算法工程师之外,月薪 2 万以下不用考虑算法,这时候数据结构的重要性就出来了;年薪三四十万的可能就接触一些简单的算法。现在的很多码农还真搞不清楚算法和数据结构,23 楼那哥们太以全概偏或者以偏概全都是片面的和不对的。 总结,面对技术来说,两者都重要;面对业务来说,数据结构更重要;面对薪资来说,老板认为哪个重要就重要。撇开上述的,当然是两者都重要,并没有最重要分区别。因为你写的每一行代码都是粗略的算法,或多或小都包含数据结构这方面的知识。 |
33 linyuxin 2020-12-06 19:51:11 +08:00 via Android 能赚钱就重要 |
34 namelosw 2020-12-06 19:53:13 +08:00 ![]() 算法是你想出来解决某些问题的一个解. 数据结构是算法用得比较多之后内化出来的一个模型. 重视数据结构的代码比不重视数据结构的代码清晰易懂好维护, 不过数据结构一般不会让你做出之前不能做到的事情. 你可以把数据结构看作某些算法的沉淀. Linus, Rob Pike 很多人都说过类似的问题, 这里引用一个 Eric Raymond: http://www.catb.org/esr/writings/taoup/html/ch01s06.html#id2878263 大意是人很难理解简单的过程逻辑, 但是却能理解很复杂的数据结构. 对比一下一个 50 行的 if else for 循环, 和一个 50 行的 class. 或者一个不太恰当的比喻: 只注重算法把逻辑全扔到 controller 里: 随着 use case 的增多代码会很难读且有很重复. 重视数据结构≈把逻辑逐渐沉淀到 model 层, 然后想要理解代码的人着重看一看 model 就很快能理解, 而维护代码的人经常能直接用上 model 里已有的很多东西. |
![]() | 35 skypyb 2020-12-06 19:54:54 +08:00 ![]() 程序 = 搜索引擎+英语 这才是对的 |
36 OneMan 2020-12-06 20:01:25 +08:00 解决问题最重要 |
![]() | 37 muzuiget 2020-12-06 20:11:45 +08:00 怎么设计数据结构也是算法的一部分,虽然一般人觉得“算法”只是代码控制流。 |
![]() | 38 rim99 2020-12-06 20:19:34 +08:00 ![]() 记得以前看过一个大牛的观点,就是说数据结构确定之后,已经决定了算法的效率的上下限。所以数据结构的设计更为重要些。 |
39 zm8m93Q1e5otOC69 2020-12-06 20:38:51 +08:00 via Android 业务写不完了 |
![]() | 40 geebos PRO 算法和数据结构两者不是孤立的,甚至我们有时候说算法就是在说算法和数据结构。恰当的算法配合恰当的数据结构就可以产生一个优秀的程序。比如 redis 里的 set 实现,hash table 的数据结构还要搭配 rehash 算法 set 才能发挥出最好的效果。个人认为把算法和数据结构拆开来比较没有意义,也许它们中某一个比另一个重要一些,但那又怎样呢,这对写出好的程序没有任何帮助。 |
![]() | 41 ZRS 2020-12-06 21:40:41 +08:00 via iPhone 这是个语文话题 和技术无关 |
![]() | 42 akira 2020-12-06 21:58:29 +08:00 数据库表结构设计 和 sql 哪个重要 |
![]() | 43 niubee1 2020-12-06 22:03:25 +08:00 互为表里,你非要拆开来说谁重要,要么是真不懂,要么是坏 |
![]() | 44 mingl0280 2020-12-06 22:20:57 +08:00 via Android 很莫名其妙的问题啊,两个哪个拆得开一样…… |
![]() | 45 chenglus 2020-12-06 22:38:15 +08:00 业务最重要+1 |
46 jones2000 2020-12-06 22:50:30 +08:00 ![]() 数据结构重要, 程序员只是算法的搬运工. |
47 pinocc012 2020-12-06 22:57:23 +08:00 如果你写一个“hollo world”,两者都不重要 |
![]() | 48 dr1q65MfKFKHnJr6 2020-12-06 23:25:28 +08:00 算法 必定要针对不同的数据结构 有不同的实现,能分开嘛? |
49 prime2015 2020-12-06 23:38:51 +08:00 都不重要,生活最重要 |
![]() | 50 raaaaaar 2020-12-06 23:49:49 +08:00 via Android ![]() 根本就分不开,耦合度那么高,我问你怎么求树的直接前驱,这是不是数据结构的基本操作?那这是不是一个算法? 我问你怎么堆排序,用到了堆,那它是不是个数据结构? 如果是狭义上的那些算法,像什么排序,查找,贪心,动态规划,这些的确业务上不需要实现,但是如果你遇到一个你要看得懂,同样的,数据结构也是一样的,你读源码,你造轮子,不一样要接触这些东西吗? |
![]() | 51 kidlj 2020-12-07 00:17:06 +08:00 via iPhone 数据结构是算法的一部分,瞎问问题。 |
52 taogen 2020-12-07 00:38:22 +08:00 via Android 活着最重要 |
![]() | 53 IvanLi127 2020-12-07 00:56:25 +08:00 via Android 角度刁钻,它俩分不开,得配套使用。 |
![]() | 54 lhx2008 2020-12-07 00:59:52 +08:00 via Android 对于业务来说,只要测试,监控,压测都过了,再烂的代码也能玩的好好的 |
![]() | 55 FS1P7dJz 2020-12-07 01:05:04 +08:00 ![]() 数据结构重要 在目前大部分商业开发种,数据结构类似楼房的地基和框架,没这个你算法再牛逼,也成不了大气候 说都重要的实际上就是再搅稀泥,来 v2 大家都知道楼主问的算法和数据结构指的是啥 |
![]() | 56 ChrisLi1018 2020-12-07 08:05:56 +08:00 via iPhone 算法难道不是用来操纵数据结构的吗? |
57 jackky365 2020-12-07 08:37:33 +08:00 很大程度上, 你使用什么样的数据结构,已经反映出了你的算法。 两者是相辅相成的。 |
58 IssacTomatoTan 2020-12-07 08:45:03 +08:00 via Android 我也觉得数据结构重点 好的结构可以更容易进行处理 而不需要过度转换 在牛逼的算法也是建立在能处理的结构上 |
59 snowydec 2020-12-07 08:51:39 +08:00 你上学的时候这两个是两本书? |
![]() | 60 freenull 2020-12-07 09:18:16 +08:00 两个难道不是一起的么 |
61 StopTheWorld 2020-12-07 09:23:42 +08:00 最让我差异的是这种问题有这么多人回复,当然我回复了也是其中一员。 |
![]() | 62 fhsan 2020-12-07 09:38:56 +08:00 讨论这个问题应该放在合适的场景 |
63 securityCoding 2020-12-07 09:54:08 +08:00 这种问题不应该被问出来的,算法和数据结构相辅相成. 数据结构为算法服务,算法作用于特定的数据结构 |
![]() | 64 hugo2lee 2020-12-07 10:04:01 +08:00 数据结构就是人肉大脑设计出来的算法,装填数据的算法 |
![]() | 65 wangchonglie 2020-12-07 11:00:27 +08:00 数据结构是算法的基础, 数据结构是算法设计出来的, 就好比血与肉, 都重要。 |
![]() | 66 abser OP @FS1P7dJz 数据结构重要 在目前大部分商业开发种,数据结构类似楼房的地基和框架,没这个你算法再牛逼,也成不了大气候 说都重要的实际上就是再搅稀泥,来 v2 大家都知道楼主问的算法和数据结构指的是啥 明白人 如果没有场景,为什么不能设立场景分析呢? 如果问题不明朗,为什么不额外探究问题的新的可选答案呢? 如果问题能够激发自己的思考,为什么不深入思考一下帮助自己进一步理解编程在做什么呢? 我是站着这样的立场向自己提出的思考,分享这个问题希望大家也能获益。 |
67 Anarchy 2020-12-07 12:13:41 +08:00 via Android 算法是一个比较大的概念,可以完全涵盖数据结构。或者问题可以转换为数据结构在算法中的地位。都单独起专有名词了当然是重要的了。 |
68 rotatefish 2020-12-07 12:20:08 +08:00 ![]() 好带哥 |
69 annielong 2020-12-07 13:58:48 +08:00 还没到能比较的层次,目前接触到最多都是 spring 框架接入数据库表自动生成一切 |
70 Lemeng 2020-12-07 14:47:38 +08:00 这个问题呢,额,宝妈,你喜欢老大还是老二只能喜欢一个 |
71 lllllIIIlll 2020-12-07 16:04:07 +08:00 算法和数据结构没办法拆开来谈吧,还没有碰到两者任一单独出现的场景。 |
![]() | 72 chengkai1853 2020-12-07 16:20:30 +08:00 总不是看你写的是哪种工程。如果是系统这种算法比较多的,肯定算法重要啊。绝大多数情况(一般的软件),都是结构比较重要。毕竟写了那么多年,二叉树啥的算法都没手动写过。 |
73 fox0001 2020-12-07 19:08:54 +08:00 via Android 需求最重要 |