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

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

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

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

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

元芳们,你们怎么看。

30043 次点击
所在节点    程序员
138 条回复
mazingyu
2015-04-17 11:55:49 +08:00
大三狗一枚+1,在学校里没怎么学 ACM 简直是硬伤,现在找工作各种问算法,真心受不鸟,其实有些题自己能想出自己的思路,但是因为没有训练过真心比不上那些搞过 ACM 的,代码的严谨性和可靠性以及在纸上写代码的可运行性,唉~数据结构肯定要学,但是我觉得学以致用的能力才是关键,平时用到的小算法在网上 copy 就行了,但是仔细想一想公司不是都有算法开发部门吗,面试还问基数排序冒泡排序二分查找干蛋用啊,用到的时候在网上一看就能明白写出来,非得搞到像应试教育似的,真心无语。--一枚没搞过 ACM 的找实习的大三狗的吐槽 =。=
wizardforcel
2015-04-17 11:56:34 +08:00
其实你写朴素算法就好,没必要搞那么高大上,人家是看你是否能把自己思路表达出来,又不是竞赛非得优化到nlogn。

比如说人家让你实现string.find,你非搞个kmp,结果没写出来,作死了。而另一个人,虽然用的是暴力搜索,但是他完整写出来了,你觉得哪个好呢。这是我的真实经历。
wizardforcel
2015-04-17 12:01:59 +08:00
@ryd994 除非是那些np问题,也除非自己作死,否则任何一个程序员很难写成指数阶的。


@ryd994 培训机构出来的只会复制粘贴代码,连什么叫高内聚低耦合都不知道,很难在软件工程的思维中取胜。
young
2015-04-17 12:03:16 +08:00
@bullettrain1433 嘛意思
话说瞬间被保存了30+
chengzhoukun
2015-04-17 12:04:22 +08:00
@linescape python写算法题很常见吧
wizardforcel
2015-04-17 12:05:21 +08:00
@mazingyu 主要是因为天朝人太多了,要靠这个筛选。国外的基本就是聊聊天,看项目经历,看背景什么的。让面试官考工程,没办法出试题考,而且不通过实际项目练手很难看出来一个人究竟怎么样,考语言又太low了。于是只能考算法。

不过我见到的面试题里面,还有考os、组原和网络的,你觉得这个怎么样?
chengzhoukun
2015-04-17 12:06:28 +08:00
算法其实很有用的,比如计算机网络中p2p协议是怎么实现的,操作系统的任务调度是什么算法等等
uleh
2015-04-17 12:15:02 +08:00
程序=算法+数据结构
mthli
2015-04-17 12:15:13 +08:00
显然不是一个好程序员。

前两天面了一个大厂的实习,一面就挂,其实我挺想吐槽的。很多技术上不如我的人可以拿到offer,但是你问他们一些常用的算法或数据结构,不知道;你问他们一些偏底层的东西,不知道。那么进了公司以后你觉得你是做码农呢,还是码农呢,还是码农呢?以上算我的吐槽吧。
mthli
2015-04-17 12:18:33 +08:00
@mazingyu 基数排序冒泡排序二分查找这种是心里面默念都会吧?而且人家一般是让你写出来看你的代码风格的,如果你连这些基础的算法都不会你让面试官怎么办?
mthli
2015-04-17 12:22:15 +08:00
@linescape 按照你的说法Java里都用泛型C++都用STL似乎也没有什么不可以。
moe3000
2015-04-17 12:29:06 +08:00
好像就是码农和攻城师的区别
linpf
2015-04-17 12:32:15 +08:00
@ryd994 我没有说高产,我说的是可以做更多方面的任务。培训机构出来的,三个月可能就会java。公司让他写java可以,但是让他写前端,他就不会了是吧。
@mazingyu 同感,但是真没办法。就像我说的,大浪淘沙。中国那么大,总有又擅长算法又擅长开发的。
@wizardforcel 我现在就是遇到问题,如果有常用算法可以解决的,直接百度出来。没有常用算法的,就自己慢慢琢磨,大多情况下能够解决出来。唯一的问题就是在效率上。但是我想,我现在能经手的项目,估计都没必要考虑性能达到瓶颈的问题……哎。
@mthli 有些整天刷ACM的人,虽然算法很厉害,但是他们没有项目经验,真的开始做点东西了,往往各种问题。这种人用起来真心不如我们这样的。你可以把他们安排到算法部门……
bullettrain1433
2015-04-17 12:34:25 +08:00
@young 不好意思,忘记关梯子了,梯子打开文件夹空的
otakustay
2015-04-17 12:35:43 +08:00
我的感觉是不用记住算法实现,但至少要知道有XX算法能解决YY问题,且不限于大学学的那些基础算法
otakustay
2015-04-17 12:36:46 +08:00
比如你不知道冠军树,那某天要你做前缀索引怎么办。你不知道平衡二叉树,哪天要你做查询性能优化怎么办
mthli
2015-04-17 12:38:36 +08:00
@linpf 其实ACM的人没你想象的那么糟糕的,你应该多认识一些(不要局限于你们学校),你就知道自己的差距了。不要在这种事情上给自己找理由。
VirgilMing
2015-04-17 12:40:30 +08:00
楼主,你必须走出「我学那些东西十分吃力,我就想换个方向」这种显然是安于 comfort zone 不想出来的思维方式。

楼上已经有很多老兵痛陈算法与数据结构的重要性,我没办法比他们说得更好。我们这一行,语言、框架层面以上的东西,你不可能永远靠搜索引擎。

但我可以告诉你,你的思维方式有问题。如果真想做点事情,就必须对自己狠一点。
mazingyu
2015-04-17 12:47:57 +08:00
@mthli 嗯,懂了,先把这几个算法背过吧,毕竟要面试,说再多,总归还是要面对现实。
ryd994
2015-04-17 12:58:25 +08:00
@wizardforcel 举个例子而已,不要纠结具体数字,高手O(logn)和普通O(n)这样的情况不少吧?性能能比么?
又不会算法,又不会数据结构,从楼主的发言来看,也不会管理。那不就只剩CtrlCV的能力了么……
至少在我看来脱开算法、数据结构和管理,剩下的完全可以速成。

@linpf 比会的语言数量技术数量,你是比不过速成党的。或者说,如果你喜欢和别人比语言数量、技术数量的话,你已经成了速成党。你碰不到性能瓶颈,说句不好听的,那是因为PHP是世上最好的语言……(不过就算是这样,前一阵子还是有关于关闭gc大幅提升性能的帖子,底层的东西还是会碰到)。

人年纪一大,学习新技术的能力就会大幅下降,而新的速成党是源源不断的。这时候你拿什么和年轻人比?所以code monkey死的快,因为总有年轻的monkey比你记性更好。
但是对于算法,对于底层的了解,还有管理经验,这些是不会过时的。除非计算机大改结构,这些东西对于任何语言,技术,都是避不开的话题。

@wizardforcel 说的过度优化,过度纠结大O,这个有时候是有的,而且事实上越是好程序员越会遇到这样的事。我的观点是:工作是工作,娱乐是娱乐。老板要赶进度那没办法。但是自己的GitHub就不能这样敷衍。锻炼好了,下次要用的时候就能用上。不能说因为学习成本高就一直逃避。

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

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

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

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

© 2021 V2EX