一個6年java程序員的工做感悟,寫給還在迷茫的你

前言java

不少年前,剛剛從大學畢業的時候,不少公司來校招。其中最爛俗的一個面試問題是:「你但願你以後三到五年的發展是什麼?」。我當時的標準回答是(原話):「成爲在某一方面可以獨當一面的技術專家「。後來經歷了幾家不一樣的公司,換了不一樣的方向,才知道這個真是一個很難的問題。由於兵無常勢,什麼東西都是在不斷的變化,一早的時候看好的東西可能會被淘汰。nginx

(幾乎)沒有人可以看準技術的下一個方向,由於這個問題實在是太難了,可以作到這一點的你就成爲了技術界的巴菲特了。好比說11年加入Google,14年加入Facebook,16年加入阿里巴巴。作到這一點的人確定有資本也有眼光去作風險投資,就算不作風險投資那麼財務自由也是妥妥的。程序員

如今畢業六年,從北京到上海到硅谷,從國內互聯網公司外企,看到了公司好的地方和壞的地方,這裏只是根據本身的經歷寫一些大方向選擇建議,僅供參考。web

1、行業背景很重要面試

行業背景很是重要;工做3年後必須肯定本身的行業背景,好比一直從事電信行業,一直從事銀行項目,一直從事ERP行業等等。數據庫

一個程序員不多是一直寫代碼的,就是寫代碼也要知道業務邏輯,知足什麼需求;俗話說隔行如隔山,每一個行業的業務都不同,甚至差異很大,好比你一直從事流媒體的研究,讓你跳槽到一家銀行項目,完了,一切從頭學吧,之前的行業經驗都用不上了;並且,一個公司公司招人,就是但願找到那些很容易上手,不須要培訓業務好久的程序員;頻繁跳槽的朋友,必定要注意這點;編程

一直在一個行業呆久了,就能夠成爲這個行業的專家;咱們能夠常常看到,一個項目組的某個leader,代碼寫的通常,可是卻能夠跟客戶流暢的溝通,控制着新需求的提出,bug的修正等等;而客戶也很願意跟他打交道,由於那些老的項目只有他能維護,他甚至熟悉系統的每一張表結構——-可想在這個行業呆的時間有多久啦。
第2、合理的職業規劃瀏覽器

什麼是職業規劃—-就是你短時間或者長期的一個職業計劃!大道理不講,咱簡單點。先問你幾個問題:緩存

a.你工做幾年了,你願意一直和新入行的新手同樣就是個簡單的程序員嗎?服務器

b. 你願意一直寫代碼,而不關心其餘嗎?

c. 一個項目的前期需求,設計,後期部署維護,領導找到你,你說咱搞不定,行嗎?

程序員不是敲代碼的機器。第一年太多東西不懂,你能夠一切遵從老大的安排,敲敲代碼,看看數據庫,測試本身和別人的代碼;可是第二年,你仍是這樣嗎?不可能的,一年的經驗你徹底能夠入行了,是時候該學習怎麼進行需求分析,怎麼設計數據庫,怎麼寫各種文檔,怎麼寫更好的代碼?這是高級程序員的要求!

3、什麼是高級程序員?

具備分析設計能力,能進行技術攻關,並且具備某行業深厚背景的程序員!

全部,一個項目立項後,你要積極的參與到前期設計中,跟老同志們一道思考分析問題,學習經驗!OK,你這就成長啦!

千萬不要認爲程序員就是寫代碼的哦!!!

並且,經過一個項目的開發,你要能粗略的統計出一個功能的開發時間;好比一個模塊有20個小功能點,你開發了80個小時,每一個小功能點平均2小時——這時在前期就能評估工做量啦。固然每一個人的效率和工做質量是不一樣的,因人而異,可是大概的工做量應該是能夠統計出來的,用於統計一個項目的工做週期;

4、不要以爲業務代碼同樣很牛逼

有人認爲寫業務代碼同樣能夠很牛逼,理由是業務代碼同樣能夠有各類技巧,例如可使用封裝和抽象使得業務代碼更具可擴展性,能夠經過和產品多交流以便更好的理解和實現業務,日誌記錄好了問題定位效率能夠提高10倍等等。

業務代碼同樣有技術含量,這點是確定的,業務代碼中的技術是每一個程序員的基礎,但只是掌握了這些技巧,並不能成爲技術大牛,就像遊戲中升級打怪同樣,開始打小怪,經驗值很高,越到後面經驗值越少,打小怪已經不能提高經驗值了,這個時候就須要打一些更高級的怪,刷一些有挑戰的副本了,沒看到哪一個遊戲只要一直打小怪就能升到頂級的。成爲技術大牛的路也是相似的,你要不斷的提高本身的水平,而後面臨更大的挑戰,經過應對這些挑戰從而使本身水平更上一級,而後如此往復,最終達到技術大牛甚至業界大牛的境界,寫業務代碼只是這個打怪升級路上的一個挑戰而已,並且我認爲是比較初級的一個挑戰。

因此我認爲:業務代碼都寫很差的程序員確定沒法成爲技術大牛,但只把業務代碼寫好的程序員也還不能成爲技術大牛。

5、別以上班太忙沒時間學習爲藉口

