如何快速讓自己成為一個優秀的架構師,而不是碼農
我所從事的工作
我目前從事分散式服務架構的設計與開發工作,在阿里的大資料平臺上進行應用程式開發。我們整個系統架構採用了“前後端分離”的思想,前端關注資料展現,後端關注資料生產,通過 REST服務將前後端整合起來,所有的應用都是無狀態的,可以做到水平擴充套件。我們將整個系統拆分成許多“微服務”,服務之間通過統一的介面來呼叫,每個服務是通過容器技術進行隔離,此外服務可釋出到統一的服務管理平臺上,可通過該平臺監控每個服務的執行狀態與生命週期事件,併為服務呼叫者提供了服務發現的能力,可對服務進行平滑升級。
阿里有許多優秀的中介軟體與基礎服務,可以快速幫助我們搭建應用系統,而且這些技術在阿里內部全是開源的,大家可以通過原始碼和文件學習到很多有價值的經驗。阿里也提供了濃厚的技術氛圍,每位同學都非常專注於自己的工作領域,大家對工作一絲不苟,相互配合,方向一致。
在這裡還是要推薦下我自己建的Java學習裙:574加上二五三再加上075,群裡都是學Java開發的,如果你正在學習Java ,小編歡迎你加入,大家都是軟體開發黨,不定期分享乾貨(只有Java軟體開發相關的),包括我自己整理的一份2018最新的Java進階資料和高階開發教程,歡迎進階中和進想深入java的小夥伴
我是如何走上技術這條路的?
2008 年大學畢業,我離開了母校武漢理工大學,在院長薛勝軍老師的推薦下,我來到了上海,這個對於我來說非常陌生的地方。我有幸加入了一家名為“動量軟體”的創業公司,這家公司的老闆曾經是亞信科技的 CTO,他也是普元軟體的創始人兼 CTO,他的名字叫黃柳青,他也是薛老師的大學同學。於是就這樣,我的老闆成為了我的老師,我習慣叫他黃老師,包括公司其他資深的同事也成為了我的老師,因為我很想他們身上學到更多有價值的東西。
剛開始工作的時候我學習了什麼是雲端計算?什麼是 SaaS、PaaS、IaaS?我們花了三年時間開發了一款名為 ODE 的 PaaS 平臺,讓使用者可以在該平臺上量身定製自己的軟體,最終為客戶提供基於 SaaS 的產品。確實很驕傲,那時我們已經在做雲了,只是沒想到後來雲會在中國得到這麼好的市場,可能當時只有黃老師一個人想到了吧。
在 2008 年,我為公司拿回了“第一桶金”,這也是我從程式設計師轉向專案經理的里程碑。當時我帶領團隊遠赴深圳,為國信證券公司開發經紀人管理系統,這個專案對於我個人而言卻是一筆至高無上的財富,我開始學習如何與人打交道,如何做需求分析,如何將需求轉變為技術,如何帶領團隊小夥伴一起工作。學到了太多太多,但我依然選擇在我工作第四個年頭裡離開了動量軟體,我剛加入動量軟體的時候,公司只有 5 個人(包括老闆和前臺),當我離開動量軟體的時候,公司已經有 200 人左右了。感謝黃老師!我在他身上學到了很多,他的思想和態度直到今天都還在影響著我。
我的第二份工作還是選擇了我最熟悉的證券金融行業,同樣也是一家創業型公司,在這家公司裡我擔任了技術經理,管理了整個技術團隊,從專案的售前到售後,我都親自帶領團隊來完成。雖然在這家公司我只做了兩年,但在這短短的時間裡,我學會了如何提高開發效率、如何培養技術團隊、如何選拔技術人才、如何建立企業文化。但最後我發現了一個問題,越是想做好,越是很難做好,為了做成一件事情需要做很多的嘗試,做事情缺乏正確並有效的方法。
如何讓自己成為一個優秀的Java架構師,而不是碼農
回想我工作的前六年時間裡,我一直都是在創業公司裡成長,雖然可以快速學到東西,但似乎很難學到更加規範的做事方法。於是我選擇了新的工作機會,來到了 TCL 通訊,這是一家相當大的公司,公司的研發管理流程來源於法國阿里卡特公司。我在公司擔任 Java 架構師職位,也算是整個 Java 團隊的技術負責人,雖然團隊並不是特別地大。我在這家公司做了三年,學到了如何整合現有資源、如何按標準流程去做事、如何設計系統架構、如何進行異地工作、如何跨團隊工作、如何用英文來溝通。說實話,當時我沒有任何的工作壓力,可以按時上下班,從來都不會加班。雖然自己空閒的時間很多,但我並沒有選擇去浪費時間,而是開始寫點技術部落格,也正是因為這些技術文章,才改變了我後續的職業發展道路。
Java 會在很長的一段時間內是主流,現在做Java Web開發都用哪些框架呢?
常用的比如Spring MVC、Struts2 等,國內的 JFinal、Nutz 等也不錯,當然Smart 也是一個很好的選擇。
有一定Web前端開發經驗的人,很多都會有這麼個想法:那些寫框架的人好厲害,什麼時候我才能寫一個自己的框架呢?有時候看看別人的框架程式碼,又覺得很複雜,對此我有一些建議以及新人學習需要什麼基礎?分享一些好的方法。
抽象能力:對業務和技術進行抽象。業務抽象就是對需求進行分析後,能夠建立完美的實體類以及他們之間的聯絡。技術抽象是對整體架構進行一個分層,各層之間的互動。這至關重要,如果技術抽象能力不足,這會導致整個系統的架構不靈活,難以維護和擴充套件。
知識的深度:至少是某個領域的專家,比如訊息佇列,activeMQ熟悉其原始碼,知道其實現。
優秀的學習能力:對新的技術和前沿性的技術進行學習,使用它來解決工作中的業務問題。
那麼你該如何去做呢?我覺得可以從以下幾個步驟開始:
1: 紮實的JAVA 基礎,Think in java上介紹的內容都能理解,做到這一步恭喜成為了程式設計師。
2:熟練使用主流框架,如:mybatis,spring 等。
3:研究過至少一種以web框架的原始碼,如spring mvc ,struts 等。
4:架構過或者參與過高併發系統設計,知道如何應對突發情況。
5:對自己所處的業務能夠根據自己的知識維度,提出優化建議或者預測其風險點。
其實能否成為架構師跟機遇有很大關係,比如一個程式設計師,以上都做到了,但是公司並沒有給他這個機會去做,一個真正架構的機會。因為之前的架構師不離職他就沒有機會,這就是現實!
技術人的歸途
走技術這條路,歸途是什麼?是否轉型又該如何抉擇呢?
至少有好幾條路線是可以走的,比如:深入技術、轉型做產品、轉型做管理等,需要根據自己的特長和性格來選擇,做自己喜歡的事情。
從技術轉管理,對自身的要求比較高,說具體點,需要看自己的情商,為人處世的經驗,與人溝通的技巧,自己也需要有足夠的胸懷,去包容一些事情,還需要自己有足夠的人格魅力去吸引別人,讓別人願意跟著你一起做事。管理有些東西是很難從書本上學到的,但一些經典的管理理論是必須要去學的。
相比較而言,繼續深入技術或者從技術轉產品會容易一些了,因為很多時候都不太需要與人打交道。
如果你想學習Java工程化、高效能及分散式、高效能、深入淺出。效能調優、Spring,MyBatis,Netty原始碼分析和大資料等知識點可以關注微信工宗號:程式設計師大牛!