摘要:當不考慮程序員為解決問題而選擇的不同語言的時候,他們想要的和需要的是相似的。他們需要是有生產力和高效率的,不妨礙他們,并且要幫助他們生產出高質量的軟件的技術。在這篇文章,我們將列出程序員共同需要的前十項以分享。
我們在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實例?偸谴嬖谮呄蛴趶牡蛯哟紊厦婵词虑榈某绦騿T和使用本地電子表格來維護數據并且通過單擊來上傳數據的管理員,他們身上總存在可以預見到的不匹配。
相似地,通過版本升級來移植配置數據是一項任務,它應當達到不需要手動調整的水平。
4. 全面的功能模塊
一個全面的功能模塊是一個端到端的,綜合的,自包含的水平構架(framework,就象一個門戶或者內容管理系統),經過正確的配置和設置就可以直接使用。應用程序開發者喜歡使用有特定用途的(例如,一個針對職員和供應商之間的門戶構架),功能全面的,在特定環境下撿來可用的構架。例如,一個開發員工門戶的程序員想要通過適配器和連接器來實現LDAP集成化,個人化的能力和群組系統。很典型的是,軟件組件的開發者宣稱在組件上面的一切都是宇宙的核心,然而在現實中,特定的組件只能成為一個外圍的設備。我們SpikeSource的員工門戶只是作為一個部件和我們的幫助桌面(OTRS),SFA/CRM 系統(SugarCRM),聯合檢索(Lucene/Nutch),還有郵件系統集成在一起。
5.即插即用:面向服務的體系結構
一般一個工程的開發只能使用一種語言或者工具包,這使程序員在使用其他語言中的特點和功能出現了困難。面向服務的體系結構能夠解決這個問題。一個和執行相分離的界面和模塊的松散耦合的聯合對于跨越系統和語言邊界的執行是有用的。就像我的一位同事說的那樣,“一個簡單的可達的回答就是SOA,它能將問題放在WEB服務的后面。WEB服務是共享庫的唯一的方法,它已經定義了轉化和支持的對象的所有的數據類型”。當另外的程序員使用PHP重新實現了相同的特點的時候,上面引言中的事情就可以使用<CFMAIL>標簽來生成動態的郵件。如果這種行為作為WEB服務存在,那將減少很多代碼的重復,并且我們不需要花費時間來測試新的應用程序。這些都顯示出了應用服務模塊的重要性,不管是在SOA服務還是在普通的子程序中。
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的建立者和首席技術官。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/