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

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


Ps:经过这次我觉得我确实应该再静下心好好学一学,等读完手头的《linux设备驱动程序》《Unix高级程序设计》再去实习
15914 次点击
所在节点    程序员
103 条回复
yujnln
2012-12-08 19:43:23 +08:00
ritksm
2012-12-08 19:50:13 +08:00
路过。。。算法不好的同样很烦躁。。。但是基本的东西还是要懂的。。。排序、查找、二叉树、队列等等。。。其他高级的Google呗。。。
cranej
2012-12-08 19:55:07 +08:00
个人觉得吧,应届毕业生碰到面试设计模式,面向对象分析的公司还是敬而远之吧,面试算法的公司要靠谱多了。

几年前我也认真看过设计模式、面向对象分析的经典书籍,也理解了,然后很确定地以为自己懂了。 等这几年实际项目经验多起来以后,我发现自己那时候的想法就是一坨狗屎。

有些东西想要真正理解注定是离不开大量实践的,时间与经验的积累是必须地。 所以,我要是招初中级职位也不会问这些垃圾东西,找工作碰到满嘴这些东西的公司也会闪的远远的。

纯属个人想法,说不定明天就被我自己否定了,面向对象、设计模式爱好者莫受刺激。
PrideChung
2012-12-08 19:59:49 +08:00
我blahblahblah了一大推,突然想起有一篇文章已经说过这个问题了,果断删掉自己写的。

《为什么我反对纯算法面试题》 酷壳网 陈皓
http://coolshell.cn/articles/8138.html
reus
2012-12-08 20:04:16 +08:00
因为面试你的人自己也不懂啊
ipconfiger
2012-12-08 21:23:17 +08:00
算法问题嘛算是比较小规模的考校解决问题的能力的方式,面向对象神马的绝对是异端,对这套异端学说走火入魔的人是很难理解 node.js啊,erlang啊之类新鲜玩意儿的。
不过简单粗暴的就叫你写一个啥排序什么的也是不对地,应该因地制宜的设计一些小品题目,比如解析个神马自定义协议之类的,一个是可以考究一下是不是语文白痴(比如读不懂题,但是首先你得保证你出的题正常人类能够理解,或者你所需要的那个方向的不正常人类能够理解);第二是考验解决问题的能力(分解,归纳,找到合适的算法);第三是可以看看写代码的能力,编码习惯什么的;一般看到简历里说对啥语言最熟就要求用啥语言写(如果公司里找不出一个懂的,要么就是此公会的东西太生僻,要么叫他换个主流点的语言写,要么就是此公过于高端,用不起)。出完题最好全公司所有能写代码的都做一遍试试,如果大家在有限时间内都觉得有点难度但是还是能做出来,那么这套题就不错了。最好有时间的时候出个几十道存着,防止有人在网上share。最好每年换一次题
wog
2012-12-08 21:28:22 +08:00
@cranej 受刺激倒不至于
我知道这个东西离不开大量实践,时间与经验的积累,但是他在现阶段却可以让我看懂更多代码的设计意图,我是学linux开发的,linux内核里有太多的设计模式的应用了,我如果没有学过设计模式,我不可能这么快的理解他在干什么,
个人觉得并不应该直接说这是垃圾东西,因为就算在现阶段他不能让我写出好的程序,但它可以更好地让我理解别人的程序
wog
2012-12-08 21:32:13 +08:00
@reus 他懂不懂我就不知道了,不过那个排序太伤人了。。。
wog
2012-12-08 21:39:32 +08:00
@ipconfiger 你说的那个 解析个神马自定义协议之类的,我倒是会,之前写过简单的网络聊天软件和网络五子棋软件,都是自己设计协议,加密,解析什么的,但他就一个排序算法就说我基础差。。。
qiayue
2012-12-08 21:40:16 +08:00
前东家面试,不要你写什么排序之类的背出来就可以的算法,而是给你一个实际问题,你自己写伪代码说明自己思路。后来机试也是三道实际问题,让你写代码。这些实际问题都是从公司产品中抽取出来的。十几个人比谁写得快写得好,写好了就会被面试官叫到小房间简短面试,问你曾经做过什么最得意的作品,这期间遇到过什么比较难解决的问题,最后是怎么解决的,最后问了未来三五年规划。
这是我记忆最深的一次面试,因为整个面试从笔试、机试、面试走下来都很轻松,聊得很愉快。
ipconfiger
2012-12-08 21:49:20 +08:00
@wog 这个嘛,遇到这样子的公司不去也罢,就算去了你也会在工作中遇到明明自己努力了功劳却归了别人的事情。双向选择嘛
ssword
2012-12-08 21:54:28 +08:00
被快排秒过一次... 不过说我基础差的话还是服气的,对方气场明显比自己强一个量级

