1. 程式人生 > >作為Java程式設計師,對你影響最大的黃金五年,你準備如何把握好?

作為Java程式設計師,對你影響最大的黃金五年,你準備如何把握好?

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

參加工作1-2年之間

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

作為Java程式設計師,對你影響最大的黃金五年,你準備如何把握好?

 

參加工作3-4年之間

如果你處於這個階段,說實話很難再提升程式碼能力了,因為這個階段的學習會比較多樣化。在前三年的工作中,你肯定不同程度地接觸過其它的技術,比如大資料、分散式快取、分散式訊息服務、分散式計算、軟負載均衡等技術,你能精通任何一項,都將是你未來面試時巨大的優勢。因此如果你對某一項技術感興趣,這時可以深入去研究,這項技術不一定是你工作所用到的,但一定是相關的。

作為Java程式設計師,對你影響最大的黃金五年,你準備如何把握好?

 

參加工作4-5年之間

參加工作四至五年的程式設計師,這時,你應該遇到技術的瓶頸了。不要急於提高自己的技術,此時更重要的是提高你的影響力,你可以嘗試去一些知名公司提高你的就業背景;你也可以發表一些技術文章去影響更多的人;你還可以去Github建立一個屬於你的開源專案,打造屬於自己的產品。技術學到這個階段,很容易遇到瓶頸,而且往往達到一定程度後,你再深入研究的效果就真的微乎其微了,除非你是專門做學術研究的。然而很可惜,大部分程式猿做不到這一步,那是科學家做的事情。這個時候提高影響力主要是影響力可以給你創造更多的機會,所以,你最大的任務是提高自己的影響力,為未來工作生涯做準備。

作為Java程式設計師,對你影響最大的黃金五年,你準備如何把握好?

 

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

對於軟體開發同學而言,首先要客觀認識自身的情況,想清楚自己現在要什麼、未來要什麼,做好職業規劃,從而選擇不同型別的企業。例如,當前身無幾分,急需就業,技術能力較為一般,可以選擇人力資源外包臨時過渡;喜歡技術專研,對技術有濃厚的興趣,希望以後成為某個領域的技術牛人,可以選擇網際網路平臺型別;有一定的技術基礎,以後想往技術經理、專案經理方向發展,可以選擇專案外包型別。接下來將對程式設計師的職業發揮發展規劃提出具體的建議:

你是否有了明確的職業發展規劃?

1、 走向架構師

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

架構師是一個漫長的積累過程,大部分架構師的年齡在35歲左右,這個階段就是程式設計師的黃金期。那麼我們如何以一個架構師的標準來加強自己的能力呢?程式設計師要向一名架構師發展,需要進一步加強技能的修養。對於網際網路公司來言,最重要的技能是對網路和分散式系統的理解,比較麻煩的是分散式系統,除了分散式,在現在大型網際網路企業中,還需掌握高效能、深入淺出、效能調優、Spring、JVM等技術。當然,良好的駕馭管理開發團隊的能力和人格修養,能夠讓架構師在開發專案中游刃有餘,不會出現意外的干擾。

2、 走向專案經理

有一些程式設計師工作機遇比較好,不但負責專案的設計工作,而且還負責專案的管理工作,對專案經理這個工作有一定的嘗試。因此,這類程式設計師可以審視一下自己,是否合適這項工作,如果自己對這種工作比較滿意,而且具備專案經理的要求,則可以向專案經理這個方向發展。專案經理的工作重點已經從程式設計轉移到對人、對技術、對進度、對專案的管理,因此,專案經理必須要了解軟體開發的各個環節、瞭解開發的各種技術和運用、瞭解開發隊伍人員的水平和特點。

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

3、 走向管理者

很多程式設計師希望自己能成為公司中的主管、經理、老總、老闆,這樣在公司無論是收入還是地位都相對高一些。另外,有些程式設計師可能厭倦了年復一年的程式設計工作,希望能擺脫這種步步緊逼的工作狀態,走向管理者程式設計師要比一般人做更多的準備,做更多的轉型工作。但是,如果你有這個志向,又積累了這方面的工作經驗,可以努力往管理者發展。由於軟體公司的管理者不同於一般公司的管理者,專業能力越強,管理起來就越得心應手,沒有專業能力的管理,遇到的問題很多,也很難解決。 因此,我的建議程式設計師最好要把程式設計、專案設計、專案管理等基礎打好,這樣轉型到管理者成功率就會高一些。

4、 原地踏步

