開發人員將大多數時間花到了探究系統本身上

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"根據論文統計分析,開發人員將很多的時間都用到了探究系統本身的源碼上,因爲這是確定下一步行爲的基礎。關於如何提升代碼探究的效率,作者 Tudor Girba 給出了自己的解決方案,也就是可塑開發。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"本文最初發表於 feenk 網站博客,經原作者 Tudor Girba 授權,由 InfoQ 中文站翻譯分享。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我經常被問到,我所說的開發人員將大多數時間花到了探究系統本身上到底是什麼意思。那麼我們現在就來仔細剖析這句話。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"據我所知,關於這個話題,最早的參考文獻可以追溯到 1979 年 Zelkowitz、Shaw 和 Gannon 寫的一本書,名字叫做“Principles of software engineering and design”。書中說大多數的開發時間都花在了維護上(67%)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/24\/9b\/24c7a55f1dcfafd0e46376yya7f7f09b.png","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"軟件開發的成本(1979)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當然,在這本書中,並沒有說明這個數字是如何得出的。儘管如此,它被視爲一個足夠重要的問題,從那之後,吸引了大量的研究關注。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那麼,四十多年之後的今天,現狀又如何呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們來看一下 Xia、Bao、Lo、Xing、Hassan 和 Li 發佈在 IEEE Transactions on Software Engineering, 44, 951-976, 2018 上,名爲“Measuring Program Comprehension: A Large-Scale Field Study with Professionals”的論文。這篇論文非常有意思,因爲它詳細闡述了這些數字是如何獲取到的。按照該論文,理解部分(Comprehension)佔到了大約 58%。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"現在,我們仔細看一下結果的表格。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/fd\/26\/fda84e15b45c51300f4c769d03a91026.png","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"軟件開發的成本(2018)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"尤其是,我們關注一下表格中的第三列:它聲稱導航(Navigation)佔到了所有工作量的 24%,在這裏導航和理解是被分開計算的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"所以,我們可以看到,40 多年之後,除了學會衡量如何“計算”時間之外,並沒有什麼真正的改變。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那這又意味着什麼呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"的確,這是我們最大的一筆開銷。如果我們想要優化自己領域中的某個事情的話,那麼我們首先要去觀察一下這一部分。我們會經常討論如何構建系統,但是我們有多少次討論“探究系統”本身呢?如果我們不談論它,它就無法顯現出來,如果無法顯現出來,那我們就無法優化它。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果我們談論“探究系統”的時間是如何花掉的,就會注意到人們的時間用在了閱讀上,正如前面的論文所示,理解本質上是通過閱讀來衡量的。在大多數情況下,這兩者被認爲是同義詞。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那麼,我們該如何討論怎樣探究明白一個系統呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"鑑於四十年來其實沒有什麼新的進展,所以我們應該考慮一下,也許應該以不同的方式來解決這個問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"請耐心聽我講,現在到了有意思的地方了。那麼,開發人員究竟爲何要讀代碼呢?因爲他們想要搞明白狀況,從而能夠知道下一步該怎麼做。意圖是很重要的,這就是做決策。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/c5\/70\/c55a69db469b8bfcf2389754981efd70.png","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"探究明白的時間也就是決策的時間"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從這個角度來看,閱讀只是從數據中收集信息的手段。它也恰好是最可能以手動的方式來實現的,所以這就爲優化提供了很好的機會。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在你能夠對某些事情采取一些重要的舉措之前,我們首先要對其進行命名。否則的話,它就會像伏地魔一樣。多年以前,我把“探究明白系統以瞭解下一步該做什麼”所做的努力稱爲評估(assessment)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當時,我就斷言我們要圍繞着它進行開發的優化。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在整整十年的時間內,我和我的同事一直在探索這個想法。它引導我們產生了我們現在稱之爲可塑開發(moldable development)的理念。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那這又是什麼呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"閱讀是從數據中獲取信息的一種純手動的方式。它無法進行規模化,會導致不完整的信息和不確定性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"軟件本身就已經很困難了。不瞭解目前的系統是什麼樣子的這件事不應該成爲這方面中可接受的變量。關於當前系統的一張手繪圖充其量只能說是一個理念。決策不應該建立在理念之上,在工程領域是不應該這樣的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一旦我們接受了系統是數據的觀點,那麼很明顯我們就要像對待數據那樣對待它。數據科學家告訴我們,首先要從問題出發,然後使用一個與上下文相匹配的工具來進行推斷。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/06\/42\/06e77c9b07eyyc3b514404d079ee2442.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由於軟件是與上下文高度關聯的,我們無法預測具體的問題。我們只能預測問題的類別。爲了實現這一點,可塑開發的關鍵理念就是在瞭解問題之後,工具應該是可塑的。通過這種方式,它可以處理上下文中的重要內容,也正因爲如此,它可以處理閱讀過程中最無聊的部分。當然,爲了讓它切實可行,創建自定義工具的成本必須非常小。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我認爲在開發過程中構建自定義工具的流程,是軟件開發的下一個重大飛躍,甚至在理想的情況下,針對每一個開發問題構建自定義工具。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在十年之後,我們不應該用閱讀來衡量“探究系統”。我們應該將精力花在解決實際的問題上。爲了達到這個目的,我們應該從討論如何不讀代碼開始。我們必須要這樣做。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們創造了 Glamorous Toolkit,爲“如何不讀代碼”方面提供了一個具體可行的開端。Glamorous Toolkit 是一個可塑的開發環境,使我們能夠以低廉的成本創建關於軟件系統的定製工具。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"所以,去 gtoolkit.com 瞭解一下這些工具吧,感受 #MoldableDevelopment。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https:\/\/blog.feenk.com\/developers-spend-most-of-their-time-figuri-7aj1ocjhe765vvlln8qqbuhto\/"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章