程序物语(十)守望内心的宁静

世界杯大战正酣,球迷们和伪球迷纷纷摇旗呐喊,玩得不亦乐乎。一些技术社区也不消停,讨论声此起彼伏。请注意,是讨论,不是对仗。因为论题实在太过醒目,邀月也不得不看了几篇文章,当然还有一些回复。我注意到一个现象:回复的70%以上都与技术本身没有太大关联,但是回复数量还是挺可观的。

我在这里不想挺某派,贬某派,也不想摆出一副公正姿态骑墙。我只想说自己的一些感受。

一、发言的态度。

从本质上说,我们大多数的人都与技术相关,或者说大多数是程序员。我们基本可以算是同行吧,为什么我们评论他人的态度会如此强烈呢?文人相轻是古已有之的,但有句话也这么说:本是同根生,相煎何太急!我们是否有必要像文革那样给谁扣个大帽子,拉去游行?我们社会开放了,公众的容忍度也提高了,调侃两句也合情合理,最可怕的是众口一词,不论道理,乱棍打死!扪心自问:我们对自己的家人,对自己的同事,对自己的事业伙伴,也是这样的语气么?

可能会有人说,明明是作者不学无术,误人子弟。那我想问一下:谁的观点是完全正确的?谁对事物的认识是一成不变的?我相信,读者有这个分辨能力的,只是可能需要在评论前先思考一下。写技术文章和其他文章不同,它最基本的就是讲求严谨。以测试为例,一两个case不能证明某原始设计有误,或者存在性能瓶颈等等。因为测试环境要求太苛刻了。
比如操作系统,仅windows系统就有个人版/服务器版,个人版又有win2000/wwinxp/vista/win7等,服务器又有win2000/win2003/win2008等,还有linux/unix、Solaris等等

开发UI环境又有vistal studio 2003/2005/2008/2010、Elipse 3.X/Netbeans 6.X等,运行基础运行环境CLR/JRE等。

开发者使用的机器配置,如CPU/内存/硬盘等

测试标量的其他干扰条件。如其他正在运行的程序等。

测试所使用的工具是否完全公正。

测试的重复取样及离散性要求。

完全运行环境的真实模拟。

并发测试。

………………

从这个意义上说,个人基本上无法完成真正意义上的工业测试的,结论也就不那么公允。道理很简单,个人一般不会买30个(统计中大样本容量的最小集合数,也有理论认为是24个,邀月注。)不同频率的Intel和30个不同的AMD处理器来作某项性能测试。(当然,除非你非常富有,并有充足的时间)又比如你可能不了解某个某个版本的Framework对某几个类型的CPU作哪些优化。

因而,我们一般得出的一个技术结论,应该是在特定条件下的不完全样本的不充分测试中得出的一个不完全绝对的结论。它有可能是失之偏颇,甚至完全是错误的。因此,我们讨论的目的,不是要得出一个绝对正确或者完美的结论,而是在讨论中我们每个人的认识有所深化。有人说,演讲者最重要的不是口才,而是思考的深度。我也可以理解为不是谁的声音高,支持者众就代表正确,当然也不是支持者寡就代表错误。俗话说,理不辩不明。只是希望我们每个人都加深自己的认识,有收获。这是一种求学的态度,与年龄、社会地位无关。

二、看问题的角度。

我想,我们大多数人应该承认:微软是一家有创新活力的业界领先的IT公司,而SUN(目前已经归属Oralce)也是一家优秀的平台解决方案提供商。这与c#/java本身无关。那么为什么那么多人要说微软的.net技术不适合大型企业应用或者说高负载、高并发分布式应用呢?

