开源项目,其实你有多种参与方式 Draft Version 1.1
从使用者到贡献者:作者讲述了CnBeautifierWizard开源项目的创建历程,详细分享了参与开源项目的不同层次——从提建议、贡献文档到编写代码。这篇经验分享揭示了开源协作的本质和价值,为想加入开源社区的开发者提供了实用指南。
(Originally posted to CSDN on Dec 22, 2005)
――CnBeautifierWizard的前世今生
众多的开源项目在最近的这几年明显的改变了我们使用电脑的习惯。像Linux操作系统,或者Firefox浏览器之类的实用程序,普通用户也可以在日常使用。当然,还有像ANT,Bugzilla等等专门为程序员设计的贴心帮手。对于普通用户来说,使用这样的开源项目仅仅局限于运行程序。但是对于程序员来说,除去使用产品,其实还是有多种机会参与到开源项目。这其实是提高自己难得的机会,不过,这种提高不仅仅限于编程技术一项。
第一层次――基本用户。这也就是最简单的参与方式,提提建议。其实对于为数不少开源项目来说,真正缺少的不是真正编程人员的参与,而是用户的反馈和配合。最初认识一些开源项目的时候,我就常常采用的这种方式,积极发表自己的看法――感觉对于培养自己对于新事物的敏感度很有帮助。
第二层次――贡献者。你可以参与项目的推广(用户服务,论坛讨论,使用答疑等等)――这会让你有机会了解更多人的想法,换一个角度来看待这个项目的意义和尚存的问题。对于文笔还不错的同志们来说,参与对于项目现有文档的修改,特别是用户使用手册的编写,都是对这个项目莫大的帮助――毕竟很多项目的主要人员精力放到了设计和编码上面,实在没有时间做这个。而实际上作为整个项目中与最终用户最贴近的一环,这些零碎的东西会使参与者今后编程时眼光里带有一点不一样的东东――越是了解用户的感受,越会促使你写出人性化的软件。
第三层次――高级贡献者,你可以尝试去理解代码,写写补丁之类的,或者DIY出来一个给自己的特别版本。那可就是一桩乐事了。常见的是不少热心人一见到某个好的国外开源项目,就会把它汉化出来。
最高层次嘛,当然是参与到项目的内部测试和编码,成为开发人员或是测试人员了。
关注开源项目才几个月,感觉自己已经得到了不少锻炼,走过了几个层次了。这里就把这段经历作为一个例子来介绍一下。
与SBT以及AStyle的相识――第一层次的尝试
去年用Delphi 8的同时,自己很用心的学习了一点C#(毕竟它是一门很不错的语言)――自然也是在Borland的产品C#Builder帮助下。在Delphi下面有一个叫做GExperts的开源项目,是一个很有名的IDE专家组插件。那时关于C#Builder也已经有一个类似的一个项目,叫做SharpBuilderTools,我是从Borland Developer Network上面的Code Central下载的,包含全部C#源代码(后来知道它其实也是SourceForge上面的一个项目)。
相比起GExperts,SBT功能似乎还要强大一些,大大方便了我的C#学习。最常用的还是它带的一个Code Beautifier(代码美化专家),可以美化C#代码。大概也是由于发现了SBT,那段时间C#的学习看起来比Delphi .NET的学习有趣得多(因为那时Delphi 8除了GExperts,几乎没有别的插件)。后来分析SBT代码的时候才发现它实际上巧妙地新建了进程,以命令行来调用外部的程序。比如代码美化的工作,其实是由AStyle.exe完成的(AStyle还可以美化C/C++/Java的代码)。这种机制虽然技术上不甚高深,却是非常之实用――SBT的作者David,无需自己动手来从头写什么美化代码之类的功能,而是将更多的时间花在对SBT架构的改进工作上面,从最近的一两个版本可以看出。
在SBT短短的发展史中,一些成功的开源项目或免费软件,像NANT/ANT,AStyle,NUnit,Microsoft FxCop,NDoc,Ultrapico Expresso,WinMerge,在不同的版本时先后投入了SBT的怀抱(不知道下一个会是什么,期待ing)。这种方式颇有些像鲁迅先生所言的”拿来主义”,不是吗?SBT越来越像是一个平台了,一个将众多好东西集成到Borland Developers Studio(Delphi 8/2005,C#Builder)的插件平台。不过这样的开发,还是有一个很小的副作用,就是用户在使用SBT部分功能的时候如果发现bugs,却是其他项目的bugs,并非SBT的问题――我就在使用中发现了AStyle美化C#代码时的一个小问题,并且给那个项目写了一份详细的bug report。虽然这一步很小,这也算是我参与开源项目所跨出的第一步了。
感谢SBT的作者David,他把拿来主义使用得恰到好处。
与JCF的缘分――跳级的愉悦
先花些篇幅谈一下代码美化。估计对于程序员来说,除了手动美化比较麻烦,寻找可以自动美化代码这类好东东比较费时间之外,确实只有不少优点:
一,在美化代码的时候会很清楚地展现出代码结构(一般看缩进就可以看出哪里少写了什么的样子),甚至有时会暴露代码中的潜在问题(有的美化工具还会认真分析代码)。
二,有利于学习、交流。假如大家的代码乃是同一样式,那么看别人的代码就会方便多了。
三,”人靠衣装,码靠美化”,感觉美化之后的代码才是真真正正的好作品,而没有美化的则是不堪入目――记得那些劣质书籍的范例吗?
四,为了方便大家之间的交流,对于各种语言都有不错的标准可以参考,也有不少美化工具。VC自带的那个美化功能,相信不少C++程序员都经常使用。而C++BuilderX,Eclipse,Visual SlickEdit,CodeWright等等都自带有这样的功能。第三方的代码美化工具更是数不胜数。
代码样式问题也是越来越受到人们重视的。很明显的例子是SUN公司在Java诞生之初就给出了一个很好的样式要求(见相关文档)。而Microsoft也是如法炮制的给C#定了一个规范。虽然这些不属于语言的标准范畴。但是由于比较正规的企业一般会以很成熟的代码样式要求其员工,所以实际上形成了行业、企业的事实标准。因此我们应该从初学时就遵守一定的代码规范。各式各样的自动化美化工具,只是一种很好的辅助。
这里不妨说说自己使用Code Beautifier的历史。还在用Delphi 7的时候有一日在学校附近的书店里面看一本学习Delphi的书(该书很厚,当时按照网友的推荐目录来看,却不是什么好书)。它的附录里面提到了一个叫做Delphi Formatter Expert的代码美化工具,看起来这个工具好像确实很有用的样子,所以返回寝室里就立即下载了一个用起来。可是后来改用Delphi 8学习.NET开发了,而DelForExp那个官方站点N久没有新版本的消息,所以不得不回到手工调整的时代(用惯了自动的,再搞手动就苦不堪言)。
所以有一天,懒懒的自己突然来了灵感――为什么不利用SBT的平台,自己动手集成一个Delphi代码的美化专家到Delphi 8里面呢?在SBT的基础上开发,难度显然小了许多――是有点跳级了,直接跳到了第三层次,嘿嘿。
顺便提一下。自从原本代号Galileo的Borland Developer Studio在C#Builder中第一次现身,它就比起上一代Delphi 7的IDE多出了一套支持.NET语言的OTA接口。也就是说,BDS的用户可以开始使用任意的.NET语言(C#,VB.NET和Delphi.NET等等)来给BDS写插件了――Delphi 8基于BDS 2.0。相比起Delphi 7/C++Builder 6那个时代只能用Delphi给C++Builder写插件来说,这毕竟是一个很大的进步。如果你愿意尝试,好像还可以在VS.NET里面给BDS写插件和调试(先搞到和BDS目标版本一致的Borland.Studio.ToolsAPI.dll文件,然后加入到项目的引用就好了)――在技术上面没有什么特别的障碍。这使得SBT可以装到Delphi 8上面,但是仅仅凭借AStyle并不能美化Delphi代码。
DelForExp是第一个被否定的选择――试了一下,也查看了它的帮助文件,确定它不像AStyle那样支持命令行调用。然后自己在SF.net浩如烟海的项目里面很幸运的遇见了JEDI Code Format,来自南非的Anthony的一个Delphi Code Beautifier开源项目。
有了SBT的示范,不久我便很成功地把JCF像AStyle一样集成到了SBT里面。不过第一个版本的时候写的还是C#代码。这样一来我机器上的SBT”特别版”就可以美化两种语言了,也很适合后来发布的Delphi 2005。于是把我写的东西发给了SBT的作者David,希望可以集成到SBT下一个版本里面。
为了证明用Delphi做.NET同样优秀,后来我还用Delphi .NET重写了一个独立的插件程序,名唤JCFExpert for Delphi 8/2005,放到了2ccc.com。不过,大概是国内Delphi 8/2005的用户很少吧,一直没有看到什么用户回应。在广大Delphi 2005用户的要求下,JCF官方很快也出了针对Delphi 2005的新版本。我给它加入了一个自动重载文件到IDE的改进,算是在第三层次又干了一点活。
针对JCF for Delphi 2005的问题,我今年曾经前后与Anthony联系了三四次。在最近的两个月里,JCF的版本号从2.08飞速跳到2.10,基本完成了对于Delphi 8/2005引入的新语法特性的支持。如此迅速的转变,可以看成是JCF迎接Delphi .NET时代的大动作吧。(本文完成许久之后的今天,版本号已经是2.13了。而AStyle也到了1.44 Beta。)
相信JCF的使用人数在不久的未来会超过DelForExp,成为Delphi程序员的宠儿。
与CnPack的相识和CnBeautifierWizard的诞生
本人于2003年注册了DelphiBBS(大富翁论坛)的帐号,但是至今还几乎没有去过太多次,反而总是用这个直通车帐号上2ccc.com了。所以,对于起源