“希望成為馬丁·福勒那樣的大師”,40歲程序員談職業(yè)理想
BenNorthrop是一位居住在美國賓夕法尼亞州的程序員,在其40歲之際,受邀在《軟件工程日報》的播客中針對“老程序員的編程生涯”話題發(fā)表演講時表示:「我希望能成為馬丁·福勒那樣的大師,像他那樣在生活與工作之間找到平衡點(我敢打賭他的生活絕對安排得多姿多彩)。也可以說,正是因為從知識衰減與積累速率的角度看待問題,我才有了這種釋然的心態(tài)?!?/p>
這一言論引起了眾多人的共鳴,特別是“大齡程序員”。
誰是馬丁·福勒?
馬丁·福勒(MartinFowler)是一位世界級軟件開發(fā)大師,ThoughtWorks的首席科學(xué)家。他畢業(yè)于倫敦大學(xué),專攻電子工程與計算機科學(xué)專業(yè)。他是一位作家、演說者、咨詢師和泛軟件開發(fā)領(lǐng)域的意見領(lǐng)袖。他曾擔(dān)任XP2005和AgileUniverse大會的議程主席,是敏捷聯(lián)盟(AgileAlliance)的創(chuàng)建人及《敏捷軟件開發(fā)宣言》的作者之一,同時還是IEEESoftware雜志的設(shè)計專欄作家。
一直以來,他非常大的興趣就是了解如何設(shè)計軟件系統(tǒng),以非常大化開發(fā)團隊可以提供的價值。不是十分了解馬丁的人可能會認為他是個工作狂,但其實他的生活非常豐富多彩。
馬丁是個桌游愛好者,他認為桌游是一種人人都可以上手但又必須經(jīng)過深思熟慮才會好玩的棋盤游戲。對于玩桌游,馬丁是這么說的:「我喜歡它們,因為桌游具有很強的策略性,所以你需要思考和學(xué)習(xí)來才能發(fā)覺它們的樂趣所在?!柜R丁在官網(wǎng)上還公開了自己的游戲清單。
“希望成為馬丁·福勒那樣的大師”,40歲程序員談職業(yè)理想
除開游戲,馬丁還會和網(wǎng)友分享外出旅游的景色,分享自己家貓咪的故事。
“希望成為馬丁·福勒那樣的大師”,40歲程序員談職業(yè)理想
馬丁致力于改善企業(yè)級的軟件設(shè)計,對優(yōu)秀的設(shè)計以及支撐優(yōu)秀設(shè)計的工程實踐孜孜以求。他在重構(gòu)、面向?qū)ο蠓治鲈O(shè)計、模式、XP和UML等領(lǐng)域都有卓越貢獻,著有《重構(gòu):改善既有代碼的設(shè)計》《分析模式:可復(fù)用的對象模型》《領(lǐng)域特定語言》《企業(yè)應(yīng)用架構(gòu)模式》等經(jīng)典著作。
不僅如此,馬丁還常常在官網(wǎng)上發(fā)表關(guān)于構(gòu)建系統(tǒng)體系結(jié)構(gòu)的文章來和大家交流,他稱自己的官網(wǎng)為:
「Awebsiteonbuildingsoftwareeffectively」。
當然,馬丁不僅僅是一位作者,更是一位滿世界飛的杰出演說家。他一方面跟行業(yè)伙伴進行深入交流,一方面親自實踐并思考、總結(jié),然后通過出版物、博客、網(wǎng)站、演說等,和大家一起分享他的理念。
馬丁匯聚在軟件開發(fā)實踐應(yīng)用中的思想理念,卻深深影響了行業(yè)。
直到今天,他的演講或者出版物中的理念都值得反復(fù)玩味。馬丁也因此被行業(yè)內(nèi)的人稱為“書寫開發(fā)哲學(xué)”的人。
同時,也因為他樂于在社交網(wǎng)絡(luò)上分享和交流專業(yè)知識,人們也親切地稱呼他為“馬丁大叔”。
為了讓代碼整潔有序,他創(chuàng)作了《重構(gòu)》
上世紀90年代,當時還是咨詢顧問的馬丁·福勒造訪客戶調(diào)研其開發(fā)項目。該系統(tǒng)的核心是一個類繼承體系,他看了開發(fā)人員所寫的一些代碼,發(fā)現(xiàn)整個體系相當凌亂,于是馬丁建議項目經(jīng)理看看這些代碼,把它們整理一下。但是項目經(jīng)理并不熱衷于此,畢竟程序看上去還可以運行,而且項目面臨很大的進度壓力。于是項目經(jīng)理說,晚些時候再抽時間做這些整理工作。
馬丁也把他的想法告訴了在這個繼承體系上工作的程序員,告訴他們可能發(fā)生的事情。程序員都很敏銳,馬上意識到了問題的嚴重性。他們知道這并不全是他們的錯,有時候的確需要借助外力才能發(fā)現(xiàn)問題。程序員立刻用了一兩天的時間整理好這個繼承體系,并刪掉了其中一半代碼,功能毫發(fā)無損。他們對此十分滿意,而且發(fā)現(xiàn)在繼承體系中加入新的類或使用系統(tǒng)中的其他類都更快、更容易了。
受此事啟發(fā),馬丁·福勒撰寫了《重構(gòu):改善既有代碼的設(shè)計》第1版。
“希望成為馬丁·福勒那樣的大師”,40歲程序員談職業(yè)理想
重構(gòu),一言以蔽之,是在不改變外部行為的前提下,有條不紊地改善代碼。20多年前,正是《重構(gòu):改善既有代碼的設(shè)計》第1版的出版,才使得重構(gòu)終于從編程高手們的小圈子走出,成為眾多普通程序員日常開發(fā)工作中不可或缺的一部分。
如今,馬丁·福勒的《重構(gòu):改善既有代碼的設(shè)計》一書已經(jīng)成為全球有經(jīng)驗的程序員手中的利器,既可用來改善既有代碼的設(shè)計、提升軟件的可維護性,又可用于使既有代碼更易理解、煥發(fā)出新的活力。
20年后,備受關(guān)注的第2版書籍終于出版,第2版在第1版的基礎(chǔ)上做了全面修訂,反映了編程領(lǐng)域已發(fā)生的許多變化。第2版中介紹的重構(gòu)列表更加內(nèi)聚,并用JavaScript語言重寫了代碼范例。此外,第2版中還新增了與函數(shù)式編程相關(guān)的重構(gòu)范例,旨在教會讀者如何在沒有類的環(huán)境下開展重構(gòu)。
新版沿襲了第1版的結(jié)構(gòu),依次解釋什么是重構(gòu),為什么要重構(gòu),如何通過“壞味道”識別出需要重構(gòu)的代碼,以及如何在實踐中成功實施重構(gòu)(無論用的是什么編程語言):
理解重構(gòu)的過程和重構(gòu)的基本原則;
快速有效地應(yīng)用各種重構(gòu)手法,提升程序的表達力和可維護性;
識別代碼中能指示出需要重構(gòu)的地方的“壞味道”;
深入了解各種重構(gòu)手法,每個手法都包含解釋、動機、做法和范例4個部分;
構(gòu)建穩(wěn)固的測試,以支持重構(gòu)工作的開展;
理解重構(gòu)過程的權(quán)衡取舍以及重構(gòu)存在的挑戰(zhàn)等。
時隔20年,馬丁結(jié)合當下軟件開發(fā)行業(yè)的實際情況,更清晰地揭示了重構(gòu)的過程,解釋了重構(gòu)的原理和實踐方式,并給出了何時以及何地應(yīng)該開始挖掘代碼以求改善。書中給出了60多個可行的重構(gòu),每個重構(gòu)都介紹了一種經(jīng)過驗證的代碼變換手法的動機和技術(shù)。本書提出的重構(gòu)準則將幫助開發(fā)人員一次一小步地修改代碼,從而減少了開發(fā)過程中的風(fēng)險。
這是一本值得軟件開發(fā)人員、項目管理人員等細細品讀的好書,同時也適合高等院校計算機及相關(guān)專業(yè)師生作為參考讀物。
《分析模式》建立起業(yè)務(wù)人員和開發(fā)人員的橋梁
“軟件開發(fā)是一個年輕的專業(yè),我們?nèi)栽趯W(xué)習(xí)技術(shù)并構(gòu)建有效地實現(xiàn)它的工具?!?/p>
——馬丁·福勒《分析模式:可復(fù)用的對象模型》
在ThoughtWorks擔(dān)任對象建模顧問期間,馬丁·福勒需要為客戶提供建模指導(dǎo)。然而,將大量建模所積累的經(jīng)驗傳達給別人并不能幫助企業(yè)的員工掌握到核心技巧。后來他意識到,將以前創(chuàng)建模型的經(jīng)驗匯總的同時,還要改進它們以適應(yīng)新的需求。在當時,市面上有很多圖書會用簡化的案例講述這一抽象的理論,不少開發(fā)者閱讀后無法真正理解,更難以運用到實際應(yīng)用中。
典型的方法論固然有價值,但是只是學(xué)習(xí)的第一步,開發(fā)者還需要通過實際開發(fā)中創(chuàng)建的產(chǎn)物來進一步學(xué)習(xí)。
于是,馬丁·福勒決定將自己多年的經(jīng)驗匯集于《分析模式:可復(fù)用的對象模型》中,他將以往真實項目作為案例背景,然后以“模式”的方式進行歸納,生動形象地把分析模式完整的核心理念傳達給讀者。馬丁·福勒認為,建模人員不應(yīng)該僅關(guān)注過程,即如何建模,還應(yīng)當關(guān)注過程的結(jié)果,即所得到的模型本身。
“希望成為馬丁·福勒那樣的大師”,40歲程序員談職業(yè)理想
典型的方法論書籍只關(guān)注工具和技術(shù),大家期望有一本書能夠突破這一局限,而這本開創(chuàng)性的著作正好滿足了這一需求。在本書中,作者關(guān)注的是面向?qū)ο蠓治龊驮O(shè)計的非常終結(jié)果,也就是模型本身。作者在本書中分享了豐富的對象建模經(jīng)驗,以及識別重復(fù)問題并將其轉(zhuǎn)化為可復(fù)用的模型,并給出了一系列來自不同領(lǐng)域(包括交易、測量、會計和組織關(guān)系等)的模式。
概念模式無法孤立地存在,基于這一認識,作者還給出了一系列“支持模式”。這些模式探討了如何將概念模型轉(zhuǎn)化為軟件,并使其適合于大型信息系統(tǒng)的架構(gòu)。對每種模式的講解都包含了其背后的設(shè)計思路、應(yīng)該(或不應(yīng)該)使用這些模式的時機以及實現(xiàn)的訣竅。本書中展示的例子構(gòu)成了一本實用手冊,既包含有用的模型,又涵蓋對復(fù)用技能的深刻洞見,這些都有助于改進分析、建模和實現(xiàn)。
要開發(fā)復(fù)雜的企業(yè)應(yīng)用,先要為業(yè)務(wù)領(lǐng)域建立準確而深刻的分析模型。本書不是通過簡化的案例講述抽象的理論,而是直接給出來自真實項目的復(fù)雜模型,并以“模式”的方式進行歸納。本書不僅包括這些模式本身,還體現(xiàn)了作者豐富的實踐經(jīng)驗和對建模技術(shù)的深入洞見。本書主要包括兩部分:
第一部分介紹來自人員與組織管理、觀察與測量、存貨與會計、計劃、金融衍生品交易等多個業(yè)務(wù)領(lǐng)域的“分析模式”;
第二部分則給出一系列“支持模式”,用于將分析模型實現(xiàn)為具體。
具有一定經(jīng)驗的架構(gòu)師、業(yè)務(wù)分析師以及高級開發(fā)人員通過研讀本書可以很快將書中的模式和思路應(yīng)用于實踐,有效提高開發(fā)水平。軟件開發(fā)的入門者閱讀本書盡管未必能立刻領(lǐng)悟其全部內(nèi)涵,但也足以打開一扇通向新境界的窗戶,為日后的提高奠定基礎(chǔ)。
分析模式和重構(gòu)思想對當下程序員的啟發(fā)
「任何一個傻瓜都可以寫出計算機可以理解的代碼,唯有寫出人類容易理解的代碼,才是優(yōu)秀的程序員?!?/p>
馬丁·福勒認為創(chuàng)建具有良好架構(gòu)的軟件并非一蹴而就的事情。就像優(yōu)秀的散文一樣,軟件也需要定期進行修訂,并且程序員應(yīng)了解產(chǎn)品的更多功能需求以及如何才是實現(xiàn)其目標的優(yōu)秀產(chǎn)品設(shè)計。
重構(gòu)是一種支持安全地對程序進行更改的重要技術(shù)。它所包括的一些小更改不會改變可察覺的軟件行為。通過組合多項小更改,開發(fā)人員可以修改軟件的結(jié)構(gòu),以支持在非常初構(gòu)思系統(tǒng)時未計劃的重大修改。
軟件如果僅在開發(fā)人員機器上運行,就無法為軟件客戶提供價值。一直以來,發(fā)布軟件都是一個漫長而復(fù)雜的過程,這無法滿足軟件快速演變的需求。持續(xù)交付采用自動化和協(xié)作式工作流程來消除這一瓶頸,使團隊可以按照客戶所需的節(jié)奏發(fā)布軟件。為了使持續(xù)交付成為可能,我們需要建立堅實的測試基礎(chǔ),通過一系列自動化測試來確保自己的更改不會帶入任何錯誤。這促使我們將測試集成到編程中,從而改善我們的架構(gòu)。
作為程序員,掌握了「重構(gòu)」和「分析模式」既可以往上游去探索需求的梳理,用戶痛點的分析,業(yè)務(wù)價值的挖掘,又可以向下游梳理測試的編寫,產(chǎn)品的發(fā)布,運維監(jiān)控。視野開拓了,才有可能對產(chǎn)品有整體的了解,也更容易在程序員這個角色上做得更好。
“希望成為馬丁·福勒那樣的大師”,40歲程序員談職業(yè)理想
重構(gòu):改善既有代碼的設(shè)計(第2版)
作者:[美]馬丁?福勒(MartinFowler)
譯者:熊節(jié),林從羽
重構(gòu)改善既有代碼的設(shè)計(第2版平裝版)(異步圖書出品)
?。?3.7
購買
重構(gòu)改善既有代碼的設(shè)計第2版平裝版
作者:[美]馬丁·福勒(MartinFowler)
當當
內(nèi)容簡介:
本書清晰揭示了重構(gòu)的過程,解釋了重構(gòu)的原理和優(yōu)秀實踐方式,并給出了何時以及何地應(yīng)該開始挖掘代碼以求改善。書中給出了60多個可行的重構(gòu),每個重構(gòu)都介紹了一種經(jīng)過驗證的代碼變換手法的動機和技術(shù)。本書提出的重構(gòu)準則將幫助你一次一小步地修改你的代碼,從而減少了開發(fā)過程中的風(fēng)險。
“希望成為馬丁·福勒那樣的大師”,40歲程序員談職業(yè)理想
分析模式:可復(fù)用的對象模型
作者:[美]馬丁·福勒(MartinFowler)
譯者:鐘敬
分析模式:可復(fù)用的對象模型
作者:[美]馬丁·福勒(MartinFowler)
當當
內(nèi)容簡介:
要開發(fā)復(fù)雜的企業(yè)應(yīng)用,先要為業(yè)務(wù)領(lǐng)域建立準確而深刻的分析模型,本書不是通過簡化的案例講述抽象的理論,而是直接給出來自真實項目的復(fù)雜模型,并以“模式”的方式進行歸納。本書包括兩部分:第一部分介紹了來自人員與組織管理、觀察與測量、存貨與會計、計劃、金融衍生品交易等多個業(yè)務(wù)領(lǐng)域的“分析模式”;第二部分則給出一系列“支持模式”,用于將分析模型實現(xiàn)為具體的軟件。具有一定經(jīng)驗的架構(gòu)師、業(yè)務(wù)分析師以及高級開發(fā)人員通過研讀本書可以很快將書中的模式和思路應(yīng)用于實踐,有效提高開發(fā)水平。軟件開發(fā)的入門者閱讀本書盡管未必能立刻領(lǐng)悟本書的全部內(nèi)涵,但也足以打開一扇通向新境界的窗戶,為日后的提高奠定基礎(chǔ)。