一位苦樂(lè)自知的軟件架構(gòu)師的自白:讓軟件真正地“靈活可塑”
軟件行業(yè),苦樂(lè)自知
今年是我從事軟件開(kāi)發(fā)的第17個(gè)年頭。從非科班出生的業(yè)余計(jì)算機(jī)愛(ài)好者,到成為走過(guò)無(wú)數(shù)彎路的老碼農(nóng),或者偶爾也被人稱(chēng)為架構(gòu)師。回顧我成為架構(gòu)師的道路,可能要追溯到最初的工作階段,干過(guò)碼農(nóng)、做過(guò)美工、當(dāng)過(guò)項(xiàng)目經(jīng)理,這些經(jīng)歷讓我幸運(yùn)地在實(shí)踐中體會(huì)了從醞釀?wù)Q生到后期維護(hù)的整個(gè)階段,然而當(dāng)時(shí)苦于沒(méi)有經(jīng)過(guò)系統(tǒng)的訓(xùn)練和學(xué)習(xí),對(duì)整個(gè)軟件工程和架構(gòu)的認(rèn)知是懵懂的。十余年前,我參加并通過(guò)了系統(tǒng)分析員的考試(當(dāng)年軟件架構(gòu)師認(rèn)證還沒(méi)有從系統(tǒng)分析師中分離出來(lái)),然后又陸續(xù)作為“架構(gòu)師”被某些大公司聘用(然而自認(rèn)其實(shí)還不夠格),逐漸地,在一些大型項(xiàng)目的歷練和個(gè)人業(yè)余作品的開(kāi)發(fā)種,才彌補(bǔ)了我技術(shù)上的短板。
回首十余年軟件從業(yè)的道路,從開(kāi)發(fā)到項(xiàng)目經(jīng)理再到部門(mén)管理,然后回歸開(kāi)發(fā),到最后成為架構(gòu)師,期間的坎坷真實(shí)苦樂(lè)自知。而讓我能在這個(gè)行業(yè)一直堅(jiān)持下來(lái),并且不斷適應(yīng)這個(gè)行業(yè)變化的,我認(rèn)為最大的收獲來(lái)自于同事和前輩的指導(dǎo),其次就是不斷的自我反省和教訓(xùn)總結(jié)。因?yàn)樽邚澛泛帽冉粚W(xué)費(fèi),工作就是不斷地在錯(cuò)誤中前行,必須時(shí)刻警惕不要讓自己犯下相同的錯(cuò)誤—如果一次次掉到同樣的坑里,是很難在這個(gè)行業(yè)的研發(fā)崗位上堅(jiān)持下來(lái)的。
為此,我愿意分享我的經(jīng)驗(yàn)和教訓(xùn),或許有緣者能從中體會(huì)一二。
如何做好一個(gè)架構(gòu)師
1. 關(guān)注用戶(hù)行為動(dòng)機(jī)和利益
軟件工程的源頭,在于用戶(hù)需求,而用戶(hù)需求恰恰是軟件項(xiàng)目中最難的,也是很容易被大家忽視的點(diǎn)。架構(gòu)師必需從源頭來(lái)引導(dǎo)軟件開(kāi)發(fā)這條河流,不要讓它流到溝里去。
讓我首次明白業(yè)務(wù)分析的重要性,是在我工作不久的時(shí)候。當(dāng)時(shí),我負(fù)責(zé)某省廳檔案系統(tǒng)的項(xiàng)目開(kāi)發(fā),第一次作為主力程序員,在走訪(fǎng)了幾個(gè)業(yè)務(wù)員后,很快便開(kāi)發(fā)出了第一個(gè)版本,當(dāng)時(shí)內(nèi)心還是挺得意的。
開(kāi)發(fā)完成后我便去給用戶(hù)報(bào)告,剛見(jiàn)到用戶(hù),還沒(méi)來(lái)得及把軟件打開(kāi)給對(duì)方看,用戶(hù)表示上次談的需求只是一點(diǎn)點(diǎn),復(fù)雜的問(wèn)題還沒(méi)和我說(shuō)呢,然后張嘴說(shuō)出一大堆業(yè)務(wù)名詞和術(shù)語(yǔ),把我說(shuō)得云里霧里,感覺(jué)好像完成的軟件功能不到實(shí)際業(yè)務(wù)需求的三分之一。如此往復(fù)、修改下來(lái),才粗略了解到用戶(hù)業(yè)務(wù)的概況。這才發(fā)現(xiàn)實(shí)際要開(kāi)發(fā)一款被用戶(hù)接受的軟件,并不如預(yù)期得那么容易。
然后真正的磨煉還在后面。當(dāng)我終于第一次將自認(rèn)為完整的功能上線(xiàn)拿給用戶(hù)試用,得到的是“幾乎沒(méi)辦法使用”的評(píng)價(jià)。用戶(hù)一改過(guò)去積極配合的態(tài)度,產(chǎn)生了諸多抱怨。比如,多余的輸入框,要求輸入框有記憶功能(就是后來(lái)的“自動(dòng)完成”功能,也就是希望將Excel表格的操作方式搬到軟件上來(lái),當(dāng)時(shí)的Web開(kāi)發(fā)技術(shù)幾乎不能支持)等等,很多需求以當(dāng)時(shí)的技術(shù)能力很難實(shí)現(xiàn)。
這簡(jiǎn)直沒(méi)法干了,我?guī)缀跻艞壛耍@個(gè)問(wèn)題最終被上級(jí)領(lǐng)導(dǎo)反映給了負(fù)責(zé)建設(shè)這套系統(tǒng)的廳辦公室主任(多年以后,我終于知道,他是“客戶(hù)”而不是“用戶(hù)”)。在主任安排下,次日我坐在用戶(hù)辦公室觀(guān)察他的日常工作。原來(lái)用戶(hù)上午要處理的文書(shū)案卷有一百多件,我們的檔案系統(tǒng)不但需要用戶(hù)逐個(gè)瀏覽所有待填寫(xiě)字段,還要求用戶(hù)將檔案掃描后錄入系統(tǒng)(主任要求的),用戶(hù)的工作量不但沒(méi)有降低,反而大為增加!
這里有兩個(gè)問(wèn)題。第一、由于數(shù)量原因,錄入效率要求非常高,但在設(shè)計(jì)開(kāi)發(fā)中沒(méi)有得到重視。第二、系統(tǒng)上線(xiàn)后反而加重工作負(fù)擔(dān),用戶(hù)有了抗拒心理。但業(yè)務(wù)的框架是主任定的,這是用戶(hù)“不愿意”說(shuō)出口的原因。
很多時(shí)候用戶(hù)訴求猶如冰山,訪(fǎng)談和書(shū)面的需求說(shuō)明上能獲得的只有冰山浮在水面上的部分,大量的潛在訴求隱藏在水面之下,不深入學(xué)習(xí)用戶(hù)業(yè)務(wù)細(xì)節(jié)是無(wú)法真正掌握用戶(hù)訴求。在分析用戶(hù)需求時(shí),需要關(guān)注用戶(hù)的動(dòng)機(jī)和出發(fā)點(diǎn),而這往往是用戶(hù)利益息息相關(guān)的,我們需要分析清楚這種動(dòng)機(jī)和利益關(guān)系。
在知道了原因后問(wèn)題就好辦了,主任很快就根據(jù)系統(tǒng)上線(xiàn)后的工作負(fù)載情況,從另一個(gè)工作量大幅減少的崗位上安排人員來(lái)負(fù)責(zé)文檔錄入,同時(shí)我們也對(duì)軟件交互進(jìn)行了大幅改進(jìn)。最后系統(tǒng)再次上線(xiàn)后,整個(gè)軟件的實(shí)施就變得非常順利了。
多年后,我終于知道分析業(yè)務(wù)全貌的工作叫“業(yè)務(wù)建模”,如果說(shuō)反映冰山浮在水面上的部分是需求,那么“業(yè)務(wù)建?!本凸蠢粘稣麄€(gè)冰山的全貌。構(gòu)造業(yè)務(wù)模型是架構(gòu)師的基本功之一,一個(gè)好的架構(gòu)師一定會(huì)做“涉眾利益分析”,將產(chǎn)品設(shè)計(jì)得符合用戶(hù)真正的需要。
很多朋友可能認(rèn)為,用戶(hù)需求主要來(lái)自用戶(hù)(代表)的口述或者訪(fǎng)談意見(jiàn),其實(shí)這是個(gè)誤解。在另一個(gè)省廳做無(wú)紙化辦公的項(xiàng)目時(shí),為了得到這些“隱含”的業(yè)務(wù)信息,在征得同意后,采取了以下方法:
觀(guān)察關(guān)鍵崗位,記錄操作人員的日常行為。
查閱了兩年內(nèi)所有文書(shū)檔案材料(絕密除外)。在文書(shū)材料的手跡當(dāng)中,我們看到了很多不在“明面上”的東西。比如過(guò)程中的周期性工作(例如一年才發(fā)生一次),這種用戶(hù)在反饋中遺漏的事項(xiàng)。進(jìn)一步地,我們還看到了矛盾、爭(zhēng)論、政治因素等這些用戶(hù)不會(huì)說(shuō)出口的部分。
分析這些業(yè)務(wù)數(shù)據(jù),并勾勒出了業(yè)務(wù)的全貌后,我發(fā)現(xiàn)來(lái)自于直接收集的“明面”需求-包括用戶(hù)訪(fǎng)談和需求描述材料中的業(yè)務(wù)信息不到20%,大約80%以上的業(yè)務(wù)需求來(lái)自于各種觀(guān)察和材料檢索分析。這是一個(gè)稍稍令人吃驚的比例,但足以說(shuō)明業(yè)務(wù)建模工作的重要。
2. 讓軟件真正地“靈活可塑”
上一節(jié)我們講了業(yè)務(wù)建模,將業(yè)務(wù)模型化,不僅可以把需求做深入,更重要的是業(yè)務(wù)模型可以引導(dǎo)我們做出好的軟件設(shè)計(jì)。
做產(chǎn)品也好,做項(xiàng)目也好,研發(fā)人員厭惡的事情會(huì)有很多—比如趕進(jìn)度、調(diào)錯(cuò)、維護(hù)別人的代碼等等。但是,最為深?lèi)和唇^的事情,無(wú)疑就是變更需求。只有符合用戶(hù)業(yè)務(wù)模型的設(shè)計(jì),才能在頻繁的需求變更下保持穩(wěn)定。
就如上面提到的無(wú)紙化辦公項(xiàng)目中,一樣碰到了需求的復(fù)雜變化,以及用戶(hù)的業(yè)務(wù)多變。
最終,我們丟掉了數(shù)百頁(yè)的需求和流程描述;放棄了之前開(kāi)發(fā)好的所有功能(這些功能曾被反復(fù)詬病不夠靈活);放棄了過(guò)去那種按局長(zhǎng)、處長(zhǎng)、科長(zhǎng)等分別設(shè)置角色進(jìn)行授權(quán)的權(quán)限模型—這些頭銜僅僅只是人員的屬性。人員的權(quán)限實(shí)際上是受任務(wù)決定的,這才是真實(shí)的業(yè)務(wù)模型(若干年后,才知道那叫TBAC權(quán)限模型,也就是基于任務(wù)的權(quán)限模型,早已作為理論被國(guó)外軟件科學(xué)家提出)。
而基于不變的用戶(hù)責(zé)任模型,我們抽象出了基本的職責(zé)行為模型,然后將可變的業(yè)務(wù)歸納到了一個(gè)配置層中。也就是說(shuō),不是直接去實(shí)現(xiàn)業(yè)務(wù)功能,也不假定用戶(hù)具有什么職務(wù)就能干什么,而是將復(fù)雜的業(yè)務(wù)功能拆解成幾個(gè)基本行為。然后用配置層將這些行為組合起來(lái)供用戶(hù)使用,就像搭積木一樣。
這樣開(kāi)發(fā)出來(lái)的軟件,做到了原先根本不敢想象的事情—用戶(hù)上午找我談心的業(yè)務(wù)流程和想法,下午兩點(diǎn)上班后,立刻就在系統(tǒng)中能夠使用這個(gè)功能。這種敏捷和響應(yīng)能力,堪比“飛機(jī)在飛行中更換發(fā)動(dòng)機(jī)”,這讓用戶(hù)非常滿(mǎn)意。
更為難得的是,數(shù)年后,包括我在內(nèi)的幾名開(kāi)發(fā)骨干陸續(xù)離開(kāi)了那家軟件公司,這家軟件公司也不復(fù)存在了。然而,這套沒(méi)有人維護(hù)的系統(tǒng)一直被用戶(hù)保留了下來(lái),至今已連續(xù)工作了近15年,期間沒(méi)有經(jīng)過(guò)大的升級(jí)和開(kāi)發(fā)。現(xiàn)在依然每天有數(shù)百人在操作和使用,累計(jì)運(yùn)行數(shù)據(jù)也有了幾十TB。
軟件沒(méi)有針對(duì)用戶(hù)的“具體需求”來(lái)設(shè)計(jì),而是通過(guò)抽象的模型來(lái)設(shè)計(jì)開(kāi)發(fā)。能夠十幾年無(wú)需升級(jí)而滿(mǎn)足各種業(yè)務(wù)變化,無(wú)疑是那套抽象了所有業(yè)務(wù)模型的配置層帶來(lái)的。
然而并不是所有的項(xiàng)目和產(chǎn)品都能像這個(gè)項(xiàng)目一樣完美收官。在項(xiàng)目過(guò)程中,我們還認(rèn)識(shí)到要實(shí)現(xiàn)業(yè)務(wù)靈活性的重大代價(jià)。因此,不要讓完美主義耽誤了時(shí)機(jī),畢竟天下武功,唯快不破,很多時(shí)候客戶(hù)需要的是及時(shí)響應(yīng)而不是完美無(wú)缺。
3. 非功能性的問(wèn)題也對(duì)架構(gòu)有著高要求
隨著系統(tǒng)規(guī)模越來(lái)越大,單純做好業(yè)務(wù)模型和業(yè)務(wù)設(shè)計(jì),并不足以保證軟件的成功。隨著架構(gòu)工作的深入,架構(gòu)師需要一一或者說(shuō)不得不更多考慮非功能性的設(shè)計(jì)要點(diǎn)。
2011年,我參加了某省移動(dòng)通信公司BOSS系統(tǒng)升級(jí)和重構(gòu)項(xiàng)目。所謂BOSS系統(tǒng),是行內(nèi)的一個(gè)叫法,正式名稱(chēng)是Business&Operation Support System,在通信行業(yè),一般分為四個(gè)部分:計(jì)費(fèi)及結(jié)算系統(tǒng)、營(yíng)業(yè)與賬務(wù)系統(tǒng)、客戶(hù)服務(wù)系統(tǒng)和決策支持系統(tǒng)。
這樣的一個(gè)系統(tǒng),是由我當(dāng)時(shí)所在的公司杭州、南京兩個(gè)研發(fā)中心加上北京研發(fā)中心的部分專(zhuān)家,有數(shù)十個(gè)團(tuán)隊(duì)參與開(kāi)發(fā)和測(cè)試,近百人在現(xiàn)場(chǎng)進(jìn)行系統(tǒng)集成。我當(dāng)時(shí)負(fù)責(zé)的是營(yíng)業(yè)與賬務(wù)系統(tǒng)和部分計(jì)費(fèi)系統(tǒng)的核心框架設(shè)計(jì)。
我們對(duì)營(yíng)帳系統(tǒng)的交易鏈路進(jìn)行壓力測(cè)試。測(cè)試的結(jié)果不容樂(lè)觀(guān),服務(wù)整體并發(fā)性能未達(dá)到客戶(hù)要求的數(shù)據(jù),接下來(lái)要推動(dòng)整個(gè)系統(tǒng)的性能優(yōu)化。這個(gè)任務(wù)的困難在于大型分布式系統(tǒng)關(guān)系錯(cuò)綜復(fù)雜,整個(gè)營(yíng)帳系統(tǒng)的鏈路是一條很長(zhǎng)的集群,涉及到另外兩個(gè)系統(tǒng)的調(diào)用,同時(shí)每個(gè)系統(tǒng)內(nèi)部都有好多組件,彼此形成了復(fù)雜的調(diào)用關(guān)系。而大多數(shù)組件來(lái)自不同團(tuán)隊(duì),我們團(tuán)隊(duì)提供的RPC框架和基礎(chǔ)框架只覆蓋了65%的組件,剩余來(lái)自其他省市研發(fā)團(tuán)隊(duì)的組件架構(gòu)不明,設(shè)計(jì)也完全不了解。在這種情況下,我認(rèn)為需要解決以下問(wèn)題:
1. 搞清楚每個(gè)測(cè)試案例的調(diào)用鏈順序。在核心調(diào)用鏈上,應(yīng)該將非核心的系統(tǒng)剔除。
2. 造成整體鏈路性能不佳的短板在哪里?
3. 找到存在性能短板的組件后,如何發(fā)現(xiàn)性能瓶頸。
針對(duì)問(wèn)題1,我們基于RPC框架輸出結(jié)果的分析,初步完成了一個(gè)調(diào)用關(guān)系圖,然后配合軟件設(shè)計(jì)文檔,編寫(xiě)流量轉(zhuǎn)發(fā)代理工具補(bǔ)充完整了調(diào)用鏈路圖。
問(wèn)題2,我們?cè)赗PC框架基礎(chǔ)上增加了分析模塊,自動(dòng)對(duì)每次吞吐的數(shù)據(jù)量進(jìn)行記錄,還用于分析響應(yīng)時(shí)長(zhǎng)排名、報(bào)文長(zhǎng)度等Top10等,根據(jù)排名情況列出一大堆所謂“慢接口”,但是我們不能因?yàn)橐粋€(gè)接口慢,就認(rèn)為它有問(wèn)題。我們針對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)研發(fā)了自己的ORM框架,解決了一部分慢性能問(wèn)題。
問(wèn)題3,我們發(fā)現(xiàn)慢的接口往往集中在幾個(gè)組件上,這和這些組件的設(shè)計(jì)質(zhì)量有一定關(guān)系。
這個(gè)故事告訴我們,大部分研發(fā)團(tuán)隊(duì)在項(xiàng)目之初對(duì)非功能性的特性考慮往往不多,架構(gòu)師在設(shè)計(jì)技術(shù)架構(gòu)時(shí),需要成為軟件質(zhì)量底線(xiàn)的保障者,讓軟件具備足夠的自我糾錯(cuò)能力,以及一致的可集成、可維護(hù)的能力。
走出成為架構(gòu)師的關(guān)鍵道路
1. 追根,抽象,把握事物本質(zhì)
在過(guò)去的經(jīng)歷中,促使我從普通的編程者向架構(gòu)師轉(zhuǎn)變的根本因素,我認(rèn)為是一種試圖追尋事物本質(zhì)的好奇心。這種好奇心是促使人思考和訓(xùn)練思維的源泉。人類(lèi)的大腦在記憶力和理解力上是有其局限的,因此人不得不通過(guò)抽象,屏蔽事務(wù)的無(wú)關(guān)要素和細(xì)節(jié),才能把握事物的本質(zhì)。
中國(guó)古代哲學(xué)中,有很多這一類(lèi)思辨,比如—“時(shí)有風(fēng)吹幡動(dòng)。一僧曰風(fēng)動(dòng),一僧曰幡動(dòng)。議論不已?;菽苓M(jìn)曰:非風(fēng)動(dòng),非幡動(dòng),仁者心動(dòng)?!睂?duì)于進(jìn)修禪心者來(lái)說(shuō),直指人心的思辨,毫無(wú)疑問(wèn)抓住了問(wèn)題的本質(zhì)。因?yàn)樵趨⒄障禐椤叭诵暮头鹦浴钡亩U學(xué)中,世界的本質(zhì)已經(jīng)“不在你的心外”(王陽(yáng)明語(yǔ))。參照系的不同,帶來(lái)的結(jié)論也就不同。哲學(xué)中相對(duì)與絕對(duì)、運(yùn)動(dòng)與靜止、唯心與唯物、存在與虛無(wú)都有很多對(duì)思維的訓(xùn)練,通過(guò)思辨,能提升個(gè)人的思維抽象能力,因?yàn)槌橄笫钦軐W(xué)思維的基本特征。
2. 不停的學(xué)習(xí)和傳播知識(shí)
在技術(shù)架構(gòu)中,各種架構(gòu)方法可能是大家容易關(guān)注到的—面向?qū)ο?、面向模式、自頂向下分解、自底向上分層等等,從馮諾依曼體系到通信協(xié)議、UML等有很多設(shè)計(jì)方法和架構(gòu)理念可以學(xué)習(xí)。
但是在做業(yè)務(wù)分析和設(shè)計(jì)時(shí),如何考慮業(yè)務(wù)模型,如何兼顧涉眾利益?大家都知道人性是復(fù)雜的,但是在組織內(nèi)部,人的行為和動(dòng)機(jī)是有軌跡的,人類(lèi)所表現(xiàn)出來(lái)的無(wú)外乎正常成年人的社會(huì)人格和動(dòng)機(jī),而這正是普通心理學(xué)和組織行為學(xué)的研究范圍。所以做業(yè)務(wù)架構(gòu)的伙伴要去學(xué)一些這方面的知識(shí)。其實(shí)老祖宗早就告訴過(guò)我們,“世事洞明皆學(xué)問(wèn),人情練達(dá)即文章”就是這個(gè)道理。
架構(gòu)師無(wú)法“獨(dú)善其身”,缺少了實(shí)現(xiàn)架構(gòu)的研發(fā)和項(xiàng)目團(tuán)隊(duì),架構(gòu)就會(huì)成為空中樓閣。因此,成功的架構(gòu)師只有讓組織成功才能真正的成功。架構(gòu)師要樂(lè)于將自己的知識(shí)、想法和同事、朋友分享。如果孤芳自賞,那就沒(méi)有了用武之地。
3. 追求簡(jiǎn)約與平衡的架構(gòu)之美
大多稱(chēng)為架構(gòu)師的人,都有追求完美的偏好,但實(shí)際在項(xiàng)目和產(chǎn)品開(kāi)發(fā)中,既沒(méi)有機(jī)會(huì),也沒(méi)有必要實(shí)現(xiàn)完美的架構(gòu)與軟件。因?yàn)橥昝谰鸵馕吨撍?,脫俗就意味著無(wú)先例、無(wú)參照,這往往會(huì)帶來(lái)巨大的風(fēng)險(xiǎn)和不可控因素。
KISS原則是架構(gòu)師要注意遵循的一個(gè)原則,因?yàn)樵綇?fù)雜的東西就越精密,越精密的東西在工程中就越不可靠。尤其在分布式系統(tǒng)設(shè)計(jì)中,異常和故障的可能性太多了。將系統(tǒng)設(shè)計(jì)得絲絲入扣而沒(méi)有任何預(yù)防措施,那么一旦出現(xiàn)任何意外,異常情況就會(huì)像滾雪球那樣蔓延開(kāi)來(lái),直到整個(gè)系統(tǒng)奔潰。在二戰(zhàn)中,德國(guó)的坦克大量使用交錯(cuò)式負(fù)重輪。這是一種非常復(fù)雜的機(jī)械構(gòu)造,性能優(yōu)良,穩(wěn)定性好。然而就是生產(chǎn)復(fù)雜,維修繁瑣,產(chǎn)量輸給對(duì)手老大一截,而且容易出故障。據(jù)記載,虎式、豹式坦克的戰(zhàn)損率和機(jī)械故障發(fā)生率幾乎相等。種種因素下,性能強(qiáng)悍的虎式、豹式最終只能被淹沒(méi)在廉價(jià)坦克T-34的海洋之中。
架構(gòu)師最終需要站立在大地上,才能仰望天空。平衡好成熟技術(shù)和新技術(shù)之間的關(guān)系、平衡好硬編碼和業(yè)務(wù)引擎之間的取舍、平衡好性能與資源占用之間的矛盾等等,這些都是架構(gòu)師需要把握的。這種平衡往往來(lái)自于環(huán)境需求,而不應(yīng)當(dāng)是架構(gòu)師的個(gè)人喜好。比如在預(yù)研性的項(xiàng)目中,可以適當(dāng)采取更激進(jìn)的技術(shù)策略,但是對(duì)于有緊迫上線(xiàn)時(shí)間要求的產(chǎn)品,就需要更保守和穩(wěn)妥的解決方案。
所謂平衡,并不是平均,更不是平庸。而是在所處場(chǎng)景中,態(tài)度鮮明地取舍—在性能中取舍,在功能中取舍等等。這種存乎在心的取舍最終會(huì)形成架構(gòu)師獨(dú)特的審美,這種審美源自環(huán)境(或者場(chǎng)景)與架構(gòu)的和諧。這種和諧之美體現(xiàn)在業(yè)務(wù)整體,而不是來(lái)自于某頂高精尖的局部構(gòu)造—就像我們?cè)谏搅种写罱ǖ男∧疚莺驮诙际兄写罱ǖ幕炷链髲B一樣,如果交換了場(chǎng)所,那就失去了和諧之美。
回顧與總結(jié)
在軟件行業(yè)工作,就是在多變的需求、緊湊的工期、古怪的bug中不斷掙扎的過(guò)程,回首過(guò)往,十余年來(lái)很多同事在這樣的顛簸中或轉(zhuǎn)型管理、或轉(zhuǎn)型售前、或離開(kāi)了這個(gè)行業(yè),這是非常遺憾的。對(duì)于我們很多人來(lái)說(shuō),在邁過(guò)所有這些坎坷后,就會(huì)發(fā)現(xiàn)軟件開(kāi)發(fā)工作是“踏遍青山人未老,風(fēng)景這邊獨(dú)好”。
回首向來(lái)蕭瑟處,也無(wú)風(fēng)雨也無(wú)晴。當(dāng)你真正體會(huì)了這個(gè)行業(yè)的酸甜苦辣之后,還有什么能讓你放棄這個(gè)職業(yè)呢?
--是“枯燥的編碼生活”嗎?不,怎么會(huì)有人覺(jué)得編碼枯燥呢?多年來(lái),我內(nèi)心一直以作為碼農(nóng)自豪,堅(jiān)持每天寫(xiě)代碼。最能體現(xiàn)軟件從業(yè)人員“像上帝一樣”編排一切的工作,無(wú)疑就是編碼了。你從哪里還能得到創(chuàng)造一個(gè)世界那樣的滿(mǎn)足感?
--是“用戶(hù)頻繁的變更需求”嗎?不,每個(gè)用戶(hù)都是理性的體驗(yàn)者,他們追求的一直都是更好地完成業(yè)務(wù),流水般變動(dòng)的只是業(yè)務(wù)的形態(tài),始終如一的是管理學(xué)、組織行為學(xué)和普通心理學(xué)作用下的業(yè)務(wù)本質(zhì)。領(lǐng)會(huì)到這一點(diǎn),你會(huì)從用戶(hù)的微笑和感謝中找到前進(jìn)的動(dòng)力。
--是“繁重到不加班就完成不了的任務(wù)”嗎?不,任何成就哪有不經(jīng)過(guò)汗水和痛苦就能達(dá)到的呢?辛苦和汗水帶來(lái)的不僅僅是疲勞,還有榮譽(yù)和滿(mǎn)足感。
堅(jiān)持走技術(shù)發(fā)展的道路,用技術(shù)手段解決客觀(guān)世界的問(wèn)題,然后在軟件設(shè)計(jì)和編碼的汪洋大海中尋找樂(lè)趣,這是所有軟件技術(shù)人的最好歸宿。最后,我希望有志于成為架構(gòu)師的年輕人能在技術(shù)軟件研發(fā)和架構(gòu)的道路上堅(jiān)持下去,直到體會(huì)到真正樂(lè)趣的時(shí)刻。