閱讀663 返回首頁    go 微軟 go windows


《軟件工藝師:專業、務實、自豪》一第1章

本節書摘來異步社區《軟件工藝師:專業、務實、自豪》一書中的第1章 ,[英]桑德羅·曼卡索(Sandro Mancuso)著 愛飛翔 譯, 更多章節內容可以訪問雲棲社區“異步社區”公眾號查看。

第1章

21世紀的軟件開發
我還記得自己剛工作時的情景,那是20世紀90年代。上了三年班之後,我覺得自己已經是資深開發者(senior developer)了。我當時已經可以把匯編指令和Pascal代碼混在一起寫,博得友人讚賞,而且熟練使用至少四門編程語言。更重要的是,我可以寫出難懂的Delphi代碼:隻用幾行語句和幾個晦澀的Windows應用程序編程接口(Application Programming Interface,API)就可以把程序寫好,而這樣寫出來的代碼很少有人能看懂。
當時的人就是那麼看待編程資曆的。沒法理解一段代碼通常表明你的編程水平還不夠高。能寫出誰都看不懂的代碼,你立刻就成為高端開發者了。當時的人經常能聽見項目經理和開發者在說這樣的話:“我們現在還不能修改這段代碼,必須要等Henry Hacker度假回來才行。他寫的代碼別人都看不懂。”
工作七年之後,我已經不滿足於做一個資深開發者了,我覺得自己應該往更高的級別努力。我不想再被當成開發者了,更不想被人冠以程序員(programmer)、碼農(coder)等名頭。從那時起,我決心自稱軟件架構師(architect)。我覺得這個稱唿很好。當時我已經在一家大型谘詢公司上班了,我們的產品全都是大型企業級Java程序(當時叫作J2EE程序)。而且我們也采用了Rational統一流程(Rational Unified Process,RUP)——先繪製用例圖、類圖及序列圖,然後再寫代碼。
在這家大公司工作了一段時間後,我升入架構團隊,在那裏,我們必須首先查閱《設計模式》(Design Patterns)那本書,然後才敢創建自己的類模型。我非常熟悉GoF設計模式及Core J2EE模式,而且也懂得運用UML(Unified Modeling Language,統一建模語言)和Rational Rose來建模,此外,還獲得了一些Java認證。我能力、經驗及所獲認證都遠遠超過了對軟件架構師的要求,這種感覺不錯。
身為一名架構師,我要和業務分析師溝通,理解功能及非功能需求,並繪製圖表,精確地指明開發者必須要完成的任務。有時我也會反複思量:到底應該怎樣建立抽象模型,才能令係統在不影響其他事物的情況下順利演進呢?想這種問題時,我通常會憑著感覺在心裏來回盤算。這時我並不知道係統在五年內需要添加哪些具體功能,所以不太可能準確判斷出係統的走向。於是我加入抽象層,到處運用設計模式。這種愚蠢的做法在今天看來是過度設計(overengineering),但在當時看來,卻是一種高端的架構技術。
在架構組待了幾個月後,我發現自己經常需要和原來所在的開發團隊成員相溝通,溝通的次數遠遠多於和本團隊架構師打交道的次數。我要經常和開發者一起吃午餐,談論他們的代碼,並叫他們告訴我程序的不同部分是如何實現的。我也發現自己在空餘時間要花比從前更多的精力來寫代碼。後來,我終於明白出現這種狀況的原因了:上班的時候根本沒寫代碼,所以必須用下班後的時間把欠的那部分代碼補上。
幾乎有一年時間,每天上班都在畫圖、寫文檔,這種工作我厭倦了。於是我告訴老板,自己想回到開發團隊。他聽了很驚訝,因為他根本就不明白我當時的想法。他說:“你在技術架構師的職位上表現得很好啊。你知道嗎,很多開發者都想來架構團隊呢。你這個位置,很多人想坐呢。”這些我當然知道,我原來就是個開發者。我當然知道很多開發者都想成為架構師。我告訴老板:“那問題很好解決嘛,你從這麼多開發者裏挑一個跟我對換就行了。”一周後,我又回到了開發團隊。這次,感覺依然很好。
今天回想起來,我意識到這個決定是多麼重要。記得當時我花了幾周時間來衡量到底應不應該回到開發團隊。如果繼續留在架構團隊,那我就在一家大公司裏擁有架構師這個頭銜,我在別人眼中會顯得很有資曆,我會容易受到賞識(架構師都是老手,沒有聽過“初級架構師”(junior architect),對吧?),有指揮別人的權力,比其他開發者地位高,容易受到管理層注目,容易升職,職權也更大(架構師談論的都是些大話題)。可是回到開發團隊我就會變得很開心。架構師這個工作我感覺不太有意思,架構師整天畫圖並討論一些長遠的目標,但那些目標基本上都經不起時間的考驗。於是,我決定選擇快樂一些的工作,每天寫寫代碼就很開心。我從此發誓,自己隻選那種讓我早晨一醒來就很樂意去上班的工作和職位。
這種決定會徹底而永久地改變你的職業生涯。假如當時繼續留在架構團隊,不寫代碼,我再想重新當一名開發者可能就難得多了。越不寫代碼,就越難重拾開發者的身份。
問題的重點不在於架構師和開發者哪個更好。今天我甚至都不認為自己當年在那家公司裏麵做的是架構工作。我的意思是,應該根據自己的興趣來選擇職業道路,做自己喜歡的事。無論是架構、軟件開發、測試、業務分析、管理還是其他工作,你都應該在喜歡的前提下去做,這一點相當重要。
本章接下來要討論究竟什麼樣的開發者才是資深開發者,21世紀的開發者又要麵對哪些新挑戰。

最後更新:2017-06-22 14:02:11

  上一篇:go  《軟件工藝師:專業、務實、自豪》一1.1 何謂資深開發者
  下一篇:go  Mysql的聯合主鍵