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

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

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

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

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

元芳们,你们怎么看。

30052 次点击
所在节点    程序员
138 条回复
sandideas
2015-04-17 15:32:43 +08:00
因为算法看得出一个人的自学能力。
能自学算法的,要么聪明,要么努力。
哪个不是工作上要的
johnsmith123
2015-04-17 15:32:45 +08:00
@binux inode和算法有什么关系?这个是文件系统的东西,而且你说的这个情况是个经验之谈。
至于索引,我想你只需要知道其适用场景以及需求,再加上一些注意事项就好了,没有必要知道其实现细节,就算是知道了又怎么样?能源码优化mysql?就算能,你能比percona做得更好?
binux
2015-04-17 15:34:13 +08:00
@zhengkai 需要知道哈希索引是 O(1) 的 平衡树是 O(logn) 的
binux
2015-04-17 15:41:50 +08:00
@johnsmith123 如果 nginx 用的 hash 是不均匀的呢?你是否需要考虑,当站点集中的时候,会不会导致某个文件夹下 inode 超限。
mthli
2015-04-17 15:49:28 +08:00
@zhengkai 你说的看上去好像很有道理,然而你似乎在混淆问题,俗称一本正经地扯淡。举个简单的问题,一亿条url你是愿意花内存存一亿次,还是你自己来优化?
ant_sz
2015-04-17 15:49:50 +08:00
johnsmith123
2015-04-17 15:56:36 +08:00
@binux
我就问一句:这些经验之谈和算法的具体实现有什么关系?你在使用nginx时会考虑到不均匀而导致inode不足吗?nginx缓存会使用多级目录,有可能会导致inode耗尽,这和它的缓存策略有关,而不是算法。再说,这些基本上都是出了问题之后的经验之谈。

我就不吐槽文件夹下的inode超限这段了。
yxzblue
2015-04-17 15:57:32 +08:00
废话
lijingyu68
2015-04-17 16:10:00 +08:00
在我看来,楼主无需犹豫你现在的选择,在足够量的项目实践之后可能会顿悟,然后研究数据结构、算法和设计模式等等,然后称为大神,如果一直没有顿悟,那也没什么关系。没有什么必须不必须的,行业经验有时候可能比单纯的技术方案更为重要,无需考虑很久以后的东西。
lxrabbit
2015-04-17 16:17:12 +08:00
@xiaowangge 手游或者回合制端游可以这样,实时的,尤其是竞技/PVP为主的游戏,涉及底层的时候都要讲算法的
isaced
2015-04-17 16:21:33 +08:00
和楼主有同感,深知这方面欠缺,但我从不打算放弃学习算法、数据结构的提升。现在的软件开发很多东西都被抽象出来,开箱即用,真正能用上多复杂的数据结构或算法还是少数;但并不是说不学这些就行,有时候的确行,但是想要更上一层楼还是得钻。我觉得这也是一个方向的选择问题,是更精通原理、效率还是更丰富的经验和知识广度,也跟不同的应用场景有关。不能说哪一个更好,只要有着积极的心态去学习与进步就好。
共勉!
hustlzp
2015-04-17 16:21:34 +08:00
顺其自然。

对于我来说,主要是用技术去make something people want,然后过程中需要什么就去学什么就好。
binux
2015-04-17 16:23:57 +08:00
@johnsmith123 会啊,就因为知道我知道是随机的,所以没问题啊。不然单文件夹下,文件数过多会不会有影响(不然 nginx 为什么要用多级目录)。后者是经验的话,前者是不是算法?
binux
2015-04-17 16:30:02 +08:00
@johnsmith123 单文件夹下 inode 超限这个(这个提法有错),也和算法有关啊。你得知道,文件夹路径是怎么和 inode 对应的,如果一个文件夹下文件很多,会对性能有什么影响,是 O(n) 还是 O(1) 的。
这个不是查一下说,哦是 O(1) (或者 O(n),我不清楚)。而是了解它用的什么算法,然后能判断出来。如果还有其他的坑呢?
johnsmith123
2015-04-17 16:50:14 +08:00
@binux
这个我认为是文件系统的内容吧。都是些概念性的东西,懂了装个X,不懂或者遇到问题的话Google一下就差不多了。
而且这些都是系统调优方面的东西,这些的话,基本上就是改参数+测试,也许需要懂一些原理,但也是知道个大概就好。并没有说是"我给你个IDE或者白纸,你实现一个算法",而是“在这种情况下使用这种方法效率比较差,要使用另一种方法”。
于是,这些内容我个人认为属于操作系统以及文件系统方面。并没有涉及到太多的算法问题。

举个例子:
大学的时候有人认为会手算微积分的高数就好。
但是你把参数输入到matlab中的时候,会得到更精确的结果,而此时,你并不知道这是怎么算的,只需要知道这个函数在这种情况下可以使用就可以了。
dddd
2015-04-17 16:52:09 +08:00
笔试都过不了,比如……

还有操作系统,计算机网络,数据库,数学方面的知识

不信,去投几份简历,我也是大三
binux
2015-04-17 16:58:28 +08:00
@johnsmith123 我觉得比起知道是什么,知道为什么是什么更重要。虽然很多时候网上存在『最佳实践』,但是知道为什么,能在某些场合意识到什么,然后再通过 google 和测试来确认,这个就是差距。
至少我面试的时候,实现算法给你的都是非常容易的那种,目的在于实现,而不是算法。而通过算法来问,主要原因是,不需要查阅 API,能了解在稍微复杂逻辑下的表达能力。
MarioLuisGarcia
2015-04-17 17:06:02 +08:00
一个奇怪的槽点,“元芳们,你们怎么看。” 这句话已经obsolete了。
johnsmith123
2015-04-17 17:11:29 +08:00
@binux 这当然是差距,不过我个人看来,知道为什么这段没有必要到去徒手写算法的地步,以一个算法来说,知道这个算法的特点,适用场景,与同类算法相比较的优缺点,使用时可能出现的问题以及解决方法。我感觉,知道这些就够了。而不是具体的实现以及徒手。
我鄙视的是那些,认为徒手写算法是筛选程序猿的好办法而刷人的人。以徒手写排序算法作为面试重要依据的人。
mthli
2015-04-17 17:21:17 +08:00
@johnsmith123 徒手写算法被刷这点我也有类似的经历。只能说和和公司没有缘分吧。

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

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

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

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

© 2021 V2EX