本書介紹了如何讓簡約設計的思想回歸到計算機編程中,如何在軟件行業(yè)工作以及取得成功,以及如何打造高效的軟件開發(fā)團隊。整本書的主旨是幫助讀者成為一名更好的軟件開發(fā)者。本書主要包括以下內容:開發(fā)者的基本素質、軟件的復雜與簡約、團隊里的工程問題、理解軟件和軟件測試、持續(xù)改善軟件。
我從2008年開始在www.codesimplicity.com網(wǎng)站上撰寫博客,這么做的原因只有一個—想要讓全世界的軟件開發(fā)變得更好。做這件事不是為了成名,不是為了獲得工作機會,也不是為了將自己的想法強加于他人。我的初衷是為了幫助他人。
我發(fā)現(xiàn)在軟件工程領域中存在大量與軟件開發(fā)相關的各種建議,但缺少一定數(shù)量的事實和一些基本的原則。這個說法對有些人來說可能有點駭人聽聞,因為基于我們對工作內容的認知,軟件開發(fā)可以算作一門科學學科—我們需要借助高科技設備和許多復雜系統(tǒng)來完成工作。所以它毋庸置疑和科學有關,不是嗎?
問題在于如果某類事物想要被納入科學的范疇,它的背后必須要有科學定律,以及基于這些定律形成的結構化的信息系統(tǒng)作為支撐。一般來說,你要證明你的定律和系統(tǒng)在現(xiàn)實的物理世界中能夠完全按照預期方式來工作。所以對于技術來說,僅有事實還不夠,還必須有基本原則。
有非常多的方式能夠推導出這些基本原則。□流行和接受度□高的方式莫過于借助于科學的方□□。當然也存在其他的途徑。無論你選擇什么樣的方式,整個過程都離不開一個更大的主題—認識論,解釋起來就是“研究知識是如何被發(fā)現(xiàn)的”。舉個例子,你肯定知道你的名字叫什么,但你是怎么知道那就是你的名字的?你怎么知道它的確是你的名字?如果你想要學習構造一幢房子,你要如何學習這方面的知識?等等。
關于認識論,我表述得過于簡略了,鑒于我并沒有真正地對認識論及對它的使用做出解釋,或許有些哲學系教授會對我的說法給予批評,但是我希望我所寫的這些內容足以讓大部分讀者意識到,我需要的是一些能夠引導基本原則的發(fā)掘的方□□。而認識論中的各類方□□,包括其中的科學方□□,都能夠給予我這方面幫助。
我的□□本書《簡約之美》就是對軟件開發(fā)中的這些基本原則的匯總講解。但除了這些基本原則之外,需要了解的內容遠遠不止這些。你當然可以從《簡約之美》中敘述的內容推導出其他有關軟件設計的林林總總,但既然我都準備好了,為什么不直接和你分享呢?
本書是自《簡約之美》出版后,對我后續(xù)所寫的博客文章的再一次匯總出版,還包括在《簡約之美》出版之前所寫的但又不適合收錄在其中的一些內容。本書的大部分文章都能在我的網(wǎng)站上找到,但是在本書中為了□大化可讀性,它們被重新組織、規(guī)劃以及再編輯。同時,以圖書形式閱讀它們也更容易理解和消化。
本書有一章沒有(也永遠不可能)出現(xiàn)在我的網(wǎng)站上—這一章名為“杰出的軟件”。作為《簡約之美》□□版草稿中的一部分,我在很多年前就已經(jīng)編寫完畢了,但從來沒能說服自己將它免費發(fā)布出去。
你大可不必按照書中文章的順序來閱讀。如果能按照頁碼順序或者章節(jié)的順序來閱讀當然很好,但是如果你覺得某部分內容看上去更有意思,你也可以跳躍式地直接去閱讀你感興趣的內容。
為了同時滿足兩部分讀者的需求,我將整本書的內容分成了幾個部分。這樣,按照先后順序閱讀的讀者能感受到一致性,想要跳讀的讀者也能做到對每一部分涵蓋的內容心中有數(shù)。
本書的前三部分內容首先聚焦的是程序員應該了解的基本原則,然后是關于軟件的復雜性和簡約性的各個方面。在此之后,第四部分介紹代碼調試。接著是第五部分,包含一整套全新的原則,都是我在《簡約之美》出版之后陸續(xù)整理出來的,基于的是我將《簡約之美》中的原則成功應用在大型工程團隊內的經(jīng)驗。
接下來第六部分敘述的是軟件設計原則背后的哲學。其中包含一章“測試的哲學”,討論的是有關軟件測試的基本原則,比我在□□本書里講解得更加透徹。
□后迎來的是第七部分,內容都是圍繞我所有博客中□受歡迎的文章來編寫的。開篇首先解釋了為什么“持續(xù)改善”應該作為軟件開發(fā)中產(chǎn)品管理的哲學,然后討論的是如何讓你的軟件持續(xù)改善,以及成為一名更好的程序員的具體方法。
總的來說,整本書旨在幫助你成為一名更好的軟件開發(fā)者,這也是本書□□的主旨。我傾向于活在一個軟件簡單易用、快速穩(wěn)定、設計良好還易于開發(fā)的世界里,你不也希望如此嗎?在《簡約之美》和這本書中,我會告訴你應該通過何種方式來達成這個目的—你所需要做的僅僅是將我傳遞給你的這些知識在工作中應用起來。
祝你好運!
馬克斯·卡納特-亞歷山大
□017年8月