为什么面向对象分析与设计的能力这么不受重视

2012-12-08 19:34:15 +08:00
 wog
我很好奇,为什么在面试的时候很少有人会问到关于面向对象设计的问题,我花了将近一年的时间学习面向对象分析与设计,模式设计,看完了四个老外那本《设计模式》,看完了《设计模式精解》,看完了《设计模式沉思录》,重写了上万行代码,前几天面试时候败在了一个排序上,原因是我之前一直用的是qsort,所以我用了大概三分钟,自己写了选择排序,而我学长只用了1分钟左右,面试的人说我基础不扎实,
我说我会设计模式,他说了一大串,总之意思就是:程序就是算法和数据结构,算法是程序之魂。。。
好吧。。。我基础不扎实。。。
可是之后那学长跟我说,以后面试要提前准备,像各种排序算法要提前背。。。
我知道,学长是好心,可我还是觉得很不舒服,为什么面试就只是问算法,抠各种奇怪的几年都用不到的c++语言知识,而且算法我也会,我3分钟自己写出来就比怎么他背出来的差,各种不懂。。。


Ps:经过这次我觉得我确实应该再静下心好好学一学,等读完手头的《linux设备驱动程序》《Unix高级程序设计》再去实习
16384 次点击
所在节点    程序员
103 条回复
bhuztez
2012-12-08 23:09:46 +08:00
@dreampuf 可是我觉得绝大部分都那样啊,而且他们也不会轻易倒闭的。
wog
2012-12-08 23:26:34 +08:00
@lts9165 重不重要我不是确定,我只能说好用
wog
2012-12-08 23:39:36 +08:00
@bhuztez

@akann

可工作还是得找。。。前辈能给点建议么
aveline
2012-12-08 23:45:46 +08:00
... 感觉好可怕... 算法不扎实的路过...

工作快 3 个月了我没面试过直接就内推进了 ... 以后出来了怎么办啊嘤嘤嘤!

前一阵子 ex 还嘲笑我说肯定是 SA ... 怎么会去做 Dev ...
KeyZ
2012-12-08 23:55:47 +08:00
=,= 前端面试过 全是算法的!!!全是算法!!!
ElmerZhang
2012-12-09 00:00:24 +08:00
不知道楼主面的哪个公司,至少互联网公司一般都是重算法不重面向对象。
设计模式对于大数据所要求的高性能没有太大帮助。
传统的软件行业和软件外包可能对设计模式比较重视一些。
PrideChung
2012-12-09 01:01:45 +08:00
我面试过的公司大多两种,要么死命考算法,各种递归,排序;要么死命考数据库,各种统计,偏门得不行的SQL语句优化。
jarlyyn
2012-12-09 01:18:33 +08:00
招聘一般是需要什么样的岗位招什么样的人吧?
连正儿八经的工作经验都没多少的,别人可能让你去主导分析设计?
经验这东西都是工作中遇到案例积累的吧?书上看到的东西只能拿来验证经验,别太当真。
akann
2012-12-09 01:36:15 +08:00
@wog 如果你的目的是找工作,很多公司的目的是找个员工尽快把工作做出来,可能一个能熟记各种算法的人是一个理想目标,但是现实并不妨碍你应该有一个自己的理想啊,如果你自己有自己的想法,也可以利用空闲时间钻研一些其他的东西,至于是否真能找到适合自己的公司,那还真是一个缘分问题。
akann
2012-12-09 01:44:01 +08:00
@wog 补充一点,游戏类公司可能比互联网公司更注重设计模式,设计模式书中就有很多这类例子,不知道这里是否有在游戏公司工作的人介绍一些这方面的情况。
dreampuf
2012-12-09 02:21:46 +08:00
@bhuztez 有他们的存在世界才会更美好不是么,就那货撑死了就一垫脚石,所以甭纠结是否非要他们倒掉咯。
akann
2012-12-09 02:58:11 +08:00
其实设计模式在框架和工具包或者系统软件中用得很多,但国内做这类软件的很少,也可能导致国内用设计模式的方法做软件的比较少。
yegle
2012-12-09 08:21:01 +08:00
我觉得这个帖子的中心思想是:凭什么不考我特地准备过的内容
doyle
2012-12-09 10:13:45 +08:00
楼上正解
zhongyb
2012-12-09 11:59:40 +08:00
如果作为程序员,肯定算法和语言的基础知识更重要,如果作为架构设计师,面向对象设计更重要。
Mutoo
2012-12-09 12:07:41 +08:00
以前参加NOIP的时候背过算法,现在一样什么都不记得了,不过思路还是有的。
学习算法只是对编程的一种启蒙方式,拿它的面试还要求强记真的是有点过了。
而且真的要用的时候,使用现成的库是最安全的做法。
因为有时自己实现的版本还会出各种问题,经不起考验。
就像《编程玑珠》里面说的,90%的人写不出正确的二分查找:

