程序員該如何把握黃金五年!

在Java業界流行着一種說法——黃金5年,就是從程序員入職時算起,前五年的工做選擇直接影響整個職業生涯的職業發展和薪資走向。如何把握這五年,從一個剛入行的菜鳥蛻變成一個處事不驚的大佬,這是一個涉及到自身的專業知識儲備和選擇的難題,那麼,一個Java程序員如何作才能完成從入行到大佬的晉升之路呢?node

clipboard.png

參加工做1-2年之間

在這段時間裏,想必對Java已經有了一個深刻的瞭解。首先,你要很是熟悉設計模式,看一些關於代碼編寫優化的書,提升你的代碼能力,可以寫出一手優雅的代碼;其次,你在工做過程當中確定接觸過併發,你應該更加深刻地去了解併發的相關知識;最後,你要對所使用的框架和Java的類庫有必定的研究,還須要去看一些JDK中的類的源碼,包括你所使用的框架的源碼。總而言之,這個階段,你須要作的是深刻了解Java底層和Java類庫,也就是JVM和JDK的相關內容。mysql

參加工做3-4年之間

若是你處於這個階段,說實話很難再提高代碼能力了,由於這個階段的學習會比較多樣化。在前三年的工做中,你確定不一樣程度地接觸過其它的技術,好比大數據、分佈式緩存、分佈式消息服務、分佈式計算、軟負載均衡等技術,你能精通任何一項,都將是你將來面試時巨大的優點。所以若是你對某一項技術感興趣,這時能夠深刻去研究,這項技術不必定是你工做所用到的,但必定是相關的。nginx

參加工做4-5年之間

參加工做四至五年的程序員,這時,你應該遇到技術的瓶頸了。不要急於提升本身的技術,此時更重要的是提升你的影響力,你能夠嘗試去一些知名公司提升你的就業背景;你也能夠發表一些技術文章去影響更多的人;你還能夠去Github建立一個屬於你的開源項目,打造屬於本身的產品。技術學到這個階段,很容易遇到瓶頸,並且每每達到必定程度後,你再深刻研究的效果就真的微乎其微了,除非你是專門作學術研究的。然而很惋惜,大部分程序猿作不到這一步,那是科學家作的事情。這個時候提升影響力主要是影響力能夠給你創造更多的機會,因此,你最大的任務是提升本身的影響力,爲將來工做生涯作準備。程序員

我有個朋友2010年畢業,做爲一名軟件開發程序員,踏入軟件開發行業已有8個年頭了,他作過初級軟件工程師、高級軟件工程師、項目主管、技術經理、項目經理,近些年帶過開發團隊、參與招聘面試。我請他把這些年的工做體會分享下,有不一樣意見的歡迎探討。面試

clipboard.png

對於軟件開發同窗而言,首先要客觀認識自身的狀況,想清楚本身如今要什麼、將來要什麼,作好職業規劃,從而選擇不一樣類型的企業。例如,當前身無幾分,急需就業,技術能力較爲通常,能夠選擇人力資源外包臨時過渡;喜歡技術專研,對技術有濃厚的興趣,但願之後成爲某個領域的技術牛人,能夠選擇互聯網平臺類型;有必定的技術基礎,之後想往技術經理、項目經理方向發展,能夠選擇項目外包類型。接下來將對程序員的職業發揮發展規劃提出具體的建議:redis

Java程序員你是否有了明確的職業發展規劃?

一、 走向架構師sql

對任何一個Java開發人員來講,架構師都是一個使人嚮往的角色。那麼程序員與架構師之間的主要區別是什麼呢?架構師擁有完善和紮實的技術體系,具有較好系統分析和設計能力,豐富的項目研發經驗。其實,程序員的成長首先來自自身的學習,而閱讀成熟項目的代碼會令人受益不淺;其次是來自所從事領域的經驗,要了解分佈式系統的特色,在作項目時,要可以關注性能、擴展性、可靠性、可用性等指標。mongodb

