軟體開發中需要更多的偏執
程式設計師有時候會讓你難以接受,因為他們對於自己使用的開發工具或開發方法有一種狂熱的偏執,給人一種很固執的感覺。而Smart Bear Software軟體公司創始人Jason Cohen卻指出了一個相反的觀點:軟體開發中的偏執是件好事。
你會突然發現,所有的軟體框架都很偏執。我喜歡它們這樣。我們需要它們偏執。
敏捷開發宣言是頭一個清晰的表達出它的偏執觀點的好樣板。沒有模稜兩可的話,有的只是明確的取捨,例如評估對比“可執行的軟體”和“全面詳細的文件”。如果你要問是該去寫一個需求文件,還是寫一個具有可讀性的整合測試用例,你很清楚的能知道一個敏捷份子會怎樣回答。
Ruby on Rails的偏執更強烈,例如這無處不在的“約定優於配置”思想。不管你何時用它,你完全可以相信,Rails裡寫出一個方法會讓你節約更多的字元。
大多數的軟體開發方法都是在宣揚一種哲學或思維定式。在很多團體裡這的表現的很明顯,他們對某種程式語言深信不疑。有些軟體創業團隊或公司對一些“大家熟知”的企業文化奉若聖經。你也許並不會贊成他們的一些基本觀點,但一個得到共識的信念會讓一個團隊更加緊密。
事實上,Rails的偏執如此的走極端,以至於讓人懷疑它的一些做法是否值得。例如,在RailsGuides——一個討論Rails基本知識的地方——當他們談論Rails程式碼生成引擎時,他們特別的指出,使用一個空的controller類就能讓你把頁面跑起來,這是多麼的酷。但他們隨即就接著說,在實際使用中,你總是需要一個這樣沒什麼用處的controller類來幫你讓東西跑起來。
為什麼非要搞一個這樣的空類?這不很讓人困惑嗎?你幾乎從來不用它。
對於這個問題,我可以寫出一大篇文章,但這不是重點。重點是,從大方面來看,這樣的策略有很明顯的好處:
- 更少的程式碼
- … 這意味著更少的bug
- … 這意味程式碼更容易維護
- 一旦一個程式設計師知道了這種約定,他將會有更高的效率,因為在新開發或維護舊的軟體時,他都不需要寫那些公式化的程式碼了。
- 一個程式設計師對一個陌生的專案能很容易的上手,因為這些約定在所有Rails專案中都是相同的。很多東西你都不需要去思考或爭論。
- 就像編碼風格,如何編寫已不重要。重要的是大家都有共識,Rails的約定是統一的。
但這也有很明顯的弊端:
- 對於一個Rails新手來說,你數小時也未必能寫出幾行能用的程式碼,因為從程式碼上你看不出什麼用處。
- 當Rails改變約定時(例如遷移到Rails 3),很多的東西都不能用了。而且,約定改變導致的問題你很難找出原因,因為程式碼本身看不出什麼錯誤。例如,當Java裡的介面改變時,你的程式是編譯不過去的。Ruby 和 Rails 可不是這樣。
- 如果你沒有很好的程式碼測試覆蓋率的話,那很容易出問題,因為你的開發工具連最基本的錯誤都不會提示你。這導致了很多愚蠢的bug,你浪費了大量的時間去編寫和維護一些只是用來檢測弱智bug的測試用例。
- 你很難寫出,或根本不可能寫出一些有用的開發工具——例如程式碼自動反射——因為這些程式碼裡沒有包含足夠的資訊。這意味著你要手工寫更多的程式碼,工具不能幫你。
Rails這樣做“對”嗎?也許一個禪宗大師會這樣說:你這是個錯誤的問題。
問題應該是:對於你的專案,你的團隊,你的文化,你的目標,你應該做如何的權衡取捨?
而Rails的偉大之處在於,它決定了做如何的取捨,並一直堅持這條道路走下去。
它們這樣做就是向我們程式設計師宣告:這是我們的選擇。所以才出現了我們上面的討論,所以我們才要瞪大眼睛做出自己的選擇。
情況是:所有的平臺,框架,類庫都是偏執的。它們只是不去宣告,或者並不始終如一的偏執。它們不宣告,我們也就很難知道我們使用它們將會做怎樣的取捨。我們一開始就做出了錯誤的選擇,卻去抱怨工具的的不好。鬱悶!
我堅持認為:不僅要有更多的偏執;而且我們要更好的表達出這些偏執是什麼。
相關文章
- 開發直播軟體需要走的流程
- 軟體開發中的DevOpsdev
- 為什麼科學需要更多的研究型軟體工程師? - nature軟體工程工程師
- 軟體開發大牛們需要遵守的10大原則
- 探討敏捷開發在軟體開發中的應用敏捷
- 軟體測試中需要使用的工具
- 軟體開發:app軟體開發,pc端軟體開發,微商城/小程式開發APP
- 嵌入式軟體開發中必備軟體工具
- 智慧醫院APP開發需要具備哪些軟體功能?APP
- 我的軟體開發中經驗教訓
- 線上教你開發直播軟體app時需要掌握的小知識APP
- 中國需要自己的開源體系
- 教育類app系統軟體開發需要多少錢費用APP
- 嵌入式軟硬體開發中遇到的坑
- 軟體開發中的精益和敏捷 - Aram Koukia敏捷
- 軟體開發中的10個最佳實踐技巧!
- 如何應對軟體開發中的估算問題?
- 軟體敏捷開發流程中的 Spike,Sprint 和 Takt敏捷
- 軟體功能測試在軟體開發中的重要性。在哪裡做軟體測試?
- 惡意軟體開發——shellcode執行的幾種常見方式
- 何為開源,聊聊軟體開發中的那些開源協議協議
- 艾偉也談專案管理,找出軟體開發過程中的BUG,你需要火眼金睛專案管理
- 思泉軟體開發平臺與傳統軟體開發的優勢
- 軟體開發中的10條最佳指導原則
- 軟體開發中業務知識的啟用 - Feathers
- 結構優於制度,軟體開發中的康威定律
- 如何避免軟體開發專案中的需求管理陷阱?
- 商城軟體開發、開發商城小程式的好處-北京銳智互動軟體開發
- 軟體開發2
- 軟體開發3
- 軟體開發模式模式
- 軟體開發流程
- 作為嵌入式/軟體開發工程師你需要知道的東西工程師
- 直播app開發中,關於執行緒需要了解的一些事APP執行緒
- 何為軟體開發的難?
- 軟體開發新模式:敏捷開發模式敏捷
- 軟體開發中的10大不為人知的真相
- 軟體開發中17個頂級的平臺和工具
- 軟體開發中會遇到的幾種實用圖例