為什麼軟體開發方法論讓你覺得糟糕? - OSCHINA - 中文開源技術...

2021-01-07 開源中國

 

圍繞軟體開發實踐和方法論,總有很多教條式的口水仗。階段式(phase-gate)方法能夠有效管理軟體開發過程的風險,還是說只是風險管理中的花哨噱頭?TDD真的能夠促生出高品質軟體?結對編程是代碼評審的有效替代抑或只是增加了商議溝通代價?我想說,雖然缺乏證據判斷這些論調的謬處,但有兩條常用的法則能夠幫助我們選擇好的實踐,同時,提升我們所提供軟體的價值:劃小開發周期以及提升反饋效率。 Michael Feathers給出了以下觀點:

我認為,到了最後,我們還是得倚重開發者的能力,這才是個更重要的考量因素,而非選擇哪門語言或糾結於方法論間的細微差別[1]。坦誠地說,我們都清楚這點,但我們看起來好像過度糾結於開發能力是關鍵因素這事兒上。或許這是個經濟學裡一個被廣泛接受的觀點的引申,但如果人是可以輕易輪換的(隨便找個人都能頂上),那才是堪稱理想的。

 

問題是,我們怎樣才能找到有(合適)技能的開發者?IT界從未很好地定義個體生產率,從這點來看,那麼,要找到合適技能的開發者就是個很難解決的問題。代碼行數(Lines of code) – 在現在仍然是一個主流的度量方法 – 深陷「一行代碼一個責任」泥潭,這並不是一個好的方法。而度量工作小時數則是鼓勵(個人)英雄式舉動 – 經驗表明,「英雄們」通常就是導致項目延期的人,依賴「英雄」往往是一開始就採取的不該採取的冒險行動,長時間工作導致人變得魯鈍,並導致低質量軟體出現。目前還沒有被普遍接受的針對IT專業人才的專業要求系列標準和僱用範式,招聘好的人才,是一門(招聘)藝術,而非(招聘)工程。

心理學家至少對這個問題進行了研究:為什麼IT業的技能很難被掌握和度量Daniel Kahneman說《Thinking, Fast and Slow | 思考,快與慢》,掌握技能有兩個基本條件:一個環境足夠規律以便可預測;有機會通過長時間實踐來學習掌握這些規律。

但是典型的軟體項目往往是沒有規律及可預測環境的。項目成功的唯一正確度量就是:最終的結果通過整個生命周期裡的實施達到了預期目標嗎? 很難知道什麼關鍵活動導致了項目成功和失敗,很少有人能夠通過舊有或現有的項目獲得答案。幾乎不可能判定哪些決策導致了成功或失敗(在人工智慧領域,這叫作信度分配問題)。

這些因素造成了IT專業人員很難掌握引導產品和服務走向成功所需的能力。然而,開發者掌握能幫助他們更高效地達到目標的技巧,將使他們更有動力 – 通常稱之為「開發完成」,儘可能快的、不考慮是否功能被集成以及生產就緒。類似的場景也常出現在其他功能性實施領域。

實際的軟體項目是複雜的,沒有規律可循,這會導致另一個問題 – 為了證明某種技術、實踐和方法論是實際有效而收集相關數據是極度困難的,幾乎不可能在脫離收集環境的情況下歸納出這些數據。

在Laurent Bossavit的好書《Leprechauns of Software Engineering》中,他抨擊了軟體開發的一些慣式,比如「成本變化」(或「缺陷成本」)「曲線」,這些慣式是許多其它的軟體開發方法論知識基礎,稱開發人員生產率的變化是一個數量級(參照確定性金字塔原理)。Laurent Bossavit說明了相關依據 – 很多人依賴從計算機科學專業學生進行的非正式試驗或是從無法被有效控制的項目中收集小量數據。這些研究組織的給出的論調基礎往往是不健全的,數據缺乏分析,而且,最過分的是調查結果普遍遠遠超出了他們的適用領域[2]。

因此,不太可能輕易下論斷敏捷開發實踐就比瀑布模式之流合適,反之亦然。「方法大師」的見解其實也沒太大指導意義,就像Kahneman說的,「人們在想法方面的信心,並非是有效行事可倚重的因素…當評估專家的想法,即使在有規律可循的情況下,你也一定要想清楚是否有合適時機可以引入其想法的可能性」。就像Ben Butler-Cole指出的《why software development methodologies rock》,引入一種新方法往往會帶來一些影響。