架構師是一個漫長的積累過程,大部分架構師的年齡在35歲左右,這個階段就是程序員的黃金期。那麼咱們如何以一個架構師的標準來增強本身的能力呢?程序員要向一名架構師發展,須要進一步增強技能的修養。對於互聯網公司來言,最重要的技能是對網絡和分佈式系統的理解,比較麻煩的是分佈式系統,除了分佈式,在如今大型互聯網企業中,還需掌握高性能、深刻淺出、性能調優、Spring、JVM等技術。固然,良好的駕馭管理開發團隊的能力和人格修養,可以讓架構師在開發項目中游刃有餘,不會出現意外的干擾。數據庫

二、 走向項目經理apache

有一些程序員工做機遇比較好,不但負責項目的設計工做,並且還負責項目的管理工做,對項目經理這個工做有必定的嘗試。所以,這類程序員能夠審視一下本身,是否合適這項工做,若是本身對這種工做比較滿意,並且具有項目經理的要求,則能夠向項目經理這個方向發展。項目經理的工做重點已經從編程轉移到對人、對技術、對進度、對項目的管理,所以,項目經理必需要了解軟件開發的各個環節、瞭解開發的各類技術和運用、瞭解開發隊伍人員的水平和特色。

在平常的工做和生活中就得逐步鍛鍊這方面的能力,其次,學習一些項目管理的知識,例如:PMP、CMMI、敏捷開發管理等。從程序員到項目經理可使項目經理更好地理解程序員在項目中的地位和做用,瞭解軟件開發的各類規律性的東西,從而保證項目的正常完成。並且,項目經理的收入在公司中的地位也是比較高的,所以,我認爲走向項目經理是程序員的另外一個發展空間。我想提醒一下,程序員在擔任項目經理以前最好要把軟件設計工做作好,這樣在作項目經理的時候,就會有很好的基礎。

三、 走向管理者

不少程序員但願本身能成爲公司中的主管、經理、老總、老闆,這樣在公司不管是收入仍是地位都相對高一些。另外,有些程序員可能厭倦了年復一年的編程工做,但願能擺脫這種步步緊逼的工做狀態,走向管理者程序員要比通常人作更多的準備,作更多的轉型工做。可是,若是你有這個志向,又積累了這方面的工做經驗,能夠努力往管理者發展。因爲軟件公司的管理者不一樣於通常公司的管理者,專業能力越強,管理起來就越駕輕就熟,沒有專業能力的管理,遇到的問題不少,也很難解決。 所以,個人建議程序員最好要把編程、項目設計、項目管理等基礎打好,這樣轉型到管理者成功率就會高一些。

四、 原地踏步

固然也有程序員惰性比較大,安於現狀,也無可厚非。對待這些程序員,個人建議是原地發展,把本職工做作得更好,把本身的技術水平再提升一步。在這個過程當中他們的能力和自信心都會獲得提升,他們的想法天然不會一成不變。無論作哪一行,都應儘早作好職業規劃,人都須要有一個目標去激勵本身,Java程序員更是如此,朝着一個目標逐步提高自身實力總會比原地打轉好。

在此,分享一份我本身收集總結的Java架構技術體系給你們,但願對面臨技術瓶頸、面試碰壁的程序員們有所幫助。這世上最不缺的是勤奮,不要作徒勞的努力,有計劃地去學習去努力,比盲目前進要有效十倍。若是你也對技術感興趣能夠加入個人Java後端開發羣:943918498,或關注微信公衆號:Java資訊庫,回覆「架構」,到羣裏來下載相關技術資料,這段時間正值面試期,歡迎你們進羣討論與學習。

Java程序員應該掌握的技術

一、通訊協議

各個子系統之間要進行通訊,必需要選擇一種或多種通訊協議,現代比較常見的是基於HTTP的協議。建議瞭解更多協議對於學習安全也有很大的幫助,好比MySQL和PostgreSQL的協議都有安全的設計。

