`
jiagou
  • 浏览: 2516851 次
文章分类
社区版块
存档分类
最新评论

[全程建模]关于最佳实践的思考——谈实事求是

 
阅读更多
[全程建模]关于最佳实践的思考——谈实事求是
1、引言
1978年,先生重新提出了实事求是这四个字,大家戏谑的将之称为黑猫白猫理论:不管是黑猫白猫,抓住老鼠的就是好猫。
可是,事实确实如此么?我们仔细分析一下看看。
如果一只猫抓住的是一只死老鼠?那怎么归类它呢?
尤其当它抓住的,是其他猫杀死的却因为数量过多而丢弃的死老鼠,我们又该如何看待这只猫呢?
也许作为其他行业我们可以不考虑,毕竟中国历史上也有类似的定义方式,比如说秦汉时期甚至到唐初都还有按照斩获的人头数定军功做法,这也是“李广难封”这个著名的成语出现的根源。
不过,作为我们程序员这个社会职业分类来看,我们不得不更慎重的看待这个问题,所以,才有了下面的分析:
假设一个地方(一个有限大小复杂度确定的区域),有1000万只老鼠,一只猫,一年只抓到了一只老鼠,它还是好猫么?
说不定人家猫都已经和老鼠达成协议,把自然死亡的老鼠拿过来,让它去邀功的。
再深入一点,如果有1000万只老鼠,他一年抓住了10只老鼠,它是不是好猫?
但是,如果还有一个同类型,复杂度相同的地方,只有5只老鼠,另外一只猫一年把这5只老鼠都抓住了,那它是好猫么?
这两只猫对比,哪一只更好呢?
从这里看,如果复杂度足够高,而不是简单的平面环境或者少量的遮挡隔断,那么可以肯定地说:最后那只绝对比前面那只好。

这种问题在软件开发中,只能认为是一种假设,而不是实际情况。
这是因为,软件系统的不同模块之间的难度、复杂度、规模的计算方法,到目前为止,也无法让所有的研究和技术人员认同[有时间可以看看钱五哥翻译的功能点做软件度量的那本书,不好意思,书名忘记了],因为这些度量方法都获多或少的存在着一些问题,而且,不同的模块不同的技术难点对于不同的技术人员来说他们的难度、复杂度也是不同的,因为每个人都有自己的侧重点和兴趣点——说自己完全没有兴趣点的,那肯定不是程序员。
但是,这类问题是实实在在存在的,不仅仅对于项目管理者,对于人力资源部门,对于整个企业的管理者来说都是十分重要的,他们必须要弄清楚自己身边的这些人是否真的有能力,或者胜任目前工作的能力,同时还有愿意工作的动力——只有能力,没有动力,那是不可能做好程序员的。

2、最佳实践
最近这6年来,估计中国的程序员的耳朵都被一个词磨破了,那就是“最佳实践”!
现在好像任何一个软件开发、管理或者其他方面的方法,只要被提出来,大家都愿意用最佳实践这个词往上套,似乎除了这个词汇,中国的语言已经贫乏到了无法表述的地步。
我们把这个词拆开来看:
最:表示某种属性超过所有同类的人或事物[from google金山词霸]
佳:美;好的意思。[from google金山词霸]
两个合起来,最佳,就是最好的意思,也就是没有比他更好的了。
可是,我们可以看到很多公司或者组织宣传一些同类的方法都是最佳。
实践:
人们常说的这个实践有着诸多的含义,但我以为最核心的含义就是主观与客观相结合.
实践与思想相互共同。从广义上来讲,实践是思想的内部斗争和与外斗争之总合,或者说实践是对于人的物质活动和思想活动的统称。实践以思想为本。没有思想参与的物质活动是不足以称之为实践的.思想是实践最基本的东西。所谓思想的与外斗争,就是思想与物质的斗争。从广义上来说,实践即思想,思想即实践。
思想与实践相互区分。其义为:实践为思外的实践,思外的实践与思内的虚践相区分。狭义实践与狭义思想相区分。狭义实践与狭义思想的区分错综而复杂。从最根本上来讲,狭义实践指思想的与外斗争,即思想与物质的斗争,而最基本的则是思想与狭义物质的斗争。狭义思想指思想的内部斗争。通常所说的实践是指狭义的实践.
在思想与物质的关系中包含着这样的两个方面,即从物质到思想和从思想到物质这样的两个方面.从物质到思想是物质对思想的改造,而从思想到物质则是思想对物质的改造.最狭义的实践则专指思想对物质的改造.即从思想到物质.
什么是实际?从最广义上来讲,实际是指一切物质,从狭义上来讲,实际是指实践和与实践相关的事物。从最狭义上来讲,实际即实践,实践即实际。[from 百度百科]
上面的看完了,最佳实践这个词汇应该定义的很清楚了,这里就不再罗嗦了。

3、这些年有哪些被宣称为最佳实践的呢?
………………
太多了,XP好像是最早提出最佳实践这个词汇的,Kent Beck提出的12个最佳实践:
1, 计划游戏—通过结合使用业务优先级和技术评估来快速确定下一个版本的范围。当计划赶不上实际变化时就应更新计划。
2, 小版本—将一个简单系统迅速投入生产,然后以很短的周期发布新版本。
3, 隐喻—用有关整个系统如何运行的简单、众所周知的故事来指导所有的开发。
4, 简单设计—任何时候都应当将系统设计的尽可能简单。不必要的复杂性一旦被发现就马上去掉。
5, 测试—程序员不断地编写单元测试,在这些测试能够准确无误地运行的情况下,开发才可以继续。客户编写测试来证明各功能已经完成。
6, 重构—程序员重新构造系统(而不更改其行为)以去除重复、改善沟通、简化或提高柔性。
7, 结对编程—所有的生产代码都是由两个程序员在通一台机器上编写的。
8, 集体所有权—任何人在任何时候都可以在系统中的任何位置更改任何代码。
9, 持续集成—每天多次集成和生成系统,每次都完成一项任务。
10, 每周工作40小时—一般情况下,一周工作不超过40小时。不要连续两个星期都加班。
11, 现场客户—在团队中加入一位真正的、起作用的用户,他将全职负责回答问题。
12, 编码标准—程序员依照强调通过代码沟通的规则来编写所有代码。
我现在真的不知道Kent Beck在最开始的时候是否使用了Best这个词,我现在也没时间考证了。如果有知道的朋友可以贴在下面,用实际的引用信息说话,来弥补本文的不足,这里先感谢了。

现在我们搜索最佳实践这个词汇,可以得到很多,比如:ANT十五大最佳实践、PL/SQL 最佳实践、Web 前端优化最佳实践之Cookie 篇……
好像最佳实践这个词已经成为一个名词而不是附带形容词的名词了。
说到这里,我个人认为,实践可以有很多,但是,是否最佳的就是适合的?我们是不是要打上一个引号呢?
前几天在软工板块里面,一个人(他自己也已经承认,非技术出身)的人在大家激烈讨论的时候,突然提出日报也是最佳实践?(http://topic.csdn.net/u/20080825/04/3d11015d-a628-466d-bb50-128fcfd168b6.html)——这成了本文形成的起因。
最佳实践这个词在几年内会不会也同曾经火热一时的那些培训、概念一起被大家扔进垃圾筐呢?被用滥了的词汇,还能表示多少含义?还能让人信服么?要知道,我们这个行业的主体是技术人员,是程序员,程序员的本质就是务实,我们必须这样,才能把一个一个字符组成有效运行解决问题的程序,我们靠的不是到处宣扬的最佳实践这四个字!

4、用事实说话
这里表示一些观点,肯定会有人反对,但是,人不可能因为有人反对就放弃,就好像说,我在软工板块的管理严格,完全按照规定执行,就因为有人说连csdn里面都有人对我不满,我就要放弃,那是不可能的。csdn里面的人未必代表csdn这个社区整体的声音,每一个群体都有它的主线,也必然有它的反对声音,这和人类社会的发展是完全一样的,矛盾冲突不断演化,最终促进了整个社会的发展,使得我们从奴隶社会到封建社会,一直到社会主义社会。
群体的主体才能决定群体的发展方向,当然,也不排除在很特殊的时期,主体被一些不正确的方式引导而出现走回头路的情况,这在人类历史的发展过程中上也是能见到的,例子,这里就不举了。
关于最佳实践这个词汇,我个人认为,不要什么都套用,不要毁掉所有汉语中的好的词汇,比如说现在大家已经几乎不敢用的:同志、小姐……
人类可以创建很多的实践,但是,这些实践也只能解决特定范围特定情况下的一些问题,也就是说,在某些情况某些范围下,他可能是最佳实践,但是,它并不能代表普遍意义的最佳。
日报是最佳时间么?在xp里面就完全没有,xp里面强调更多的是站立会议的形式。

5、结束
最佳,都是有范围的,不要上来就说什么是最佳,什么就不好,讨论是可以的,但不要认为别人反对你的观点就是在打击你,不要认为,别人说出了自己的看法来证明你的观点错误,你就认为别人心胸狭隘,这种评价是不合适的,能给别人做评价的人,至少要认识几年或者十几年才好评价,否则,你的这些评价不过是表示你自己就是如此一个人而已。
想起了以前一片文字中写的一句类似的话:当上帝没有让你来代替他做上帝的时候,你不要自己把自己封为上帝!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics