作者:小余(Yice)  来源:博客园   酷勤网收集 2008-05-13

摘要
  作为开发人员来说不论你用那一种的思想来看待问题和分析问题,你的最终结果就是将你的思维转化为代码,对于初学者来说,跟他们讲用那种方式分析和架构有点偏离他们的实际,他们需要首先学好的是开发上的技巧,能说能做,而不是光说不做。

本文是上文《不要再面向对象》的续集
其他关于面向对象的声音《关于设计思想的一点思考》《我们应该讨论什么? 就面向对象的讨论所引发的一些思考

光绪年间,四川总督良接老母到成都来安享晚年,不料老夫人一到成都就病倒了,奇怪的是,一连找了几个有名的大夫,都没把老夫人的病看好。 于是,锝良命人在城墙上贴出一纸告示求医。 到了第四天,一个挑着担走街串巷卖花生胡豆的老头从那里经过,揭下了告示。 老头一阵悬丝吊脉,眉头紧锁,锡良迫不及待地问他病情如何?老头不紧不慢地说:“老夫人的病重啊!” 一句话把锡良惊呆了。老头又说:“大人如果舍得300两银子,我就开方子。”这简直是在黑宰!但锡良还是点头答应了。只见老头龙飞凤舞,片刻开好了处方。 锡良急忙拿过一看,脸色都变了:前两位郎中开了那么贵的药都没疗效,老头只开了五样很简单的中草药,能 行吗? 不想老头的药还真神,老太太只喝了一道,病竟好了一半。锡良又赶紧把老头接回来,继续诊治。这一回,老头来了个狮子大开口,600两银子。服下这一副药, 老太太的病就全好了,锡良顿时喜出望外,打起大轿就去答谢老头。但老头背包打伞已经走了两天了。锡良命人打开房门,发现桌上放着那900两银子和一封书 信。信上写着—— 总督大人钧鉴:令堂大人原本长途跋涉,感冒风寒,南北饮食失调,发恙时滥用补药,遂使病情加重。我如不重金索取,又怕大人不信,故两次索取重金,现璧还。 因治好了老夫人病,恐招来不测,芙蓉城虽美,但已经不是我安身之所了。如累总督垂爱,这900两银子就用来修一座牌坊,就叫无名牌坊,让天下人都来做无名 人无名事。 锡良被老头的话所打动,于是就在皇城与满城之间的东城。(摘自“锡良与牌坊巷”来源)

先用一则故事压一压大伙的口水,暂且先静下心来再次论论“毒”。或许大伙都知道砒霜是剧毒中的一种,在我们所能听到的传统故事中,砒霜绝对是杀人者居家必备之良药。但有多少人知道现在的医学研究表明,少量摄入砒霜可能对人类的健康有益,而且这种剧毒物质可以用来治疗一些血液疾病。越来越多的科学家和医生开始致力于开发砒霜的良性作用。

      人参大补,同样可以让人毙命,砒霜虽毒,却有益健康。问题不出在药物本身,而在于用的人和用法上头。我们争论不休的面向对象和面向过程何尝不是这个道理,他们都有其特点和优势,也有各自的不足,我们所要争的不是到底谁能比谁更胜一筹,谁能够绝对性的压倒谁。我们所要了解他们的特点和如何用好这些优势,扬长避短来解决我们实际的问题。用好这些开发的理论和技巧才是我们的关键。

       我上一篇文章《不要再面向对象》主要写给初学者看的,对于初学者而言,他们所能看到的可能是人参吃了绝对不会有事,砒霜肯定会让你七孔流血这种绝对性的观点。对于初学者而言缺少的就是能够客观的看待问题,分析这些问题本质的能力。现在的计算机发展的速度太快了,快得让我都觉得落伍,往往是一觉醒来便会冒出许多的概念,新名词层出不穷,这就给初学者带来了很大的影响,要学的东西太多了,哪有那么多的时间去学习那么多的知识,这样他们往往比较容易迷茫。如果让这些初学者去跟风学习新的技术,而没有扎实的基础,或许他们会越学越吃力,越学越多,因为他们没有办法看到那些新名词背后的实质。这点和我们以前天天笑话地主老财的儿子学习写字一样,学会了一二三之后就认为自己得到真谛,结果让他写万字的时候就笑话连篇。现在的初学者何尝不像地主老财的儿子。

       上一篇文章中我只是针对面向对象编程来说,只是从程序开发中的实际状况来说明一些问题,作为开发人员来说不论你用那一种的思想来看待问题和分析问题,你的最终结果就是将你的思维转化为代码,对于初学者来说,跟他们讲用那种方式分析和架构有点偏离他们的实际,他们需要首先学好的是开发上的技巧,能说能做,而不是光说不做。

       我个人并没有反对任何一种方法,恰恰相反,二者都有可取之处,往往是取长补短的结合使用,你可以把面向过程的语言按照面向对象的思路进行代码开发,写出来的代码中除了语言本身是面向过程之外,我想代码中的处理方式无处不散发出面向对象的味道。以前做手持设备开发,纯C的语言,我就是按照面向对象的思路进行代码封装和复用的。从个人的经验和项目中的实际结果来看,如果一个开发人员缺乏扎实的开发功力,无论哪种方法对她来说都是无用的,而训练这种功力的最好方法就是从简单基础开始学习,从面向过程和面向对象来说,我想面向过程会稍稍简单一点。好比学武要先站马步一样,枯燥而且乏味,但是如果马步都站不稳,我可以断言你成不了高手。

       关于面向对象的具体比较的话,需要从开发的思想,编程处理的方法和开发语言等三个方面去做分析比较,在今天的文章中我就不再一一作比较了。等后续有时间的话,我再对三个方面做一个简单的分析。

