追时间

Yak shaving during web development, thoughts...from Jijie Chen

对微软技术的典型误解和偏见

到目前为止,软件授权费用仍是微软的主要收入来源。微软自己的软件卖的很好,同时,在他造就的平台中,提供丰富多彩也高效好用的开发工具,也十分注重培养开发人员的培养。直至今日,企业解决方案仍是微软强有力的现金牛。近来几年,微软的路除了企业市场仍持续的稳稳当当,云服务在中国的发展只能说平平淡淡,其设备与服务方面也一路坎坷;甚至由于移动设备上整个行业的发展惊艳夺目,与此相比成熟稳重的 Windows 却难以再给人们太多的惊喜。这样的情景之下,趋利、逐热的媒体会做的自然也就是煽风点火,起哄不怕事大了。不少人,使用盗版的 Windows 去到互联网上,喷着从没用过的 Windows Phone,却又不忘捧一下那个他从没访问成功过的搜索引擎。这样的状况,不免令人感到可悲。

互联网化、云化,以及长尾化发展只会越来越深入;伴随着新 CEO 的上任,微软本身也提出“移动为先,云为先”的理念。近几年,微软在开源社区中也一改以往低调的形象。可是,神奇的是,微软的开发技术在社区里是说不得的。别看博客园、CSDN 等网站起初都是由 .NET 技术人员社区贡献起来的,至今 .NET 背景的人在它们的用户中仍占据一大部分。但把目光转到杂一点的技术社区,或是线下活动,一听说你是 .NET 技术背景的,周围的气氛一下子就变得僵硬了。人们尴尬。尴尬的是,大家都用着 Windows,却又深深地嫌弃着微软的技术;却又不好那么直接地与对面的说话者袒露出自己的这种感受,好像自己也觉得自己的这种嫌弃不是那么上台面、值得怀疑。
对于微软这样一个庞大的企业来说,“微软技术”一词的涵义显然太丰富,而我仅希望谈论其有关 Web 开发和云相关的技术。不少人将 .NET 体系,以及 Windows Server 系列,甚至是 Azure 模糊不清地统称为微软技术,所以我也顺便这样引用一下(就像有些人将 HTML5 称为 H5)。对微软技术的误解与偏见在社区里是很微妙的,不少人对微软的开发技术栈有一些由来已久的偏见。在这里,我列举几点,并指出为什么这些误解与偏见是多么的谬误。

误解:使用微软的开发技术将被绑在微软的产品体系里


软件很复杂,一个大型的软件通常需要多个组件的通力合作才能正常运转。最典型地莫过于数据库、运算逻辑,以及界面或终端设备了。实际上,无论是从法律角度等客观因素还是从目前的现实来看,上面这个命题都是不成立的。
Windows Server 可以运行大量的编程语言平台,部署多种数据库系统,由 Windows Server 提供的服务也不会限制客户端的种类与提供商。在 IIS 上,在 ASP.NET 之外,我们当然也可以宿主 PHP、Java 应用程序,甚至是 Node.js 和 Python 应用程序。而 ASP.NET 作为一种应用程序开发框架,从来也不会限制你使用的服务器类型(Windows 或是其他),也不会限制你使用的数据库,更不会限制客户端浏览器或设备。Visual Studio 会让你觉得拘束,脱离了它不能够开发了?这就更假了,以前大多数人在使用盗版,就算微软提供了免费的 Express 版本;而现在,大家更可以免费地使用官方提供的社区版了。
人们另一个担心是如果跟随微软的脚步走下去,哪一天微软放弃一种技术,自己就跟着走进了死胡同。我的看法是,你就是你,你不必跟随谁的脚步而导致丢了饭碗——如果确实发生了,那你得考虑一下为什么如此盲从以至于失去了自己的方向呢?微软的技术可能由于微软公司的决策而前途未卜,但其他技术更会如此。与微软推行的技术相比,一个开源项目死掉,或者不向下兼容的可能性要大得多。从微软技术的角度来考虑,这些项目被抛弃的原因并非微软随意决策,而是由于它们将退出技术舞台而不再被人们需要,所以它们被抛弃是必然的。而从开源技术上来考虑,一个项目死掉的可能性更高:核心团队的解散,没有经费继续支撑,技术需求过少社区氛围不活跃,碎片化过于严重等问题比比皆是。当然有人会说,如果一种技术开源了,至少自己可以继续使用,或者组建团队维系它的生命。这种毫无水准、巧言诡辩的说辞,我也只好笑笑罢了。

偏见:微软的技术不够开放


