对于任何编程语言,数据结构和算法对于一个程序员重要到什么程度?

2016-11-13 14:50:50 +08:00
 keikeizhang

首先表达一个态度就是我认为数据结构和算法很重要,但是有一个前提。

最近一直和朋友探讨这个问题,也咨询一些其他程序员,如果排除装 X 因素,你自己有没有为项目特地的研究一下数据结构和算法。

而设计模式中,除了工厂和单例真的很少用到其他的。

我知道 V 站都是大牛,但是到底什么程度的项目会用涉及到数据结构和算法,或者说不懂数据结构和算法的人,怎么样的一个项目就是他的技术极限。

V 站也好,知乎也好,感觉数据结构和算法放佛神话一般,可是我知道很多根本不懂数据结构和算法。

而本人大学学习的数据库原理,网络协议,操作系统,计算机原理,到先在我不知道给我带来多少的帮助,也许我还没有涉及到更高层次的编程体验,感觉自己一直在增删改差,处理一些数据,然后输出渲染就好。

总结的一个问题就是,如果不懂不学习一些计算机的基础知识,他的技术极限是什么?

14563 次点击
所在节点    程序员
58 条回复
mind3x
2016-11-13 14:54:40 +08:00
“如果不懂不学习一些计算机的基础知识”,极限是写了超过 500 行代码以后,自己便无法维护。
keikeizhang
2016-11-13 14:55:16 +08:00
楼主起码大学已经学习了,所问的这种人是大学是其他专业,也许因为考证会点 C 语言,背过一些题目,例如工商管理专业的学生,或者工作很久的会计转行程序员,去一个培训班或自己看语言文档摸索学习,貌似除了语言本身其他都不知晓太多,如果还不学习,能走到什么程序。

这样的人写得了业务代码,不懂的地方自己搜索资料也可以搞定,可以看语言文档和框架文档,但是之外的一些知识掌握起来很费力!
keikeizhang
2016-11-13 14:56:55 +08:00
@mind3x 我写过一个开源项目,用了一次位预算,然后分享给朋友,他问我这个代码什么意思,我说是异或,然后开始漫长的问答环节!
Senevan
2016-11-13 14:57:42 +08:00
功利一点讲的话,面试会挂
nagato
2016-11-13 15:04:06 +08:00
刷完一遍题以后,就像打开一个新世界。它为我面对未来可能遇见的一些问题提供完全不同的新思路。 这种新思路,是没有学习过算法,数据结构的人在 99%的情况下都无法靠他自己的脑力想出来的。有的算法真的是精妙到,就算把解法摆在你面前,都得花上一两天的时间才能理解进去。
withlqs
2016-11-13 15:05:53 +08:00
有的公司在招人的时候,喜欢问数据结构和算法的问题。往往目的不在于数据结构和算法本身,而是想筛选智商高的程序员。
keikeizhang
2016-11-13 15:08:07 +08:00
@nagato 我比较擅长把问题抽象成一个数学题,然后用公式去解决,再用语言把公司实现,虽然我不知道这算个什么。
keikeizhang
2016-11-13 15:10:55 +08:00
@Senevan 有的公司明明只是需要一个步枪,结果非要招一个榴弹炮,我感觉可以用就行,如果个人跟不上公司的发展淘汰即可,毕竟公司跟不上个人的发展,人家还会跳槽呢!
kukuwhu
2016-11-13 15:15:05 +08:00
不会数据结构,写个超市存物箱都只会用数组遍历,你觉得呢?
离开了数据库就不会对大量数据进行增删改查了
nagato
2016-11-13 15:31:48 +08:00
@withlqs
@keikeizhang
其实算法考量的不是智商,反而是基础。因为确实很多算法都是前人科学家或者做学术的人花很长时间研究出来的,常人确实不可能短时间内想的出来。 我们能做的,只能是去理解熟悉并且应用它。
SpicyCat
2016-11-13 15:41:18 +08:00
1. 面试笔试会考。计算机基础知识牢固会让你拿到好公司的 offer 。这可是真金白银。
2. 你技术方向的职业生涯的高度取决于你对计算机基础知识理解的深度。我现在工作用的技术是大学里完全没有学过的,但我不认为我大学白上了。
xiaoxiaoming
2016-11-13 15:42:36 +08:00
说实话,码了几年,算法还是比较菜的。但是常见数据结构还要多了解,程序写得好不好还是要靠它!
depress
2016-11-13 15:49:53 +08:00
我一直认为数据结构和算法不决定一个程序员有没有工作,决定的是工资上限。
afxcn
2016-11-13 16:02:33 +08:00
我认为关键在于知道与不知道的区别,如果解决某个问题,他知道有合适的数据组织方式和算法解决问题,就算他不精通这种数据结构和算法,只要用心,他也能解决得很好;但如果他根本就不知道,那就得上 v2/zh 发帖了,如果遇到合适的人指点一下,他也能解决问题;区别在于,一个需要指点,一个独立解决问题。
novaline
2016-11-13 16:05:03 +08:00
算法还是有必要学习一下的,当然,先从日常问题入手。高级别的算法,数学要求很高,无底神坑,时间精力产出比有点划不来。
snnn
2016-11-13 16:07:16 +08:00
我举个我工作中的实际例子吧:一堆整数,大约几万到几十万个,去掉重复的。这个整数是一些 key ,要发给远端的一个 Key-value store 做查询,为了节省带宽,所以先去掉重复的,再发送。
不懂数据结构与算法,也能解决这个问题,但是如果你懂,可以做的更好。

