开发者想要什么---算是我的翻译作品的处女作吧,呵呵,致力于英语学习..
开发者想要什么
作者:Murugan Pal
06/23/2005
翻译:waitu
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
英文原文地址:
http://www.onlamp.com/pub/a/onlamp/2005/06/23/whatdevswant.html
中文地址
http://www.matrix.org.cn/resource/article/43/43608_Ruby_Python_Php_Java.html
关键词:Servlet Request filter Decorator
当不考虑程序员为解决问题而选择的不同语言的时候,他们想要的和需要的是相似的。他们需要是有生产力和高效率的,不妨碍他们,并且要帮助他们生产出高质量的软件的技术。在这篇文章,我们将列出程序员共同需要的前十项以分享。
我们在SpikeSource的同行都很积极地使用新的语言,就像Ruby,Python和PHP;也使用过JAVA,C++和.NET的类库;也使用MFC, STL, Rogue Wave, CORBA, COM/DCOM, OLE, and ActiveX 开发过基于组件的模型;我们也使用JSP/ASP/CFML/VB这样的脚本语言来写程序,基于设计模式和面向服务的体系结构(SOA)来建立系统的架构。许多概念发展成为这些技术一部分, 譬如可重用性(类库), 接口与实施的分离(CORBA, COM),结构化和模型化(设计模式和SOA), 这些都是强有力并且非常有用的。然而同时,我们看见了多少生产力能力的改进? 非常明显,这些库和语言的特色自身是不足够的。
这使我们询问什么是真正地使我们有生产力的。我们考虑我们使用过的系统, 和赶赴战场前的美好祝愿。总之,我们共同需要的是:
1. 一个能自由的交换想法的环境
2. 较多的依靠行动,而不是管理和步骤
3. 使我们有生产力的良好的和可靠的工具
这里是我们相信程序员们希望得到的前十项。
1.容易使用,学习曲线短
程序员们不喜欢让人费解的设计和过于机械化的模块。他们要的只是在设计、开发、配置和运行条件上要求最小的、简单的、可预见的并且具有兼容性的界面。这和我们说的“所见即所得”很接近。服务器软件Apache和它的mod_*体系结构就是一个很好的例子,它的设计很简单,而且在运行时支持多语言。开源组件是典型的,由于它们是天生的与技术的精英平等和持续的设计,并且倾向于提供简单和一致的接口。PHP,Python,Ruby因为它们的简单化和亲和力已经得到了采用。接口的一致性和可预见性对于发展程序员们的生产力是很重要的;例如,Michael Daconta在他的《JAVA的缺陷》一书中,论述了多种在JAVA中使程序员迷惑的问题。
文档是使学习曲线缩短的关键:除了快速开始指南和参考资料之外,和其他人进行讨论已经得到技术产品的回顾,能够帮助程序员更有生产力。PHP和MYSQL的文档是很好的,但是使其更加有用的是参与有分享哲学的体系结构,这种体系允许用户在文档中自己添加注解。通常,用户的新眼光可能看到技术提供者忽视的有用的洞察力。社区站点和一个清楚的和可认知的论坛 ?D 例如IRC, 邮件列表,新闻组, 或网站 ?D 这些都使学习曲线升高得更容易。
2.使用常规的库和应用程序服务模块进行快速实施
程序员喜欢使用那些很好地进行了优化,容易使用的子程序。我们有多少人重写过快速排序的算法呢?很少,我想。我们会在教科书中或者在线获取它的算法。程序员需要在使用简洁的API所开发出来的预制组件的库,最佳实践的文档和代码示例之间取得均衡。类库是可以重新使用的,但他们可能被限制于语言运行时环境。C++的标准模板类库(STL)是一个非常好的想法,如果它支持其它语言,它会更加成功的。Perl的成功的关键是它拥有一个有预编译源码的庞大类库CPAN,这和PEAR与PHP的关系很相似。
通常一个好的想法可以在多种语言中实现。例如,日志处理的Log4J, Log4php, and Log4rss;进行单元测试的Junit, HTTPUnit, CPPUnit, Nunit,and PHPUnit。与其在事后改变,一种跨越语言的实现了常规的各种不同需求的被定义为“应用服务模型”的算法方法(在数据结构或设计样式中)能够改进一致性和缩短学习曲线。我们需要一个能满足普通服务的知识库,譬如命令状态通知,忘记密码服务,和电子邮件模板生成,这些可利用到虚拟的基于代码的算法结合语言特性来实施。将设计模式和面向服务的体系结构(SOA)结合应用于特定的应用程序构造是在这个方向走的第一步。
如果那里存在一份可重用的可扩展的详尽的应用服务模型的集合,它使用SOA进行实施,对不同的语言(Java, C, PHP, Python)都有接口,为什么程序员会需要实现一个新模块呢?既使有这样的需要,他能贡献它回到社区为其它程序员所使用。
3.无缝移植和透明升级
程序员很容易忽视移植的工具和升级的装置。一个简单的例子是在使用LDAP服务的不同组件之间LDAP的规划不协调。相似的,任何使用SOAP和WEB服务进行开发的人,他将意识到移植的问题占用了太多的宝贵的开发时间。说明书版本的不匹配和卖主的要求对程序员来说是一件很头痛的事情,更不用说用户了。
使程序员均衡数据导入和导出机制的工具是很有用的。一个典型的例子就是将电子表格中的数据转化为数据库中的数据或者XMLSchema实例。总是存在趋向于从低层次上面看事情的程序员和使用本地电子表格来维护数据并且通过单击来上传数据的管理员,他们身上总存在可以预见到的不匹配。
相似地,通过版本升级来移植配置数据是一项任务,它应当达到不需要手动调整的水平。
4. 全面的功能模块
一个全面的功能模块是一个端到端的,综合的,自包含的水平构架(framework,就象一个门户或者内容管理系统),经过正确的配置和设置就可以直接使用。应用程序开发者喜欢使用有特定用途的(例如,一个针对职员和供应商之间的门户构架),功能全面的,在特定环境下捡来可用的构架。例如,一个开发员工门户的程序员想要通过适配器和连接器来实现LDAP集成化,个人化的能力和群组系统。很典型的是,软件组件的开发者宣称在组件上面的一切都是宇宙的核心,然而在现实中,特定的组件只能成为一个外围的设备。我们SpikeSource的员工门户只是作为一个部件和我们的帮助桌面(OTRS),SFA/CRM 系统(SugarCRM),联合检索(Lucene/Nutch),还有邮件系统集成在一起。
5.即插即用:面向服务的体系结构
一般一个工程的开发只能使用一种语言或者工具包,这使程序员在使用其他语言中的特点和功能出现了困难。面向服务的体系结构能够解决这个问题。一个和执行相分离的界面和模块的松散耦合的联合对于跨越系统和语言边界的执行是有用的。就像我的一位同事说的那样,“一个简单的可达的回答就是SOA,它能将问题放在WEB服务的后面。WEB服务是共享库的唯一的方法,它已经定义了转化和支持的对象的所有的数据类型”。当另外的程序员使用PHP重新实现了相同的特点的时候,上面引言中的事情就可以使用
SOA不仅解决了语言互用性的困难,而且允许程序员更加有创造性。就像Tim O'Reilly说的,SOA和WEB服务使网站有创意,多样性和吸引人。
即插即用体系结构的另外一个例子是我们说过的Apache的mod_*式的体系结构。Apache服务器软件是唯一的满足应用服务器经典定义的服务器模块。(我将应用服务器定义为一种可在其中开发、部署和监视应用程序而不受语言运行环境的影响的管理运行时环境。)现在存在的这种应用服务器包括Java servlet服务器(Tomcat) and J2EE 服务器(Geronimo, JBOSS).PHP/Python应用服务器(Active Grid),虽然是没有扩展普通应用的服务器,也在它们自己的垂直空间中有良好定义的参数。然而,程序员喜欢的是可以解决多语言运行时的应用环境,从而造就了Apache的成功。
6.性能优化计划
性能优化的计划,与物理的和逻辑的体系结构相关联针对特殊的用处和语言运行时,他的实质是使程序员就系统执行时的效率保证或提供指导方针。程序员需要可能帮助校准影响性能的因素的缩短时间的工具(代替快速发展的基准),它包括潜在因素,生产能力,和并发对命名用户的概念,并且认为时间在应用存取之间。编译时间转换为性能瓶颈的识别,描述工具与单位测试之间结合,都是非常有用的。程序员需要工具和在线性能计算的仪器以确认一个在桌面上工作很好的应用程序部署在8位簇群,32位服务器,或一64位OS上能否起到很好的效果。许多的卖主为像数据库和商业应用程序服务器的基础组件提供了蓝图,但许多应用程序仍然很少有一点协调的可用的信息,更不用说设计图纸了。
如果程序员有一个可以访问的校准基于他们使用的库和模块的性能要求的地方,那不是很好吗?
7.依从开放标准
程序员需要简单的工具转换和确认私有的(但普遍的)格式到基于的标准格式。例如,在帮助转换从特别的XML或XML DTD到 XMLSchema 的时候工具是非常有用的,因为开放标准有互用性和依从性。
另外的要求是将基于标准环境的特点的集合进行比较和对比。(参见MySQL的crash-me) 。
8.快速开发和部署工具
具有集成性和可扩展性的编译、调试和部署使程序员有生产力,它在开发时间内通过快速的开发和部署帮助程序员提高生产能力。这种工具的例子包括Emacs, Eclipse,和 Ant。Eclipse 和Emacs的可扩展性和插件让用户简化费时的任务(譬如重构或重新排版),这些任务计算机做起来要比人好的多。Ant给Java开发者迅速编译和部署他们的应用程序的能力。投资在学会这样的工具的时间很快就会在它们所节省的时间中得到补偿。
9.模板配置
一个简单的带有配置参量的,有快速参考词汇的知识库是非常有用的,包括优化的名称属性的配值, 错误编码,本地化版本的资源包,期待的行为,和被报告的异常,等等。
Oracle的用户有一个这样的不错的例子指南。一个称为oraerror的简单的报告错误的的工具,它是Oracle程序员能够快速的找到错误编码的意思。
10.探针和调试工具
有了调试工具,描述工具,探针,和消息监测中心作为构成库整体的一个部分,程序员就能得心应手了。例如,有一个与 Log4J一起工作的基于cron的脚本是有用的,它能监测磁盘的空间并在它变小的时候删除或者或清空日志。同样有用的是能与相应的库一起存放会话和运行时状态的简单接口。
结语
总的来说,我们已经看到了已经发生的使程序员更加有生产力的巨大变化。这些大部分都是在过去的五年中出现的。就像Ant, Maven, 和Junit这样的开源项目;源代码知识库,SourceForge, Tigris, Berlios, 与Apache;还有搜索引擎,Google, Freshmeat, CodeZoo, 和Koders.com,他们已经帮助了程序员更加有生产能力。更进一步说,我们相信开放源码的发展已经接近应用于新的编程模型,这种模型就像SOA加上和Eclipse类似的可扩展工具,它能完成组件化编程的目标,并具有互用性,且独立于运行时。
Murugan Pal是SpikeSource的建立者和首席技术官。