反駁"軟體開發中最流行的錯誤觀點"
來自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帶來的,而不是原始設計帶來的,那麼早點住手,也許是一種好的辦法。
● 瀑布模型是在實施軟體之前最行之有效的描述系統的模型,它能幫助軟體實施時循序漸進,而非迴圈反覆。人們一直當它是一個好的實施方案,而一篇論文中恰好將它列為很差的實施方案,因此引起廣泛討論。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修改過]
相關文章
- 如何避免軟體工程中最昂貴錯誤的發生軟體工程
- 破除幾個有關軟體開發的錯誤觀念
- Web開發中最致命的8個小錯誤Web
- PHP開發中最常見的10個錯誤PHP
- 軟體開發重點放在重用上是錯誤的 - Grady
- 軟體開發中最危險的詞語
- 軟體開發的10個錯誤實踐
- 軟體開發中最重要的一項技能
- 軟體開發流行的原則:don't repeat yourself
- 軟體開發團隊主管易犯的10個錯誤
- 軟體開發中最頂級的 17 個平臺和工具
- 軟體工 程是不是教會不怎麼會寫程式的人開發軟體?你的觀點?
- Java 中最常見的 5 個錯誤Java
- 10個現代軟體開發過度設計上的錯誤
- Reddit聯合創始人教你避免軟體開發中的錯誤
- 程式設計開發中最浪費時間和資源的7個錯誤程式設計
- 觀點:Linux 上的防毒軟體Linux防毒
- [BUG反饋]OneThink1.0開發手冊書寫錯誤反饋
- 軟體開發與反饋控制系統 (轉)
- [BUG反饋]下載開發版安裝出現錯誤
- 大多數 SSL 證書籤發錯誤的主要原因是軟體錯誤
- 流行的源程式版本管理軟體和專案管理軟體各自的優缺點專案管理
- 遊戲設計師在開發中最容易犯下的錯誤/最容易忽略的地方是什麼?遊戲設計師
- 對軟體開發的一點心得體會 (轉)
- Rails遺留程式中最常犯的錯誤(上)AI
- Rails遺留程式中最常犯的錯誤(下)AI
- IT公司中最流行的10種程式語言
- 關於開源軟體的七大錯誤認知
- 開發中遇到的錯誤
- 華為雲軟體開發雲VS開發痛點=?
- 自上而下的軟體開發和自下而上軟體開發
- PDA應用軟體開發特點
- 網站建設中最常見的三個錯誤網站
- 如何分析部落格中最流行的程式語言
- JPA 開發中遇到的錯誤
- 開發中最常用
- 軟體開發:app軟體開發,pc端軟體開發,微商城/小程式開發APP
- 五年軟體開發的一點自我總結