軟體開發中需要更多的偏執
程式設計師有時候會讓你難以接受,因為他們對於自己使用的開發工具或開發方法有一種狂熱的偏執,給人一種很固執的感覺。而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的偉大之處在於,它決定了做如何的取捨,並一直堅持這條道路走下去。
它們這樣做就是向我們程式設計師宣告:這是我們的選擇。所以才出現了我們上面的討論,所以我們才要瞪大眼睛做出自己的選擇。
情況是:所有的平臺,框架,類庫都是偏執的。它們只是不去宣告,或者並不始終如一的偏執。它們不宣告,我們也就很難知道我們使用它們將會做怎樣的取捨。我們一開始就做出了錯誤的選擇,卻去抱怨工具的的不好。鬱悶!
我堅持認為:不僅要有更多的偏執;而且我們要更好的表達出這些偏執是什麼。
相關文章
- 軟體開發中需要克服的8個壞習慣
- 開發直播軟體需要走的流程
- 想要成為軟體開發中的王者,需要明白的 21 條準則
- 軟體開發中的DevOpsdev
- 軟體開發大牛們需要遵守的10大原則
- 從開源軟體開發中體會到的心得
- 自上而下的軟體開發和自下而上軟體開發
- 軟體開發中的兩種態度
- 思考軟體開發中的快與慢
- 軟體開發中的準時化生產
- SSD9中的軟體開發模型模型
- 軟體開發中的專案管理(轉)專案管理
- 探討敏捷開發在軟體開發中的應用敏捷
- 作為軟體開發人員真的需要學歷嗎
- 軟體開發:app軟體開發,pc端軟體開發,微商城/小程式開發APP
- 嵌入式軟體開發中必備軟體工具
- 軟體測試中需要使用的工具
- 更多軟體被發現使用類似 Superfish 中間人攻擊技術
- 我的軟體開發中經驗教訓
- 軟體開發中的“瑞士軍刀綜合徵”
- 軟體開發中的瑞士軍刀綜合症
- 軟體開發中的十大困難
- 軟體開發中的冒名頂替綜合徵
- 破除軟體開發中的神祕主義
- 軟體開發中的自動化測試
- 軟體開發中關注習慣的力量
- 行軟體開發中的專案管理 (轉)專案管理
- 軟體開發與軟體研發
- 線上教你開發直播軟體app時需要掌握的小知識APP
- 開源軟體需要高強度的研發才能成為精品
- 學嵌入式Linux軟體開發需要的知識薦Linux
- 智慧醫院APP開發需要具備哪些軟體功能?APP
- Apache軟體基金會主席Greg Stein:軟體需要在開源中獲益(轉)Apache
- 軟體開發的難
- 軟體“吃”掉了軟體開發
- 軟體開發mac常用軟體Mac
- 軟體開發中的精益和敏捷 - Aram Koukia敏捷
- 嵌入式軟硬體開發中遇到的坑