當然也有程式設計師惰性比較大,安於現狀,也無可厚非。對待這些程式設計師,我的建議是原地發展,把本職工作做得更好,把自己的技術水平再提高一步。在這個過程中他們的能力和自信心都會得到提高,他們的想法自然不會一成不變。不管做哪一行,都應儘早做好職業規劃,人都需要有一個目標去激勵自己,Java程式設計師更是如此,朝著一個目標逐步提升自身實力總會比原地打轉好,相信聰明的你該知道怎麼做。

據不完全統計,截至目前(2017.07)為止,中國Java程式設計師的數量已經超過100萬。而且,隨著IT培訓業的持續發展和大量的應屆畢業生進入社會,Java程式設計師面臨的競爭壓力越來越大。那麼,作為一名Java程式設計師,怎樣努力才能快速成長為一名高階的程式設計師或者架構師,這不僅是一個剛踏入職場的初級程式設計師,也是工作三五年後開始迷茫的老程式設計師,都必須要面對和明白的問題。為了幫助大家少走彎路,我總結出一個Java程式設計師的工作2-5年成長路線圖。

Java程式設計師應該掌握的技術

1、通訊協議

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

2.、序列化

系統之間通過網路傳輸,或者儲存到檔案時,肯定只有一種格式,就是字串。要將複雜的資料結構與字串之間進行轉換,就需要用到序列化,簡單的序列化如JSON和XML,稍微複雜些的有protobuf、thrift等。需要了解所有這些序列化方式之間的優勢和劣勢。,比如JSON和XML只能用於傳遞資料,而protobuf與thrift還可以用來做RPC協議,至少要確保每種序列化方式都自己嘗試過hello world。

3.、資料庫

要形成自己的資料庫選取風格,就需要先對自己常用的資料庫有足夠深入的瞭解。對於關係式資料庫,除了一般的Create、Query、Delete、Update操作外,還需要能自行建立索引、資料庫的平行擴充套件、瞭解如何進行效能除錯,以及瞭解常見查詢操作的效能級別、常見的查詢效能瓶頸點。一個較好的例子是 "SELECT COUNT(*) FROM table WHERE dt_create-86400>NOW();" 。

4、 儲存

儲存分為幾種型別。NAS等各家產品有所不同,大多是通過NFS來訪問的,問題是NAS的價格很高,而且在去IOE的趨勢中很多人也不願意再用,所以經常會有基於檔案系統建立小規模儲存的需求。需要關注的是每個目錄下的檔案數不應該太多,當一個目錄下檔案數(實際是inode數量,包括檔案和目錄)超過1000時,效能就很差了。所以,建議將一個系統中要儲存的物件ID做16進位制,隨後每2位16進製做成一級目錄,這樣可以確保每個目錄下的檔案數不會超過256個。現代雲端計算,如Amazon S3已經把儲存的問題解決的很好了,如果可能,儘量用好。

5、應用框架

此事在各個語言之間各有選擇,多注意瞭解自己關注方向的所有框架的優勢和劣勢,至少當有個毛頭孩子問你為什麼不選擇某個最新的框架時,能清楚用自己的觀點答覆。對於常見的框架,十分推薦自己重新實現一個來當作鍛鍊,實現一個WEB框架,不到200行程式碼就實現了。

6、介面

主要是指介面協議,或者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、gnu pg、sha1、md5、scrypt等,瞭解各種加密/簽名技術的安全性、字長等,並都能自己做過hello world。

那如何快速學習並精通呢?

針對當前網際網路公司的技術需求以及結合主流技術,我自己整理了一套系統的架構技術體系,當你技術過硬的時候,能夠解決技術問題才會服眾。不少公司都很重視高併發高可用的技術,特別是一線網際網路公司,分散式、JVM、spring原始碼分析、微服務等知識點已是面試的必考題,這些東西可能你們平時在工作中接觸過,但是缺少全面系統的學習。

個人推薦分享一套全面的知識圖譜,無論走架構,管理還是專案經理的路線這些技術你都應該有一定的瞭解及掌握!(迷茫的朋友可以參考下學習方向)

作為Java程式設計師,對你影響最大的黃金五年,你準備如何把握好?

 

歡迎工作一到五年的Java工程師朋友們加入Java高階架構:617912068,群內有很多大佬分享一些自己的職業心得以及技術交流,也可以找群管理領取架構學習資料以及電子書籍學習,讓自己的時間保持充足狀態,對自己的職業規劃有一定的方向!

作為Java程式設計師,對你影響最大的黃金五年,你準備如何把握好?