给.Net程序员和WEB程序员建议

时间:2021-01-02 04:03:52
我们的环境:皆因微软而起,又因微软而终。 
    第一章:.net篇。

    我们以一个寓言开头:   庄周家境贫寒,于是向监河侯借粮。监河侯说:“行,我即将收取封邑之地的税金,打算借给你三百金,好吗?”庄周听了脸色骤变忿忿地说:“我昨天来的时候,有谁在半道上呼唤我。我回头看看路上车轮辗过的小坑洼处,有条鲫鱼在那里挣扎。我问它:”鲫鱼,你干什么呢?‘鲫鱼回答:“我是东海水族中的一员。你也许能用斗升之水使我活下来吧。’我对它说:”行啊,我将到南方去游说吴王越王,引发西江之水来迎候你,可以吗?‘鲫鱼变了脸色生气地说:“我失去我经常生活的环境,没有安身之处。眼下我能得到斗升那样多的水就活下来了,而你竟说出这样的话,还不如早点到干鱼店里找我!’”

    .net发布有7年了,但是微软有一点做得非常非常不好:在不断发布新版本Framework的时候,却没有去实现.net的大规模普及。套用微软官方的术语:您可以选择我们的Vista系统,已经内置了.netframework3.0.Windows7则内置了3.51.如果你去相信这些与现实世界不着边的鬼话,那么你就是上面故事中的那条鱼。现实世界是VISTA的装机率很不乐观,而装机量最大的XP则根本就没有内置任何版本的.net.2010年之前(也就是监河侯收税之前),你仍然会面临很多的XP客户。

    所以,至今仍然有一个最根本的问题摆在我们这些.net程序员面前:客户装了.netFramewok没有?如果没有装,你的程序写得再好再漂亮都是徒劳。你怎么去让他装?怎么和他解释这个必要性?如果他不愿意怎么办?能不能实现自动化安装?从前我在一些朋友的博客里也时常留言有这个观点,无外乎归纳出这么一种解决办法:

    在项目发布中把.net集成封装进去,让它在客户那里实现自动安装。

    这种做法固然是可取并且是必须的,但是存在两个缺陷:

    如果我们发布的是不需要安装即可运行的绿色程序怎么办?

    把2.0集成进去还勉强可以接受,但是如果程序中使用到3.0甚至是3.5的技术,难道你要把60多M的3.0(忘记是多少了,反正是大于或等于60M)和180多M的3.5也集成进去?记得有一位朋友曾经在某篇博客的留言中说,对于企业级程序,集成这些进去是可以接受的。但是,现实中没有没有那么多的“企业级”。我们需要的是实实在在的面向广大群众。以他们能够接受的方式来传播我们的程序。

    面对客户,你不能以程序员的观念去和他们谈问题,他之所以找你做程序,是因为你是程序员,而他不是

    所以,“可靠性”、“易于开发”、“易于移植”、“稳定性好”等等这些字眼,对客户来说,全是扯蛋,他们最关心的就是一点:“方便使用”。

    我的解决方案,谈不上能够本质上得到解决,只能说是3个建议,本着上面提到的几点:

    如果你的应用程序面向群众广泛,那么,只能建议你最低最低限度的,只使用2.0就够了。然后封装个23M的framework进去。至于LINQ,拉姆达表达式之类的概念,还是等你拥有了比较稳定的客户群体之后再去在版本升级中考虑吧。要知道,好事不出门,坏事传千里,如果在面向大众化的程序中要求安装3.0和3.5,90%会遇到某个热门论坛或者某个热门评论说“要装个什么百多M的东西”、“为什么我的电脑不能运行”,“建议大家不要下载”的时候,足以给你造成很大的客户损失,到时候你就是丞相遇到兵了,个中滋味就慢慢体会吧。今天是2008年12月6日,这个建议足以保证在未来2年内有效。

    如果你的程序是针对性的面向某些客户群体,那么可以使用3.0和3.5,但是一定要准备好各种各样的台词,以花言巧语、诱骗、欺诈、甚至是威胁来宣扬.net的必要性(对于公司企业客户,他们是可以接受的),因为你要时刻警惕来自Java、PHP、WIN32等竞争对手公司的商业性贬损。要怪就怪微软把这种本来是他们该做的事情丢在我们头上。

    “ASP好还是JSP好,JSP好还是ASP.NET好,ASP.NET好还是PHP好,.net好还是JAVA好……”,这样的月经话题时常出现在各大程序员社区,并且已经被视位弱智议题。但是,面对现实情况,你必须有能力向客户解释清楚:为什么要用.net开发,它的好处在哪里,为什么别人用JAVA开发而你不用,为什么别人用VB6,VC6而你不用,为什么别人用PHP而你不用……,以客户能够理解的方式,以有利于客户的观点来阐述兼容性、稳定性、版本支持、易于二次开发等问题,而不要去谈真泛型和假泛型、单一继承和多重继承、字符串操作效率等等客户不关心的东西。

    最幸运的一点,如果你本来就是为VISTA(以及更高版本OS)系统开发程序(例如VISTA优化大师),那么什么都不需要担心了。

    基于我们的职业着想,亲自为我们自己的亲戚、朋友、面对面的客户装上.net,也许你不能为天下所有XP用户都做这个事情,但是当你的身边人能够以一种良好的体验来感受到你的程序自身所带来的便利性和帮助性的时候,他们自然会为你做义务推广,到那时,客户们也就不介意你那个“百多M的东西”了。这不是帮助谁,而是为你自己。做的人多了,客观上自然也就会体现出效果了。当然,前提条件是应用程序自身要做好,要不然暴雪或EA也不敢要求客户保证“directX9.0C”(这东西同样也是20多M,但是XP-SP2却内置了,你说微软它歹毒不?)。

    写给“XX花园后续版”、“XX论坛精简版”、“XX*OEM版”的作者和电脑城装机人员,本着大家都是搞IT的同行,也请你们在工作中为我们稍微提供一些便利性,顺手放个framework进去,对大家都有益。将来的Windows7时代也同样要靠你们帮助的(那时候会有8.0、9.0问题)。

第二章  Web篇

    第一次世界大战期间,同盟国开发了一种秘密武器,叫 NetScape,通过宣扬*信息来专杀协约国的政要。人都有七情六欲,协约国的政要们官位再大,也终究是人,也抵御不起这个诱惑,终于一个二个地败走,协约国眼看这损失惨重,于是也不甘视若,开发了一个同等威力的武器,叫 Internet Explorer,这个漂亮的玩艺让南斯拉夫的王储,费迪南大公给迷上了。天天迷恋于上网收集不健康信息,无心政务,国内流氓横行,分裂主义四起,激起民愤,最终爆发了世界大战。战争的结果是:协约国依靠强大的经济手段,免费将 Internet Explorer 空投到欧洲,彻底瓦解了同盟国人民,不言而喻,这场是非难说的战争,就让协约国以这么一种是非难辩的方式给战胜了。

    Internet Explorer 实际上并不是免费的,再说,飞机飞那么远也要耗油的,谁来付钱呢?当然是同盟国赔了。同盟国中,尤其德国赔得最厉害,穷得连当初生产NetScape的鲁尔工业区都转手卖了几次。最要命的是,希特勒为了减少国内开支,对德国的科技公司大量裁员,德国的程序员穷困潦倒,纷纷逃离。

    古人有云:狗急跳墙,穷则思变。这不,德国发毛了,联合起太阳帝国搞起 Java Applet,联合意大利共同开发了JavaScript,德国自己开发了新武器:Navigator.就这样,装备了三件武器的坦克开进了协约国的阿尔萨斯、洛林、波兰。这一切,都归功于德国的科学家阿尔索斯。古斯塔夫。它的观点是:

    E = NJ2

    Energy = Navigator × JavaScript × JavaApplet

    旧协约国看到这个情况,慌了神了,张伯伦和罗斯福赶紧商议成立新的军事联盟,这其中,有两位人物发挥了举足轻重的作用,一位是美国富豪,保尔。盖茨,另一位是从德国逃出来的程序员,他的名字叫阿尔伯特。爱因斯坦。保尔提供资金支持,爱因斯坦提供技术支持,继续搞基于免费策略的“经济战术”,想要拖垮轴心国。爱因斯坦的观点是:

    E = MC2 [爱因斯坦版本]

    Energy = Mhtml× Jscript × Active

    正在这两个阵营打得水深火热的时候,希特勒接到了斯大林打来的电话:“你这老不死的东西,20年前我还和你并肩打英法,现在你居然和那个弹丸岛国搞起反共产国际协定了,你等着,明天我就去共你家的产!”,就这样,俄罗斯携带着大批马列主义部队站在了盟军一边。幸好地球是圆的,所以既能够在东方联合美军打太阳帝国,又在西方联合英美联军扫荡德意军队。结局注定了:易伯河会师标志着Navigator彻底没落,广岛事件和东北战役标志着JavaApplet被打入冷宫。但是,事情远远没有这么简单。

    这当中有两个插曲:自从珍珠港事件之后,美国一直在研究太阳帝国究竟是使用了什么武器能够这么快速给自己带来如此惨重的伤害。终于,在中途岛战役中,美国获得了这个技术,并且秘密开发自己的新型全球战略。据一位不愿透露姓名的内部高官消息:事因三本五十六崇洋媚外,偏要把座机引擎换上Internet Explorer V6型发动机,结果被一名美军飞行员使用最新研发的 野猫烧香 导弹击中。当时这位年轻的飞行员就是日后的美国第51届总统:乔治。布什。

    在硫磺岛战役中,美军充分认识到这么一种战略观点:太阳帝国的海军偏向于发展大型炮舰。虽然威胁力强大,但是容易遭到敌军锁定,而且行动缓慢,一旦遇到行动力灵活的幽灵潜艇和快速轰炸机编队,就毫无招架之力。于是,美国人开始吸收经验,研制了一批航空母舰编队和各大司令部,分布于世界各大洋大洲,其中,就有装备webform动力的第七舰队常驻太平洋,随时防止太阳帝国再起、装备了XML动力的第四舰队常驻印度洋,特别关注中东局势、装备了IronPython级超音速运输机的第101空降师常驻地中海。而五角大楼自己则通过WebServices频道随时指挥着这一切。

    在瓜分战后欧洲地盘后,世界格局开始变动了。在斯大林格勒战役中Navigator落入了俄罗斯手中,并且被俄罗斯的宝林斯基教授改造成一个新的武器:Firefox, 宝林斯基指出:爱因斯坦的理论存在很多不稳定性和不安全性,而且核心技术掌握在美国人手中,这样很不利于俄罗斯统一世界,最终实现共产主义大社会的理想。于是,俄罗斯在E = NJ2的基础上,开始研究出新的理论观点:

    E= FS2

    Energy = Firefox × JavaScript × ActionScript

    爱因斯坦理论的不完美性,同盟国也有发现,为了生怕俄罗斯制造出超级武器,爱因斯坦的继承人,同盟国的 史蒂芬。霍金 根据旧有的E=MC2和当年诺曼底战役和解放巴黎战役中缴获的Javascript,催生并强化了西欧盟军自己的Jscript. 并且提出了一个更富于时代需求的诠释:

    E = MC2 [史蒂芬。霍金第一版本]

    Energy = MSXML × Css ×JScript

    柏林墙架起之后,欧洲国家心理很不是滋味:他娘的,你们两个要打架也别到我们的地盘来打。但是,这种话也只能在心里自我安慰一下,谁也没有胆量敢说出来。唉,还是暗地里慢慢来吧,将来有实力了再说。于是,一些欧洲国家向美国打了请示报告:“大哥,我们眼下缺这缺那的,煮顿饭吃都不容易,我们想自己搞个钢铁承包责任制,您看行不?”,大哥说:“去去去,要搞什么自己搞去,以后这种鸡毛蒜皮的小事少来烦老子”。于是,欧洲钢铁联盟就这样建立了,其实,他们内心想的是:“今天我管你叫大哥,明天我要你管老子叫爹”。

    “古巴导弹危机”致使苏联的颜面尽失,为了报仇雪恨,宝林斯基已经针对史蒂芬。霍金的MSXML而开发出了更强悍的XMLHttpRequest级洲际导弹,射程更加精确。 苏联即将开展“切尔诺贝利”行动,以189枚核弹荡平欧洲。打算先杀鸡给猴子(美国)看。他们的路线图是这样的:

    E = FX2

    Energy = FireFox × XMLHttpRequest × XML

    但是,这个美好的计划破产了,捷克斯洛伐克出卖了苏联,把这个风声透露给北约。为什么?是否记得“布拉格之春”事件?

    就在核弹即将发射的前夜,一名北约特种部队士兵携带者一只短小精悍的AJAX型号无声枪,混入了克里姆林宫,暗杀了苏联总理,她的名字叫谭雅。并且从克格勃主任尤里的私人部队那里获得了不少机密资料。第三次世界大战终于没有爆发。根据这些机密资料,最终由北约司令部建立了适用于全球的终极防御理论:

    E = EX2

    Energy =  ECMASCRIPT × XMLHttpRequest × XHTML

    如今,苏联垮台了,美国也因为亚洲金融危机和雷曼兄弟公司破产带来的连锁性世界金融危机而元气大伤,还记得前面说过那个“欧洲钢铁联盟”吗?不知啥时候已经改名叫“欧洲联盟”了,趁着当年美国和苏联斗得你死我活,他们东方卖铁给苏联,西方卖米给美国,现在美国得管欧盟叫“谷哥”了。光搞经济不行,军事也要过硬,东方有个国家有句老话:“两手都要抓,两手都要硬”。欧盟强大了之后,史蒂芬。霍金终于可以不再被逼效力于美国了,于是他回到英国剑桥大学,再一次诠释了爱因斯坦的理论:

    E = MC2 [史蒂芬。霍金第二版本]

    Energy =  GMail × Chrome × Cloud

    与此同时,在世界各地分布着一些阴险的组织,尤其是最大的基地组织,长期以来,仗着美苏争斗而无人关注他们,于是便有了充足的时间和精力制造大规模杀伤性武器,他们有着共同的宗教信仰:

    E = BS2

    Energy =  Browse × ActionScript × JavaScript

    前面说到过美国曾经在二战中从太阳帝国那里缴获了秘密武器,如今,研发阶段已经成熟,这下,可以拿出来对付恐怖份子的大规模杀伤性武器,顺便给欧盟一个下马威,“小样的,你这吃里扒外的东西别得意,这个世界还是老子说了算”:

    E = NS2

    Energy =  .Net × SilverLight × JavaScript

    故事依然没有完结……

    看到这里,也应该能够想象到,浏览器中最不争气,最不安全,最不稳定的,当属IE6以及那些旧有的基于微软专用技术开发的HTML格局。各种病毒、木马、就是通过IE6给放进来的。当然firefox和IE7、IE8也不是绝对的就安全,但是根据现实情况,相比之下,还是安全多了(谢绝死扣字眼)。

    上面提到的安全性也许和我们无关,但是另一个重点:兼容性,就是和我们有关了。为了我们自己,为了我们不再因为IE6的兼容性而加班加点工作,能多一个客户告别IE6,就是为我们多带来一点希望。不要去等微软,微软铁定了心“我们的Vista系统……”,也不要去等别人。人人等别人,无人是别人。一切都要从自己做起,看到一个客户,就宣扬一次IE6的坏处,哪怕是欺骗、诱惑、威胁、行贿……等等不限手段。

    为了要做到斩草除根,我们该推荐的东西就不是Firefox,也不是chrome,更不是opera,装了firefox,人们仍然会有可能“不小心打开IE6”,甚至是“不知不觉的情况下已经在使用IE6”。所以,我们该推荐的东西是IE7.IE7和非IE浏览器的兼容性已经是非常的相像,基于firefox做的测试开发,在IE7上面的兼容性都是非常好,Firefox可以和IE6共存,但是IE7不可能和IE6共存(那些多IE绿色版本不在考虑之列,那种东西是不可能进入寻常百姓家的)。装了IE7,就是格了IE6的命。

    可能有人会说:“我装遨游,360浏览器等等等,也非常安全,没有必要升级到IE7(8)”,但是请注意,这篇文章是发布在什么地方的?是写给什么人看的?看这篇文章并且能够坚持看到这一段话的你,又是什么人? 99.99%都是程序员。你具备这种专业知识,并且拥有解决问题的能力,保证系统安全性是理所当然的,保证各个浏览器的兼容性也是理所当然的。而环顾我们的四周,千千万万个连firefox是什么东西都没听说过的人,你也就不要白费口舌去解释“基于XX内核”、“浏览器安全性”、“javascript漏洞”等等术语了。你最该做的事情,就是让他们装上IE7,不是为了使用IE7而装,而是为了“不再使用IE6”而装。同时也是为了你早日不再需要 try  XMLHttpRequest  catch{ new MSXML2 }.

    同样写给“XX花园后续版”、“XX论坛精简版”、“XX*OEM版”的作者们,希望你们也能够顺手做个集成进去,系统本质上的安全性好了,兼容性好了,支持者们自然也会多起来。

    好了

    两个章节都只是一个工作建议,如果你是.NET程序员,你就该亲自为你身边的人们安装上Framework,如果你是WEB程序员,你就该尽可能让你身边的人永远不再使用IE6(window2000等有特殊原因的客户例外),特别是非IT工作人士,学校里的小女生等病毒木马的优质客户们,即使是在因为某些原因而暂时必须保留IE6的情况下,你也必须把IE6的种种坏处传达给他们。在可能的情况下,不应该是你去被动地兼容它,而是应该放弃它,即使是在IE6上能够完美运行,也仅仅是因为一部分常用WEB标准的偶然因素。即使是必须做到IE6兼容性,也希望能够在页面上做个提示:“正确显示该页 面,需要IE7.0或者更高版本的浏览器,点击这里下载……”。如果我们每个人都能够具备这样的观念,那么IE6的消亡是指日可待。否则,在不久后的Windows7时代, 甚至是更远的Windows8时代,都还要因为这个事情而头痛,就是对整个程序员群体的莫大讽刺了。如果你是ASP.NET程序员,你就该两件事情都做。

    *世界大战的故事纯属娱乐性质的虚构,请勿通报各国领事馆。

    *有5条明显是没有看清本文原意的评论已经删除

    最好,打个义务广告:国内的.NET空间目前还是1.1比较多,建议不要买这种空间,目前已经没有必要开发1.1程序了。 国外空间基本都支持ASP.NET2.0,SQL2005.而且价格也要便宜过国内。一般300多至400RMB一年,而且还有另外一个彼此心照不宣的原因:把东西放国外比较有利于网站安全。godday(应该是这么写吧,懒得去查了)和另一个与它知名的服务商(忘记了,自己搜)那里就有。

8 个解决方案

#1


貌似有些道理
收藏

#2


说的很好,顶!

#3


我就在用IE6。
你可以找你周围20会用电脑IT业外的家人朋友抽查一下,有几个在用.NET或是JAVA应用程序?
这种东西很有用,但很局限。我不用那东西,我也不希望.net Framework占用我的硬盘,启动时偷偷进入我内存。

#4


呵呵~~历史知识还是蛮可以的

#5


有意思

#6


知识丰富啊

#7


引用 3 楼 Guilty 的回复:
我就在用IE6。 
你可以找你周围20会用电脑IT业外的家人朋友抽查一下,有几个在用.NET或是JAVA应用程序? 
这种东西很有用,但很局限。我不用那东西,我也不希望.net Framework占用我的硬盘,启动时偷偷进入我内存。


下到的软件,一看需要更高版本的.net Framework,立马卸了。。。
虽然俺的机器还不错,但是不想为了一两个软件来背个大罗锅。

#8


我就用c++  没用CLI  没什么感觉到  。现在不是流行web 吗?所以一般用户装不装。netfreamework   也无所谓了。

#1


貌似有些道理
收藏

#2


说的很好,顶!

#3


我就在用IE6。
你可以找你周围20会用电脑IT业外的家人朋友抽查一下,有几个在用.NET或是JAVA应用程序?
这种东西很有用,但很局限。我不用那东西,我也不希望.net Framework占用我的硬盘,启动时偷偷进入我内存。

#4


呵呵~~历史知识还是蛮可以的

#5


有意思

#6


知识丰富啊

#7


引用 3 楼 Guilty 的回复:
我就在用IE6。 
你可以找你周围20会用电脑IT业外的家人朋友抽查一下,有几个在用.NET或是JAVA应用程序? 
这种东西很有用,但很局限。我不用那东西,我也不希望.net Framework占用我的硬盘,启动时偷偷进入我内存。


下到的软件,一看需要更高版本的.net Framework,立马卸了。。。
虽然俺的机器还不错,但是不想为了一两个软件来背个大罗锅。

#8


我就用c++  没用CLI  没什么感觉到  。现在不是流行web 吗?所以一般用户装不装。netfreamework   也无所谓了。