前言:
這篇文章僅供大家參考學(xué)習(xí)以及在成為架構(gòu)師的道路上應(yīng)該掌握的知識點和經(jīng)驗。相信你在看完這篇文章后,你有一個明確的目標(biāo)以及一個通往架構(gòu)師路上正確的方向。
導(dǎo)讀:
1、架構(gòu)師應(yīng)不應(yīng)該寫代碼
2、為什么別人的系統(tǒng)總是那么爛
3、成為架構(gòu)師最困難的門檻是什么?
4、如何更高效的學(xué)習(xí)?
5、面對目前流行的技術(shù)不知如何下手?
6、一家公司待久了,過得很安逸,但跳槽時面試碰壁?
7、覺得現(xiàn)在的技術(shù)基礎(chǔ)感覺到很扎實,但就是自己的技術(shù)提升不上?
8、覺得自己很牛B,一般需求都能搞定,但是所學(xué)的知識點沒有系統(tǒng)化,很難在技術(shù)領(lǐng)域繼續(xù)突破?
9、現(xiàn)在覺得自己技術(shù)還可以,但就是薪資漲不上去?
以上這幾點,做為開發(fā)人員的你們,有遇到過么?有為自己想過么?有細(xì)心仔細(xì)的去解決過這些問題么?有深刻的想過么?雖然這幾個問題很簡單,但對于我們在開發(fā)路上,是有非常重要的幫助的。
1:架構(gòu)師應(yīng)不應(yīng)該寫代碼
合格的程序員對于明確分配的任務(wù)會完成的很好,但是大部分情況下“架構(gòu)”這個詞意味著架構(gòu)師并不會涉及太多細(xì)節(jié),架構(gòu)圖和代碼實現(xiàn)之間總還是有些距離,你無法保證所有人都會正確的理解你的設(shè)計,或者是程序員寫代碼時遇到障礙時會立刻想出足夠優(yōu)雅的解決方案。
在我看來,寫代碼的架構(gòu)師更像是在做后勤保障的工作:在代碼中第一時間發(fā)現(xiàn)可能存在的問題,向其他人提出警告,或是給予其他人改進(jìn)的意見,必要的時候或是給其他人演示一下正確的姿勢。
大部分情況下我作為架構(gòu)師并不需要攬下“核心模塊”開發(fā)這種工作,畢竟我能調(diào)配的時間太零散了,效率難以保證,很多人在專注的情況下比我做的好很多,我只需要保持大局觀需要適度參與就可以了。
總的來說,架構(gòu)師和程序員在某些方面上有點像產(chǎn)品經(jīng)理和用戶的關(guān)系,大部分程序員并不會主動告訴你他們想要什么、哪里需要優(yōu)化,甚至自己也不知道這些。想要做出好的產(chǎn)品,捷徑之一就是跟用戶做同樣的事情。
2:為什么別人的系統(tǒng)總是那么爛
很多程序員解決問題的能力很強(qiáng),說要解決一個什么問題,下午就能寫出幾百行代碼把功能實現(xiàn)了。但是做出來的東西有種少考慮了什么東西的感覺。大部分程序都能實現(xiàn)功能,但是如果把“時間”這個也作為一個考慮的維度的話,就會意識到一個合格的項目需要考慮更多的東西:更通用的使用方式、易于理解的文檔、簡單而易于擴(kuò)展的設(shè)計,等等。
很多公司應(yīng)該都會有一些遺留系統(tǒng),它們龐大、笨重、難用、幾乎無法維護(hù),所有人都在抱怨這些系統(tǒng),并且每天都在想方設(shè)法換掉那些遺留系統(tǒng)。但是一段時間過去之后,又會發(fā)現(xiàn)身邊的新人又開始吐槽當(dāng)時替代遺留系統(tǒng)的那個系統(tǒng)了。
3:成為架構(gòu)師最困難的門檻是什么?
很多人自稱架構(gòu)師的人跟你講一個架構(gòu)時簡直滔滔不絕,各種技術(shù)名詞像是說相聲一樣從他嘴里說出來,三句話不離高并發(fā)大數(shù)據(jù),但是稍微追問一下,就會發(fā)現(xiàn)很多基本概念的缺失,例如自稱精通高并發(fā)的人說不清楚他所謂的高并發(fā)系統(tǒng)的瓶頸在哪里,自稱精通架構(gòu)設(shè)計的人說不明白他的系統(tǒng)怎么保證高可用,自稱超大數(shù)據(jù)量的系統(tǒng)實際上只有不到100萬條數(shù)據(jù),等等。
架構(gòu)師雖然聽起來很高大上,但本質(zhì)上仍然是工程師,不是科學(xué)家,也不是忽悠人的江湖騙子。學(xué)習(xí)再多,也需要實踐落地。設(shè)計架構(gòu)方案更多的是在做一些抽象和權(quán)衡:把復(fù)雜的需求抽象成簡單的模型,從功能、性能、可用性、研發(fā)成本等等方面規(guī)劃如何構(gòu)建一個系統(tǒng),這些內(nèi)容需要更多的實踐練習(xí)。
4:如何更高效的學(xué)習(xí)?
大多數(shù)人每天能留給自己學(xué)習(xí)的時間有限,這個階段如何提升學(xué)習(xí)效率就成了要解決的重點。
說說自己提升學(xué)習(xí)效率的心得,其實非常簡單:體系化的學(xué)習(xí)。
在重復(fù)了幾次痛苦的學(xué)習(xí)-梳理過程后,再去看一些獨立的文章或者資料往往會事半功倍,因為能在體系內(nèi)找到相對應(yīng)的知識,甚至有時候一本書里一頁只需要看一句話,點破那層窗戶紙,就可以掌握新的知識。
跟很多人一樣,剛畢業(yè)時我覺得作為程序員,只要努力,加上少許天賦便可以獲得一些成績。
工作一段時間后,對自己和其他人的認(rèn)識也越來越清晰,逐漸的發(fā)現(xiàn)程序員之間的差距或許比人和猴子之間的差距還大,接受這個事實這讓我郁悶了很久。
再過一段時間,發(fā)現(xiàn)自己已經(jīng)能夠客觀的評價自己的能力,也意識到了距離并不是那么重要,只要想辦法跑的更快,就足夠了。
5:面對目前流行的技術(shù)不知如何下手?
第一,根據(jù)自己目前工作中所用到的技術(shù),有目的性的學(xué)習(xí);
第二,可以根據(jù)各大互聯(lián)網(wǎng)公司的招聘要求,有選擇性地進(jìn)行規(guī)劃學(xué)習(xí);
6:一家公司待久了,過得很安逸,但跳槽時面試碰壁?
很多程序員有這樣的情況,因為一直處于自己的舒適區(qū),每天寫的是自己熟悉的業(yè)務(wù)代碼,更多的做的是crud的工作,技術(shù)上沒有挑戰(zhàn)性,覺得生活也還可以。但是一旦跳出這個舒適區(qū),就會很難適應(yīng),不知所措,因為外面新的技術(shù)太多,自己完全跟不上技術(shù)的步伐,這時候需要梳理一下自己目前所欠缺的點,有針對性地進(jìn)行提高。
7:覺得現(xiàn)在的技術(shù)基礎(chǔ)感覺到很扎實,但就是自己的技術(shù)提升不上?
這種技術(shù)扎實更多的是基礎(chǔ),并不能適應(yīng)一線互聯(lián)網(wǎng)公司的技術(shù)體系。技術(shù)提升不上是因為自己沒有接觸過相關(guān)的項目,以前那種基礎(chǔ)知識網(wǎng)上還一大篇,但是越往上走資料越少,好的資料就越少,而且越往上如果沒有引路人更加舉步維艱。
8:覺得自己很牛B,一般需求都能搞定,但是所學(xué)的知識點沒有系統(tǒng)化,很難在技術(shù)領(lǐng)域繼續(xù)突破?
這里的一般需求,更多的應(yīng)該是在單機(jī)環(huán)境之下的crud操作,項目沒有太多難度,頂多是業(yè)務(wù)上的分析復(fù)雜一些,技術(shù)用到了一些主流的技術(shù),也僅僅停留在UI的使用層面,不了解其原理,而且相關(guān)的其他技術(shù)分支并沒有很好的拓展,所以感覺很難突破。
9:現(xiàn)在覺得自己技術(shù)還可以,但就是薪資漲不上去?
需要弄清楚薪資由什么決定,是由你的價值決定,而你的價值取決于你的技術(shù)能力,如果你的技術(shù)能力一直停留在crud的層面,肯定會上不去,你需要做的是突破技術(shù)瓶頸。(我相信這一點,是大多數(shù)開發(fā)人員會首先考慮到的問題)。
經(jīng)過以上的幾個問題的總結(jié),你們有一點點理解了么?有什么感觸沒?沒有?那么你們繼續(xù)往下看。
程序員應(yīng)有的幾個階段 第一階段----三年
我認(rèn)為三年對于程序員來說是第一個門檻,這個階段將會淘汰掉一批不適合寫代碼的人。這一階段,我們走出校園,邁入社會,成為一名程序員,正式從書本上的內(nèi)容邁向真正的企業(yè)級開發(fā)。我們知道如何團(tuán)隊協(xié)作、如何使用項目管理工具、項目版本如何控制、我們寫的代碼如何測試如何在線上運(yùn)行等等,積累了一定的開發(fā)經(jīng)驗,也對代碼有了一定深入的認(rèn)識,是一個比較純粹的Coder的階段。
第二階段----五年
五年又是區(qū)分程序員的第二個門檻。有些人在三年里,除了完成工作,在空余時間基本不會研究別的東西,這些人永遠(yuǎn)就是個Coder,年紀(jì)大一些勢必被更年輕的人給頂替;有些人在三年里,除了寫代碼之外,還熱衷于研究各種技術(shù)實現(xiàn)細(xì)節(jié)、看了N多好書、寫一些博客、在Github上分享技術(shù),這些人在五年后必然具備在技術(shù)上獨當(dāng)一面的能力并且清楚自己未來的發(fā)展方向,從一個Coder逐步走向系統(tǒng)分析師或是架構(gòu)師,成為項目組中不可或缺的人物。
第三階段----十年
十年又是另一個門檻了,轉(zhuǎn)行或是繼續(xù)做一名程序員就在這個節(jié)點上。如果在前幾年就抱定不轉(zhuǎn)行的思路并且為之努力的話,那么在十年的這個節(jié)點上,有些人必然成長為一名對行業(yè)有著深入認(rèn)識、對技術(shù)有著深入認(rèn)識、能從零開始對一個產(chǎn)品進(jìn)行分析的程序員,這樣的人在公司基本擔(dān)任的都是CTO、技術(shù)專家、首席架構(gòu)師等最關(guān)鍵的職位,這對于自己絕對是一件榮耀的事,當(dāng)然老板在經(jīng)濟(jì)上也絕不會虧待你。
我認(rèn)為,隨著你工作年限的增長、對生活對生命認(rèn)識的深入,應(yīng)當(dāng)不斷思考三個問題:
1、我到底適不適合當(dāng)一名程序員?
2、我到底應(yīng)不應(yīng)該一輩子以程序員為職業(yè)?
3、我對編程到底持有的是一種什么樣的態(tài)度,是夠用就好呢還是不斷研究?
最終,明確自己的職業(yè)規(guī)劃,對自己的規(guī)劃負(fù)責(zé)并為之努力。