“我在贝尔实验室和IBM的时候都出过这道考题。那些专业的程序员有几个小时的时间,可以用他们选择的语言把上面的描述写出来;写出高级伪代码也可以。考试结束后,差不多所有程序员都认为自己写出了正确的程序。于是,我们花了半个钟头来看他们编写的代码经过测试用例验证的结果。几次课,一百多人的结果相差无几:90%的程序员写的程序中有bug(我并不认为没有bug的代码就正确)。

我很惊讶:在足够的时间内,只有大约10%的专业程序员可以把这个小程序写对。但写不对这个小程序的还不止这些人:高德纳在《计算机程序设计的艺术 第3卷排序和查找》第6.2.1节的"历史与参考文献"部分指出,虽然早在1946年就有人将二分查找的方法公诸于世,但直到1962年才有人写出没有bug的二分查找程序。”

——乔恩·本特利,《编程珠玑(第1版)》第35-36页
darasion
2012-12-09 12:18:37 +08:00
招人大多数原则都是: 只要最合适的。
当然,也不排除那些根本不懂面试或者根本就是为了交差的人阴差阳错的当上了面试官。

总之一切皆有可能啦。一家不行就下一家。
zlxstar
2012-12-09 14:25:29 +08:00
@chloerei 我很好奇你现在做什么?自己创业吗?
bhuztez
2012-12-09 14:44:45 +08:00
@dreampuf 真的更美好么?

算法对于那些人来说,只是用来在面试刷人的工具。至于为什么非要考算法是怎么实现的,这样刷人是不是显然比随机丢掉一部分简历更有效,他们并不关心。反正别的公司也是这么出面试题的,据说这样能反映出基础好不好。他们根本就不关心,你是否知道这个算法哪里能用,哪里不能用。当然,这样很正常,除了面试,算法就和他们一点关系都没有了。

他们喜欢在Apache配置文件里放上上百条重写规则,代码在部署的机器上直接svn co出来,静态文件就放在代码目录里,一不小心,SVN仓库就被公开了。你去wooyun里搜一下SVN,看看那些经常出现SVN泄漏的公司的名字就知道了,他们不仅没有倒掉的,而且还活得很好,收入还会在未来进一步增长。如果他们真的算法基础好,不会连这一点复杂度都搞不清楚吧。明明可以在Apache那里只处理静态文件和简单的反向代理,在应用里自己处理重写规则,并按目录分层的,非要把所有东西都放在一起,明明是O(m+n)的非要搞成O(mn),弄得配置修改起来特别容易出错。如果哪天事情紧急要改配置,你没考虑到其他重写规则的存在,把配置给搞错了,那就是你没有责任心,没有团队精神,工作不主动或者抗压能力差。这样的人做出来的网络服务你真的敢用么?而且,就算你不用,你身边还是肯定有很多人在用的,你不用你就是异类,而且你也找不到有什么办法能避免这种情况再次发生。你真觉得这样就更美好了么?

