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

发布时间:2026/7/6 4:41:41
程序物语(十)守望内心的宁静 世界杯大战正酣球迷们和伪球迷纷纷摇旗呐喊玩得不亦乐乎。一些技术社区也不消停讨论声此起彼伏。请注意是讨论不是对仗。因为论题实在太过醒目邀月也不得不看了几篇文章当然还有一些回复。我注意到一个现象回复的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因素。这里有几篇文章可以参考下对于大型公司项目平台选择j2ee的几层认识一 - HAL9000 - 博客园而这其中技术平台占的比重相对要小很多。有一些原因■并不是最优秀的开发语言、平台就理所当然被采用。■从整体上看也没有一个万能的无往不利的开发环境能解决所有的应用场景即使技术方案是完美无缺的项目工期、旧平台交接、成本等其他因素也会导致问题复杂化。■开发人员的认知编码思路等也会对开发技术产生影响。换句话说水平好的差点工具也能充分发挥。水平略弱的即使好的工具也会导致整个项目整体很差。■客户的应用场景是有差异的。比如每天几百几千的访问量对性能的要求就不那么苛刻了。如果说没有一个公认的叫得响的c#/.net平台应用程序解决方案换句话说没有选择C#/.net作为解决方案那有可能是各方面的综合因素不全具备而不一定是纯技术角度的思考。当然也跟.net的宣传策略和市场定位有关。即便从纯技术角度来看只要性能的差距不太影响对客户感觉一般会通过硬件来改善。这不是说硬件是万能的有时候优良的数据库和架构是至关重要的可能很多人会有感觉费尽心机作的性能优化被一个蹩脚的select拖死了而项目中的技术又可以分为两大类一类是实现所有业务功能的开发技术。一类是保证软件能够成功开发的管理技术。或许两三个人开发的应用程序它的管理成本不高。但随着应用程序规模增加三十人以上的项目开发团队其管理的成本就急剧增加了特别是技术以外的成本。所以说项目中采用什么技术有时候并不是看技术平台是否优秀而是项目某个环节卡了壳。有人说以技术管理技术是一种悲哀以完全不懂技术的人管理技术是一场更大的悲剧而认为自己很懂技术的人管理技术大概介于这两者之间吧。师者传道授业解惑也。论道无先后三岁的女儿时常给我一些生活感悟。有时候我们就得守望自己内心的宁静。这是我学习的态度。谨以此文自勉自戒。