Java程序員的兩項通用能力


工作這幾年來,經歷了很多。從小白到中級(手機里有一款叫中國象棋的游戲,里面給對弈中電腦水平分為小白、菜鳥、新手、入門、初級、中級、高級、大師、特級大師,編程我暫且按照這樣來區分)。

學校教給我的是從小白到入門(當然也不乏某些學霸直接跳過這些成為高級甚至大師級別,就大多數普通人來說都是從小白到入門)。

但每個人從小白到入門的過程是不一樣的。有的人是天資聰明,也有的人是基礎牢固(如果你數理化很不錯,那么學編程也是一件很容易的事情),還有的人是勤奮苦練(我覺得我就屬於這一類的)。

后來畢業后的第一份工作讓我成為一名初級程序員,經過幾年的磨練后,算是成為一個中級程序員。

為什么是”算是”而不是”是”?

按照年限來說,一年初級,三年中級,五年高級。那么我達到了三年,剛好是中級。

三年的中級,讓我有了獨立開發網站的能力。

獨立開發網站的能力包括哪些?

  • 需求理解、需求分析、數據建模。
  • 前后端開發能力(包含開發過程中的問題解決)。
  • 運維能力(寫一個項目部署到Linux服務器、搭建各種軟件環境和安裝各種軟件、監控服務器(CPU、內存、硬盤、軟件運行是否正常)、線上問題排查等)。
  • 測試能力(功能測試、性能測試(壓測))。
  • 一定的項目管理能力。
  • 技術選型和框架搭建能力。
  • 二次開發能力。
  • “抄”能力。

但三年的中級並未讓我感到多么的高興,因為於我而言還有很多要學習的,遠遠還沒達到我心目中的”中級”。

不過有一點我還是很慶幸,因為這三年以來我還是處於不斷成長當中。並沒有將一年的工作經驗重復三年。

這三年當中,給了我很多教訓,也讓我思考很多,於是便有了今天這篇文章。

回歸正題,作為Java程序員,我覺得有兩項通用能力,這兩項通用能力,如果讓大家來說?

有人會說:

  • 編碼能力(點(算法)、線(設計模式、組織代碼)、面(框架和學習、理解和應用)、體(操作系統、計算機網絡、編譯原理等))
  • 業務能力(理解需求或問題能力、溝通和協調資源能力、預估和安排計划能力、調研和解決問題能力)

也有人會說:

  • 學習能力
  • 解決問題能力
  • 溝通能力

我今天所說的兩項通用能力,不是溝通,也不是學習,也不是解決問題。而是深入理解Java和數據庫。

因為在我看來學習能力、解決問題能力、溝通能力這些,是一個人無論工作也好還是上學也罷,必需的能力(就好像穿衣吃飯是必需的,無時無刻我們不在學,不僅僅是工作也包括生活,無時無刻我們不在解決問題,不僅僅是工作也包括生活,無時無刻我們不在溝通,不僅僅是工作也包括生活)。

如果一個人22歲工作(上了四年大學),按照60歲的退休標准,職業生涯長達38年。

另外作為IT來說,就國內這個環境,大多數程序員不可能一輩子都是程序員(有人干了幾年干不動了轉行了,有人走向管理層,有人繼續搞技術)。

同時程序員也不一定60歲退休,也許50歲或者40多歲。那么怎么算,至少20年。

20年時間,世界會發生天翻地覆的變化。人不學習很難適應社會。

學習的目的可以理解為兩個方面,一個是不想被世界淘汰,另一個方面是不被解雇(工作是為了生存,也是為了生活,但是老板雇佣你來是解決問題的而非制造問題)。

社會是共同生活的人們通過各種各樣社會關系聯合起來的集合(這樣看來溝通是必不可少的)。

為什么說Java和數據庫是Java程序員的通用能力?

我的理由如下:

第一、熟練掌握並深入理解一門編程語言決定你能走多遠。

第二、任何商業應用軟件都需要存儲,而且數據庫是最多的,而其中SQL能力是基礎,也是最重要的一個。

為什么說熟練掌握並深入理解一門編程語言能決定你能走多遠呢?

第一、當你熟練掌握一門編程語言時,接下來你去學其它的編程語言,你會發現是一件非常容易的事情(因為編程語言有很多共通之處)。

第二、學習和使用該編程語言相關框架也是一件非常容易的事情。

那么最難的是什么?是理解,理解這門編程語言。

理解包含兩個方面,一個是淺度,另一個是深度。

作為一個Java程序員,說真的,我對Java至今都處於淺度方面的理解而非深度(對於深度,我覺得讀懂源碼是必要條件)。

同時我也覺得不少人和我一樣處於淺度理解。淺度理解並不影響實際開發工作的展開(但有些時候卻成為生產宕機或突發問題的原因,我曾經的一個代碼問題就把生產環境搞亂了),也不影響學習任意的框架或其它。

