程序員照弥、技術(shù)主管和架構(gòu)師
最近在進(jìn)一步思考程序員的成長进副,曾經(jīng)寫過一篇《如何快速的成為架構(gòu)師》影斑,里面寫了我對程序員主要成長階段的定義,但在程序員從初級走向資深的過程中片迅,會面臨兩個支路柑蛇,一個叫「技術(shù)主管」,另一個則是「架構(gòu)師」空免。為什么這是兩條支路盆耽?因?yàn)楝F(xiàn)在回過來看摄杂,這兩條路從來都不是程序員的自然成長路徑,下面我們先從「技術(shù)主管」開始吧墨坚。
技術(shù)主管
技術(shù)主管框杜,有些公司可能又叫「技術(shù)經(jīng)理」袖肥,英文一般是 Tech Leader 或簡稱 TL椎组。在拉姆·查蘭 (Ram Charan) 那本《領(lǐng)導(dǎo)梯隊》中提到一個人的工作角色中至少有百分之五十以上的時間是花費(fèi)在管理事務(wù)上,那么他的角色才算是一個經(jīng)理(Manager)专筷。所以技術(shù)主管(經(jīng)理)類似產(chǎn)品經(jīng)理屬于以經(jīng)理命名卻是非經(jīng)理的角色磷蛹。
「技術(shù)主管」是開發(fā)團(tuán)隊中的某位程序員需要對一起創(chuàng)建系統(tǒng)的整個開發(fā)團(tuán)隊負(fù)責(zé)時所承擔(dān)的角色味咳。通常他既要對最終交付的軟件系統(tǒng)負(fù)責(zé)檬嘀,另外也會像一個程序員一樣去開發(fā)實(shí)現(xiàn)系統(tǒng)。一個技術(shù)主管的 60% ~ 70% 的時間可能花在了開發(fā)任務(wù)分解分配鸳兽、開發(fā)實(shí)踐掂铐、代碼審核和風(fēng)險識別上,而余下的 30% ~ 40% 的時間則花在為了保障系統(tǒng)按時交付所需的各種計劃、協(xié)作全陨、溝通爆班、管理上。和團(tuán)隊管理者不同的是辱姨,技術(shù)主管的大部分管理工作都是針對具體研發(fā)任務(wù)和技術(shù)事務(wù)的蛋济。
例如:在一個開發(fā)團(tuán)隊中經(jīng)常會碰到因?yàn)榧夹g(shù)方案和實(shí)現(xiàn)細(xì)節(jié)方面的分歧,如果程序員無法自主友好的完成對不同技術(shù)意見的統(tǒng)一,這時候技術(shù)主管就需要介入去了解兩種不同意見所造成的沖突渡处。對事不對人的去把問題搞清楚镜悉,分析各自方案的利弊,必要的時候甚至能夠提出第三種更好的技術(shù)方案医瘫,以幫助開發(fā)團(tuán)隊達(dá)成共識侣肄。
另一方面,技術(shù)主管即使在日常的開發(fā)實(shí)現(xiàn)中醇份,重點(diǎn)的內(nèi)容一般也不是放在某個具體的功能實(shí)現(xiàn)上稼锅。在完成了具體的開發(fā)任務(wù)評估、分解并分配后僚纷,技術(shù)主管應(yīng)該負(fù)責(zé)設(shè)計整體代碼的結(jié)構(gòu)和規(guī)范矩距、必要時引入能提高整個團(tuán)隊生產(chǎn)力的新工具,推廣代碼模板怖竭,總結(jié)最佳實(shí)踐锥债。他需要經(jīng)常性的關(guān)注整個團(tuán)隊完成一項(xiàng)研發(fā)任務(wù)的水平和實(shí)際要求的水平的差距問題,讓團(tuán)隊不僅滿足及時的軟件系統(tǒng)交付痊臭,同時又得到成長哮肚。
現(xiàn)實(shí)中,一個開發(fā)團(tuán)隊中最優(yōu)秀的程序員容易被指定承擔(dān)技術(shù)主管的角色广匙,但優(yōu)秀的程序員又很容易陷入到實(shí)現(xiàn)功能的細(xì)節(jié)中允趟,滿足于完美的實(shí)現(xiàn),優(yōu)雅簡潔的代碼鸦致。實(shí)際上潮剪,這樣優(yōu)秀的程序員轉(zhuǎn)入技術(shù)主管這個角色后,就很容易嘗試控制設(shè)計和代碼的實(shí)現(xiàn)蹋凝,他們很難接受代碼不按照他們希望的方式去編寫鲁纠,這個是他們作為優(yōu)秀程序員一直以來的工作習(xí)慣,長此以往他們自身很容易變成整個開發(fā)團(tuán)隊的瓶頸鳍寂,而團(tuán)隊里的其他成員卻未能得到足夠的鍛煉和成長改含。
所以技術(shù)主管實(shí)際相比團(tuán)隊里的其他程序員對系統(tǒng)的視角更開闊,以更有策略和長遠(yuǎn)的方式來考慮問題迄汛。他們即使擁有比團(tuán)隊里所有其他程序員更高超的開發(fā)實(shí)現(xiàn)技能捍壤,對所有開發(fā)任務(wù)擁有最強(qiáng)大的實(shí)現(xiàn)自信骤视,也需要轉(zhuǎn)變?yōu)榱硪环N「借助他人使之實(shí)現(xiàn)」的能力和自信,因?yàn)榧夹g(shù)主管是一個承擔(dān)更廣泛責(zé)任的角色鹃觉,必然導(dǎo)致能夠?qū)W⒂行Ь幋a的時間會相比以前減少很多专酗,而這一點(diǎn)正是優(yōu)秀程序員轉(zhuǎn)變?yōu)榧夹g(shù)主管的所面臨的最大挑戰(zhàn)之一。
最后盗扇,我們總結(jié)下技術(shù)主管的職責(zé)要求:
技術(shù)職責(zé)
研發(fā)任務(wù)管理
工作量評估
任務(wù)分解祷肯、分配
代碼審核
風(fēng)險識別
技術(shù)能力提升
代碼規(guī)范制定和推廣
生產(chǎn)力工具研發(fā)和推廣
最佳實(shí)踐總結(jié)和推廣
關(guān)鍵代碼實(shí)現(xiàn)
組織職責(zé)
協(xié)調(diào)溝通
招聘面試
教練指導(dǎo)
復(fù)盤總結(jié)
架構(gòu)師
看完上面關(guān)于技術(shù)主管的職責(zé)能力要求,想必你會有些疑惑疗隶,感覺好像很多條目對架構(gòu)師也是這么要求的佑笋。對,你的感覺沒錯斑鼻,技術(shù)主管的角色與架構(gòu)師這一角色會產(chǎn)生一些職責(zé)上的重疊蒋纬,事實(shí)上我自己認(rèn)為在團(tuán)隊規(guī)模比較小的時候(10 多人的規(guī)模),架構(gòu)師和技術(shù)主管的職責(zé)幾乎完全重疊坚弱,甚至技術(shù)主管還會代理一些團(tuán)隊主管的角色蜀备。
和技術(shù)主管一樣,架構(gòu)師也是一個在業(yè)界擁有著名的稱謂荒叶,但在絕大部分公司卻不屬于一個職位序列碾阁。許多公司都很糾結(jié)于如何定義架構(gòu)師的角色,以及架構(gòu)師所做的工作停撞。以前聽阿里同學(xué)說 P7 屬于架構(gòu)師職位瓷蛙,不過最近在看另一個阿里同學(xué)寫的文章說:“前幾年是有專職的「架構(gòu)師」職位的,現(xiàn)在已經(jīng)回歸到「工程師」戈毒、「技術(shù)專家」艰猬、「研究員」這樣的純技術(shù)職位÷袷校”冠桃。可見在一線互聯(lián)網(wǎng)公司關(guān)于架構(gòu)師的定義也是很模糊的道宅。
曾經(jīng)在一篇文章《在首席架構(gòu)師眼里食听,架構(gòu)的本質(zhì)是...》提到了一個架構(gòu)師能力模型,我曾經(jīng)寫過結(jié)合我自己的經(jīng)歷和經(jīng)驗(yàn)污茵,這個能力模型針對架構(gòu)師這個角色來說還是比較符合的樱报。
但正因?yàn)闃I(yè)界和公司對架構(gòu)師這個角色的職責(zé)定義很模糊,所以很多經(jīng)驗(yàn)積累到一定程度的優(yōu)秀程序員泞当,并且在公司內(nèi)被提升到一定高度的技術(shù)級別后迹蛤,都會冠以架構(gòu)師之名。但實(shí)際情況是大部分剛剛冠以架構(gòu)師之名的優(yōu)秀程序員,其能力模型大部分停留在上圖中的藍(lán)色區(qū)域盗飒,而對其他區(qū)域并未有過系統(tǒng)性的認(rèn)識和訓(xùn)練嚷量。
看過了架構(gòu)師的能力模型,我們再來試著分析下對應(yīng)的職責(zé)逆趣。隨著軟件系統(tǒng)復(fù)雜度和規(guī)模的提升蝶溶,團(tuán)隊也相應(yīng)變大,那么一個架構(gòu)師此時所處的職責(zé)位置就開始和技術(shù)主管區(qū)別開來宣渗,如果把技術(shù)主管想成是站在樓頂看整個系統(tǒng)抖所,那么架構(gòu)師此時就是需要掛個氣球(此處腦補(bǔ)下動畫《飛屋環(huán)游記》的場景),飛到天上去看整個系統(tǒng)了痕囱。
除了技術(shù)主管的技術(shù)職責(zé)之外部蛇,架構(gòu)師還需要站在更高的緯度去做關(guān)于軟件系統(tǒng)的抽象和封裝。如果技術(shù)主管的抽象和封裝層次更多考慮的是語言函數(shù)咐蝇、設(shè)計模式、代碼結(jié)構(gòu)等這一類的事務(wù)巷查,那么架構(gòu)師是站在整體軟件系統(tǒng)高度有序,考慮不同子系統(tǒng)之間的交互關(guān)系、技術(shù)的合理性岛请、需求的完整性旭寿、未來的演進(jìn)可能性,技術(shù)體系發(fā)展與組織崇败、產(chǎn)品商業(yè)訴求的匹配度盅称。
這是相對技術(shù)主管更高緯度的全局視角,另一方面依然有很多技術(shù)主管可能感覺沒把握的技術(shù)決策和技術(shù)爭端需要架構(gòu)師的介入?yún)f(xié)調(diào)后室。之所以要找架構(gòu)師來對一些技術(shù)爭端和方案進(jìn)行決策判斷缩膝,很多情況在于程序員對架構(gòu)師在技術(shù)領(lǐng)域內(nèi)專業(yè)力和影響力的信任,而建立這種專業(yè)力和影響力是實(shí)際構(gòu)建架構(gòu)師非權(quán)威領(lǐng)導(dǎo)力的來源岸霹。
這里提到一個「非權(quán)威領(lǐng)導(dǎo)力」疾层,這是什么?非權(quán)威是相對權(quán)威而言贡避,管理者的權(quán)威領(lǐng)導(dǎo)力來自于公司正式任命的職位和職權(quán)痛黎,而架構(gòu)師在大部分公司基本連職位職責(zé)都沒定義清楚,更沒有職權(quán)一說刮吧,所以實(shí)際上就不會有任何權(quán)威領(lǐng)導(dǎo)力湖饱。所以,架構(gòu)師要發(fā)揮更大的作用和價值就需要去構(gòu)建自己的非權(quán)威領(lǐng)導(dǎo)力杀捻,而這需要長期的專業(yè)力和影響力積累井厌,而關(guān)于如何去積累并很好的發(fā)揮作用,這一點(diǎn)我也還在摸索,還沒有形成很系統(tǒng)的認(rèn)知體系旗笔。
另一方面彪置,架構(gòu)師的組織職責(zé)除了技術(shù)主管承擔(dān)的之外,架構(gòu)師還承擔(dān)著在技術(shù)團(tuán)隊和非技術(shù)團(tuán)隊(例如:產(chǎn)品設(shè)計等團(tuán)隊)之間的接口作用蝇恶,明確產(chǎn)品的邊界拳魁,勾勒技術(shù)藍(lán)圖,協(xié)調(diào)不同技能的技術(shù)團(tuán)隊協(xié)作撮弧,完成最終的軟件系統(tǒng)交付潘懊。這時架構(gòu)師的角色就像服務(wù)化架構(gòu)中的 API,定義了協(xié)作規(guī)范贿衍、交互協(xié)議和方式授舟,但并不會聚焦在具體的實(shí)現(xiàn)上。
在更大規(guī)模的系統(tǒng)上贸辈,架構(gòu)師似乎還要去涉獵更多的跨領(lǐng)域知識释树,否則很可能無法做出最適合的技術(shù)決策。但人終究是有局限的擎淤,你不可能學(xué)完所有領(lǐng)域奢啥,所以特定的領(lǐng)域又會涌現(xiàn)一些垂直領(lǐng)域的架構(gòu)師。比如:數(shù)據(jù)架構(gòu)師嘴拢、網(wǎng)絡(luò)架構(gòu)師桩盲、業(yè)務(wù)架構(gòu)師、安全架構(gòu)師席吴。因而某一個領(lǐng)域背景出身的架構(gòu)師赌结,他對其他領(lǐng)域也只能做個初步了解,當(dāng)需要作出關(guān)于涉及其他領(lǐng)域的架構(gòu)決策時孝冒,他就需要和其他領(lǐng)域的垂直架構(gòu)師做深度的溝通交流柬姚,以輔助決策判斷。
最后庄涡,我們還是總結(jié)下架構(gòu)師的職責(zé)要求:
技術(shù)職責(zé)
繼承技術(shù)主管的職責(zé)
高緯度的系統(tǒng)設(shè)計伤靠、抽象和封裝
產(chǎn)品技術(shù)藍(lán)圖繪制與關(guān)鍵技術(shù)決策
組織職責(zé)
繼承技術(shù)主管的職責(zé)
跨技術(shù)和非技術(shù)團(tuán)隊的接口協(xié)作
發(fā)展取舍
從一開始,我就提到技術(shù)主管和架構(gòu)師是程序員自然成長路上的兩條支路啼染,始終停留在上面「出色程序員」能力模型域的程序員是無法很好的勝任技術(shù)主管和架構(gòu)師這兩個角色的宴合。所以程序員在成長到一定階段就需要去考慮是否真要往技術(shù)主管和架構(gòu)師的方向發(fā)展。而從技術(shù)主管走到架構(gòu)師相對而言更有延續(xù)性迹鹅,但技術(shù)主管也會有另一條路卦洽,就是轉(zhuǎn)型走上純管理崗位,成為一名真正意義上的經(jīng)理斜棚。
一旦選擇走入架構(gòu)師這條路阀蒂,基本你就從一名出色的程序員這個領(lǐng)域走出该窗,需要盡快去補(bǔ)充上面能力模型中指出的其他能力。這一點(diǎn)會讓剛剛走上這條路的程序員很不適應(yīng)蚤霞,因?yàn)槌袚?dān)了更多其他職責(zé)酗失,就必然要減少在編碼實(shí)現(xiàn)的時間,慢慢就會懷疑自己的編碼能力會退化昧绣,也跟不上一線最新的技術(shù)棧规肴,各種酷酷的新工具。我曾有一段時間就產(chǎn)生過這樣的茫然與惶恐夜畴,如今算是釋然了拖刃。
舍得,舍得贪绘,沒有舍就沒有得兑牡。成為架構(gòu)師會擁有一個更立體的知識、技能矩陣税灌,這是你的得均函。獲得了一個面,在某些點(diǎn)上必然面臨被超越的結(jié)局菱涤。如果成為一名架構(gòu)師好幾年后边酒,你居然還是團(tuán)隊里面編碼最多,編程能力最強(qiáng)的人狸窘,其實(shí)這是一個失敗的架構(gòu)師,在教練和指導(dǎo)這個職責(zé)上已經(jīng)完全的失敗了坯认。而有些談?wù)摷軜?gòu)師的文章說:
架構(gòu)師一定要負(fù)責(zé)整個系統(tǒng)中最核心和最難的地方的代碼編寫翻擒,如果一個團(tuán)隊里需要一個架構(gòu)師,那他一定必須是團(tuán)隊里寫代碼能力最好的牛哺,而且要負(fù)責(zé)至少 40% 以上的核心開發(fā)工作陋气。
上面的說法就是扯淡,這樣的架構(gòu)師就是這個團(tuán)隊最大的瓶頸引润。一個稍具規(guī)模的軟件系統(tǒng)和團(tuán)隊中巩趁,承擔(dān) 40% 以上的核心開發(fā)工作,基本上這樣的架構(gòu)師就是一個資深程序員淳附,而架構(gòu)師的其他職責(zé)我估計他都沒時間和能力去考慮了议慰。他會意識到這種方式無法持久,同時也奪走了其他開發(fā)者的創(chuàng)新能力和解決問題的樂趣奴曙,一個有經(jīng)驗(yàn)的架構(gòu)師能夠更好地表達(dá)某些指導(dǎo)原則别凹,并且了解什么時候該插手,什么時候該放手洽糟。
而架構(gòu)師到底要不要編碼炉菲,承擔(dān)多少的編碼工作堕战,不是由某種定義和說法決定的。而是由架構(gòu)師自己決定的拍霜,因?yàn)榧軜?gòu)師承擔(dān)了軟件系統(tǒng)的最終交付和過程風(fēng)險識別嘱丢,如果架構(gòu)師認(rèn)為某些關(guān)鍵部分,團(tuán)隊里沒有其他人能在交付日期前寫出達(dá)到他認(rèn)可的足夠可靠的代碼祠饺,他把這識別為一種風(fēng)險越驻,決定自己完成,那么他就去編碼實(shí)現(xiàn)吠裆,否則就委托給他認(rèn)為足夠可靠的團(tuán)隊成員伐谈,這就是前面提到的「借助他人使之實(shí)現(xiàn)」的能力和自信。
當(dāng)團(tuán)隊里的程序員都逐漸獲得成長试疙,成了高級或資深程序員之后诵棵,架構(gòu)師實(shí)際還需要寫代碼的機(jī)會越來越少。這方面的能力必然面臨退化祝旷,所以這方面對一線技術(shù)棧的決策會越來越交給一線資深程序員來判斷履澳。但我們擔(dān)心時代、環(huán)境變化怀跛,有一天又需要回到一線技術(shù)棧時距贷,那時技術(shù)棧已經(jīng)發(fā)生了巨大變化,架構(gòu)師還能很好的適應(yīng)么吻谋。技術(shù)的理解和基礎(chǔ)如內(nèi)功忠蝗,而重新學(xué)通一門技術(shù)棧如招數(shù),我覺得也未必需要多少時間漓拾,數(shù)月阁最、半年或一年也許又讓你恢復(fù)到在新技術(shù)棧上感覺良好的編程狀態(tài)。
...
有時候安安靜靜的做個程序員骇两,也挺好的速种,不過人總得往前看,只有不斷完善自己低千,提高自己才能立于不敗之地E湔蟆!
如果你想學(xué)習(xí)Java工程化示血、高性能及分布式棋傍、高性能、深入淺出难审。性能調(diào)優(yōu)舍沙、Spring,MyBatis剔宪,Netty源碼分析和大數(shù)據(jù)等知識點(diǎn)可以來找我拂铡。而現(xiàn)在我就有一個平臺可以提供給你們學(xué)習(xí)壹无,你想拿高薪的,想學(xué)習(xí)的感帅,想就業(yè)前景好的斗锭,想跟別人競爭能取得優(yōu)勢的,想進(jìn)阿里面試但擔(dān)心面試不過的失球,你都可以來岖是,群號為:668395460
注:加群要求
1、具有1-5工作經(jīng)驗(yàn)的实苞,面對目前流行的技術(shù)不知從何下手豺撑,需要突破技術(shù)瓶頸的可以加。
2黔牵、在公司待久了聪轿,過得很安逸,但跳槽時面試碰壁猾浦。需要在短時間內(nèi)進(jìn)修陆错、跳槽拿高薪的可以加。
3金赦、如果沒有工作經(jīng)驗(yàn)音瓷,但基礎(chǔ)非常扎實(shí),對java工作機(jī)制夹抗,常用設(shè)計思想绳慎,常用java開發(fā)框架掌握熟練的,可以加漠烧。
4杏愤、覺得自己很牛B,一般需求都能搞定沽甥。但是所學(xué)的知識點(diǎn)沒有系統(tǒng)化,很難在技術(shù)領(lǐng)域繼續(xù)突破的可以加乏奥。
5.阿里Java高級大牛直播講解知識點(diǎn)摆舟,分享知識,多年工作經(jīng)驗(yàn)的梳理和總結(jié)邓了,帶著大家全面恨诱、科學(xué)地建立自己的技術(shù)體系和技術(shù)認(rèn)知!
6.小號加群一律不給過骗炉,謝謝照宝。