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

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

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

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

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

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

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

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

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

14564 次点击
所在节点    程序员
58 条回复
huntzhan
2016-11-14 02:37:04 +08:00
我觉得很多人都有个错觉:虽然我算法跟数据结构不熟,不擅长做题,但是我还是可以拿到好 offer 从事有前途的开发工作。
xcodebuild
2016-11-14 08:08:32 +08:00
面试会挂 2333
cs419
2016-11-14 08:56:40 +08:00
仁者见仁,智者见智。 有人开车只是代步,有人开车超越极限。仅仅写个刷票的脚本,还是在写 Linux 内核呢。算法自然是很有用的,但是分人,工作几年了不会用 Linux 也是大有人在。
nicegoing
2016-11-14 08:58:23 +08:00
@isbase homebrew 作者的态度问题,知道 google 会面试算法,连二叉树都不复习下,压根不重视这次面试机会。
zacard
2016-11-14 08:59:57 +08:00
非常重要,可能一开始你没有意识到。
ilaipi
2016-11-14 09:35:25 +08:00
错别字实在太多了
Email
2016-11-14 10:08:50 +08:00
@withlqs 游戏打的特别好, 能参加国内顶尖赛事 算智商高?
msg7086
2016-11-14 10:40:31 +08:00
设计模式本来就是从实际的代码结构当中提炼出来的。
就算你没有刻意去用设计模式,但是如果你写的代码维护性足够好,你会发现代码里或多或少会用到那些你甚至都没听说过名字的设计模式。
nbabook
2016-11-14 11:11:34 +08:00
为什么现在的程序员越来越觉得算法的意义和用处不大,是因为现在的框架大部分时候已经将很多算法进行了封装,你直接调用就行了,而不需要关注底层的实现,但是你程序中的每一次排序、每一个查找背后都隐藏着算法的精华。
因此,当你享用前人算法成果的时候,不要摆出一副算法无用的态度,嘲笑哪些辛苦研究算法的人。
几年前有个话题,是讨论为什么国内甚少出现大牛级的人物,就是认为国内技术人员缺乏对底层技术的深入研究,由于框架使用过多,所以导致国内技术圈出现一种思潮:底层技术(包括算法与数据结构、组成原理、编译原理甚至数学)无用论。然而,如果纵观国外技术大牛的技术发展史并打开各类框架的源码,才会发现其中所包含的大量所谓的『无用技术』的使用。
所以,如果你只是甘于当一位『技术使用者』,你可以无视算法这类日常看似无用的技术,但如果你对自己的技术有所追求,请拿起书好好学习。
YvesX
2016-11-14 11:17:36 +08:00
不是神话,重要程度因人而异。
如果想要精进,学好总是没有错的。
但精进并不总是好的。
coderluan
2016-11-14 11:44:51 +08:00
个人认为程序员的出路大概分三个方向
算法之类的专业基础不好的话
技术方向基本走不下去。
行业方向走不到前边去。
管理方向并不会有太大影响。
上边的回答基本都是从技术方向考虑的。
当然大部分程序员确实没有管理能力,如果能在一个行业坚持下去,自己不擅长就去用擅长的人做好的,那样工作也不会有太大问题。最可怕的就是专业基础不好还各个行业乱换的人。
jswh
2016-11-14 12:11:18 +08:00
把程序员比作传统工匠的话,比如木匠?那么编程语言、各种库就是你刨子、凿子,工具掌握的好,可以保证做出东西,掌握得多可以做出更多的东西。但要有美感的东西、甚至艺术品,则要求必要的审美、造型的原理,数据结构之类的知识就是编程的审美、原理。工具决定能力的下线,而审美决定上线。
CS 的学校教育像学院派的,教的是审美,附带的教一些工具,而就业市场更多的职位是要求会工具。所以专业出身的人就很困惑,有点像美院油画系毕业去画插画的感觉。而我们这种野路子出身的,则是先熟练了工具,再努力提高艺术修养。
v9ox
2016-11-14 12:14:52 +08:00
你从事的工作涉及到算法 /数据结构, 就有用. 涉及不到, 就没有.
jswh
2016-11-14 12:20:03 +08:00
@jswh 而谁能走的更远则取决于谁能更好的有工具把自己的审美表达出来。至于只研究审美的那是 XX 家的事,而不是工匠的事。我一直觉得,所谓程序员不过就是信息时代的工匠而已。
keikeizhang
2016-11-14 13:26:42 +08:00
@jswh 这个比喻好
xjbeta
2016-11-14 14:05:00 +08:00
初中级还行 毕竟在自己水平不行的情况下 为什么不用用简单无脑的第三方库
等第三方库满足不了你的需求了 算法什么的重要性就体现出来了。。。
Evovil
2016-11-14 14:21:12 +08:00
我觉得数据结构, 算法 , 程序抽象逻辑这三个是互帮互助综合的一体的东西, 单拿出来比较难分析。因为短板不一定是数据,可能是程序也可能是你的算法。
如果单拿数据结构出来说
这个分三种
1 对数据结构完全不熟悉或者入门
结论就是 你的程序就是个屎, 别人看不懂, 自己也不可能维护。 因为你自己都不知道怎么回事, 找不到你需要的数据。程序的重点并不是能跑而是能跑易维护方便开发, 而数据结构正是 结构化程序的一个核心, 还有块是抽象逻辑。
2 对数据结构有一定的经验
结论就是, 你的程序能跑也能维护的不错,所有的东西都能正常进行, 相信程序代码也是在这个层次。 然而阻挡不了需求和客户的增长。 简单说 我拿个 mysql 就写写 select 也能做个淘宝出来。但是一天 50 万人买东西, 才真正体现出优秀的分库分表, b 树,各种查询优化模块以及负载性能的重要性
3 大神。
适应日益增长的需求,鲜见性的开发优秀的可复用搞维护性的结构,不管是升级分布式,并行计算,各种奇怪模块部署都能有条不紊,稳定,且保证支持高性能算法和抽象程序的结合
LenonZeng
2018-06-06 11:04:19 +08:00
@Terry309 二叉堆也是可以的

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

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

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

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

© 2021 V2EX