二、序列化

系統之間經過網絡傳輸,或者存儲到文件時,確定只有一種格式,就是字符串。要將複雜的數據結構與字符串之間進行轉換,就須要用到序列化,簡單的序列化如JSON和XML,稍微複雜些的有protobuf、thrift等。須要瞭解全部這些序列化方式之間的優點和劣勢。,好比JSON和XML只能用於傳遞數據,而protobuf與thrift還能夠用來作RPC協議,至少要確保每種序列化方式都本身嘗試過hello world。

三、數據庫

要造成本身的數據庫選取風格,就須要先對本身經常使用的數據庫有足夠深刻的瞭解。對於關係式數據庫,除了通常的Create、Query、Delete、Update操做外,還須要能自行創建索引、數據庫的平行擴展、瞭解如何進行性能調試,以及瞭解常見查詢操做的性能級別、常見的查詢性能瓶頸點。一個較好的例子是 "SELECT COUNT(*) FROM table WHERE dt_create-86400>NOW();" 。

四、 存儲

存儲分爲幾種類型。NAS等各家產品有所不一樣,大可能是經過NFS來訪問的,問題是NAS的價格很高,並且在去IOE的趨勢中不少人也不肯意再用,因此常常會有基於文件系統創建小規模存儲的需求。須要關注的是每一個目錄下的文件數不該該太多,當一個目錄下文件數(實際是inode數量,包括文件和目錄)超過1000時,性能就不好了。因此,建議將一個系統中要存儲的對象ID作16進制,隨後每2位16進製作成一級目錄,這樣能夠確保每一個目錄下的文件數不會超過256個。現代雲計算,如Amazon S3已經把存儲的問題解決的很好了,若是可能,儘可能用好。

五、應用框架

此事在各個語言之間各有選擇,多注意瞭解本身關注方向的全部框架的優點和劣勢,至少當有個毛頭孩子問你爲何不選擇某個最新的框架時,能清楚用本身的觀點答覆。對於常見的框架,十分推薦本身從新實現一個來看成鍛鍊,實現一個WEB框架,不到200行代碼就實現了。

六、接口

主要是指接口協議,或者RPC協議。系統之間進行RPC調用很常見,注意選擇本身能熟練使用的,而且有所深刻研究,並瞭解其常見的限制。RESTful API就是個比較常見的選擇,可是性能並很差,本身要對性能等參數有量化的瞭解,而不是簡單的一句好或很差。短鏈接接口在三次握手時是串行操做,要了解其爲什麼耗時。

除了要在如上的各類不可或缺的組成部分中有所瞭解,還要能清楚地知道一些經常使用系統模塊的原理,並可以很深刻的玩起來。幾個值得注意的:

  1. HTTP服務器:常見的無非是nginx、apache,本身要能進行基本配置,包括靜態文件、fastcgi轉發等。
  2. 關係式數據庫:常見的如mysql postgresql、sqlite,本身要對每一種都有深刻的瞭解,能夠作一遍常見操做的性能測試,並牢記於心。好比sqlite雖然並不須要走網絡,可是實際查詢性能不好。
  3. NoSQL數據庫:memcache、redis、mongodb等,近幾年有不少,挨個瞭解其實現原理,以及各類經常使用操做的性能,當有須要時,隨時能拿得出手來用。
  4. 雲計算平臺:幾種常見的雲計算平臺的應用方式要有了解,如Google的資源方式和Amazon的VPS方式,每種雲計算平臺每每還會提供一大堆附加服務,好比可靠數據庫,存儲,緩存等,也要分別有所瞭解。
  5. 加密/簽名技術:常見如truecrypt、openssl、gnupg、sha一、md五、scrypt等,瞭解各類加密/簽名技術的安全性、字長等,並都能本身作過hello world。
相關文章
相關標籤/搜索