不少人認爲本身沒有成爲技術大牛並非本身不聰明,也不是本身不努力,而是中國的這個環境下,技術人員加班都太多了,致使本身沒有額外的時間進行學習。

這個理由有必定的客觀性,畢竟和歐美相比,咱們的加班確實要多一些,但這個因素只是一個須要克服的問題,並非不可逾越的鴻溝,畢竟咱們身邊仍是有那麼多的大牛也是在中國這個環境成長起來的。

我認爲有幾個誤區致使了這種見解的造成:

1)上班作的都是重複工做,要想提高必須本身額外去學習

造成這個誤區的主要緣由仍是在於認爲「寫業務代碼是沒有技術含量的」,而我如今上班就是寫業務代碼,因此我在工做中不能提高。

2)學習須要大段的連續時間

不少人覺得要學習就要像學校上課同樣,給你一成天時間來上課纔算學習,而咱們平時加班又比較多,週末累的只想睡懶覺,或者只想去看看電影打打遊戲來放鬆,因此就沒有時間學習了。

實際上的作法正好相反:首先咱們應該在工做中學習和提高,由於學以至用或者有實例參考,學習的效果是最好的;其次工做後學習不須要大段時間,而是要擠出時間,利用時間碎片來學習。

6、作的更多,作的比你主管安排給你的任務更多。

我在HW的時候,負責一個版本的開發,這個版本的工做量大約是2000行左右,可是我除了作完這個功能,還將關聯的功能所有掌握清楚了,代碼(大約10000行)也所有看了一遍,作完這個版本後,我對這個版本相關的整套業務所有很熟悉了。通過一兩次會議後,你們發現我對這塊掌握最熟了,接下來就有趣了:產品討論需求找我、測試有問題也找我、老大對外支撐也找我;後來,不是我負責的功能他們也找我,即便我當時不知道,我也會看代碼或者找文檔幫他們回答。最後我就成了我這個系統的「專家」了。雖然這個時候我仍是作業務的,仍是寫業務代碼,可是我已經對整個業務都很熟悉了。

以上只是一個簡單的例子,其實就是想說:要想有機會,首先你得從人羣中冒出來,要想冒出來,你就必須作到不同凡響,要作到不同凡響,你就要作得更多!

怎麼作得更多呢?能夠從如下幾個方面着手:

1)熟悉更多業務,無論是否是你負責的;熟悉更多代碼,無論是否是你寫的

這樣作有不少好處,舉幾個簡單的例子:

需求分析的時候更加準確,可以在需求階段就識別風險、影響、難點

問題處理的時候更加快速,由於相關的業務和代碼都熟悉,可以快速的判斷問題可能的緣由並進行排查處理

方案設計的時候考慮更加周全,因爲有對全局業務的理解,可以設計出更好的方案

2)熟悉端到端

好比說你負責web後臺開發,但實際上用戶發起一個http請求,要通過不少中間步驟纔到你的服務器(例如瀏覽器緩存、DNS、nginx等),服務器通常又會通過不少處理纔到你寫的那部分代碼(路由、權限等)這整個流程中的不少系統或者步驟,絕大部分人是不可能去參與寫代碼的,但掌握了這些知識對你的綜合水平有很大做用,例如方案設計、線上故障處理這些更加有含金量的技術工做都須要綜合技術水平。

「系統性」、「全局性」、「綜合性」這些字眼看起來比較虛,但其實都是技術大牛的必備的素質,要達到這樣的境界,必須去熟悉更多系統、業務、代碼。

3)自學

通常在比較成熟的團隊,因爲框架或者組件已經進行了大量的封裝,寫業務代碼所用到的技術確實也比較少,但咱們要明白「惟一不變的只有變化」,框架有可能要改進,組件可能要替換,或者你換了一家公司,新公司既沒有組件也沒有框架,要你從頭開始來作。這些都是機會,也是挑戰,而機會和挑戰只會分配給有準備的人,因此這種狀況下咱們更加須要自學更多東西,由於真正等到要用的時候再來學已經沒有時間了。

以java爲例,大部分業務代碼就是if-else加個數據庫操做,但咱們徹底能夠本身學些更多java的知識,例如垃圾回收,調優,網絡編程等,這些可能暫時沒用,但真要用的時候,不是google一下就能夠了,這個時候誰已經掌握了相關知識和技能,機會就是誰的。

以垃圾回收爲例,我本身平時就抽時間學習了這些知識,學了1年都沒用上,但後來用上了幾回,每次都解決了卡死的大問題,而有的同窗,寫了幾年的java代碼,對於stop-the-world是什麼概念都不知道,更不用說去優化了。

據不徹底統計,中國Java程序員的數量已經超過了100多萬。並且,隨着IT培訓業的持續發展和大量的應屆畢業生進入社會,Java程序員面臨的競爭壓力愈來愈大。那麼,做爲一名Java程序員,怎樣努力才能快速成長爲一名高級的程序員或者架構師,或者說一名優秀的高級工程師或架構師應該有怎樣的技術知識體系,這不只是一個剛剛踏入職場的初級程序員,也是工做三五年以後開始迷茫的老程序員,都必需要面對和想明白的問題。

相關文章
相關標籤/搜索