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