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

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

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

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

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

元芳们,你们怎么看。

30054 次点击
所在节点    程序员
138 条回复
linpf
2015-04-17 17:22:17 +08:00
@MarioLuisGarcia 我可不可以吐槽你还在用80年代的游戏主人公当头像 →_→
linpf
2015-04-17 17:25:30 +08:00
@johnsmith123 我感觉会解决问题,比会亲自实现问题的解决要有价值。
sumhat
2015-04-17 17:26:43 +08:00
@zhengkai 你关于 nginx 的例子不对,在 nginx 出来之前,Apache 是世界上最牛 x 的 web server,一般人也会觉得 Apache 的性能最强了,不用再去重写一个新的 web server,然后就被 nginx 打脸。你的这番话会被下一个 web server 打脸。

我同意 @binux 的观点,不用每个算法都会实现,但需要知道它的优缺点。在 ACM 界有一个共识,就是硬件(或参数)层面的优化,是无法和算法优化相比拟的。也就是说,即使换了全新的硬件(CPU、内存等),如果无法把算法复杂度降低一个等级,该过不了的题目,依然过不了。换到实际工作中,如果你能清楚地知道系统性能的瓶颈在哪里,并且有能力去优化它,这比只会改改参数的程序员,要高出很多档次。为什么 Google 会发明 Map Reduce,是因为这个算法适合 Google 的应用场景,Google 的程序员当年并没有迷信“Oracle 很牛了,我不需要知道它是怎么实现的,只要调调参数就行了”,这才有了现在的高效搜索引擎。
mthli
2015-04-17 17:28:47 +08:00
@sumhat 这是我赞同的观点 :)
xiaowangge
2015-04-17 17:36:10 +08:00
「怎么培养算法不错,但是工程能力较弱的实习生」

http://www.v2ex.com/t/158387



什么样的人都有。关键是看自己 =.=

分享一个和主题关系不太大的:
「一个程序员的情怀」

http://python-cn.org/guide/#/post/pythonista.md
MarioLuisGarcia
2015-04-17 17:45:44 +08:00
@linpf 必须可以啊
sumhat
2015-04-17 17:54:15 +08:00
@johnsmith123 面试的时候手写算法,目的并不是根据算法的正确性来选人。

(实际的目的太长,这里写不下)
cdffh
2015-04-17 18:00:45 +08:00
大三提这种问题很正常 以后你会意识到的。php我就问你一个我今天思考的问题,php使用 namespace有啥好处,性能上是否会有损耗。
zhengkai
2015-04-17 19:33:34 +08:00
@sumhat 必须精通算法才能比较出 nginx 和 apache 的优劣么?而且你想过没有,为什么撼动 apache 地位的是 nginx,而不是比 nginx 更早流行的 lighttpd?仅说效率肯定盖过 apache 啊?

@linpf 说极端点,不去深研究技术 30 岁就转管理的也大有人在,当年我一个同事是美术组的头,去年他的公司上市了,联合创始人,他的美术水平只能算很好,全国排不上数,但是每年的上市公司创始人也不算多,他已经是其中之一了。

我觉得这事很简单,你觉得更擅长学习算法,那你就去钻研,如果你觉得其他地方更强,那就发挥你别的长处,程序员成功不是靠算法这一条路,软件工程不是只有算法

你可以擅长抽象,代码灵活,来随时应对 startup 时期对产品的频繁调整

你可以擅长宏观的分析和实践,去做架构

你也可以自己不懂技术,但是知道谁最懂技术,照好小弟,别让小弟加班太苦逼、给他们争取福利,他们信任你、能做出东西来

这每个方向,都是需要思考需要去练的,也不是谁都能胜任的

现在非搞成,不精通算法就你有天花板,过两年就等着被培训班出来的把你挤兑到失业吧!总之算法最高!不精通算法你也配叫程序员?

我只能评价两个字:

呆子

我觉得说得够明白了,别 @ 了,懒得回了

还有楼上的问我一亿条 url 怎么处理,你要是放上世纪末,大家电脑都只有 64 - 128MB 内存的时候这么问我,我还觉得是个问题,但是 5 年前我就开始用 16GB 内存的机器了,一亿条,也就是 100M 条,是个事么?你开个虚拟机都不会碰到瓶颈吧?而且我相信,所有练习写爬虫的人的,在他的爬虫能顺利工作之前,绝大部分人都是不知道 Bloom Filter 的。如果你一整年的工作就是优化一个爬虫,你需要了解算法,但如果从某个网站扒一些你想要的数据,而你不需要超过 5 个小时去琢磨这个爬虫脚本呢?

