我的梦想是十年内成为架构师,该怎么办?
這是來自我的星球“碼農(nóng)翻身”的一個(gè)提問:
在掘金上把老劉的所有文章都讀了一遍覺得特別好,現(xiàn)在有了壓歲錢就屁顛屁顛的來加入星球啦。?
我是一個(gè)普通二本cs專業(yè)的,今年夏天就要去實(shí)習(xí)了,雖然在學(xué)校也學(xué)的很認(rèn)真跟著老師做了不少小外包的項(xiàng)目,但是覺得自己學(xué)的好雜好亂,前端會(huì)點(diǎn)vue 微信小程序 后端會(huì)點(diǎn)php的tp框架,然后最近又跟著老師在學(xué)javaee,現(xiàn)在感覺自己只是一個(gè)html填空的碼畜。
看了老劉的文章以后開始重視基礎(chǔ),最近也在看網(wǎng)絡(luò)原理和算法還有Java虛擬機(jī)的一些書, 但我還是很迷,沒有一個(gè)系統(tǒng)的規(guī)劃,不知道我應(yīng)該學(xué)什么,怎么學(xué),學(xué)到什么效果算掌握了,請(qǐng)大佬指點(diǎn)一下,我最近想從事Javaweb方面,也夢(mèng)想能在10年內(nèi)成為一個(gè)架構(gòu)師。
下面是我的回答:
現(xiàn)在已經(jīng)有確定的目標(biāo)了,真不錯(cuò)!很多人連自己的職業(yè)目標(biāo)還沒有確定。
架構(gòu)師這個(gè)職位沒什么神秘的,簡(jiǎn)單點(diǎn)兒說就是用戶需求轉(zhuǎn)化成技術(shù)實(shí)現(xiàn),只是在轉(zhuǎn)化的時(shí)候會(huì)遇到一系列問題,比如:技術(shù)如何選型? 如何設(shè)計(jì)才更簡(jiǎn)潔、更容易實(shí)現(xiàn)和擴(kuò)展?如何滿足非功能性需求,如性能、安全、高可用性、審計(jì)......
除此之外,還得和客戶以及分析人員溝通需求,確保沒有跑偏,有時(shí)候還得引導(dǎo)一下,去除或者改變那些不可能實(shí)現(xiàn)的需求。
和程序員溝通,讓大家理解技術(shù)選型和設(shè)計(jì),順利開展設(shè)計(jì)和編碼。
“軟件架構(gòu)師自身需要是程序員,并且必須一直堅(jiān)持做一線程序員,還需要承接編程任務(wù),如果不親身承受因系統(tǒng)設(shè)計(jì)而帶來的麻煩,就體會(huì)不到設(shè)計(jì)不佳所帶來的痛苦,接著就會(huì)逐漸迷失正確的設(shè)計(jì)方向。” ?-- Bob大叔
軟件架構(gòu)師不是一蹴而就的,是一個(gè)循序漸進(jìn)的過程,是一個(gè)職責(zé)不斷擴(kuò)大的過程。
刨除好奇心和對(duì)這個(gè)行業(yè)的熱愛, 我個(gè)人認(rèn)為至少需要在這些方面進(jìn)行發(fā)展:
1. 掌握技術(shù)的原理
做一個(gè)架構(gòu)師會(huì)涉及到很多技術(shù),要求技術(shù)的廣度,如果掌握了原理,不但對(duì)技術(shù)認(rèn)識(shí)深刻,學(xué)習(xí)新的東西就能迅速抓住本質(zhì)。
計(jì)算機(jī)的基礎(chǔ)知識(shí)就不用說了, 網(wǎng)絡(luò)、操作系統(tǒng)、數(shù)據(jù)庫、編譯等, 相對(duì)枯燥,最好在大學(xué)階段完成。
你是Web開發(fā)方向發(fā)展, 至少要掌握這些應(yīng)用層的東西:
Web開發(fā)框架
HTTP/HTTPs
SSO
OAuth
RESTful
序列化
安全框架(如Java的Shiro, Spring Security等)
RPC及相關(guān)框架
Web安全攻防
虛擬機(jī)
并發(fā)編程
緩存
數(shù)據(jù)庫相關(guān)的范式、SQL,事務(wù),索引,鎖
.....
真是不少啊,關(guān)鍵是在應(yīng)用層學(xué)習(xí)的時(shí)候,要多問為什么? ?我建議你用這樣的句式:?“因?yàn)橛衳xxx的問題,現(xiàn)有的xxx和xxxx解決不了,所有才出現(xiàn)了xxxx這個(gè)技術(shù)。”
舉個(gè)例子,現(xiàn)在大家都知道websocket是做什么用的,但是它要解決什么問題? 為什么不能直接在JavaScript中使用原生的Socket呢? ?為什么還要用HTTP協(xié)議作為“啟動(dòng)”,然后切換成websocket?
當(dāng)你在追尋這些技術(shù)的本源的時(shí)候,對(duì)一個(gè)技術(shù)的思考就會(huì)更加深刻,就能超越很多人。
那怎么算把一個(gè)原理給掌握了呢? 我認(rèn)為標(biāo)準(zhǔn)就是你能用自己的語言給別人講出來,讓別人能理解。
2. 獲取項(xiàng)目經(jīng)驗(yàn)和最佳實(shí)踐
只知道原理,還是紙上談兵,必須得做很多項(xiàng)目,在項(xiàng)目中去體會(huì)它們,應(yīng)用它們,獲取一些最佳的實(shí)踐。
現(xiàn)在能從頭開始設(shè)計(jì)項(xiàng)目的機(jī)會(huì)不多了,作為初級(jí)程序員,只能從現(xiàn)有項(xiàng)目中去學(xué)習(xí),去研究下系統(tǒng)中的網(wǎng)絡(luò)請(qǐng)求是怎么走的? 負(fù)載均衡是怎么做的,四層還是七層? 如果做的集群?如何做的復(fù)制? ......
一定要努力地往上看,看到整個(gè)系統(tǒng),看到端到端的流程,不能把自己局限在一畝三分地里, 做一個(gè)認(rèn)領(lǐng)工作,完成工作的HTML填空人員, 那樣路子真的就越走越窄了。
同樣,要多問為什么, ?在你通過自己或者求助別人探尋答案的時(shí)候,也許會(huì)發(fā)現(xiàn)現(xiàn)有設(shè)計(jì)的問題,這就是你的機(jī)會(huì)。
當(dāng)你從局部慢慢走到整體以后,你的機(jī)會(huì)自然就越來越多,承擔(dān)的職責(zé)越來越大,話語權(quán)越來越重,離架構(gòu)師越來越近。
3. 鍛煉自己的抽象能力
寫程序是一件挺簡(jiǎn)單的事情,把一個(gè)高中生拉來培訓(xùn)一下,就能寫得像模像樣。
但是想寫好程序又是一件非常難的事情,因?yàn)橄到y(tǒng)越來越復(fù)雜,通過堆砌代碼的方式來實(shí)現(xiàn),很快就干不下去了,難度會(huì)成幾何級(jí)數(shù)增長(zhǎng)。
解決這個(gè)問題的關(guān)鍵就是抽象,架構(gòu)師得找到系統(tǒng)中那些不變的東西,把他們作為支點(diǎn)來架起整個(gè)系統(tǒng)的設(shè)計(jì),升華一下就是一些正交、分層等思想。
通過把系統(tǒng)的組件劃分到不同維度,不同層次就可以實(shí)現(xiàn)封裝“變化”的目標(biāo)。
這些思想從哪里學(xué)習(xí)? 怎么內(nèi)化成自己的能力?
一是從項(xiàng)目中來,我相信你的項(xiàng)目肯定有這些思想的體現(xiàn),只是你去用心去發(fā)現(xiàn)。
二是閱讀書籍,閱讀源碼,看看牛人們是怎么做的。
三是自己要總結(jié)思考,總有那么一刻,你會(huì)頓悟: 啊,原來如此!
4. 要發(fā)出自己的聲音
做開發(fā)的很多都是性格偏內(nèi)向,喜歡和電腦打交道,但是想發(fā)展成架構(gòu)師,只是悶頭干活肯定是不行,必須得在小組內(nèi),部門內(nèi),公司內(nèi)發(fā)出自己的聲音。
例如對(duì)于架構(gòu),設(shè)計(jì),編碼,工程實(shí)踐,技術(shù)發(fā)展趨勢(shì)都能提出自己的見解,讓別人能信服、尊重你的意見,這樣才能成為自然的技術(shù)領(lǐng)導(dǎo)。?
如果只是靠領(lǐng)導(dǎo)的任命或者威權(quán)來領(lǐng)導(dǎo),那下屬可能要造反。?
對(duì)了,這里的“聲音”可以是小組討論,部門會(huì)議,緊急任務(wù)處理,技術(shù)演講,博客,客戶交流等等。
總之,等到你精通原理,能把基本的思想應(yīng)用到項(xiàng)目中, 還能看到全局,有足夠的項(xiàng)目經(jīng)驗(yàn),被別人尊重、信服,那架構(gòu)師離你就近在咫尺。
總結(jié)
以上是生活随笔為你收集整理的我的梦想是十年内成为架构师,该怎么办?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何快速融入一家公司
- 下一篇: MongoDB 是什么 ? 能干嘛 ?