Feedback

#1楼 [楼主]

2008-05-12 13:20 by 小余(Yice)
自己先鄙一下

#2楼

2008-05-12 13:25 by 怪怪
程序员真正的马步是分析事物的能力。

#3楼 [楼主]

2008-05-12 13:33 by 小余(Yice)
其实代码和问题分析就像画家的画笔和审美观一样,如果希望做画家,最少要熟练用笔,然后再谈审美观。做开发也一样,要有扎实的开发功力,在这个基础上再提升你分析和理解问题的能力。

#5楼2008-05-12 13:43 by 小猪凯

我觉得应该具体情况具体分析.

无论是面向过程还是面向对象,都只是手段,不是目的.

而我们要做的就是为达目的不择手段.

#6楼

2008-05-12 13:46 by 怪怪
呃... 说实话, 扎实的开发功力是容易练就的, 就像你说的, 多下功夫, 虚心学习就好了。 我指的分析事物的能力, 是与编程无关的部分; 在我看来,这部分才是经常被忽视的。

至于存在的那种满嘴架构, 写不出几个像样程序, 动不动面向对象, 类全是水蒸气式的无用做法的人, 本来就是混饭吃的和骗钱的, 是改造不了的。

我觉得你说的好多人过于强调什么面向对象, 物极必反, 这个是对的。 但是也没必要过多的强调扎马步, 正是因为后者是必要的(肯定要经历的),所以反而是自然而然的。

你随便拽两个成长背景相似,有相同工作年限, *认真*的程序员, 无论他们一开始选择的学习道路是什么, 水平能有多大差别?

相反, 真正有巨大差别的人往往来自于不同的成长环境, 在入行前就具有不同的看待问题的方式了。 但是这些东西也不是改变不了的, 关键在于思维和方法的训练了。

#8楼

2008-05-12 14:10 by 巫云
从兄弟的文章里学到一个道理:
找工作的时候,一定要往高里喊,本来值4000一定要喊6000,你要是喊2000他以为你只有2000的水平,既不从能力上重视你,也不给你涨工资。

#13楼

2008-05-12 14:45 by 2008年的梦想
支持,不过开头的故事讲的不怎么样。悬念不足。

#16楼

2008-05-12 15:53 by 丁学 
博主说得非常好,好多时候我也在想,面向对象真的是软件业的救命良药?怕是害命的时候也不少

#18楼

2008-05-12 16:06 by aaaa [未注册用户]
会思考的人改变方式.懂得改变方式的人才能体现其精髓.

#19楼

2008-05-12 16:41 by 一步
楼主说的在哩,但是我还是感到迷茫的就是.语法会了.编程思想有了,我们还少什么.简单的编程+实现过程不行,那么还要什么

#20楼