其實,我很痛恨淺度。因為淺度是一件很有危害的事情。原因如下:

  • 程序是由算法和數據結構組成,而開發軟件中你不一定會用算法,但是數據結構是必不可少的,如字符串、鏈表、數組、哈希、堆、棧、樹等
  • 看似代碼寫的沒問題,但如果不理解對應的方法(源代碼),可能會出問題(面試常考的一個,也是Java開發中用的最多的,如equals和==,你不理解寫的就會出問題)
  • 數據最終會存入數據庫,但也會從數據庫中拿出來展示,展示過程中不管你是XML還是JSON,你都需要用到數據結構(Java相關的如String、Array、List、ArrayList、LinkedList、Vector、Map、HashMap、Set等,Java程序員們一定不陌生)
  • 某些時候宕機的原因並不是因為用戶多了,而是代碼寫的有問題(不僅僅是邏輯問題,也是寫的方法有問題。舉個例子,在創業公司開發智能酒店項目時,曾有段時間頻繁宕機,為此我臨時寫一個shell腳本監控着,如果宕機,自動重啟,為了保障能用,只得如此了,最后某天仔細排查,發現就是一段代碼問題,代碼問題反映的不僅僅是邏輯,也是對這門編程語言的深度理解)

我們延伸一下,回到個人職業生涯上看:
淺度等同於不深入,不深入意味着普通和平庸,普通和平庸意味着可替代性很強。可替代性很強就意味着很容易被替換。這也就解釋了為什么程序員會有中年危機(不僅僅是程序員這一行,其它行業也是通用的)。

那么我們如何避免淺度而更好的深度呢?

我的導師,給了我一個很好的意見,這里我分享給大家。
就是從讀一些自己常用的代碼開始(如String、ArrayList、HashMap、FastJSON等相關的)。因為常用,避免陌生感,同時因為常用讀起來也就是更有意義。同時也可以參考相關的優質博文,看看前人是如何深入理解的,不過在看前人寫的之前,自己必須要有自己的意見(因為這代表着你思考過)。

接下來我也會寫相關的源代碼理解文章。寫的目的也是希望自己不再是一個”API搬磚工人(這里我就不用碼農了)”。

也許有讀者朋友疑惑,為什么數據庫也被我列為Java程序員的兩項通用能力之一呢?

以MySQL為例,我對於INNODB和MyISAM(單單一個InNODB沒有真正的弄懂)、索引原理、視圖和觸發器、存儲過程和游標等,僅僅是了解而非真正弄懂。

雖說即便不懂,也能正常進行簡單業務、較復雜業務、復雜業務的CRUD。絲毫不影響業務開發。但是不真正弄懂的話,會成為真正高級Java開發工程師的瓶頸,到時候即便年限到了5年,理所當然成為一名高級研發工程師,但是實力並未達到,等到去面試的時候,一問三不知,最后可能會被面試官說:五年的工作經驗,連這都不知道,怎么好意思要這么高的薪資呢?

我之前公司一個領導T哥曾對我說過,深入掌握Java和數據庫對於一個Java程序員是非常重要的,因為無論你到那家公司,這兩項都是必需,而非所謂的業務能力(每家公司的技術棧相差不是特別大,業務相差是比較大的,但對於程序員而言,業務知識不一定要求你精通100%,最多也就是20%~30%左右,業務知識通常可遷移性不是特別強,比方說,你從外包到自主創業公司或者是從創業公司到其它行業公司都可以,沒有什么限制,當然了,金融方面可能對業務知識方面要求高一些)。

其實仔細想來,這些年開發過的CRM、OA、ERP、CMS、智能酒店和門鎖、物聯網雲平台、電商、編程平台、教育平台等項目(其中也包括二次開發),排除其中的編程語言(因為有用到Node.js、Python、PHP等),基本上數據庫都是共性,而且用的都是MySQL。仔細在從另外一個角度來看,一個項目從0到1,最終上線投入運營使用,包含高可用、高並發、高性能等,都與數據庫緊密相關,因為這考驗着你的數據庫設計是否合理,一個設計不合理的數據庫,會無限增大成本(服務器的投入,為了保證”三高”,最簡單的辦法就是加機器,不斷的加機器,但如果設計的合理,機器可以加少點,加少點同時也意味着降低企業成本,當然也不排除一些公司盈利不錯,盈利不錯,意味着這些成本可以不忽略不計)。

再回過頭來,即便是數據庫也有值得深入研究並掌握的?

以MySQL為例,我首推INNODB。因為INNODB存儲引擎是用的最多的。
同時還有一點十分重要,那就是SQL能力(包含能夠寫復雜的SQL、優化SQL、知道如何加索引等)。基本上可以說,如果你的SQL能力不錯,那么工作效率和工作質量將會上一個檔次或者高好幾個檔次。以Java的三層架構,數據訪問層、業務邏輯層、視圖層(又稱UI層),其中的數據訪問層就考驗你的SQL能力,業務邏輯層依賴於數據訪問層(SQL能力),如果你的數據訪問層寫的不好有問題,那么自下向上都會受到影響,關於一點我深有體會過(曾經也深受其害)。

最后,我的這些年的經驗教訓告訴我Java程序員的兩項通用技能是深入理解Java和數據庫(多次強調過,希望大家不要舍本逐末,追求所謂的新技術,技術是日新月異的,而底層是不變的,把握這個不變,就足以應對萬變)。因為這些是你無論到那家公司都需要的通用能力,相反我覺得框架並沒有那么重要,而且熟練使用一門框架並不是很難。任何編程語言和框架,最難的就是深入理解而非簡單使用(不僅僅是Java,其它語言也是一樣通用的,深入理解一門編程語言和數據庫,無論到哪你都能戰無不勝)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM