纯技术话题:程序,是算法重要还是数据结构重要?

2020-12-06 12:02:44 +08:00
 abser

我认为这个话题有助于自己找到自己看重程序的那一部分。

7243 次点击
所在节点    程序员
73 条回复
1rror
2020-12-06 12:08:24 +08:00
这个我感觉不管说哪个更重要都有反驳的理由,两个缺一不可,讨论这个没啥意义阿。
Kiske
2020-12-06 12:11:38 +08:00
走路,是左腿重要还是右腿重要
wszgrcy
2020-12-06 12:11:52 +08:00
这个问题就像问吃早餐豆浆和油条哪个先吃一样……
aguesuka
2020-12-06 12:14:53 +08:00
算法 ∪ 数据结构 ≠ 程序
(算法 ∪ 数据结构) - 算法 ≠ 数据结构
重要 (算法) => undefine excpetion!
你问了一个不是很好的问题
lixiang2017
2020-12-06 12:15:20 +08:00
程序=算法+数据结构
liuch
2020-12-06 12:16:08 +08:00
这个问题.....
左腿重要还是右腿重要?
tiedan
2020-12-06 12:17:42 +08:00
算法+数据结构 = 程序
abser
2020-12-06 12:20:08 +08:00
abser
2020-12-06 12:21:29 +08:00
以下来自上面博客的引用:

虽然说“程序设计=算法+数据结构”,然后我实际中的体会,数据结构更加重要。

因为结构定义了一个程序的架构,结构定下来了才有具体的实现。好比盖房子,数据结构就是房子的框架结构,如果一间房子很大,而你并不清楚这个房子的结构,会在这里面迷路。而对于算法,如果属于暂时不需要深究的细节部分,可以参考前面“区分主线和支线剧情”部分,先了解其入口、出口参数以及作用即可。

Linus 说: “烂程序员关心的是代码。好程序员关心的是数据结构和它们之间的关系。”

因此,在阅读一份代码时,厘清核心的数据结构之间的关系尤其重要。这个时候,需要使用一些工具来画一下这些结构之间的关系,我的源码分析类博客中有很多这样的例子,比如《 Leveldb 代码阅读笔记》、《 Etcd 存储的实现》等等。

需要说明的是,情景分析、厘清核心数据结构这两步并没有严格的顺序关系,不见得是先做某事再做某事,而是交互进行的。

比如,你如果现在刚接手某个项目,需要简单的了解一下项目,可以先阅读代码了解都有哪些核心数据结构。理解了之后,如果不清楚某些情景下的流程,可以使用情景分析法。总而言之,交替进行直到解答你的疑问为止。
cmostuor
2020-12-06 12:38:59 +08:00
@tiedan +1
flawless
2020-12-06 12:43:23 +08:00
都不重要,业务最重要。
imn1
2020-12-06 13:21:50 +08:00
这样说吧,接触算法的程序员并不多,做业务流程的是大部分,业务流程跟数据结构是紧密相关的
做核心算法的,就算你想加到程序里面,恐怕也要申请,不是程序员本身就能决定的
程序员能直接控制算法的,多是研究人员岗位,或者独立开发

至于基础算法会不会常用,就看项目有没有各种条条框框限制了,模块内优化还是需要的
JeffGe
2020-12-06 13:33:22 +08:00
《五官争功》
fline
2020-12-06 13:52:34 +08:00
只有技术不好的人才纠结这种问题。。。
autoxbc
2020-12-06 14:03:38 +08:00
程序 = 算法 + 数据结构 ×
程序 = 算法 * 数据结构 √
charlie21
2020-12-06 14:49:44 +08:00
写到一万行代码之前根本不需要考虑这个
Jooooooooo
2020-12-06 14:50:27 +08:00
都不重要

业务最重要
zion03
2020-12-06 14:51:22 +08:00
记得之前看过 Linus 评价 Git 的数据结构很稳定,好的数据结构设计能使代码更容易维护。
在工作中遇到的实际情况也是如此,算法只是程序的一小部分,随着需求的不断更迭,程序也需要不断的重构(当然,良好的设计模式能应对大部分需求的变更)。但如果数据结构出现了无法满足新需求的情况,重构起来会非常痛苦。
zzzzzzggggggg
2020-12-06 14:53:51 +08:00
没有讨论的意义
wellsc
2020-12-06 14:55:58 +08:00
程序=数据结构+算法,缺一不可

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/732607

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX