说到PHP,可能最容易让人想起的就是著名的LAMP架构(Linux + Apache + MySQL + PHP),而这全开放的平台似乎和"封闭"的微软技术距离比较远。不过微软其实一直没有放弃对PHP的"追求",这次演讲谈的就是微软在这方面的努力,以及取得的成果。我推荐这个幻灯片的主要原因之一,便是它写的非常有水平,尤其是开头一部分。在幻灯片一开始阐述了微软对待开源的态度,希望和PHP的同志们拉近一些距离:

嗯,就是这个观点:"微软已经不是当年的微软了",它变了,变得怎么样了呢?变得拥抱开源了:"开源的朋友们,不要看到"微软"两个字就心生厌恶,来,抱一个"。此外还引用了微软首席软件架构师Ray Ozzie(如果我没有认错的话)的言论:
I think any company these days, any technology provider, even Microsoft, has to find the right balance of being a contributor and user of open source.
我认为如今任何的公司及技术提供商,即使是微软,也必须在开源的用户和贡献者中寻找一个合适的平衡点。
如果说Ray Ozzie可能还是在"王婆卖瓜"的话,那么Linux创建者、开源领袖Linus Torvald最近发表的话语应该更有"参考价值":
Oh, I'm a big believer in "technology over politics" ... There are "extremists" in the free software world, but that's one major reason why I don't call what I do "free software" any more. I don't want to be associated with the people for whom it‟s about exclusion and hatred.
哦,我强烈认为"技术高于政治"......自由软件世界中有一些"极端主义者",这也是我不再把我做的事情称作"自由软件"的主要原因。我不想和那些有排斥和憎恶心态的人产生关系。
这句话在有人反对"微软为Linux提交GPL代码以提高Hyper-V的兼容性"时说的。Linus的意思再明确不过了:"技术就是就是技术,不要有门户之见"。顺便一提,开源软件(Open Source)和自由软件(Free Software)是有很大区别的,不应该混为一谈。就我个人而言,我喜欢"开源"而不喜欢"自由"。我也不喜欢FSF觉得微软永远是错的,不喜欢它搞某些东西的方式。不过肯定也有人喜欢,每个人都可以有自己的观点。
好像有点说歪了。其实我也不知道微软是不是只是"口头"上讨好开源界,但是我至少看出,微软在想办法证明自己------不管这个证明是不是有什么陷阱,有什么"不可告人的秘密"。在这方面,微软至少在摆事实,讲道理,而不是随口说"我就是拥抱开源"。我觉得,在中学里学写议论文的时候,大家都应该已经知道就被告知论述的基本方式是"摆事实","讲道理"。可是从平时讨论的时候,我却又觉得根本不是那么一回事情。说句得罪人的话,我觉得许多朋友缺乏必要的逻辑思维能力,会产生非常多的逻辑谬误出来,但是却都还坚持自己是正确的。搞到最后,吵起架来彼彼皆是。而且往往在这个时候,无数匿名兄弟就跳出来发挥自己的聪明才智,各种讽刺挖苦谩骂的奇思妙语一个接一个,令人宛如置身于天上"猫扑",人间"天涯"。
其实坚持自己是正确的不要紧,我也喜欢坚持自己的意见,谁不希望自己是正确的呢?但是要拿出理论根据来。其实作为技术从业人员,在许多问题上拿出根据来非常简单,例如写一个程序便知泛型会不会降低性能。如果有些问题很难用数据说明问题(如数据获取太难),那么至少也要找出一些别人的看法来支持自己的观点。如果一味地"我认为","我觉得"效果自然就大打折扣了。因此,我现在也经常会有意地在文章中引用自己或其它的人的说法,至少可以让自己有"底气"一些,而不会感觉像是在扯淡。
我个人比较反感"光说不练"的人,我希望看到的不是"个人说法",而是多个人的观点,或者是实际效果。例如前几天有个匿名朋友在我博客上留言,偏要坚持"静态方法的调用会阻塞其它线程访问",我说"你试试看就知道了",他也原样复制一遍发回给我,针锋相对,不屈不饶。不知道他最后是否认为他达到了论证"我在误导初学者,为自己的书作广告"的目的(我写过书吗?),至少我当时,既无奈,又窝火。
既然谈到了技术,那就再谈远一些。这位认为"静态方法的调用会阻塞其它线程访问"的朋友证明了他自己在某个方面学的有问题,而我前几天发表的Double Check文章中,有许多朋友提出"怎么能lock在一个实例字段上","应该lock在一个静态字段才能产生效果"。换句话说,在这些朋友看来,一个实例方法是不会产生线程安全问题的------虽然ASP.NET MVC框架的DefaultControllerFactory就出现了这样的毛病。这说明了在多线程开发方面,社区的整体意识还处于一个非常薄弱的程度------希望我这么说不会引起各位的不满。
此外,昨天我意识到原来很多朋友用了很久的for却无法写出其等价的while写法,又想起之前发现公司里的大部分同事不知道C#中使用@开头的字符串表示法中如何包含一个双引号。这应该都是基础中的基础,应该人人知道,不是吗?但事实就是让我感到惊讶,许多朋友认为自己不停地在学东西,ASP.NET MVC、Sliverlight,WPF一个一个地学,但是最后最普通的东西却不知道。结果工作找不好,薪水拿不高,最后一崩溃又开始叫嚷着这个行业没前途。那么,有没有想过换一种思路来学习,例如,不要随意轻视一些东西?
说到这里,我又想起其它一些事情,那就是我觉得如今社区里的"风气"出现了比较严重的问题。例如最近不止一次发生围攻面试者的"群体性事件",每次有人发表面试对方的题目之后,就有大量朋友上前表示不满,对于简单的题目认为太基础了,考不出能力。对于困难的题目,就认为它太难,钻牛角尖,"又不是在招算法研究人员"。总之我发现,似乎只要是遇到了回答不出的问题,都会遭到许多人的反对。似乎社区中许多朋友都认为自己怀才不遇,"我来面试你,你也过不了",都认为"千里马常有,而伯乐不常有"。有朋友问我,你面试别人时问些什么?我难以启齿啊,因为我问的往往也是那些问题,可是一下子就被鄙视了。其实没有什么东西是简单的,有时候问问题并不是要得到结果,而是想从中看出一些细节来,例如一个人的思考方式和深度------我问某某和某某在写法上的区别,不是在搞"茴香豆",是由其他目的。不知您是否相信,我在面试时会让对方谈一下最喜欢的体育运动的规则?
最近似乎认为我"无聊"的朋友也多了起来,认为我写的东西没有什么实际意义,认为我写这些东西都是在"炫耀"。其实,我的文章都是源于实际工作中的想法,我认为对于实际工作是非常有帮助的。我不喜欢《XX编程三百例》式的文章,我认为那是"鱼"而不是"渔"。我不知道那些朋友希望我写什么样的文章才算有实际意义,但是我想最有意义的应该是提高您的能力,而正是如此,我认为您更应该关注我在成长过程中想到的这些问题。轻易鄙视这个鄙视那个,就好像鄙视面试者那样,这可不好。鄙视一个东西不要紧,但关键是,你思考了没有?不要鄙视了半天,但是到最后也不知道发生了什么事,盲目地忙碌。
思考很重要,例如换一种思考方式就会得到不同凡响的结果。至少,这也是锻炼逻辑的一种有效方式。想要验证自己想清楚了没,我认为最好的方式就是写一篇文章。如果您想明白了,一定能把它说清楚。反过来说也一样,如果您说不清楚,基本上就是因为您没有想明白。
说了好多,越扯越远,喝口水,回来继续吧。
PPT的正题自然是讲述微软在PHP平台上做出的努力和取得的成果,其中列举了之前与康盛创想合作进行的性能评估结果,证明在Windows Server 2008 + IIS上运行PHP,从平均相应时间,每秒处理的请求数,以及数据吞吐量等多方便均显著优于Linux + Apache的托管方式。当然,这个结果也受到了一些质疑,例如为什么在Apache中使用了mod_php而不是在大多数情况下性能更好的FastCGI。关于这点我没有测试过,我不清楚。不过这并不要紧,我想说的是:Windows的性能真的不差。