2008-05-12 16:54 by Allen Lee
建议你看看《Object Thinking》这本书(http://www.amazon.com/Object-Thinking-DV-Microsoft-Professional-David/dp/0735619654)。

#21楼 [楼主]

2008-05-12 20:30 by 小余(Yice)
--引用--------------------------------------------------
@小猪凯
我觉得应该具体情况具体分析.
无论是面向过程还是面向对象,都只是手段,不是目的.
而我们要做的就是为达目的不择手段.

其实文章就是希望初学者知道这些手段,学会使用这些手段。
--------------------------------------------------------

#22楼

2008-05-12 20:59 by 炭炭
以前做手持设备开发,纯C的语言,我就是按照面向对象的思路进行代码封装和复用的
______________

大哥,面向对象仅仅是封装复用吗?

#23楼 [楼主]

2008-05-12 21:02 by 小余(Yice)

--引用--------------------------------------------------
@怪怪
呃... 说实话, 扎实的开发功力是容易练就的, 就像你说的, 多下功夫, 虚心学习就好了。 我指的分析事物的能力, 是与编程无关的部分; 在我看来,这部分才是经常被忽视的。
确实,基础能力只要努力和刻苦就会学习的很好,关键在于现在能安心静下心却学习的人很少了。这才是我写这些文章的主要目的。
有了扎实的基础,我们才能更好的谈后续的问题,分析也是在扎实基础的前提下才可能做得很好,如果开发的基本能力都存在缺陷,你怎么让别人相信你的分析能力很好。

我觉得你说的好多人过于强调什么面向对象, 物极必反, 这个是对的。 但是也没必要过多的强调扎马步, 正是因为后者是必要的(肯定要经历的),所以反而是自然而然的。
其实这个问题对于初学者而言虽然是浅显的道理,但是让他们真正认识却并不容易。

你随便拽两个成长背景相似,有相同工作年限, *认真*的程序员, 无论他们一开始选择的学习道路是什么, 水平能有多大差别?
相反, 真正有巨大差别的人往往来自于不同的成长环境, 在入行前就具有不同的看待问题的方式了。 但是这些东西也不是改变不了的, 关键在于思维和方法的训练了。
如果学习的内容都是相同,我想差距不会太大。如果说一个没有学习面向过程,我想对于程序的理解上可能存在差距。这个也是归根到底在于人的问题。现在很多初学者对于学习上不是什么时候学的问题,而是基本不学。浮躁的心理让他们很难在入门后再回头去学习以前的基础,所以就造成开发中虽然能工作,但是基础浮虚的现象。

#24楼 [楼主]

2008-05-12 21:09 by 小余(Yice)
--引用--------------------------------------------------
@巫云
从兄弟的文章里学到一个道理:
找工作的时候,一定要往高里喊,本来值4000一定要喊6000,你要是喊2000他以为你只有2000的水平,既不从能力上重视你,也不给你涨工资。
文章能让你明白这个道理我也很奇怪,哈哈,不过找工作谈工资本身就是一个买卖,存在有叫卖与讨价的味道,确实存在有心理上的一种战术,不过至于进入公司之后,我想更过的在于你自己怎么表现自己的能力。

#25楼 [楼主]

2008-05-12 21:11 by 小余(Yice)
--引用--------------------------------------------------
@2008年的梦想
支持,不过开头的故事讲的不怎么样。悬念不足。

哈哈,下次会改进,让文章的可读性更强一点

#26楼 [楼主]

2008-05-12 21:15 by 小余(Yice)
--引用--------------------------------------------------
@一步
楼主说的在哩,但是我还是感到迷茫的就是.语法会了.编程思想有了,我们还少什么.简单的编程+实现过程不行,那么还要什么
还要学会思考,学会交流,学会发现问题的本质来应对不断出现的新技术。

#27楼 [楼主]

2008-05-12 21:17 by 小余(Yice)

--引用--------------------------------------------------
@Allen Lee
建议你看看《Object Thinking》这本书(http://www.amazon.com/Object-Thinking-DV-Microsoft-Professional-David/dp/0735619654)。
谢谢推荐,抽空我会好好把这本书读一读。

#28楼 [楼主]

2008-05-12 21:23 by 小余(Yice)
--引用--------------------------------------------------
@炭炭
以前做手持设备开发,纯C的语言,我就是按照面向对象的思路进行代码封装和复用的
______________
大哥,面向对象仅仅是封装复用吗?

面向对象的不止于此,但是你可以在面向过程的程序开发中借用其中的思想,提高代码的质量。

#29楼

2008-05-12 21:31 by 皇帝的新装
lz提个方法论让我们参考一下,谢谢!!

#30楼

2008-05-13 08:55 by 小猴子
我自己的感受是:
程序员的能力主要体现在思想层次、基本功主要还是开发工具的掌握。
要想提升自己,多学学数学,特别是离散!

#31楼

2008-05-13 10:49 by 球球
标题有点问题,改成 请初学者不要面向对象会更好点,不过说实话,现在正规点大学会连汇编,C,数据结构,编译原理什么的都不讲就开始先讲C#吗?那种事情只有培训机构才干的出来吧,而培训机构主要的目标是培养软件蓝领........

 来自:毒论--不要再面向对象(续)

分类: 设计模式 系统架构

上一篇:我们应该讨论什么? 就面向对象的讨论所引发的一些思考   下一篇:面向对象还是面向过程——铜弹无毒