我们,作为软件开发人员,都自我处在各种不同的状态中。
我曾经工作过的一家公司,在多年的运营中,一直认为软件几个月集成一次或部署一次没有什么问题;他们从来不知道什么是持续集成。他们认为每两年把软件从头再开发一次再正常不过了;他们从未听说过测试驱动开发(TTD)或迭代开发。尽管这些技术已经被证明能十分显著的提高软件的质量,降低开发成本、维护成本和提高团队士气。事实证明,就在今时今日,你仍然能找到从未听说过这些术语的软件从业者。
我还看到了很多时候,一些软件开发人员,用一些极其恐怖的方式,自己开发类库和框架来解决世人已熟知的问题。这一遍又一遍的重新开发数据映射工具(data mappers),日志工具,对象转换机制,消息传输系统和web框架,浪费了大量的时间、精力和耐心。我并不是在谈论公共协作活动,我说的是团体内部的“非我勿用”通病。当一个社区跟外界隔离时就会发生这种情况。这样的社区里人们不相互往来,不相互合作。.net社区就是这样的一个社区。
去年微软发布了一个新的web框架,叫做MVC。对于web标准来说这不是新框架,甚至对于已经拥有Monorail项目多年的.net标准来说也不算新。然而人们仍然在等待它的到来。人们在等着微软把它提供给他们。虽然开源的MVC web框架也有,而且这么多的.net开发人员有能力把它们开发的很好,可什么都没有发生。只有在微软的一小撮开发人员在做着他们自己的框架,于是MVC 今天还是一种新颖的框架。
这种情形一定是什么地方出了严重的错误。
这个新的web框架比之前的那个要好并迅速的被人们接受。微软公布了源码。有人在github网站上为它搭建了开发代码库。这个代码库目前只有30个人关注、5次提交。5次提交!为什么这个数会这样出奇的少?因为微软不维护它。他们发布了一个没有任何人参与奉献的新版本的MVC。更糟糕的是,人们只用这些新的版本,每次github代码库都会从新搭建一次。
Paul Cowan和他的horn项目也遇到了同样的问题。他们试图解决.net中的依赖管理问题。这真是个很难的问题,但也许最大的困难是来自于目前情况下的现实社会的合作问题。他们在这个项目上没有得到什么帮助。如果我要是不离开,我会把我的所有精力放在上面。
.net社区是在一个没有合作的真空中运营。
这是一个病态的,被那些提供非开源软件“解决方案”的软件厂商毒化了的社区,是被微软那种软件的进化速度刚好能满足解决自己问题的需要的聪明做法束缚了的社区。
第三方厂商的支持论坛里到处充斥着“我把GridView放在了我们CallBack控制器里,可是报了一个ViewState错误”之类的问题。对这个问题的真正的解答不是提供“下一版将会修复这个问题”。真正的答案基本上是“不要使用这么多有问题的抽象做法,从你的同事那里问问如何使#@$#@%正常工作!”。
同样微软的codeplex项目平台网站也不能用,它不是真正开源的!真正的开源是不需要在提交了一个补丁程序后还需要等待/期望有朝一日能被主分支版本接受和合并。
抱怨的够多了,反正我走了!我投入了时间,尽了最大努力,但今天是最后一天,如果你真的对开发软件感兴趣,你应该让自己处在一群志同道合的人之中。
明天我要用Ruby开发一个新项目。我将会遇到很多、各种各样的有才能的、热情的人们,他们由衷的希望相互合作,为大家把软件改进的更好。我工作空间的每一部分,包括操作系统,数据库,框架,web服务器,甚至语言本身都是开源的,这是一大群共同努力的人们的见证。
对于.net社区里这些年给我鼓励的人们:OrenEini, Jeremy Miller, Hamilton Verissimo, Rob Conery, Scott Bellware,
Scott Hanselman,以及所有试图建立一个真正社区的人们,我想对他们的努力表示我最大的谢意,我希望你们成功!
对于那些想成为一个由热情的具有创新和奉献精神的开发人员组成的充满活力的社区里的一员的人们,行动起来吧,不要局限于某一种框架和语言。找到你自己的群体。全部找出来。在github建立自己的帐号,干起来吧。
http://www.aqee.net/leaving-net/
http://www.jdon.com/39434