你可能會認為當我們決定怎樣運作一個團隊時,我們就陷入了被動。但細想一下為什麼軟體開發無章可循?為什麼在這個環境裡很難進行一些試驗以及獲取技能?什麼實踐和決定會導致成功或失敗?其中的根原因就是:環境是不規律的,做出變更與理解變更帶來的結果之間的反饋過程太長了。這裡的「變更」一詞是指廣義上的需求變更、方法變更、開發實踐變更、商業計劃變更、代碼或配置變更等等。

還是有一些辦法幫助縮短周期的,比如當我們應用精益軟體開發思想 – 一個很重要的方法。縮短開發周期在大型產品開發中是很重要的:在Bret Victor的精彩視頻 Inventing on Principle 中提到,「如此多的創新被發現,只要你真正理解了你在做什麼,你就能發現任何事物」。

但對我而言就是這樣的:我們幾乎不可能實踐持續改進、學會怎樣使團隊或個人變得更好、掌握成功創建大型產品與服務所需的技能。除非我們聚焦於儘可能使反饋間隔時間縮短,以便實際洞察其間關聯,以及辨別原因和影響。

事實上,從想法到反饋的周期儘可能短的好處是如此明顯和重要,應該把其作為商業模式中要遵循的一個重要原則。如果你糾結於要把你的產品創建成一個用戶安裝式的軟體還是SaaS模式(software-as-a-service,軟體運營服務模式,軟體即服務),這時的想法會自然而然地推動你強烈考慮SaaS模式(有感而發)。如果你要重建你的系統(包含硬體),應該考慮怎樣儘快實現原型(how you can get prototypes out as quickly as possible),以及模塊化硬體和軟體,以便你可以快速和獨立地整合。3D printing(三維列印成型技術)技術看起來在這方面有著巨大的用武之地,因為它可以滿足軟體開發應用實踐朝硬體系統(原型呈現)的演進。如果你想如願以償地縮短周期,或多或少按多功能型團隊(cross-functional teams)方式運作是需要的。 軟體方法論,即使僱用一群牛人並讓他們自我組織,也是糟糕的,因為他們時常搞得「cargo-cult」(貨物崇拜,敏捷開發裡的知名小故事,形而上):我們在做stand-ups(每日站立會議),我們有優先順序的backlog(優先待辦事務),我們甚至看在老天的份上實踐了continuous integration(持續集成)。我們的到頭來的結果為什麼還這麼差呢?因為你忘了最重要的事情:建立一個學習能力和適應能力都很好的組織

雖然像Laurent Bossavit說的(私下交流),「一個開發者掌握的技能,受限於他/她所掌握的方法及他/她偏好一種語言甚於其它語言」。 我並非建議放棄在軟體開發中的可行性試驗,在這裡的上下文中,我這麼闡述是對的。恰恰相反的是,我說的是我們並沒有努力去做好,做得還遠遠不夠。


原文出處: Why Software Development Methodologies Suck   譯文出處: ituring-2gua

