國(guó)內(nèi)我們對(duì)架構(gòu)師,項(xiàng)目經(jīng)理超陆,開發(fā)經(jīng)理或者是技術(shù)總監(jiān)這類職業(yè)定位普遍不都不清晰牺弹,很多的情況是“能者多勞”浦马,一人身兼數(shù)職。達(dá)爾文的理論在我們的行業(yè)是絕對(duì)適用的张漂,我從進(jìn)入這個(gè)行業(yè)開始我就不甘于成為淘汰者晶默,而我也由心地?zé)釔壑@個(gè)行業(yè)很年前我就立志要成為架構(gòu)師(當(dāng)年流行叫:系統(tǒng)分析員 )這目標(biāo)進(jìn)發(fā)『皆埽回首這10幾年的磨練磺陡,我總結(jié)了一下一名合格的架構(gòu)師應(yīng)該具備哪一些方面的能力以及怎么才能得到這些能力
一、編碼能力
架構(gòu)師是一個(gè)職業(yè)漠畜,是一種經(jīng)歷了各種磨練與長(zhǎng)年開發(fā)經(jīng)驗(yàn)積累出來的币他。另外我一直認(rèn)為:不會(huì)編碼的架構(gòu)師不是一個(gè)好的架構(gòu)師。我見過很多所謂的架構(gòu)師完全不懂編碼憔狞,但總喜歡拿著架構(gòu)說事蝴悉。但從嚴(yán)格來說他們并不屬于“軟件架構(gòu)師”的范疇,充其量只能算是個(gè)“系統(tǒng)架構(gòu)設(shè)計(jì)師”瘾敢,遇到這樣的”架構(gòu)師“我總喜歡說一句話:”Don’t tell me the concepts show me the code!“拍冠。
不參與編碼并不代表不會(huì)編碼,如果沒有過硬的開發(fā)基礎(chǔ)廉丽,巨量的編碼時(shí)間積累為基礎(chǔ)倦微,在設(shè)計(jì)軟件時(shí)一定會(huì)忽略非常多的細(xì)節(jié),而這將會(huì)直接影響到整個(gè)項(xiàng)目的成敗正压,試想想當(dāng)項(xiàng)目經(jīng)理按照架構(gòu)師設(shè)計(jì)的軟件藍(lán)圖訂制開發(fā)計(jì)劃與安排項(xiàng)目資源時(shí)由于“藍(lán)圖”內(nèi)存有大量未確定的風(fēng)險(xiǎn)因素欣福,以及由風(fēng)險(xiǎn)觸發(fā)后所帶來的不可預(yù)知的結(jié)果,最后項(xiàng)目是否能成功 焦履?
多看 - 多看別人的代碼拓劝,從別人的代碼中讀出軟件的架構(gòu)與設(shè)計(jì)的設(shè)計(jì)思路
多學(xué) - 掌握各種語言,不要偏執(zhí)于某一技術(shù)陣形嘉裤,不管java, .net , phyon 還是javascript每種語言都有其優(yōu)缺點(diǎn)郑临,成為一名語言控,從語言本身學(xué)習(xí)與理解語言設(shè)計(jì)者的思想屑宠。
多做 - 瘋狂編碼厢洞,從時(shí)間與實(shí)踐中去體驗(yàn)與領(lǐng)悟,工多藝熟典奉。
勇敢 - 嚴(yán)格要求自己不要寫出”發(fā)臭“的東西躺翻,勇敢地重構(gòu)!讓代碼變得優(yōu)雅卫玖,易讀充滿你的設(shè)計(jì)思想公你。
二、表達(dá)力
世界上最難的兩件事是:將別人口袋的錢放到自己的口袋里面假瞬;將自己腦子的想法完整放到別人的腦子里面陕靠。
我認(rèn)為一份成功的設(shè)計(jì)是 ”能讓不同層面的人都能看得懂“迂尝。為什么這樣說?那么得了解誰需要看設(shè)計(jì)剪芥,又是出于何目的來看設(shè)計(jì)垄开。
銷 售 - 從設(shè)計(jì)中尋找賣點(diǎn)與特色,豐富銷售方案和定制預(yù)售計(jì)劃粗俱。
項(xiàng)目經(jīng)理 - 根據(jù)設(shè)計(jì)進(jìn)行時(shí)間估算说榆、項(xiàng)目資源準(zhǔn)備與工作分解。
開 發(fā) - 根據(jù)設(shè)計(jì)要求進(jìn)行技術(shù)準(zhǔn)備寸认、開發(fā)環(huán)境、編寫DEMO以及最終編碼 串慰。
測(cè) 試 - 根據(jù)設(shè)計(jì)劃分測(cè)試粒度偏塞、準(zhǔn)備測(cè)試環(huán)境、定制測(cè)試計(jì)劃
不同的開發(fā)方法與開發(fā)流程都會(huì)有不同的設(shè)計(jì)文檔要求邦鲫,而受眾無非也是上述幾種灸叼。作為項(xiàng)目/軟件的設(shè)計(jì)者,能清晰地向受眾準(zhǔn)確地傳達(dá)自己的設(shè)計(jì)思路就顯得極其重要庆捺。這里指表達(dá)不是指嘴上的功底古今,更多的是在工具的掌握能力與文字的表達(dá)能力。使用不同的工具表達(dá)向不同的受從表達(dá)相同的理念滔以,這基實(shí)是對(duì)架構(gòu)設(shè)計(jì)的一種驗(yàn)證捉腥,這種溝通與表達(dá)能有效地融合不同角度的觀點(diǎn),也能讓架構(gòu)師能更深入地理解自己的設(shè)計(jì)方向你画。
要面對(duì)如此多的復(fù)雜性應(yīng)該如何來鍛煉自己的表達(dá)性呢抵碟?
多與人溝通,多參與頭腦風(fēng)暴
練習(xí)用人類語言表達(dá)“非人類”的專業(yè)知識(shí)坏匪。一張用鉛筆畫的框圖往往比一個(gè)使用專業(yè)UML設(shè)計(jì)工具做出來的設(shè)計(jì)更容易讓人理解拟逮。 UML為作架構(gòu)師基本上是必修課,也是輔助架構(gòu)師思維的工具适滓,但對(duì)于不懂UML的那就是“非人類”的文檔敦迄,設(shè)計(jì)是給人看的,別人看不懂再專業(yè)再標(biāo)準(zhǔn)化的設(shè)計(jì)也只能淪為廢紙凭迹。
培養(yǎng)測(cè)試先行的習(xí)慣 - 在設(shè)計(jì)時(shí)多寫范例與測(cè)試罚屋,在很大程度上可以減少設(shè)計(jì)誤區(qū)和驗(yàn)證被實(shí)現(xiàn)的可行性。這樣可以在將設(shè)計(jì)交付給開發(fā)蕊苗、測(cè)試后節(jié)約大量的溝通時(shí)間沿后。
三、擁抱變化
正如XP(極端編程)中所說:“世界上唯一不變的就是變化”朽砰。擁抱變化尖滚、預(yù)測(cè)變化喉刘、控制變化不單純是優(yōu)秀開發(fā)人員的和項(xiàng)目經(jīng)理的要求同樣也是架構(gòu)師一種重要的能力。
“變” 我的理解 設(shè)計(jì)中的“變” 就是 “可定制化” 的要求漆弄,可定制化程度越高系統(tǒng)/項(xiàng)目的可擴(kuò)展性就越強(qiáng)睦裳。架構(gòu)師就是需要鍛煉的是控制這種變化的范圍與程度,“變”是雙刃劍撼唾,允許過多的變化就會(huì)造成“過度設(shè)計(jì)”廉邑,出現(xiàn)一大堆“未來可能使用的功能”;過于封閉則會(huì)變得僵化難以適應(yīng)新的要求倒谷。
“不變”這里所說的“不變”也只是相對(duì)而然蛛蒙,在系統(tǒng)/項(xiàng)目中相對(duì)不變的就應(yīng)該是“核心”或者是“基礎(chǔ)框架”,舉最簡(jiǎn)單的例子就是 .net framework 就是其中一者渤愁,雖然它會(huì)不斷發(fā)展牵祟,增強(qiáng)功能。但其基礎(chǔ)核心設(shè)計(jì)理念與架構(gòu)也從來沒有發(fā)生過質(zhì)的改變抖格。更具體的一點(diǎn)來說“不變”的是規(guī)則诺苹、用法和基礎(chǔ)設(shè)計(jì)理念。 我認(rèn)為學(xué)習(xí)控制變化的最佳方法是多看出色的類庫或系統(tǒng)雹拄,多問為什么這樣做收奔,理解原設(shè)計(jì)師的想法。經(jīng)過一定時(shí)間的積累滓玖,隨著對(duì)“變化”觀察的增多坪哄,自然而然會(huì)在自已的設(shè)計(jì)中按設(shè)計(jì)要求將”變“與”不變“應(yīng)用得當(dāng)。
四呢撞、方法論
針對(duì)架構(gòu)設(shè)計(jì)的方法論眾多损姜,應(yīng)該如何選擇?我也讀過很多的相關(guān)書籍殊霞,我只選最實(shí)用的摧阅,這里我推薦幾本書。
《設(shè)計(jì)模式》- 要讀懂绷蹲、活用棒卷,我讀了10幾年每次都可以從中學(xué)到不一樣的想法,將其應(yīng)用于架構(gòu)內(nèi)可以極大地簡(jiǎn)化很多復(fù)雜的問題。
《Java 編程思想》 - 談面向?qū)ο蠓矫孀詈玫钠渲幸槐緯8郑岣呙嫦驅(qū)ο蟮脑O(shè)計(jì)能力會(huì)有很大幫助 《Refactoring》- 重構(gòu)不單單是一種做法和程序員才關(guān)心的事比规。重構(gòu)重于意識(shí)與思維完全可以用于架構(gòu)設(shè)計(jì) 。
《eXtreme Programming》- 雖然討論的是開發(fā)方法拦英,但它最能詮釋什么是”變化“蜒什。
方法論的實(shí)踐與應(yīng)用也需要時(shí)間磨合并融會(huì)貫通,它們給予我們更多的是理念與意識(shí)疤估,一定要避免走進(jìn)為實(shí)踐方法論而設(shè)計(jì)的誤區(qū)灾常。
五霎冯、學(xué)習(xí)能力
對(duì)于普通程序員來說,成為高級(jí)架構(gòu)師的門檻主要有以下幾點(diǎn):
1钞瀑、錯(cuò)誤的學(xué)習(xí)方法沈撞。在技術(shù)日新月異的今天,誰在單位時(shí)間學(xué)到的知識(shí)更多雕什,誰的學(xué)習(xí)方法更高效缠俺,誰就獲得更強(qiáng)的競(jìng)爭(zhēng)優(yōu)勢(shì)。而很多程序員在工作中贷岸,還用著學(xué)校時(shí)的學(xué)習(xí)方法壹士,非常低效,公司不是學(xué)校偿警,啃書本的學(xué)習(xí)方法已不再有效墓卦。
2、完整的知識(shí)體系户敬。沒有形成系統(tǒng)化的知識(shí)架構(gòu),最重要的是不知道哪些技術(shù)需要重點(diǎn)掌握睁本,學(xué)習(xí)時(shí)頻繁踩坑尿庐,最終浪費(fèi)大量時(shí)間。
3呢堰、對(duì)編程的認(rèn)知抄瑟。頂級(jí)程序員和平庸程序員,本質(zhì)區(qū)別是遇到問題時(shí)的思考方式枉疼,這就是所謂的頂級(jí)程序員思維皮假,一種高效解決問題的思維方式。這種思維方式骂维,不是讀幾本Java書能學(xué)到的惹资,而需要經(jīng)過大量項(xiàng)目實(shí)戰(zhàn),才能總結(jié)提煉出來航闺。
4褪测、差的學(xué)習(xí)環(huán)境。很多程序員的學(xué)習(xí)環(huán)境很差潦刃,在公司經(jīng)常加班侮措,工作幾年后,發(fā)現(xiàn)自己除了更熟悉公司業(yè)務(wù)外乖杠,能力沒有得到半點(diǎn)提升分扎,或周末基本不學(xué)習(xí),而是出去玩胧洒。這么差的自制力和學(xué)習(xí)環(huán)境畏吓,很難讓能力提到大的提升墨状。
構(gòu)建完整的知識(shí)體系感興趣的朋友可以來參考下我從業(yè)十余年總結(jié)2018年互聯(lián)網(wǎng)公司中最主流的學(xué)習(xí)路線: 這是Java程序員的一個(gè)架構(gòu)夢(mèng),我專門設(shè)立了一個(gè)Java架構(gòu)學(xué)習(xí)的群:619881427里面找朋友上傳的都是下列圖片中的技能知識(shí)點(diǎn)庵佣,如果感興趣你可以進(jìn)來瞅一瞅歉胶,可以免費(fèi)領(lǐng)走你的架構(gòu)師學(xué)習(xí)資料。
既然有夢(mèng)想巴粪,干嘛你不來通今!