我为什么喜欢用 facebook 举例子?扎克伯格的 PHP 水平肯定不怎么样,但是他手下的手下赵海平,不管哪个写 PHP 的都得承认这是位大牛吧?我衷心希望所有呆子们能认识到,你们的价值是由你们创造的东西的价值来决定的,而衡量这个价值,算法既不是充分条件,也不是必要条件,就像不知道什么是 Bloom Filter 的人也可以写爬虫一样。
lcqtdwj
2015-04-17 19:41:29 +08:00
@hustlzp 赞同
vivalon
2015-04-17 19:57:56 +08:00
觉得,“不精通算法数据结构”的“好程序员”也许能做出“可以用”的东西,但“精通算法数据结构”的好程序员是可以做出“足够好”的东西。
twl007
2015-04-17 20:12:09 +08:00
在这里说算法不行就不合格的人 遇见天花板的人 请问有几个是数学系出来的 或者是计算机+数学双修的…… 一般广义的认知就是实现一个算法或者拿你知道的算法去解决一个实际问题 真叫你从理论上改良算法的楼上有几个做得到的
nikolai
2015-04-17 21:32:06 +08:00
让我想起这个问题: http://zhi.hu/aGQB
yangff
2015-04-17 21:38:19 +08:00
至少说明你无法驾驭一类代码
wizardforcel
2015-04-17 21:43:00 +08:00
@twl007 数学这个词太大了。数学里面有初等的有高等的,有微积分这样连续的也有离散数学这样离散的,有数理逻辑之类偏证明的还有高等代数计算几何这些偏计算的。总不可能都需要吧,要不然计算机系并进数学系得了。

所以说算法就说算法,扯数学系是干嘛。计算机就算和数学沾边也是类似于土木或者金融,拿数学来计算东西,而不是研究它本身。
Tianpu
2015-04-17 21:44:17 +08:00
简单点说:

Follow your heart
falcon05
2015-04-17 21:53:55 +08:00
与其整天想个算法把自己搞得郁闷,不如自己开开心心做个完整的项目。
wizardforcel
2015-04-17 21:57:03 +08:00
@linpf 只用库也是有问题。标准库基本能给你的,只有数组和哈希表两种,你哪天需要写个树或者写个图怎么办呢。

公司考的那些算法,说白了,就是模式匹配。算法是有限的,而你要解决的问题是无限的,所以需要你用某种方法往上面套(专业术语叫做“归约”)。当然你自己得有一些素材才能组合出解决方案,基本的东西是要死记硬背的,比如树和图上面的几种操作。这些东西也可以通过看题解来快速弥补。

现在的web开阿发也是翻来覆去的套框架,做几个就烦了。估计等到烦了之后才会大彻大悟,对算法感兴趣吧。一切只是没到火候。
twl007
2015-04-17 22:11:47 +08:00
@wizardforcel 计算机本来就是数学的分支 你看看那些算法哪个没有数学证明 说白了大部分程序员所谓的算法就是在实现人家已经设计并证明好的东西 所谓的算法能力其实就是运用算法的能力和对语言的熟悉程度 如何选择合适的算法去解决合适的问题并最优的实现这个算法才是大多数程序员的任务 真要说到自己去设计全新的算法或者真的去改进人家设计好的算法 真心难

上面说算法不好会碰到天花板 呵呵 有几个可以去投行给人家写模型的 都不说设计模型了 有能力把人家设计好的模型能实现出来的有几个 再说不好研究算法的数学出身的其实编程技术真不如一般码农好 很多时候还要去找编程能力强的人去实现他们的算法 但是真论算法功底没数学系统的培养很难说自己算法很精通了 大部分时候所谓的精通就是我知道-我会用-我能实现-进行一点小的变动 真要大幅提升没几个人做得到
mucid
2015-04-17 23:08:11 +08:00
先补好数据结构功底吧,这个还是必须的,
至于算法非一日养成,共勉。

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

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

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

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

© 2021 V2EX