不擅长算法和数据结构的程序员就不是好程序员吗?

2015-04-17 10:08:09 +08:00
 linpf

我是phper,主要就是做网站项目,在大多数的项目中,根本用不到算法和数据结构。我不得不承认懂算法和数据结构是很牛逼的一件事,但是即使不懂,也可以解决80%的问题。

现在看到各种大公司的笔试面试,都涉及到大量数据结构,感觉无论这个岗位是不是很需要掌握数据结构和算法。诚然,这是一种大浪淘沙精益求精的做法,可是我还是受到打击了。

作为数学渣的我,在学校学数据结构和算法,及格都是谢天谢地了。但是我算法不好,我会去学很多技术、掌握更多的框架或者组件,学更多的语言,我认为我将来仍然也会是一名好的程序员。

元芳们,你们怎么看。

30051 次点击
所在节点    程序员
138 条回复
mazingyu
2015-04-17 12:58:26 +08:00
表示现在的困惑是想恶补一下 ACM ,但是我觉得可行性非常不靠谱,因为在学校中刷 ACM 是可以拿来比赛的,有一个目标在那里,可是都现在了,工作中基本用不到很深的算法,起码 ACM 那些古怪的各种算法题目用不到,根本没有学习的动力和价值,即使今天看懂了这个算法,明天又忘了,在工作中这个算法用到的概率几乎没有。工程师是成长起来的,是结合实践运用知识积累沉淀,那些优化项目的工作我觉得你也不会让一个实习生或者毕业生来做。所以我觉得大家把优化项目和规划整个项目作为实习生毕业生必须掌握各种数据结构以及设计模式的理由未免太有点扯淡了。你会让一个实习生去做一个商业项目的核心逻辑吗?去优化一个百万条数据查询吗?去规划一个项目的模块和设计模式吗?
lbp0200
2015-04-17 13:17:26 +08:00
这些公司考的算法都可以通过短时间的训练得到提高
choury
2015-04-17 13:33:26 +08:00
@mazingyu 我刚毕业啊,我就在做百万以上数据处理的优化啊,面试面的就是算法和数据结构,这有什么问题吗?这些部门招人算法和数据结构是硬要求,“工作用不到算法”,那得看你干的是什么工作
targz
2015-04-17 13:36:18 +08:00
个人觉得,这只是一种手段。相同情况下,你会选择懂算法的还是不懂算法的?这是最简单快速筛选人才的方法了吧?BTW,好好研究你喜欢研究的东西,拿出东西来了,或许,算法就没那么重要了。
zhengkai
2015-04-17 13:56:00 +08:00
现在整个产业已经高度专业化了,可很多人还抱着死脑筋,一定要觉得通才才牛逼。这样的人是不是觉得一个医生也应该包治百病,又能开颅手术又能做心脏搭桥、顺便还能治胰腺癌?

首先你需要知道整个 IT 业的规模有多大,先从地球上有 20% 的网站是用 wordpress 搭的去了解吧,大部分人的工作跟算法没那么紧,这是事实

而且越底层的东西越通用,比方说,你非常牛,写出来的 web server 能比 nginx 还牛么?一个普通人,只需要知道地球上性能最好的 web server 是 nginx,稍微调调参数就可以去用了

还拿 nginx 做例子,你光是程序写的好就够了么?你说你的 web server 效率比 nginx 高 50%,又能怎样?我会用么?稳定性如何?如果我有各种奇怪的需求,可能 nginx 已经支持了,或者网上能搜到解决方案,你能保证在用你的软件时也能同样解决么?每个软件背后都有个庞大的社区来支持,你能保证你的软件不断有人给你提交 issue 或者代码来不断更新么?

MySQL 的代码里必然包含了非常多的算法,正常人根本不需要到看源代码来了解,如果能熟读《高性能 MySQL》并明白写的都是什么意思,就可以说得上是精通了,也就是说“如何使用”跟“如何实现”是分开的。如果你是一个项目的主程,MySQL 只是项目中的一个组件而已,如果有 MySQL 解决不了的问题或者表现不佳,你不会去想着改 MySQL 代码,更有可能是换个别的方案,如果你不是 MySQL 的 committer 根本不会去想着改进算法。很多时候知其然就够了,没那么多精力去知所以然

每个人的精力是有限的,比方说前几年我才意识到,人的阅读时间是有限的,就算一个月看一本书,50年也只能看600本而已,那就把目标定在600本,去想看哪600本,而不是去相信什么“看完一万本书,你的人生会有很大改变”

