年輕程序員如何成長?
我一般會把程序員分為初級、中級和高級。他們的區(qū)別在哪兒呢?初級可以在別人的指導下完成工作,中級可以獨立地完成工作,高級不僅僅可以指導別人的工作,而且可以很好地提煉自己的方法論,用這些方法論去影響別人,幫助他們成長。而架構師,他更多的職責則應該是確保一個項目不會因為技術的問題而失敗,比如是不是伸縮性不足導致大量用戶涌入時支撐不住、靈活性差導致功能很難添加,設計過于復雜導致開發(fā)持續(xù)延期,技術選型錯誤導致成本和穩(wěn)定性出現(xiàn)問題,等等。
我們公司采用了 buddy 制度,簡單來說就是任何一個新員工入職,都會指定一個 buddy ,在入職的前三個月,你不管什么事情都可以問他,這個制度對新員工快速平滑地融入團隊幫助很大。如果你的公司沒有這個制度,你可以考慮跟你的上級申請一個 buddy, 你的 buddy 也許很忙,那么你可以考慮一下定期(比如每天中午花半個小時)跟 buddy 核對一下之前遇到的問題。這些都是可以讓你快速融入團隊的辦法。
一般過了 2 年左右,很多人就不再能直接從項目或者周圍的同事身上獲得成長了,這個時候一個比較好的手段是跳出現(xiàn)在的圈子,多參加一些本地社區(qū)的活動,多參加 QCon 這類的技術會議(當然看直播或者視頻也行),看看這個也就的標桿長什么樣,他們在解決什么問題,他的知識體系有哪些是你缺少的。我很認同的一句話是“參加會議的目的不是為了學到什么,而是為了知道要學習什么”。找到一個好的標桿,相信你在職業(yè)生涯的前面 5 年會一直快速成長。
如何在團隊中脫穎而出?
方法其實很多,每個人都可能有不同的選擇,甚至說在不同的團隊,你的做法也可能會不一樣,下面僅就個人的經(jīng)驗講講我自己的看法:
首先一點是要把手邊的活做扎實,如果這點做不到,你的意見比較容易被人輕視和質疑。
其次是要經(jīng)常參與項目中的設計與技術相關的討論,勇于發(fā)表自己的意見,但這個時候要學習一些討論問題的常識,比如說對于別人的方案,要先去接受而不是拒絕,然后從兩個方面去考慮,一方面是這個方案有什么漏洞,禮貌地提出潛在的漏洞,等待對方拋出他的觀點。另外一方面這個方案有什么可以延伸或者擴展的地方,是否可以根據(jù)對方的方案拋出一個更好的方案。對于自己的方案,不要過于強勢,畢竟很多事情一個問題有超過一個正確答案,自己的方案沒選上也要有平常心。
對于團隊來講很重要的一點其實是擔當,也就是你是否愿意為某個小項目整體來承擔責任,當然這也意味著你需要再代碼之外做很多事情,包括很多溝通、妥協(xié)和持續(xù)跟進的事宜。這一點對于那些有志于在管理或者產(chǎn)品方向有進一步發(fā)展的人尤其重要。如果你在很多事情上表現(xiàn)出不錯的擔當能力,相信你的上司一定不會埋沒你這種人才。
如何做好架構?
從我自己來看,我覺得我把自己定位從開發(fā)轉為架構的一個時間點在于,我不再是在尋找一個問題的答案,而是在從問題的一堆答案中評估哪個對我們更合適,這個時候我感覺到我已經(jīng)能充分駕馭這個問題,而且也有信心來面對未來更多的挑戰(zhàn)。
如果你要走架構這條路,我有如下的幾個建議:
首先是要多讀一些書,其中最基礎的是類似于重構和設計模式這種書,你需要知道很多小尺度級別上的問題解決技巧(如果你要做導演,你首先要做得是能熟練地把一個句子翻譯為一組鏡頭),以及這些作者梳理問題的方式,反過來問一下自己,如果讓你來寫設計模式這本書,你有哪些知識點可以寫?你如何組織這些知識點?如何讓大家接受你的觀點。
看完這兩本書之后,非常推薦你看一下 Martin Fowler 寫的《企業(yè)應用架構模式》和 Eric Evans 的《領域驅動設計》這類書,他能擴大你的視野,專注于更有意義的問題,而不是設計模式究竟有多少種這種缺乏意義的問題。有一句話叫,“如果要成功,就要遠離那些廉價的娛樂”。類似的,對于軟件工程師來講,要想讓自己更強,就要遠離那些廉價的爭論(vim vs emacs, linux vs unix, redhat vs debian, 這些爭論其實并沒有太大的價值)。
其次,你要對大量開源軟件的實際特性有深入的了解,容量究竟多大?高可用怎么做?如何擴容?是否易維護?這些知識部分來自網(wǎng)上的各種測試和經(jīng)驗文章,部分還要來自你的親手測試。作為架構師,你的每一個技術選型都是在挖坑,給你的開發(fā)、測試、運維團隊挖坑,而你的作用之一,就是保證你的團隊能夠在你的幫助下從坑里走出來。
另外,要解決很多大尺度的問題,你需要從很多同行去吸收經(jīng)驗,我個人的經(jīng)驗就是,閱讀每年兩次 QCon 和 ArchSummit 架構相關的幻燈片,先只看題目和問題部分,自己想一想解決方案是啥,然后再看一下演講者給出的解答,通過這種方式來淬煉自己的思維,豐富自己的工具箱。我想提醒的一點是,由于軟件行業(yè)還遠不成熟,所以一個架構師會長期跟進一個項目,這就導致了一個架構師如果不主動去練習的話,一輩子也做不了幾個架構,至少相對于建筑專業(yè)的結構工程師來講,我們每年的項目缺少少很多。你做的架構越少,你就越容易自滿。
最后,我希望你是一個終身學習者,不管多忙,一定要規(guī)劃你的學習時間,一個星期也許不用太多,幾個小時即可,但這幾個小時一定要用在刀刃上,所以最好是哪些需要幾十個小時甚至更多時間才能弄清楚的課題,而且一直要堅持到這個課題結束。千萬不能是學一點這個概念,遇到新事物,就馬上轉移方向。如果你有這樣的習慣,我建議你先把新想法放到一個池子里,等手邊的課題學習完,再到池子里邊撈一個新課題來繼續(xù)學習。不過關于學習,這個是一個很大的話題,就不在這兒闡述了。
下面就講一下java架構師怎么學習才算合格
首先 ? ?工程化專題
高性能及分布式專題
雙十一技術架構專題-九陽真經(jīng)
性能調優(yōu)
想學習以上進階技術加群:561614305
源碼分析
大家可以點擊加入群:561614305【JAVA大神交流二群】里面有Java高級大牛直播講解知識點 走的就是高端路線 (如果你想跳槽換工作 但是技術又不夠 或者工作上遇到了 瓶頸 我這里有一個JAVA的免費直播課程 講的是高端的知識點