他们非要把一个bug很多,API文档不全的开源项目拿来当黑盒用,自己调API在外面包一层,而API文档不全,非要几百个API,一个个自己去猜到底有哪些参数。可是他们说起来编译原理都学的很好的,写解释器甚至编译器都不成问题的,却不愿意花几个小时,看一下代码,理解一下API调用的逻辑,写个脚本把参数都提取出来,而非要让O(1)变成O(n)。几年之后他们就是参与过BigName公司Buzzword项目,有多年大型网站架构经验,海量数据处理经验,大型Scrum敏捷软件项目(管理)经验。可是,猎头就喜欢这样的简历。猎头喜欢看上去能解决困难的问题,复杂的问题的人,不喜欢把大问题分解成几个小的简单的问题,并只能解决简单问题的人。

这就是一个恶性循环。因为随着项目进行,很快就有各种琐碎的事会冒出来,到了某个时间,虽然所有人都在加班,项目进展还是停滞不前。于是,他们就会去招人来解决这些琐碎的事。也就是因为这样,招了很多人之后,功能上尽管有这样或者那样的问题,但往往都能在预期时间内跑起来。所有新版本的代码,都不敢在白天上线,非要到半夜没人访问的时候才敢上线。这也就是为啥要你肯吃苦,有执行力,有责任心,较强的抗压能力。可想而知,这些人去招人会出什么面试题了。而且,有一个副作用是,越烂的公司招的人越多,也就是说,你大多数时候能看到的职位都是垃圾职位,靠谱的公司很少招人。可是没有人天生就是一个靠谱的程序员,可是如果你不能靠自己过了这个槛,你就很难进入靠谱的公司,而且往往只能去垃圾公司当苦力,不仅正常工作时间内学不到任何东西,还要不停加班。你真觉得这样很美好么?

如果经常招人却还是项目经常会进展不顺利,高层就很可能会觉得是管理出了问题,去求助于管理咨询公司。找来的公司,只是为了兜售他们的方案,那很可能,第一时间,就要上绩效管理,制定KPI了。但是,开发很难定KPI,很容易就搞成按工作量和是否能及时完成来定了。你一定不能尝试改进自己工作方式,这样才能保证你有足够的工作量,你计划里一定不要有任何实质性开发工作,这样你才更有可能及时完成工作。你工作方式更烂,招来的人更多,你反而更有可能在职位上晋升了。绩效管理最多就只能确保已经确定的东西得到执行。再小的功能的开发中都充满了各种不确定因素,计划里既要定完成时间,又要定要有哪些功能,还要确保计划的功能都能如期完成是不现实的,除非你只制定没有任何实质内容的计划。

为什么学Java好找工作,甚至有传言说大学之前以及前三年从来没写过一行程序,自学一个月Java就找到工作了?因为据说Java好招人。他们的思维惯性就是无论什么东西就一定要用Java,即使别的语言在这个场景下比Java合适的多,也硬是要用Java,理由就是万一人手不够了,Java容易招到人,用别的语言就很难了。而如果你去投简历,别的语言再好,只要不写会Java,你就被刷掉了。(有时候,PHP能代替这里的Java)。

我不是说,我去做,我就一定能比他们做得好。我只是说,这一切实在荒唐透了。我不是说我能从中分辨出靠谱的公司,我只是说要有心理准备,大多少业务没有指数增长,却在不停招人的公司都糟透了。就算筛掉不靠谱的又怎样,哪里能找到靠谱的?纠结的不是他们是否倒掉,而是说他们明明早该倒闭了,却还活得好好的,以至于我怀疑开发是一团糟的公司才有可能获得商业上的成功?
plprapper
2012-12-09 15:51:43 +08:00
我也不喜欢在面试的时候问一些算法之类的无聊问题,但是我也不会看重面向对象分析与设计。
我个人感觉,一个人会的东西不一定是优势,也有可能会成为你进步的累赘。
务实、缜密、灵活、机敏,有个人的坚持,但不固步自封。

再说一句我个人的感受,无论是百度腾讯还是阿里,7层的开发部员工并非在从事是什么真正有“技术性”的工作,无非就是机械的劳动,超过8层的系统代码就是一坨垃圾,但是就是这些支撑了中国网民相当一大部分的网络生活内容。

LZ自己想想,他们到底会如何划分招聘名额吧。

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

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

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

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

© 2021 V2EX