再比如搜索引擎中一个很常见的问题: phrase search 。假如已经有每个词的倒排表,想要查询某个词组是否在文档中出现,该如何?

这些问题都没有 best-answer ,正是如此,才需要解决问题的人精通数据结构与算法,以随机应变。
firebroo
2016-11-13 16:24:16 +08:00
程序的本质还是数据吧,保存数据操作数据依赖数据结构。。 linus 就一直强调设计数据结构的重要性。
ipconfiger
2016-11-13 16:39:05 +08:00
数据结构和算法不是编程的最根本的东西么?这个都要质疑的话, 可见 2 点
1. 现在的程序员对自我修养的要求有多低
2. 现在大多数公司的产品技术水准能有多低

说个亲验的例子, 之前招人面试的时候最后放了一道实际要写点代码的题, 炒鸡简单, 写个能跑的冒泡即可, 来面试的人实际能写对的不足 30%, 附加题是在这个基础上升级一下改成可以自定义排序条件的排序, 然后剩下 30%中的 2/3 又挂掉了.

所以我觉得现在市面上程序员不好招是有原因的, 写代码维生的人不少, 但是市面上合格的程序员其实并不多, 根据面试多年的体验来说, 成都 市面上 2/3 的"程序员"最好改行, 其中 1/3 甚至带毒, 我不知道那样的公司敢用, 另外 1/3 或许还有救, 然后市面上还缺 1/3 那么多的人来干活.........
changwei
2016-11-13 17:33:08 +08:00
题主这个问题很有讨论价值。

我很早以前自学 php 的时候也一直在想这个问题,明明 php 给我封装好了那么多的 api ,为什么我还要去学数据结构,算法?或者各种网络原理?

直到我现在上了一所辣鸡专科学校,学软件开发(java)之后,才深有感悟。

首先就说数据库里面的密码存储吧,如果你没有学过计算机网络,没有讲到过 hash 算法的原理,你怎么也弄不懂为什么别人的代码里面都要求你注册用户的时候要把密码 md5 一下。

或者说最近在用 redis 的时候,到底应该是用列表还是有序集合还是什么,如果你不知道他们底层用的数据结构是链表还是什么,你根本就不知道该如何选择。相应的, mysql 为什么要建索引,数据库为什么要有范式,为什么 for 循环里面写++i 比 i++速度快,这些都是因为你多多少少有了解过计算机基础,各种编译原理,数据结构算法,你才能更加方便快速的通过原因来记住这些要点,而不是死记硬背。

这就是我自学这么久以来的一些感悟。
Terry309
2016-11-13 18:31:20 +08:00
@keikeizhang 太极生两仪,两仪生四象,四象生八卦。学过数据结构就知道这活脱脱就是二进制的二叉树....😂😂😂😂

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

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

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

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

© 2021 V2EX