相關焦點

  • 開放源碼是開源軟體嗎? - OSCHINA - 中文開源技術交流社區
    所以,與此類似的,在中文裡,我們可以認為:「開放原始碼」是一個動詞+一個名詞。而「開源」則是一個特定的詞彙。作為動詞,我們說將某某軟體開源,是一種行為。作為形容詞,我們稱某某軟體是一個開源(的)軟體,不僅僅是指我們能夠獲取到他的原始碼。
  • Google限制Python使用引熱議 - OSCHINA - 中文開源技術交流社區
    Collin Winter:的確,Google將限制Python的應用因為:Python不如Java和C++快,線程佔有、內存使用都很高在使用Python開發 新系統的時候,我們深知如果負載增加了10倍或者100倍系統會怎樣,開發出的服務會有多糟糕我想Python已經發展到了一個狹縫中,因此在選擇時我們 應當權衡其優點和缺點,也許開發人員使用Python會很有效率,但隨著系統的增大卻會遇到許多平臺級的性能限制
  • 開源軟體蓄勢待發 - OSCHINA - 中文開源技術交流社區
    在目前的經濟環境下,企業開源應用的第二階段已經被加快進度。IT行業看起來正在以一種低成本高效率的方式做著大量的事情,這使得大量可行的開源解決方案被推出。」Likewise為一家致力於為混合環境開發綜合與身份管理軟體的公司。Red Hat、Novell、 Alfresco和SugarCRM等開源公司的成功推動了應用進度。
  • Delta Lake 進入 Linux 基金會 - OSCHINA - 中文開源技術交流社區
    「將 Delta Lake 引入 Linux 基金會的中立組織之下,將有助於依賴該項目的開源社區開發解決存儲和處理大數據(本地和雲端)的技術」,Linux 基金會戰略計劃副總裁 Michael Dolan 表示。
  • Git 2.4.3 發布 - OSCHINA - 中文開源技術交流社區
    Git是一個開源的分布式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。開源中國 Git 代碼託管平臺:http://git.oschina.net/Windows下的Git請看這裡:http://www.oschina.net/p/msysgitGit 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟體
  • Web 是開源最大的成功 - OSCHINA - 中文開源技術交流社區
    開源運動廣受歡迎,並且在軟體開發史上寫下了濃重一筆。但是它影響最深遠的地方在哪呢?有史以來,最成功的開源「項目」又是什麼呢? 事實上,總體來看,Web不就是開源運動最大的成功麼? 可能最有名的例子就是隱藏域眾多網站背後的LAMP,也就是Linux、Apache、MySQL和PHP。
  • IBM 開源軟體推薦
    https://www.oschina.net/p/tj-botIBM 開源的一個 DIY 紙板機器人:TJBot ,召集世界各地的 Bot 愛好者來製作屬於自己的個性化 Bot。https://www.oschina.net/p/openwhiskOpenWhisk 是一個由 IBM 開源的、事件驅動的無伺服器計算平臺,你可以將操作代碼發送給 OpenWhisk,然後提供 OpenWhisk 代碼要處理的數據流。OpenWhisk 負責處理計算資源的擴展,這些資源是處理工作負載所需要的;你只需要處理操作代碼以及觸發這些操作的數據。
  • 開源春天,此時不來,更待何時? - OSCHINA - 中文開源技術交流社區
    要不然我們也不會看到這些修改開源協議的風波,要不然在這些風波中,我們也不會看到開源促進會(Open Source Initiative,OSI)重申需要對開源進行定義:「如果沒有對開源進行標準定義,軟體開發是不可能走下去的。如果任何人都可以提出自己對開源的定義,那麼這個世界就會缺乏信任,而如果沒有了信任,就不會有社區,不會有合作,也不會有創新。」
  • 開源平臺引領機器翻譯 - OSCHINA - 中文開源技術交流社區
    令人驚訝的速度,機器語言翻譯現在正在高速發展到各個平臺上,其中開源軟體扮演著重要的角色。
  • 開闔軟體已收購 OpenERP 中文包並開源
    OpenERP雖然在開源ERP領域屬於絕對的No. 1,但相比國內大大小小的管理軟體產品市場,仍是個小眾的軟體。即使這樣,粉刷匠帶領OpenERP中文社區貢獻者共同維護的中文包,試圖探索參與者獲益這個模式,沒想到隨著國內OpenERP市場的迅速崛起,盜版的中文包也隨之出現。竊取果實者比參與者更早到來,確實讓英雄流血又流淚。
  • zmail 6.1版本更新 - OSCHINA - 中文開源技術交流社區
    Zmail的官方主頁:www.z-email.orgZmail的官方論壇:bbs.z-email.orgZmail的QQ群: 257959126系統要求redhat 6.x centos 6.x 64位最小安裝Zmail安裝說明:概述:(1)該安裝包為一鍵安裝包,方便快捷部署;(2)Zmail是開源郵件技術社區的最新的郵件伺服器軟體包
  • 開源Community 對我來說意味著什麼 - OSCHINA - 中文開源技術交流...
    與此同時,越來越多的自由軟體(不止於Linux)開始被安裝到人們的個人電腦當中,要知道,在我們擁有用於智慧型手機和物聯網的開源作業系統之前,我們需要自行下載開源的電子郵件客戶端、瀏覽器以及其他日常使用的軟體。那個時候之所以使用自由軟體,我個人和絕大多數人對於價格的敏感是一樣的,僅僅就是自由軟體不需要我掏腰包就可以使用。
  • 詳解開源界的 5 大開源許可協議 - OSCHINA - 中文開源技術交流社區
    在我們所能想到的應用領域, 都有開 源軟體存在(象 WordPress,Drupal 這些開源CMS)。然而很多人對開源許可並不了解,本文介紹開源領域常用的幾種許可協議以及它們之間的區別。 什麼是許可,當你為你的產品籤發許可,你是在出讓自己的權利,不過,你仍然擁有版權和專利(如果申請了的話),許可的目的是,向使用你產品的人提供一定的 權限。 不管產品是免費向公眾分發,還是出售,制定一份許可協議非常有用,否則,對於前者,你相當於放棄了自己所有的權利,任何人都沒有義務表明你的原始作者身 份,對於後者,你將不得不花費比開發更多的精力用來逐個處理用戶的授權問題。
  • 媒體評熱門開源軟體Top100 17173技術大俠上榜
    編者按:日前,oschina評選出了國人開發的熱門開源軟體TOP100排行榜,其中,來自17173的技術大俠林良益開發的IKAnalyzer上榜。IK Analyzer 是一個開源的,基於java語言開發的輕量級的中文分詞工具包。
  • 推薦30 款最好的免費項目管理軟體 - OSCHINA - 中文開源技術交流...
    本文向你推薦30款免費的項目管理軟體,其中有些是桌面應用,還有一些基於Web的平臺,其中不乏優秀開源軟體。 TeamLab 是一個免費開源的商業協作和項目管理的平臺。
  • 火星探測器軟體的開源庫被惡意利用 - OSCHINA - 中文開源技術交流...
    近日Palo Alto Networks發布報告稱火星探測器軟體的開源庫被惡意利用。該惡意程序被研究人員稱為「Rover」,因為它依賴opencv和OpenAL開源庫。FreeBuf 百科:OpenCV 與 OpenALOpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows和Mac OS作業系統上。
  • 致購買 JetBrains 開發工具的用戶 - OSCHINA - 中文開源技術交流...
    首先請放心你購買了就一定會有 License 的,但由於 JetBrains 的處理速度實在是各種原因的緩慢,因此請你耐心等候。我們在購買頁面寫的3個工作日是非常順利下的處理時間,目前來看可能還需要更長些。如果你付款的時間已經超過1個星期後,可以在 OSC 上給 @蟲蟲 留言詢問。大家不妨放鬆去好好過這個春節,License 會為您奉上的!
  • 什麼是 Unix 以及它為什麼這麼重要? - OSCHINA - 中文開源技術...
    一組Unix派生系統是學術界開發的。首 先是BSD(伯克利軟體發布版),一個開源的類Unix作業系統。BSD如今還存在於FreeBSD,NetBSD和OpenBSD等系統中。 NeXTStep基於最初版的BSD開發,蘋果的Mac OS X基於NeXTStep,iOS基於Mac OS X。
  • 軟體開發和產品經理到底是怎麼回事 - OSCHINA - 中文開源技術交流...
    為了能夠把軟體開發這回事說得更清楚,正好是周末,就花時間把內容寫一寫,讓七大姑八大茄子們也能知道什麼是軟體開發,我們這夥人每天都在做些什麼事。首先,說一下什麼叫軟體。軟體,就是一切支撐電子設備的靈魂。你使用的電腦安裝了 Windows 作業系統,那麼 Windows 就是一個軟體,你手機上安裝了一個微信,那麼微信就是軟體,你去購買火車票,登錄 12306 網站,那麼 12306 就是一個軟體,甚至你無聊了,想用陌陌找幾個小夥伴,或者打開電驢在精神層次上與倉老師做一次溝通,那麼這些都是軟體,甚至你在百度網盤下載一個盜版電影,百度網盤也是軟體。那麼,為什麼要開發軟體?
  • 華為莊表偉:三代開源社區的協作模式 - OSCHINA - 中文開源技術...
    隨著軟體複雜性的不斷增加,以及軟體開發的參與者不斷增多,團隊協作的輔助軟體,也開始不斷增加,隨後我們發現:工具不僅僅限制了個人的行為模式,更進一步限制了團隊的協作模式。軟體研發企業的管理者,往往會有某種錯覺,他們會認為:管理就是定下制度、流程與規範,然後「下面的人」就會照此執行。因為有人「聽話」,有人「不聽話」,所以才需要獎勵與懲罰的制度,來幫助管理者推行他的「規則」。