我想这可能有几个背景:
1、市场策略。微软有些招摇了,操作系统、特别是PC,办公系统、数据库、开发语言、企业协作、商务智能,这是多么庞大的生产线。而sun则要低凋一些,给人的印象是专业的企业级应用方案提供商,不花哨。
2、用户体验。微软的钱赚在明处,所以招人恨,即使几千块的操作系统,也会卖得让人眼红。因为用户众多,挑刺者也众,而跟风者居多。而sun/Oracle一个项目,不动声色的几百万$收入囊中。时间长了,慢慢约定俗成:microsoft的产品是供人娱乐,而SUN才真正提供企业应用。
3、最重要的是:微软不开源,而sun开源。因为不开源,用户就担心,万一那天什么什么了,我们不是受制于一家公司么?前一阵子的黑屏事件,更加剧了大小企业对此的恐慌态度,如同人们担心每天骑车会不会发生交通事故一样。说起来也怪,从概率学的角度讲,骑车出事故的概率并不是0,可数以亿记的人们并没有因此而不骑车。其实就是开了源,小企业和用户也没有实力来研究和优化它,最多满足一下某些好奇的心理,觉得踏实些。
4、成本费用。MS的全部是商业软件,要花钱,这是市场规律。SUN的方案也要花钱,可能花更多的钱。要不然它也没必要将自己卖给Oracle,因为它首先要生存。再好、再领先的技术在市场面前有时不得不低下高昂的头。你买东西时,会不会觉得几百万比十几万的东西要可靠一些呢?就像买衣服,有时候,价格就是面子,是某种象征,不管它是否合身。

有点扯远了,那么我们在这些背景下看,C#究竟算不算是一种优秀的开发语言呢?它的性能对它本身的优势、劣势究竟有何影响?

这里抛开真正的测试不谈,因为我没有能力作全面的测试。原因除了测试条件,还有我对c#的认识还很片面。选c#就是选平台,.net平台。那为什么选择(或不选择).net/c#?我想从项目管理几个主要策略考虑:1、政治风险;2、旧有平台的迁移成本;3、项目的市场运作。4、X因素。这里有几篇文章,可以参考下:
http://www.cnblogs.com/haoxiaobo/archive/2010/06/01/1748966.html

而这其中,技术平台占的比重相对要小很多。有一些原因:

并不是最优秀的开发语言、平台就理所当然被采用。

从整体上看,也没有一个万能的无往不利的开发环境能解决所有的应用场景,即使技术方案是完美无缺的,项目工期、旧平台交接、成本等其他因素也会导致问题复杂化。

开发人员的认知,编码思路等也会对开发技术产生影响。换句话说,水平好的,差点工具也能充分发挥。水平略弱的,即使好的工具也会导致整个项目整体很差。

客户的应用场景是有差异的。比如,每天几百几千的访问量,对性能的要求就不那么苛刻了。

如果说,没有一个公认的叫得响的c#/.net平台应用程序解决方案,换句话说,没有选择C#/.net作为解决方案,那有可能是各方面的综合因素不全具备,而不一定是纯技术角度的思考。当然,也跟.net的宣传策略和市场定位有关。
即便从纯技术角度来看,只要性能的差距不太影响对客户感觉,一般会通过硬件来改善。这不是说硬件是万能的,有时候优良的数据库和架构是至关重要的,可能很多人会有感觉:费尽心机作的性能优化,被一个蹩脚的select拖死了!而项目中的技术又可以分为两大类:一类是实现所有业务功能的开发技术。一类是保证软件能够成功开发的管理技术。或许两三个人开发的应用程序,它的管理成本不高。但随着应用程序规模增加,三十人以上的项目开发团队,其管理的成本就急剧增加了,特别是技术以外的成本。

所以说,项目中采用什么技术,有时候并不是看技术平台是否优秀,而是项目某个环节卡了壳。

有人说,以技术管理技术是一种悲哀,以完全不懂技术的人管理技术是一场更大的悲剧,而认为自己很懂技术的人管理技术,大概介于这两者之间吧。

师者,传道授业解惑也。论道无先后,三岁的女儿时常给我一些生活感悟。有时候,我们就得守望自己内心的宁静。这是我学习的态度。谨以此文,自勉自戒。

犹豫几次,还是决定把这篇文章发出来。

所有程序物语系列文章:

http://www.cnblogs.com/downmoon/category/226146.html

 
posted @ 2010-06-25 12:49  邀月  阅读(3737)  评论(14编辑  收藏  举报