曾以为会用haskell写就没甚在意,被秒杀回来之后用C一写居然用了两个小时(
fwee
2012-12-08 22:26:02 +08:00
面试官水平不够呗
chisj
2012-12-08 22:31:18 +08:00
说实话,我不喜欢言必谈设计模式的人。
chloerei
2012-12-08 22:39:10 +08:00
没面试过……
lts9165
2012-12-08 22:48:22 +08:00
面向对象真的那么重要吗?那没对象的程序员怎么活啊?
dreampuf
2012-12-08 22:56:39 +08:00
这是基本。

不过应该考察得更全面。

想想也好,其实是你筛掉了他们
bhuztez
2012-12-08 23:09:16 +08:00
我是来放地图炮的

很多公司负责招聘的人 and/or 招聘的流程是不讲逻辑的。不讲逻辑的人怎么能让他去写程序,不讲逻辑的招聘流程怎么能筛选出合适的程序员?可是他们都活得好好的,即使项目会做失败,也没见有倒闭的。所以,程序员真的一点都不重要,随便招几个就行,哪怕写得再烂,项目失败率再高也无所谓?

我臆测,其实往往是这么一回事:项目进展停滞不前,怎么办?那就招一些廉价菜鸟过来做那些比较琐碎的事,比如套个代码模板,写写测试或者写写文档什么的。怎么招?看别的公司是怎么招的,也就挂个职位,等简历么。怎么筛简历?非重点大学的简历直接丢掉,有一门成绩特别差的丢掉,在校有分量的奖拿得太少的不要,……总之,简历上能有任何能和缺点扯上关系的不要,最好是要重点大学相关专业毕业,各门课的成绩都比较好,拿过各种奖,工作积极主动,肯吃苦,肯钻研,执行能力强,有责任心,有较强的抗压能力,活泼开朗,性格外向,有良好的沟通能力,有团队合作精神,能快速融入团队。那面试问什么问题呢?就考一些基础题吧。就考某个算法复杂度在某个范围以内的递归用C语言怎么写吧。再不行就考Singleton怎么实现吧。还答不出来就考考运算符优先级吧。这样内容太少了,再考考什么几个SQL语句加点计算机组成原理吧。算法复杂度是对的,但不是递归,这人连题都不会看,刷掉。重点大学相关专业毕业,连个递归都写不对,刷掉。虽然写的是对的,但连C语言都不会,刷掉。Singleton怎么简单的单词都拼错了,刷掉。运算符优先级就这么几条都记不住,刷掉。虽然我题目写得有歧义,但是动动脑子就知道不会考这么难的,凡是写出两种答案的,刷掉。虽然组成原理这部分,回答看上去挺对的,但好像和我当年学的不一样啊,肯定没上课好好学,刷掉。

最后他们居然在deadline之前几天,把程序整个跑起来了,虽然随时可能crash,但是就这么交差了。

招聘整个过程看上去就是尽快找到候选人的缺点刷掉,而不是试图去找一个有他们需要能力的人,明明是想拖得不能再拖了,却还要只挑他们认为基础好的,而不是选几个现在就能上手干活的。其实这也可以理解,他们一开始想的就是招一些人来做他们不愿意自己去做的事。他们也不愿意去关心,他们的筛选手段是不是显然比随机挑一半丢掉更有效。

所以,我觉得,真的还是不要写程序比较好。可是,一想也不对,万一哪天自己要用了咋办,还不得被这群人坑一遍啊...
sodapanda
2012-12-08 23:09:37 +08:00
我也是要毕业的本科生,还从没有应聘过任何一个公司。看来我也得先把算法基本的东西都背一遍了,免得被秒掉。什么《编程珠玑》《编程之美》里边的小例子都自己实现一边去。。。
akann
2012-12-08 23:09:45 +08:00
大概是每个公司都有不同的文化,你不被微软喜欢,并不见得你就不被谷歌喜欢,重要的是找到适合自己的公司,到底是面向对象重要还是面向算法重要,还需要看这些不同种类的公司不同时间段以后哪个公司在市场上活得更好才对。

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

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

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

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

© 2021 V2EX