一個十年JAVA老程式設計師成長之路分享
我搞JAVA也有些日子了, 因為我比較貪玩,上進心不那麼強, 總是逼不得已為了高薪跳槽才去學習, 所以也沒混成什麼大牛, 但好在現在也已經成家立業, 小日子過的還算滋潤, 起碼頂得住一月近萬元的吃喝拉撒玩各種貸款信用卡 不為金錢過於發愁了。 我特別感謝當初貼吧遇見的那位大神, 雖然每個月也就聊那麼幾句, 但是他總能在我不知道該學啥, 該怎麼走的時候, 給我方向, 毫不誇張的說,我現在的衣食無憂, 技術馬馬虎虎, 都是拜他所賜。 所以 我也想分享一些自己的成長過程 以及技術路線 希望一些迷茫的新人,或者想轉行但是躊躇不前的老哥老弟們 能夠得到一些建議吧
其實這行的工資待遇和前景,比起一些風吹日曬的苦逼行業 還是要好不少的, 很多人說程式設計師累, 加班 , 掉頭髮 但其實在生存壓力面前 這都不算什麼, 有哪一行是輕鬆的呢?起碼程式設計師技術到位了,工資還是比較可觀的。
那麼 入門的新手 要達到一個什麼水平才能找到工作養活自己呢?
首先 JAVA基礎語法 集合類 執行緒 IO操作, 這些掌握了 基礎算是過關了, IO操作有點麻煩 被搞暈沒關係 知道什麼時候用 用到了 再去搜尋就行
其次 web部分 servlet jsp session cookie mysql資料庫 都要知道怎麼操作怎麼用 前端頁面的話 html不必太深 能看懂就行 js或者jquery會操作dom能夠把後臺資料放到合適的位置就可以 現在前段js技術五花八門 基本很少有專案讓後臺弄前端了 如果有並且很長時間了 你可以考慮跳槽了……
學到這個階段,你需要知道一個請求從頁面或者移動端發起之後 經歷什麼樣的過程再返回去的 知道ajax是什麼 會發起非同步請求到後臺 。
框架方面 別學struts hibernate了 很少有專案用了 學springmvc spring mybatis就可以 ,不必清楚實現原理 會搭框架 搞一個增刪改查出來就行了
到這裡,大約就是初級階段了 你可以去找工作了,期望別太高,如果有人要你 工資大約是5到6k 如果是成都西安這些二線 還要低點。之所以說如果有人要,那是因為這兩年行情不太好……這些基本技術需求已經沒法找到一個比較靠譜的工作了。
這個初級階段,其實是最苦逼學的東西最多的階段,你沒有太多的時間,頂著沒有收入還要吃喝拉撒的壓力,也許還有你父母家人 朋友的不理解和嘲笑,在他們眼裡,你念書那麼多年出來,卻連個靠譜的工作也沒有,還在窮折騰,如果你不幸已經進了培訓機構,兩萬多的學費加生活費,等你上班後你會知道攢錢兩萬是多麼多麼的困難……種種壓力面前,你需要在四到五個月殺出一條血路證明自己的價值,怒懟所有嘲笑,將來工資傲世親朋好友,讓你的父母欣慰,讓你能夠挺起胸膛做人,鋪墊好你後面二三十年的路,讓你的父母老了能夠老有所依。 如果你正好在培訓機構學JAVA 看到我這些文字 希望你能堅持一下,拿出你的熱血來 咬牙學它四個月,所有苦難的日子,在拿到高薪offer的那一刻都是值得的。
如果你看到以上 還是無動於衷,我只能說,別學了 該幹嘛幹嘛去吧……去享受青春吧 然後腐爛吧……啃老吧 … 不用我罵你廢物了 自然走人罵……隨著年齡的增長 你會知道你當初多麼的愚蠢不堪,你甚至有可能會喪失做人最基本的繁殖權利,因為沒有女人會願意和你在一起…即便是現在有圖你帥氣外表的 也會離你而去……因為你連穩定的生活也沒法提供。
這些話說的極端了點…天下行業多得是,但我就事論事,你已經進了培訓機構,八成說明你真的是找不到什麼出路了……真的……希望能夠罵醒一些迷途少年吧。
扯遠了,接下來繼續說技術乾貨。
上面說 如果有人要你……這個可能要嚇到很多新人了,我特麼那麼拼命的學出來,結果還是沒人願意要,怎麼辦??別擔心 你只需要把下一階段的技術,學一部分 偽裝一下經驗,就可以了。
初級階段之後,你能夠用tomcat和ssm框架弄一個簡單的專案出來了, 這時候 你可以注意一下編碼規範,變數命名用英文,狀態變數用列舉 常量等 你這樣做是最低成本的偽裝經驗,因為新人寫的程式碼往往和狗啃的一樣……不要在controller寫邏輯 只接收檢驗資料 呼叫service和返回資訊 不要把request傳進service裡 那樣會破壞依賴分離的初衷,dao基本沒啥說的 就是查資料 我見過無數新人寫程式碼都是 service和dao就一個乾巴巴的方法 邏輯全寫在controller裡……這種的不用看 都是菜鳥。
你會框架的CRUD之後 你可以看一下nginx 可以嘗試做一個負載均衡玩一下,這個不需要你寫程式碼 只需要配置下 但是能有效的提高簡歷質量,你還可以學習下MQ 就從activeMQ開始 嘗試怎麼用對接把任務非同步出去, 你還可以試試redis 做個簡單的資料快取或者會話快取,這時候你再去找工作就立馬不一樣了,學這三個可能也就用兩三週不到,但是你的簡歷會體現出一箇中級程式設計師的水平。
那說到中級技術水平 個人覺得應該掌握的技術有 負載均衡 apache http 或者nginx均可, 佇列 ActiveMQ 就行(這個是java語言寫的比較貼近java ),快取 redis就行 memcache用的越來越少了感覺,還有精力的話,可以看一下mogoDB 做個簡單的demo存個json進去玩一玩。 然後你的簡歷又豐富起來了………你工作裡肯定用不到那麼多,但是你就往你簡歷裡寫,糅合進你的專案裡去,反正你知道什麼場景用這些就行,問不出來的。 初級和中級界限很模糊的,只是一些中介軟體的使用而已。
如果你已經學到這個地步,那你要是再說找不到工作, 我是不信的 這時候你找工作 如果在北上廣深 應該有機會破萬了,至於具體拿多少,看你的表達忽悠能力了。
接下來就是比較高階的部分了,這個階段 你大概又陷入苦學的階段了………因為你不能只會用,你要知道原理,不至於讓你自己實現一個出來,但是基本原理要知道。
到了這個階段,你要懂得jvm基本結構,要知道垃圾回收機制,常用垃圾回收演算法,jvm簡單調優引數, 資料庫也是個重頭戲,你要知道mysql事務隔離機制的實現,怎麼最佳化sql , 要知道springmvc流程 spring的原理 事務傳播機制,mybatis流程原理, 樂觀鎖悲觀鎖什麼情況用,你要學會考慮系統瓶頸,系統容災,單點故障, 你要懂得一致性是怎麼回事,cap理論 paxos演算法 以及zookeeper幹嘛用的,能解決什麼問題? 你要懂得soa架構,dubbo , 微服務 spring boot spring cloud 這些高階框架 嘗試用一用,谷歌,開源社群 將要取代百度成為你解決問題的主要動力和前進的方向, 你會有種一覽眾山小的感覺,你會覺得弄個百萬併發的系統其實並不難,難的是後續問題,日誌處理 運維問題, 關於運維我給不了太多建議,可以瞭解下 zabbix 之類的 可以去學習下 docker 微服務加docker將是未來的趨勢。
學到這個地步,你大概已經不用擔心工作問題,這種三五年經驗的高階程式設計師需求永遠很旺盛,注意 我說的是三五年學習實踐經驗,不是三五年一直crud經驗。這個時候你如果在北上廣,你的工資大概會接近20或者更多,成都西安這邊大約15到20 你已經不用為錢太過於發愁了。但是請不要太安逸,因為上面說的那些也只是初窺門徑而已。
到了這個地步,工資已經比較難以提高了,但是大部分程式設計師是走不到這一步的……因為他們眼裡只有薪資,對程式沒有一定的熱愛,是很難堅持到這一步的。之所以說三十歲是程式設計師的分水嶺,就是因為很多人在艱難的學習實踐路上或是倒下了或是滿足了…或是踏足管理 產品 等等崗位 這也是一種出路 只不過我這裡討論的是技術,我個人危機感比較強,技術抓在手裡,永遠後顧無憂…脫離了技術,你八成會被繫結在某個崗位或者公司上……跳槽?別人未必要你,憑啥你過去就是管理崗位?
又扯遠了,到了這個階段,你以為到頭了?太年輕了……上面所說的高階階段,只是構建一個比較大型比較穩定系統的必須而已,問題還是很多的,比如上面說的日誌處理,如何利用龐大的日誌產生商業價值?如今的淘寶 京東這種系統,你去買個滑鼠 它就能給你推薦個鍵盤等周邊外設, 那麼它為啥不給你推薦個內衣內褲呢? 想明白這些,你需要進一步學習, 大資料要來了。
flume 日誌處理 hadoop hive presto hdfs storm spark 大資料 流式計算 ,這些夠你喝一壺的了,學到這個份上,也不需要別人指點你什麼了,你能到達這個階段本身已經證明了自己的學習和技術能力。到達這個階段,你八成已經成為一個跨語言程式設計師了,因為處理資料,並不是java擅長的,你要非用java………那我只能說 人生苦短,何必折磨自己。 你應該已經學會了python scala 也可能有些R語言, 這時候你會發現,語言真的只是工具而已,學個語言很快的,來來回回就是那麼些東西而已,思想最重要。
到了這個階段 你會覺得技術不過如此,媽的學也學不到頭,學來學去也都是跟著老外屁股後面用框架而已………恭喜你 你的無聊和孤獨求敗心態 將會成就你的下一個階段……
下一個階段 也是目前的終極演進狀態了 那就是 機器學習 深度學習 神經網路 人工智慧 樓主目前正在往這個階段進軍……因為真的有點無聊,又想提高水平 只好繼續學了。
到了這個階段,你會有很多挑戰…
首先的挑戰 來自於 數學…是的 你沒聽錯 數學… 線性代數 機率統計 高等數學 …都是你面前的攔路虎,曾經覺得程式設計只要一加一等於二的美好時代一去不復返了……你想繼續前進,請先去學線代 機率……不然寸步難行什麼也看不懂…… 先從機器學習開始吧 這個是最簡單的…但是光就基本的機器學習幾個演算法 看懂的人沒幾個……基本的k-means演算法 decision tree 樸素貝葉斯 這三個 就需要線性代數 機率統計 以及資訊熵相關知識。真的相當抽象……後面的深度學習 神經網路 樓主粗略看了下 沒點數學功底 還是放棄吧,天書一樣的……
到了這個階段……全中國能幫你的人 也不好找了……開源社群能幫到你的也越來越少了…一切靠自己。到了這時候,你會發現,當初甚囂塵上的 大學無用論,程式設計數學無用論 是多麼的可笑, 程式碼是最沒價值的,核心是數學理論……公司不敢開源不是因為程式碼值錢…是因為開源就沒人敢用你們公司產品了 因為全是爛程式碼……
等你一窺終極階段的門徑的時候,你會發現 你危機感越發的強烈了…媽的機器這麼吊炸天,圍棋都暴虐人類, 以後程式設計距離取代的日子也不遠了………說實話 恐怕真的不遠了……人類社會自從有了計算機,越來越發展的快, 人工智慧將會在你我的有生之年發展壯大,近處說,你怎麼保住飯碗,怎麼提高待遇改善生活呢?……啥也不說了 學吧……
感謝大家能看完我這麼長的分享,希望以下的學習路線能對你有幫助
設計模式
設計模式是可複用物件導向軟體的基礎,學習設計模試是每個程式設計師從菜鳥走向大神的必經之路,巧妙地運用設計模式可以使我們的程式碼看似複雜實際簡潔、複用性更高、更容易被別人理解等好處,同時也是學習軟體工程的基礎和必然。
併發程式設計
主要培養程式設計者深入瞭解最底層的運作原理,加強程式設計者邏輯思維,這樣才能寫出高效、安全、可靠的多執行緒併發程式。
開發工具工程化
透過一小段描述資訊來管理專案的構建,報告和文件的軟體專案管理工具。程式設計師的戰鬥,往往不是一個人的戰鬥,我們如何在一個平臺下高效的去重,進行程式碼review,對功能進行調整,debug,做到在統一的規劃下步步為營,混亂的堆程式碼的過程中找到自己的記錄。這一切都依賴於有效的工具。
效能調優
我們不僅僅對專案要運籌帷幄,還要能解決一切效能問題。只有深入學習JVM底層原理,Mysql底層最佳化以及Tomcat調優,才能達到知其然,知其所以然的效果。除了效能最佳化之外,也能提供通用的常見思路以及方案選型的考慮點,幫助大家培養在方案選型時的意識、思維以及做各種權衡的能力。
原始碼分析
程式設計師每天都和程式碼打交道。經過數年的基礎教育和職業培訓,大部分程式設計師都會「寫」程式碼,或者至少會抄程式碼和改程式碼。但是,會讀程式碼的並不在多數,會讀程式碼又真正讀懂一些大專案的原始碼的,少之又少。這也造成了很多錯誤看原始碼的方式。
那要如何正確的分析原始碼呢?
我們的目標應該放在最常用的框架上面,下面就介紹兩個:一個是Spring,另一個是大家用來覺得一直不怎麼出問題的Mybatis。
△spring原始碼
△mybatis原始碼
分散式架構
隨著我們的業務量越來越大和越重要,單體的架構模式已經無法對應大規模的應用場景,而且系統中決不能存在單點故障導致整體不可用,所以只有垂直或是水平拆分業務系統,使其形成一個分散式的架構,利用分散式架構來冗餘系統消除單點的故障,從而提高整個系統的可用性。同時分散式系統的模組重用度更高,速度更快,擴充套件性更高是大型的專案必不可少的環節。
分散式架構(一)
分散式架構(二)
微服務
關於微服務架構的取捨
在合適的專案,合適的團隊,採用微服務架構收益會大於成本。
微服務架構有很多吸引人的地方,但在擁抱微服務之前,也需要認清它所帶來的挑戰。
需要避免為了“微服務”而“微服務”。
微服務架構引入策略 – 對傳統企業而言,開始時可以考慮引入部分合適的微服務架構原則對已有系統進行改造或新建微服務應用,逐步探索及積累微服務架構經驗,而非全盤實施微服務架構。
B2C專案實戰
要想立足於網際網路公司,且能在網際網路浪潮中不被淹沒,對於專案的開發實戰演練是不必可少的技能,也是對自身能力的一個衡量,有多少的量對等於獲得多少的回報。看似簡單的一個專案需求圖譜,其中的底層原理,實現原理又能知道多少?你搭建一個完整的B2C專案平臺到底需要多少知識?這一切都是需要我們考量的。
JVM和效能最佳化
架構關鍵基礎設施
更多架構進階資料加Q群:907410880
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555151/viewspace-2216053/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個JAVA程式設計師成長之路分享Java程式設計師
- 十年風雨,一個普通程式設計師的成長之路(六)程式設計師
- 十年風雨,一個普通程式設計師的成長之路(四)程式設計師
- 十年風雨,一個普通程式設計師的成長之路(五)程式設計師
- 十年風雨,一個普通程式設計師的成長之路(三)程式設計師
- 十年風雨,一個普通程式設計師的成長之路(二)程式設計師
- Java程式設計師的成長之路Java程式設計師
- 程式設計師到創業,成長之路的技能分享程式設計師創業
- 程式設計師的自我成長之路程式設計師
- 一個老程式設計師的程式設計之路,寫給年輕的程式設計師們程式設計師
- 程式設計師成長祕籍:個人程式設計能力的修煉之路程式設計師
- 程式設計師的成長秘籍:個人程式設計能力的修煉之路程式設計師
- JGrowing-一個全面的Java程式設計師成長路線Java程式設計師
- Java程式設計師成長路徑Java程式設計師
- 我的十年程式設計師之路程式設計師
- 成長之路--論程式設計師的職業素養程式設計師
- 一個程式設計師工作經歷和成長感悟程式設計師
- 我打算寫一個《程式設計師的成長課》程式設計師
- 一個BAT老程式設計師的忠告!BAT程式設計師
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 一、(基礎知識)一個前端程式設計師的java小白之路前端程式設計師Java
- 程式設計師成長之路上的10本必讀書籍程式設計師
- 2018,一個轉行程式設計師的成長 | 掘金年度徵文行程程式設計師
- 分享給java程式設計師的文章:一年有多長Java程式設計師
- Java成長之路--一個非科班生的進階之路Java
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java教程分享幾個流行的Java框架程式設計師Java框架
- 好程式設計師Java教程分享Java之設計模式程式設計師Java設計模式
- 「Golang成長之路」函數語言程式設計Golang函數程式設計
- 小班同學學習經歷分享(一)遊戲程式設計師成長札記遊戲程式設計師
- 好程式設計師Java培訓分享HashMap成員變數解析程式設計師JavaHashMap變數
- 好程式設計師Java分享Javamain十個面試題程式設計師JavaAI面試題
- 一枚程式設計師的日常成長日記程式設計師
- Java程式設計師會越老越吃香嗎?Java程式設計師
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 好程式設計師分享居中一個float元素程式設計師
- 好程式設計師Java教程分享Java語法程式設計師Java