你可以举例子,很多算法好的人没毕业就拿到 facebook offer 然后过年薪 $20万+生活,但是这起点本来就不一样好么?A 去了 facebook,B 去了某个小公司成天改 wordpress 模板,到底是因为 A 比 B 更聪明、更勤奋、更有天赋,还是因为两个人一样聪明勤奋有天赋、仅仅是因为 B 不够重视算法?

什么东西都很有用,说一个项目从本质上是基于算法的,就像说一个宠物本质上是基于原子的一样,没什么意义,一个搞 IT 的最终达到什么样的高度,在于一个综合的努力,而不是懂很多算法就牛逼,不懂就是傻逼。精通算法的回报,是一个选择努力方向的问题,而不是放在那你要不要的问题。

谁要跟我说,你多懂点算法你就牛逼了,我会告诉他,废话,我要再多懂点数学还能拿图灵奖呢,我要多点手腕还能当总统呢

去想想自己擅长什么、优势是什么
xiaowangge
2015-04-17 13:56:11 +08:00
只拿工资来举例(虽然很不“政治正确”) =. =

游戏行业,认识一个有“经验”的程序员,工资算是很高了。数据结构、算法基本不会。 ;-)
laoyur
2015-04-17 14:06:15 +08:00
支持65楼
很多喷楼主的人说不定项目经验、算法和数据结构都比不上楼主
xhacker
2015-04-17 14:12:30 +08:00
算法没什么用,真用到的时候再看即可。我不知道鼓吹算法有用的人在实际开发中被算法卡住过几次。
binux
2015-04-17 14:19:54 +08:00
会算法不是说你能写出这些算法,而是理解它们。
不然用 nignx 加个缓存,inode 超限都不知道。
不然你看《高性能 MySQL》,脱离例子,该用什么索引都不知道。
zhengkai
2015-04-17 14:25:15 +08:00
@binux 你真的以为一个 ACM 拿过奖的人会认为“知道 Quicksort 是干什么用的”也算“懂算法”?

你确认楼上那些人也跟你一个意思?
nagato
2015-04-17 14:28:53 +08:00
周围算法好的人貌似工资都比我高--
az
2015-04-17 14:35:52 +08:00
一般的网站用PHP基本不会碰到什么算法类的。什么难题,Google加上你的思考就行。好比晒车手,你管他车子是怎么做的,会开就行。
binux
2015-04-17 14:36:00 +08:00
@zhengkai 你对『理解它们』的理解就是『知道是干什么用的』?
vietor
2015-04-17 14:40:36 +08:00
别拿别人定义的“他自己符合”的“所谓标准”,来要求自己。制定自己的标准吧。
mazingyu
2015-04-17 14:43:34 +08:00
@choury 不同的岗位要求不同吧
zhengkai
2015-04-17 14:45:14 +08:00
@binux 那你觉得会正确的设置 Covering Indexes 需要对算法理解到什么程度?连 Quicksort 是什么都不需要知道
canautumn
2015-04-17 14:46:49 +08:00
不想搞算法不深入可以,但大学教的还是要会的。平时都用现成的库是不错,但稍微有点运算,至少要了解各类算法的复杂度吧。拿c++来说,举个最简单的例子,你要使用一个集合,是用set,还是unordered set,还是vector?不同的问题用不同的算法性能是完全不一样的。这类基本的东西都搞不清楚,数据量稍微大一点,那就不是优化不优化的问题,而是能用不能用的问题了。
wangccddaa
2015-04-17 15:18:21 +08:00
@ZHenJ 哇,抓住一个使用五笔的~~哈哈
johnsmith123
2015-04-17 15:21:53 +08:00
同支持65楼。来说一下我认识的人的校招的经历:
没有一家大公司在笔试时不考算法的,而这些算法基本上就是网上常见的几大排序。而且必须要使用白纸写。
而且这些公司面试的时候也会有所要求。
那么问题来了。这些算法和他们以后的工作有多大的关系?
一些人报的测试,甚至是运维,都需要白纸写快排,堆排,写出来了,就过,不管是笔试面试,没写出来,对不起滚蛋。还有那些开发面运维岗的我也是给那些公司跪了。
和我一起找工作的一个人,一开始各种被刷,后来背了两个算法,当然他还是有些基础的,就进了某知名互联网公司。
我想LZ说的应该是这些:
我虽然不会用白纸写这些排序算法,但是我知道他们是O(1)的还是O(N)的,而且我认为我目前学到的东西至少要比这两个排序算法多N倍,但是大部分公司还是会让我白纸写算法,然后刷掉我,我不服。
kyze8439690
2015-04-17 15:25:01 +08:00
我猜你读的是软件工程

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

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

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

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

© 2021 V2EX