开放可以从两个方面来理解。其一,本身的内聚性,以及对关联产品的依赖;其二,开放源代码并且社区友好。第一个方面,在上一个误解里已经谈到。
对于不够开放的开发技术(框架或库),开发人员不敢过多地依赖,毕竟“难以了解它的运行细节,也不能对它进行按需修改”。这个理由是很充足的,开发人员确实在很多情况下,需要了解软件运行的细节,这对对开发框架的理解,解决问题时思路,以及调试程序等方面都有帮助。微软也意识到这一点,因此 .NET 框架的源代码很早就开放了,所有人都可以通过网络获取。不光可以查看源代码,还可以下载编译符号,从而直接调试 .NET 框架本身。
另外,从2014年宣布 ASP.NET vNext 之后,ASP.NET 的开源十分彻底。核心团队将代码迁移托管到了 GitHub 上,使用 Apache 协议授权使用,并接受代码提交。同时,微软还将 ASP.NET 5 及其周边的一系列工具打造成为能够跨平台运行的新型 Web 开发平台。
当然,对于绝大多数人来说,开不开放并没有什么区别。因为他只听说,不开源就是罪。

误解:用微软开发技术很贵


如果放在国外,这句话很真实。在中国的企业,说使用微软技术会贵的话,还是收回去吧,问问你买了几套 Windows,请问一套 Windows 8 Pro 多少钱?是的,微软的很多软件都是收费的,比如 Windows Server,Sql Server,Visual Studio 和 TFS 等。如果是企业里的应用平台,那么这些软件的授权费用确实不菲。微软的软件产品我不评论,自当有愿意购买它们的企业来买单。对于大型企业来说,花钱买软件和服务,还是花钱养人,这是一笔见仁见智���账。企业大了再想,也不迟。

如果是在互联网创业公司里,那么可以有更多选择来节省开支。但开发技术中,我们使用基于 C# 的 ASP.NET 应用程序框架的同时,可以使用 MySQL 和 PostgreSQL 等免费数据库,可以使用 GitLab 和 Trello 等免费的代码与项目管理工具,可以使用 GoJenkins 等免费持续集成工具。

偏见:.NET 开发人员只会拖拖控件


哦,这句话已经很老了,我甚至也不想提了。但这句话很可怕,它简单一句恶毒的话就试图形容一个巨大的群体。我还是不得不在这里说说对这句话,我如何看待。
首先,拖控件并是什么问题。拖控件也并非一种很低级的技术,而且也并不是只有 .NET 开发人员拖控件。相反,它是一种经过高度封装而存在的,非常高效的创建界面的技术。“所见即所得”是它的重要特性,直观而有效。问题出在“只会拖控件”上。如果一个人只会拖控件,那他根本还不能称之为开发人员,最多只能说是见过 IDE 而已。因此,.NET 开发人员只会拖控件这句话显然是不成立的。
微软一直致力于降低开发软件的难度:

  • 在本身就易用的操作系统中提供大量可编程的特性
  • 在提供的几乎所有的大型软件中提供可编程的接口和能力
  • 发明了多种编程语言,并支持多种设计风格与范式
  • 免费提供好用的开发工具
  • 足够大量的用户

这些因素让为微软的平台开发软件变得更容易的同时,也导致出现大量的技能低下的开发者。这是很自然的,也是再正常不过的。比如厨艺,只要有一个厨房,就可以开始,但显然并非所有人都是厨师。而人们总是自以为是的,以为自己会拖一个界面就成为了开发人员。那些井底之蛙们很自然地成为了大多数,顺便把另一批优秀的人代表了。

偏见:就因为它是微软的技术


微软有原罪。我终于无话可说了。
年轻人需要酷,这是容易理解的。微软的技术看起来好像没那么酷。微软并不是一家酷酷的公司,至少比不上另外那些看起来酷的。不过,酷能用来干什么?能吃么,能增加效率么?本质上,酷只是一种主观感受。而主观感受往往与了解它的多少而有所改变。看起 Mac 上的灯,以及整体银色的外表好像洁白无暇的公主般圣美,然而当你搬动它你会发现它笨重的惊人,它甚至还能将你烫伤。Windows 机器看起来中规中矩,却勤勤恳恳,随时为你效劳,帮助你把事情搞定。


 

结论


微软是一家商业公司,自然需要追求盈利。这并不是什么过错,也无需人们指责。但美好的事物存在了,从不因为他人喜恶而变化。工具也许并没有高下之分,只有适合与否。给你一根金箍棒,普通人也搬不动,更不谈降妖除魔;唯有孙长老才有能力将其发挥到极致。

可笑的人们却总是喜欢用自己那原本就是由屁股决定来的脑袋来教导别人,来宣扬那莫须有的己方,去抨击那空想出来的异已。

有空的时候,去读一读 C# 的代码,去看看 IIS 的管理能力,去试试 PowerShell 的魅力。你会讲一个比我更生动的故事。

感谢阅读。

更多相关阅读:

blog comments powered by Disqus