2016 年 02 月 21 日

Your Code as a Crime Scene

開膛手傑克與和老舊的程式碼基底(legacy codebase)有許多你沒想到的共同點。  受到鑑識心理學(forensic psychology)方法的啟發, 本書教你如何預測程式碼基底的未來, 評估重構的方向, 並了解你的團隊將如何影響整個設計。  此獨一無二的鑑識心理學和程式碼分析的結合, 將讓你有能力制定必要的策略, 不管你採用的程式語言是什麼。

參加團購

關於這本書

level

軟體是活的, 會隨著時間改變。 要了解軟體系統, 我們需要知道他們來自哪裡將如何演化。 利用從程式碼資料中做歷史分析與採礦, 你可事先修正以免設計出錯, 做狀況事項的維護, 並找出團隊生產力的瓶頸。

由本書, 你將學習鑑識心理學的辯證技術(目擊者調查), 成功地維護你的軟體。  你將畫出所有提交代碼的地圖資訊並找出潛在的危險地區(Hotspots),引用暫時的耦合(temporal coupling)觀念來揭開/程式碼中無關區域的隱藏關係。  你也將度量你的程式碼改進的有效性, 也將應用這技術到各種大小專案。  對於小專案, 你將對自己的設計有新的洞察力並了解這些程式碼是否符合你的想法。 對於大專案,你將辨識出哪些部分不錯, 哪些部分比較脆弱。

大規模的開發可說是一種社交活動, 且團隊的動力影響程式碼的品質。  這也是為什麼本書告訴你如何發掘社會偏見來分析系統的演化。  運用提交訊息做為目擊證據來觀察你的程式碼實際上正在發生什麼事。  最終, 你將把這些都放在一起, 來追蹤組織的程式碼有什麼問題,並找出解決方法, 一起為更好的代碼來做狩獵吧!

與Adam Tornhill, Your Code as a Crime Scene作者的Q&A

你怎麼想到要隱喻程式碼為犯罪現場呢?  

嗯, 那時我的心理學課程中, 我修了門鑑識心理學。 同時我也從事軟體開發, 每天都要和一大堆嚇人的老舊系統(legacy systems)搏鬥。  主要的挑戰是要明白在整個程式碼基底中,哪部分真的是關鍵? 哪部分將會是生產力的瓶頸? 哪部分很難維護? 哪部分很容易產生bug?

當我開始學習鑑識心理學,我發現犯罪調查員面臨跟我們一樣的開放式且大規模的問題。 而當代的鑑識心理學對這樣的問題能有效針砭, 這方法應該也能運用到軟體開發。 我於是決定開始探索這之間的關聯並找出如何將這方法運用到代碼。

我們從本書將學到什麼鑑識的觀念?

讓我大開眼界, 在這裡我們以類似地理罪犯側寫(geographical offender profiling)的技術來判斷這些程式碼。 地理罪犯特寫採用罪犯的空間移動來辨識出他們的基地。  運作的方式為計算概率面(probability surface)並投射到真實的地理位置。  所以我想, 是否我們可以如法炮製到軟體開發呢?

以我們的案例,罪犯是程式碼。 所以從你已經提交的程式碼, 我們學到了辨識你的程式碼演化模式的技術。  此讓你有能力預知它的未來, 並找出哪些程式碼很難改進且有可能出錯-這些程式碼就是所謂罪犯!

這不只跟複雜的程式碼相關-複雜只有當你需要去處理它的時候才會複雜。  這也是為什麼在複雜的程式碼間找出重疊區很重要, 因為我們會經常要處理它。  這是簡單的技術卻在實務上出乎意外地有用。 當然, 我們也有實證研究支持這樣的論點, 你所學的不是單純的想法, 而是實際在真實的專案實行驗證過的。

大規模的軟體開發也是社交活動。  也就是說也會有日常生活中的社會偏見傾向。  所以我們將深入調查出錯的法證案件, 從他們錯誤中學習, 並發展新的知識來理解團隊合作、組織, 以及軟體架構。

我沒有心理學的背景, 有辦法讀懂這本書嗎? 

我已確定對我們要面對的觀念說明清楚。  心理學跟我們息息相關, 因為我們開發的主要工具不是電腦,而是我們的頭腦, 而心理學相關我們人腦如何運作。  這相關我們如何學習、如何解決問題、理解, 和與別人共事。  這些都和我們每天的開發活動相關。

請多告訴我們一些相關Code Maat的事? 

這個分析技術基於版本控制資訊。 因此,你將學習從你的原始碼資料庫做資料採礦並找到有趣的模式來進化你的代碼。  Code Maat只是一個工具來將以上所說過程中無聊的部分幫你自動化。

事實上, 我將 Code Maat 開放原始碼,做為你將本書學到的技術用於實際工作的快速起頭。  我們也將採用 Code Maat 的程式碼做一些案例學習。   這麼做的唯一理由是與其批評那些我不清楚內情的作品還不如把自己的設計撕成碎片。

也就是說, 我們也將調查一些其他的程式碼基底, 這讓我們感覺一下不同的技術如何互補。   屏除這一切, 工具本身是最不重要的部分。

等等, 你是說我學習這本書不需要用到 Code Maat, 那取而代之我會用到哪些其他的工具呢?

我很確定這些技術再過幾年會成為主流-我們能從原始碼資料庫中採礦的資訊實在是不可忽視地有用。  到那時,你會有一堆工具供你選擇(不管是商用的或開源的)。

不過在那發生之前, 我仍建議你就你的特殊需求客製化你的工具。  這演算法並不會很難實行而且這本書都會教你。  除此之外, 在 Code Maat 上建置精巧的工具很容易。  Code Maat 產出 CSV 輸出, 對後處理和視覺化都直截了當, 不管你選用什麼方式。

最後, 還有其他好的選擇。 我知道本書序文的作者 Michael Feathers 有個開源工具, 可用來分析Ruby 代碼資料庫。  另外, 在 Moose 專案, 提供開源專案平台讓你做自己的客製化分析。

 

試讀章節

請參考 原出版社內容大綱    大綱PDF

部分試讀

關於作者

Adam Tornhill  雙修工程與心理學, 以不同的角度來看軟體。 他是架構師也是程式設計師, 以多種程式語言寫不少開放原始碼程式。  他是一本暢銷書 Lisp for the Web and has self-published a book on Patterns in C. Other 的作者。 他的興趣包含現代歷史、音樂和國術。

作者的演講:

 

作者的Code Maat 在Github的開源碼

團購

  • 原價 USD 24。
  • 團購人數達10人以上, 折價8%  :  USD22.08 (將以團購成立當天匯率折合台幣)
  • 此團購為電子書,格式有 ePub、Mobi( Kindle 格式 )、PDF。

歡迎加入 Soft & Share 團購 社團,到Facebook po文下方留言 “我要參加團購"

參加團購

想找社群朋友一起買這本好書嗎? 使用以下的社群分享按鈕分享給你的朋友吧!

 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

分類