<noframes id="rrprp"><ruby id="rrprp"><ruby id="rrprp"></ruby></ruby>

                <track id="rrprp"></track>

                技術中心

                這里象征著我們的態度和能力

                程序員如何寫出更好的代碼
                發布者:admin    信息來源:本站原創    發布時間:2016-06-21      瀏覽次數:9571
                分享到:

                新浪微博

                騰訊微博

                QQ空間

                豆瓣網

                QQ好友

                Martin Thompson是Java Champion稱號獲得者,同時也是一名高性能計算科學家。他說,為了寫出更好的代碼,程序員需要運用基本設計原則,閱讀已有代碼。在QCon London 2016大會上,他做了題為“挖掘你的工程師屬性(Engineering You)”的演講。InfoQ在會后采訪了他,內容涉及軟件行業面臨的挑戰及程序員如何應對那些挑戰成為更好的軟件工程師。

                InfoQ:您在演講中引用了1968年第一屆NATO大會上有關軟件工程的一些內容,它們仍然成立。軟件行業為什么還是在苦苦掙扎?

                Martin Thompson:1968年的NATO大會有好幾個主題。他們認識到,軟件行業存在交付危機。他們也看到了一些成功的項目,并且希望弄清楚如何吸取好的經驗,進行更廣泛地應用。在我看來,其中有幾點比較突出,就是認識到軟件開發是一個迭代過程,注重試驗/學習,需要專門人才領導,并且最好是在小型團隊內完成。他們在幾十年之前就從許多方面描述了TDD和敏捷這些在當時并不常見的做法。

                作為一個行業,我們已經取得了很大的進步,但是我們仍然有很長的路要走。軟件開發是一個非常年輕的學科,我們仍然有很多東西要學。我喜歡Dijkstra對它的描述,“煥然一新(radical novelty)”,而使用一些很不恰當的隱喻和類比,會注定我們的失敗。軟件構建是在之前活動基礎上的躍變。這些活動和約束與之前的活動截然不同。有些人有這方面的天賦,有些人需要學著做,而大多數人很掙扎。在土木工程學方面,我們耗費了幾個世紀才具備了現在的能力,因此也就不奇怪軟件行業當前的掙扎。

                InfoQ:您為什么認為理解基本設計原則,如耦合和內聚,很重要?

                Thompson:軟件開發面臨的其中一個最大的挑戰就是處理應用程序規模增長帶來的復雜性。對象、組件、模塊或系統之間的耦合程度越高,我們需要承擔的后果就越多。這些后果包括但不限于修改困難、故障蔓延、由于爭用而無法擴展、由于關聯操作而導致的性能問題。時間、空間和實現上的松耦合對于擴展性和彈性而言至關重要?!肮采裕–onnascence)”可以很好地描述耦合,一個模塊/組件的變化會導致另一個模塊/組件的變化。

                我發現,內聚比耦合更微妙。我喜歡將內聚理解為統一性。當我們考慮在不同的方面使用同一個組件時,就失去了統一性,這會導致不必要的行為和特征。軟件設計中的低內聚常常是一個很好的需求或團隊狀況指標。通常,內聚設計很容易跟蹤,由于相關的函數和特性都進行了分組,相互關聯,所以可發現性很高。

                如果我們希望成為更好的軟件工程師,那么提高我們運用基本設計原則的技能應該成為我們日?;顒拥暮诵?。在訓練和實踐中不斷重復是讓技能成為第二天性的最好方法。

                InfoQ:您能舉幾個例子說明下,如何運用分解和抽象幫助開發人員寫出更好的軟件嗎?

                Thompson:我認為,抽象是軟件開發領域被人誤解得最深的話題之一。Dijkstra將抽象描述為一種創建“新的語義層次”的方式,“在這個語義層次中,一個人可以做到絕對精確”。大多數開發人員都完全是亂用這個術語,創建他們所謂的抽象來掩飾他們不懂的東西。Joel Spolsky甚至發明了“抽象泄露(leaky abstractions)”原則,拙劣地想為這種誤解正名。我們有些很棒的抽象示例,如Linux內核或設備驅動中的塊設備,但遺憾的是,大多數軟件抽象通常是源于某種形式的精神自慰,導致弗蘭肯斯坦怪獸的誕生,讓代碼更難以處理,而不是更嚴密更容易理解。糟糕的抽象比重復的成本更高。

                我們需要更擅長將業務目標分解成可衡量的具體成果,然后以高質量、低耦合的可組合組件為基礎構建軟件。商業公司希望我們在他們的框架內完成構建,那樣他們可以鎖住客戶。這些框架是錯誤的示范。它們是商業壓力催生的產物。商業壓力與交付高質量的可維護軟件往往是矛盾的。

                如果看一下其他工程學科,我們就會看到,工具的使用是為了支持交付流程,而不是強加一個流程。我們似乎展現了這個時代的一個特征,商業廣告聚焦于人天價格、per-CPU許可及鎖定維護合同?,F在,類似Amazon這樣的公司提供了實用計算,讓我們可以根據需要使用。非常有趣的是,云計算很好地支持了持續集成和交付模型。這改變了市場格局,推動了更好的行為。我們也可以從工具方面看待這個問題,類似Jetbrains這樣的公司將你鎖定在他們的產品合同上;他們是通過提供可以提高生產力的優秀產品把你鎖定的。

                InfoQ:您提到,把重讀代碼作為發現缺陷或改進代碼的方式。您能詳細地闡述下嗎?

                Thompson:任何創造性的嘗試都可以從不斷地審視和完善中受益。你曾經回過頭來閱讀已經寫好的郵件、論文、博客或報告等等,然后覺得某些部分可以做得更好呢?這是一件很自然的事情。當我們回過頭來看時,情況不同了,我們會有新的認識。從最簡單的層面來說,我們的寫作初衷已經從我們的短期記憶中消失了,我們必須真正的重讀和思考。換句話說,我們有了更多的信息,世界發展了,我們的知識也豐富了。

                我喜歡將代碼視為一個可以捕獲當前看法的地方。我們都會犯一些回過頭來看時可以糾正的錯誤,除了糾正這些錯誤外,我們還可以記錄我們更深入的理解。一般而言,應用程序是業務流程的軟件模擬。如果軟件沒有捕獲當前了解的業務流程,那么開發人員就必須做一個心理映射。在任何項目中,心里映射都是一個很大的負擔。這是我認為領域驅動設計是一個重要的軟件開發工具的原因之一。

                定期閱讀所有的代碼,而且不只是你自己的代碼。閱讀他人的代碼是一種很棒的學習方式。正如作家Stephen King所言,“讀其他人的書是讓你成為一個更好的作家的最好方式?!边@同樣適用于代碼,開源是我們這個行業采取的最好的措施之一。通過公開開發軟件,我們可以分享理解,獲取反饋,向其他人學習。參與開源是讓你成為一名更好的工程師的最佳方式之一。


                4000-880-989
                (24小時熱線)
                聯系客服
                微信公眾號

                官方公眾號

                小程序

                ?2008-2022 CORPORATION ALL Rights Reserved. 昆明奧遠科技有限公司版權所有 滇ICP備09003328號-1 滇公網安備 53011102000818號
                昆明那家網絡公司好,新媒體運營,網站優化,網絡推廣,網站建設,網頁設計,網站設計,網站推廣,云南網站公司,昆明新媒體公司,云南網紅主播,昆明SEO公司,昆明網站建設,昆明網絡推廣,昆明網站優化,昆明網站推廣,紅河網站建設,大理網絡公司,曲靖網絡公司,麗江網站設計,昭通網絡公司,保山大數據服務,智慧高速建設,智慧校園服務,云南IDC服務商,網絡安全測評,等保測評,網站關鍵詞排名優化服務,服務客戶盡超2000余家,一切盡在奧遠科技,服務電話:13888956730
                777奇米影视一区二区三区

                          <noframes id="rrprp"><ruby id="rrprp"><ruby id="rrprp"></ruby></ruby>

                              <track id="rrprp"></track>