說(shuō)到系統(tǒng)架構(gòu)師,相信很多企業(yè)都有這樣的高級(jí)人才。系統(tǒng)架構(gòu)師已然成為國(guó)內(nèi)一門十分緊俏的職業(yè),一名優(yōu)秀的系統(tǒng)架構(gòu)師常常會(huì)吸引各方企業(yè)爭(zhēng)搶。
系統(tǒng)架構(gòu)師的職責(zé)是在項(xiàng)目開(kāi)發(fā)過(guò)程中,制定這個(gè)項(xiàng)目的總體腳骨,指導(dǎo)整個(gè)開(kāi)發(fā)團(tuán)隊(duì)完成這個(gè)計(jì)劃,他必須對(duì)開(kāi)發(fā)技術(shù)非常了解,并且需要良好的組織管理能力,可以這樣說(shuō),一個(gè)架構(gòu)師的好壞決定了整個(gè)項(xiàng)目的成敗。
可以把一個(gè)軟件研發(fā)工作者的從業(yè)經(jīng)歷大致劃分為3個(gè)階段:
第一階段是新手期
這個(gè)階段的典型特征是容易被新技術(shù)的華麗外表所迷惑。當(dāng)在網(wǎng)上看到一種新技術(shù)的介紹或者心得,立即產(chǎn)生了大量腎上腺素的分泌,干什么都想用一用,如果這時(shí)有人跟他說(shuō)你的這項(xiàng)工作用這個(gè)不合適的話,要是性子急的人估計(jì)就直接開(kāi)始罵娘了,性子緩些的也會(huì)想盡理由說(shuō)服你使用這個(gè)新東西,實(shí)在沒(méi)辦法的話,吃不下東西睡不著覺(jué)也想另找個(gè)地方用一下。
第二階段是中級(jí)程序員階段
這個(gè)階段的程序員對(duì)技術(shù)、和工具的選擇已經(jīng)審慎了很多,可以根據(jù)具體的需求來(lái)選擇需要采用的技術(shù),可以寫出詳細(xì)的需求調(diào)研報(bào)告并提出設(shè)計(jì)方案,優(yōu)點(diǎn)、缺點(diǎn)分析得清晰明了。在應(yīng)用層面也有較強(qiáng)的全局理解力,在團(tuán)隊(duì)中也具有相當(dāng)?shù)膮f(xié)作能力,因此具備較強(qiáng)的解決問(wèn)題的能力。
第三階段是高級(jí)程序員/分析師/架構(gòu)師階段
進(jìn)入這個(gè)階段的前提是多年的工作經(jīng)驗(yàn),廣闊的知識(shí)面和對(duì)系統(tǒng)底層到高層的全面認(rèn)識(shí),已經(jīng)使其進(jìn)入了無(wú)語(yǔ)言無(wú)工具的層次。也就是能任何清楚地感知每種編程語(yǔ)言的優(yōu)劣、使用范圍、編碼禁忌,對(duì)一個(gè)大型工程能有最全面的了解,在選擇語(yǔ)言和確定技術(shù)方案的時(shí)候不會(huì)被自己對(duì)語(yǔ)言或技術(shù)工具的偏好(或者根本已經(jīng)無(wú)所偏好)所影響,真正明白了其實(shí)別管是神馬語(yǔ)言、神馬技術(shù),歸根到底咱們的對(duì)象還不是CPU、內(nèi)存、硬盤和網(wǎng)絡(luò),該做的事情一件都不能少,所謂的技術(shù)框架是對(duì)初級(jí)程序員用的,真正高級(jí)了不研究個(gè)清楚透徹都不敢讓你進(jìn)來(lái)。即使對(duì)同一種語(yǔ)言,在不同的操作系統(tǒng)中,如Visual C++和Unix C、AIX XLC、GNU G++等等的區(qū)別,以及不同版本之間的區(qū)別也了如指掌。
架構(gòu)師的經(jīng)驗(yàn)體現(xiàn)在什么地方呢?舉一個(gè)例子:
比如一個(gè)復(fù)雜的分布式系統(tǒng),時(shí)時(shí)刻刻處理業(yè)務(wù)請(qǐng)求,要設(shè)計(jì)一套機(jī)制,保證所有的業(yè)務(wù)都能處理完成,無(wú)論成功失敗。
簡(jiǎn)單的開(kāi)發(fā)思維會(huì)考慮,盡可能的捕獲異常,給每一種錯(cuò)誤類型編號(hào),中途失敗的流程要進(jìn)行回退,相信設(shè)計(jì)能否覆蓋所有情況。
有經(jīng)驗(yàn)的架構(gòu)師則會(huì)清醒的認(rèn)識(shí)到,這樣的系統(tǒng)隨著不斷升級(jí)和持續(xù)運(yùn)行,一定會(huì)出現(xiàn)各種各樣的問(wèn)題,不出問(wèn)題是不可能的。
應(yīng)用的潛在bug、業(yè)務(wù)邏輯漏洞、數(shù)據(jù)異常、網(wǎng)絡(luò)抖動(dòng)、硬件故障、人工誤操作,甚至還有莫名其妙未能找到原因只能歸結(jié)為靈異事件的問(wèn)題,會(huì)層出不窮,等你解決。
我們需要做的是盡可能監(jiān)控、捕獲到異常情況,通過(guò)技術(shù)手段修復(fù)多數(shù)的問(wèn)題,少數(shù)不常見(jiàn)的或者難以自動(dòng)解決的問(wèn)題最終還是要考慮通過(guò)人工方式處理。
我們的目標(biāo)是解決問(wèn)題,通過(guò)分析,調(diào)整架構(gòu),優(yōu)化邏輯,舊的問(wèn)題解決后,還會(huì)有新的問(wèn)題。
只要系統(tǒng)運(yùn)行,就需要維護(hù),軟件工程理論中系統(tǒng)上線后期維護(hù)都是一個(gè)重要的階段,此時(shí)系統(tǒng)是動(dòng)態(tài)的,業(yè)務(wù)是連續(xù)的。
用近幾年很多人用過(guò)的比喻,開(kāi)著飛機(jī)修飛機(jī),開(kāi)著火車修火車,在原有的系統(tǒng)上做修改,并不比從頭做一個(gè)系統(tǒng)輕松。
就像是CAP理論下,多數(shù)的選擇是最終一致性,即通過(guò)努力,無(wú)限趨近于問(wèn)題最小化,時(shí)刻準(zhǔn)備著迎接新問(wèn)題,動(dòng)態(tài)平衡才是系統(tǒng)運(yùn)行的常態(tài)。
用七句話總結(jié)我對(duì)架構(gòu)師的定義:
以工程思維全面理解業(yè)務(wù)需求
基于模型和基礎(chǔ)模式抽象簡(jiǎn)化
提出恰當(dāng)可行的整體解決方案
在限定資源范圍完成明確目標(biāo)
滿足業(yè)務(wù)需求且保證系統(tǒng)質(zhì)量
在可預(yù)見(jiàn)的周期內(nèi)具備擴(kuò)展性
并在系統(tǒng)生命周期內(nèi)持續(xù)演進(jìn)
那就都該怎樣去做呢?
多做項(xiàng)目,多思考
不要害怕做事,剛畢業(yè)的同學(xué)最缺的就是工作經(jīng)驗(yàn)(《程序員:增加編程經(jīng)驗(yàn)的3種途徑》),亂七八糟的項(xiàng)目能讓你很快就了解了一個(gè)公司的業(yè)務(wù)與使用的技術(shù),并且可以多接觸同事與客戶。當(dāng)你畢業(yè)后剛進(jìn)一家公司時(shí),如果主管沒(méi)有把你安排到項(xiàng)目組工作,那真的很杯具,因?yàn)樗J(rèn)為你還不能勝任工作或者你的加入會(huì)讓項(xiàng)目組更糟。
參與開(kāi)源項(xiàng)目
自己開(kāi)發(fā)框架與工具,可以讓你快速的從一個(gè)初級(jí)程序員轉(zhuǎn)變成更高級(jí)的程序員或分析師或架構(gòu)師,因?yàn)檫@個(gè)過(guò)程中給你提供了為其他程序員服務(wù)的機(jī)會(huì),你有動(dòng)力去了解其它程序員的工作需求,你可以把你的框架或工具寫得很好,接口簡(jiǎn)單靈活并且性能好,分析師和架構(gòu)師就經(jīng)常要干這種讓人力成本降低的事。
寫技術(shù)博客
寫技術(shù)博客是一種可以快速提高的方法,但是一個(gè)人能堅(jiān)持每周寫技術(shù)博客,那是需要付出很多代價(jià),寫博客并不是要我們寫出高質(zhì)量的文章才發(fā)表,我們可以分享自己的一些小經(jīng)驗(yàn),也可以分享自己的體會(huì)。
優(yōu)秀JAVA程序員必看的書籍
《JAVA編程思想》在有了一定的Java編程經(jīng)驗(yàn)之后,你需要“知其所以然”了。這個(gè)時(shí)候《Java編程思想》是一本讓你知其所以然的好書,它對(duì)于基本的面向?qū)ο笾R(shí)有比較清楚的交待,對(duì)Java基本語(yǔ)法,基本類庫(kù)有比較清楚的講解,可以幫你打一個(gè)良好的Java編程基礎(chǔ)。
《Agile Java》中文版
這本書一大特點(diǎn)是以單元測(cè)試和TDD來(lái)貫穿全書的,在教你Java各種重要的基礎(chǔ)知識(shí)的 過(guò)程中,潛移默化的影響你的編程思維走向敏捷,走向TDD。另外這本書成書很新,以JDK5.0的語(yǔ)法為基礎(chǔ)講解,要學(xué)習(xí)JDK5.0的新語(yǔ)法也不錯(cuò)。
《重構(gòu) 改善既有代碼的設(shè)計(jì)》
這本書名氣很大,不用多介紹,可以在閑暇的時(shí)候多翻翻,多和自己的實(shí)踐相互印證。這本書對(duì)產(chǎn)生影響是潛移默化的。
《測(cè)試驅(qū)動(dòng)開(kāi)發(fā) by Example》本書最大特點(diǎn)是很薄,看起來(lái)沒(méi)有什么負(fù)擔(dān)??梢哉乙粋€(gè)周末的下午,一邊看,一邊照做,一個(gè)下午就把書看完,這本書的所有例子跑完了。這本書的作用是通過(guò)實(shí)戰(zhàn)讓你培養(yǎng)TDD的思路。
我和大牛之間有多少距離?
跟很多人一樣,剛畢業(yè)時(shí)我覺(jué)得作為程序員,只要努力,加上少許天賦便可以獲得一些成績(jī)。
工作一段時(shí)間后,對(duì)自己和其他人的認(rèn)識(shí)也越來(lái)越清晰,逐漸的發(fā)現(xiàn)程序員之間的差距或許比人和猴子之間的差距還大,接受這個(gè)事實(shí)這讓我郁悶了很久。
再過(guò)一段時(shí)間,發(fā)現(xiàn)自己已經(jīng)能夠客觀的評(píng)價(jià)自己的能力,也意識(shí)到了距離并不是那么重要,只要想辦法跑的更快,就足夠了。
另外還有一點(diǎn)可以通過(guò)自身的學(xué)習(xí)來(lái)獲取一大進(jìn)步。
分享給超過(guò)5萬(wàn)的程序員朋友下載,這次我把所有干貨重新梳理精簡(jiǎn),免費(fèi)給大家 。
究竟有哪些干貨呢?先給你們一個(gè)目錄:
獲取方式:
免費(fèi)獲取資料途徑:共眾平臺(tái) “程序員精選”。(你懂的)
聯(lián)系客服