反駁"軟體開發中最流行的錯誤觀點"

banq發表於2012-05-02
來自Quora的Lee Semel他列出了一些流行的錯誤觀念,我個人認為這些錯誤觀點反而是相對正確的,至少有一定道理,見:

● 瀑布模型是在實施軟體之前最行之有效的描述系統的模型,它能幫助軟體實施時循序漸進,而非迴圈反覆。人們一直當它是一個好的實施方案,而一篇論文中恰好將它列為很差的實施方案,因此引起廣泛討論。http://en.wikipedia.org/wiki/Waterfall_model

banq:如果你非常熟悉業務,瀑布模型無疑是是最有效率,也是最見功力的,體現了幾十年的老分析師相比嫩芽的最大不同。

● 使用者知道他們想要什麼,他們也能夠將需求闡述清楚。
banq:使用者確實知道他們想要什麼,他們能夠從不同方面將需求點點滴滴的闡述清楚,只要你善於不斷溝通 傾聽和深入。

● 有某種語言、技術或是流行方法將會是殺手鐧,能夠取代你正在使用的方法,解決你的問題。
banq:新的語言和技術方法能夠帶來效率和新的設計理念,與其在一個方向裡艱苦鬥牛較真,不如輕鬆重新選擇一個方法,重新選擇一個工具,起到事半功倍的效果,勞動並不光榮,會勞動才光榮。

● 人月神話裡說,在一個開發團隊中增加人手會讓效率成線性增長。http://en.wikipedia.org/wiki/The_Mythical_Man-Month
banq:如果你採取DDD領域驅動設計這樣新方法,那麼隨著專案擴大,線性增加人手,效率也是線性增長,而採取資料庫驅動或指令碼過程驅動則相反。

● 對規範文件的認同意味著對實際功能的認同,甚至規範文件本身寫的很模糊或是有出入也要遵守規範文件。http://gettingreal.37signals.com/ch11_Theres_Nothing_Functional_about_a_Functional_Spec.php
banq:沒有共識,就沒有統一行動,對統一模型的認同才能象燈塔一樣照耀指揮群體協調前進,如同音樂指揮一樣,如果規範文件表現的模型寫得很模糊,表示有待確認和細化,是否與實際出入只能由重要建模人員決定,普通開發者只有認為自己理解角度或層次不夠。

● 唯有一種方法能將開發實施得最好,程式設計師的自由被所用的語言嚴格束縛。
banq:一個專案中只有實施一種方法,才能將開發實施最好,多個方法會混亂腳步,就象兩個人同時喊:一二一。

● 有多於一種方法來完成一個任務,程式設計師有完全的自由。
banq:程式設計師只要在確認規範文件統一模型後,有完全的自由,難道程式設計師在自己的技術領地也失去自由?請問誰敢剝奪?

設計模式是通用的,而不像某種程式語言的表示式一樣有諸多限制。
banq:模式不通用,就不能稱為模式,稱為API。

● 最好的技術方法就是最好的方法。
banq:最好的技術方法通常代表最好的方法,否則最好的方法就無法落地,無法讓人們認識到它是最好的方法。

● 你可以用正規表示式來解析HTML:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
banq:當然可以,替換性很強,可以定製。我就用過。

● 不需要理會市場反應,應該讓市場來適應軟體。
banq:如果你是賈伯斯,你可以這樣,在未來創新市場,都是一片空白,市場本身就為零,哪來市場反應?無生有。

● 軟體可以被精確估計。
banq:如果不能被精確估計,那麼就無法實現規模化生產,就如同中醫,需要走另外一條思維模式了。


● 軟體開發可以被當作固定價格、固定限期的專案出售。
banq:打包出售,關鍵在於你和購買方怎麼談判。

● 物件是對現實世界最好的描述。物件最好的應用方面便是描述真實世界中的實體。
banq:物件符合人們的直觀認識,雖然很多人可能不知道那稱為物件,我們可以用一個“有邊界事物”抽象表達,老子道德經開篇就說:無慾觀其繳(邊界)

● 資料應該隱藏在物件後面,物件應提供運算元據的需要的所有方法。
banq:對於沒有物件概念的人,入門這點指引約束是最起碼的,這樣才尊重邊界的作用,否則劃分邊界做啥?

● JavaScript和Java有關係。
banq:當然有關係,推出Java以後,又推出JS,面向兩個不同領域,從語法上都很類似,但理念不同。


● 邏輯應該和顯示完全分離開。
banq:如果不完全分離,如何實現各自擴充變化?這也是遵循邊界。

● 軟體開發最重要的是需要好的數學能力,最好的學習方法是學習理論的電腦科學,數學能力強的也能寫出好的軟體。解決邏輯難題的能力是判斷一個軟體工程師能力在最有效方法。
banq:數學能夠培養邏輯,邏輯能力是軟體工程師能力最基本的能力,邏輯培養是目標,數學是通往目標的方式之一。

● 軟體就是表面上看到的,設計後面發生了什麼不需要引起我們的注意,尤其對於那些非技術出身的經理和客戶來說更是這樣。
banq:軟體是一種顯式化設計,作為設計師的重要職責就是將功能等進行顯式化,如果對於客戶看不到的,可以理解為是因為設計師沒有將其進行顯式,可能是有意或無意。


● 編寫軟體對於缺乏人際溝通能力的人來說是一個好職業。
banq:道德:以道行事;以德容人。編寫軟體是做事行事,如果你不願意和人打交道,處處讓人,忍受各種人性的醜陋,不如埋在程式碼中,體現事物之道的優美。

● 軟體可以有效的用其他媒介來模擬和設計,例如wireframes或Photoshop comps,因為用實際的程式碼來設計(HTML和CSS)太難,太貴了。
banq注:Flash橫行說明這點吧,HTML5試圖統一客戶端,目標很美好,途徑很殘酷,就像網際網路並不是IT業發明的一樣,想在IT技術上統一的人都是痴心夢想。

● 設計師們不能也不需要學習寫程式碼,應該儘量遠離真實的程式碼。
banq注:是的,避免具體程式碼技術對更高層面設計的影響,不要被小事累贅,要學會抽象,不拋棄對地面的貪戀,如何能夠飛翔?

● 設計僅僅是表面上的裝飾,其重要性沒有好的開發重要。
banq注:設計是一種顯式方法,橫看成嶺側成峰,設計只是一層窗戶紙,捅破了啥都沒有。

● 軟體可以基於一系列的抽象的基礎之上可靠的構建,你僅需要理解最上的抽象層,而不需要了解背後的實現細節。參看Joel Spolsky關於抽象漏洞定律的討論:http://www.joelonsoftware.com/articles/LeakyAbstractions.html
banq注:這是基本方向,從羅素悖論至今,人類在方法論上唯一一點可憐的進步就是分層。

● 當你最終釋出了新的應用或是網站,就意味著一切結束了。
banq注:無為是一種目標,如果你從開始就抱著要開發出一個無需人為維護干涉的系統出來,而且意識到,很多問題都是因為Fix BUG帶來的,而不是原始設計帶來的,那麼早點住手,也許是一種好的辦法。


[該貼被admin於2012-05-02 16:07修改過]

[該貼被admin於2012-05-02 16:07修改過]

相關文章