目前通常的大點的公司,每每會在招聘時(尤爲在招聘3年如下工做經驗的程序員時)會設置學校的門檻,好比須要211或985相關專業畢業。這裏我無心貶低不在這個範圍的程序員,相反在本文裏還將根據我所見和我所聞,爲這些同窗給出發展的建議。html
首先我用個人切身體會給你們予以足夠的信心:我最近呆的都是一些不小的公司,雖然在招聘時有上述的門檻,但事實上,在3年左右的正式員工裏,大約30%是通常學校,或非科班出身,在外派的員工裏,這個比例會高到70%左右,並且,每一個組平均每一年有3個左右轉正的名額。因此,出身通常的程序員,只要有足夠的勤奮度,並且方法得當,絕非就必定低人一等。 前端
恕我直言,在學校和學歷方面稍微欠缺的同窗裏,我有見過能力很強的,但平均綜合能力確實不如好學校。(這裏若是我說高於好學校,說出來也沒人信)。 不過對於勤奮的同窗來講,並不是是能力不行,而是努力的方法和方向不對。對於這批敬業勤奮的同窗,我很是敬佩,因此在這篇文章裏,我將專門分享些相關的提高技巧。java
平心而論,爲何有這樣的設置呢?第一,能進好學校的同窗在以前的學習過程當中已經證明了本身「綜合能力強「這個特質,第二,好學校畢業的同窗,通常基礎能力比較紮實,好比數據結構算法操做系統編譯原理等,不只理論經驗,很多還有實訓經驗。python
在前進的過程當中,咱們必須認清本身,所謂知己知彼百戰不殆,但認識本身絕非是讓咱們妄自菲薄,而是明白本身的短板,概括一下,在招聘時,通常會對這批程序員重點考覈以下的要點(這其實就是目前廣泛存在的短板):mysql
1 是否有實際的商業項目經驗?linux
2 基本功是否能達標?好比是否熟悉鏈表Hash表的基本數據結構,是否熟悉排序等基本的算法。nginx
3 學習能力,團隊協做能力以及責任心等是否達標?程序員
其實歸根到底就一點:若是程序員在大學畢業前,有過實際的項目經驗,好比作過兼職,或在學校裏幫老師幹過商業項目經驗,這能必定程度上彌補學歷學校和專業方面的劣勢,並且,若是作項目的時間足夠長(通常1年左右),並且項目裏用到的技術和公司職位需求比較匹配,並且候選人動手能力強,一些規模不大的公司甚至會忽視學校等方面的因素。 面試
程序員在踏上社會後前兩年的發展,會比較重要。這裏給出的建議是,若是你感受學校和學歷會成爲障礙,能夠找個規模通常但乾的活和你的職業發展相關的工做,若是萬不得已,不得不幹銷售等之類的工做,但必定得讓本身乾點和編程相關的事情。下面給出些我見到過的案例。算法
案例1:小A本科畢業後,學校通常,能力屬於中下。不過他找了個外派公司,外派進了一個規模比較大的公司,在其中發展了2年,用項目經驗沖淡了學校的因素,後來就跳槽進了一個大公司,從初級開發作起,平時也常常學些知識,目前在升級到高級開發的路上順風順水。
案例2:小B學校通常,也大專學歷,但在大三期間已經在軟件公司實習,積累了一些基本的開發能力,畢業後就憑此順利進入到一箇中型公司作開發,至少能在社會上站穩腳跟。
案例3:小C大專學習,專業是理科,但和軟件關係不大,後來參加一個軟件培訓,積累了些技能,目前至少也能在公司裏作軟件開發的活。
在這個案例中,我絕非說必定得經過培訓學校,其實在培訓學校是用錢買時間買學習方法買項目經驗,若是你本身毅力足夠,靠本身看視頻運行項目,也能達到相似的效果。
案例4:我在面試時就看到很多簡歷,候選人學校學歷都通常,3年後,絕對有能力挑戰大公司的職位,並且公司更看重這些同窗靠前3年工做積累的項目和技能經驗。
總結一下,若是學校學歷都通常,那麼該採起哪些措施呢?
1 最好在畢業前,進入軟件公司實習。這能夠靠學校推薦,更得本身去找。學校裏的一些老師,會和外面公司合做,你們就能夠找這些老師幹活。或者就處處投簡歷,工資看着要,以積累項目經驗爲主。
2 平時能夠適當放鬆娛樂,但就更得本身瞭解項目經驗。好比,經過視頻等方式,本身搭建一個框架,或者用python搭建一個數據分析平臺,這種案例多多益善。
3 準備簡歷時,必定得增長商業項目的經驗,同時靠刷面試題積累面試經驗。
這裏也給你們交個底,我在上海,上海軟件公司數量多不勝數,每每一個樓裏就有5,6家,並且,小型或中型的公司,出於節省成本的考慮,每每只會看項目技能和基本功,不怎麼看學校和學歷。其實每一個城市都同樣,因此要找工做,或者是不差的工做,絕對沒問題。
在龜兔賽跑裏,最讓人痛心的不是兔子在中途睡覺,而是烏龜自暴自棄。天道酬勤,但若是本身都失去信心或貪圖玩樂,那真就沒人能幫你了。
在上文裏提到,在學校裏,就該去積累項目經驗,或本身經過運行代碼熟悉框架技能。不過若是已經不慎錯過學校裏的時間,但如今想迎頭遇上,只要努力了,何時都不晚。
這裏給出些關於Java方面自學的途徑和時間點。
表 第1個月的學習進度
學習時間 |
要學的技術 |
應該達到的水準 |
第1周 |
搭建Java環境,熟悉基本語法 |
安裝好JDK,Eclipse或MyEclipse開發環境。能運行出第一個Java程序。最好還能熟悉int之類的基本數據類型和一些加減乘除等基本運算。瞭解Math等經常使用的類,瞭解if分支語句,瞭解while,for等循環語句,能用開發出諸如計算閏年或累加和之類的小程序。 |
第2周 |
基本的面向對象語法 |
瞭解封裝繼承多態等的語法,知道面向對象的基本概念,但此時沒必要深刻。這部份內容對應本書第2章。 |
第3周 |
Java集合部分的內容 |
知道List,Set和Map等對象的用法,知道泛型的用法,並且知道諸如hashCode等的經常使用知識帶你。這部份內容對應本書第3章。 |
第4周 |
異常處理流程和基本的IO處理流程 |
知道try…catch…finally的工做流程,知道基本的IO讀寫操做。會結合異常處理流程開發一些讀寫文件讀寫內存等的程序。這部份內容對應本書第4章。 |
在第2個月裏,你們能夠在掌握上述知識的基礎上深刻了解Java Core的高級知識點,並能夠進入Java Web初級階段的學習,這個時間段的學習進度以下表所示。
表 第2個月的學習進度
學習時間 |
要學的技術 |
應該達到的水準 |
第5周 |
搭建數據庫環境,熟悉JDBC編程 |
安裝好MySQL等數據庫環境,會經過JDBC編寫諸如讀寫數據庫的操做,並且能掌握批處理和預處理等操做。最好能會和事務相關的操做。這部份內容對應本書第5章。 |
第6,7周 |
多線程編程 |
能用多線程協做完成一件事情,掌握至少一種控制多線程併發的技巧(好比Lock),最好能掌握線程池。這部份內容對應本書第7章。 |
第8周 |
基本的Web技術 |
能開發並運行基於Jsp+Servlet+JavaBean+DB架構的簡單項目,並瞭解其中的一些重要技術。 |
在第3個月裏,你們能夠深刻了解Java Web裏比較資深的框架技術,好比Spring MVC和ORM等,這個階段的學習計劃以下表1.4所示。
表 第3個月的學習進度
學習時間 |
要學的技術 |
應該達到的水準 |
第9周 |
Spring的諸如IOC和AOP等基本概念 |
能運行通IOC和AOP部分的代碼,並能結合代碼知道諸如AutoWire等的重要知識點。 |
第10周 |
Spring MVC框架及其基本流程 |
能經過一個簡單的Spring MVC程序瞭解它的組成結構,並瞭解其中各部分的開發要點 |
第11周 |
ORM技術 |
瞭解Hibernate或ibatis的基本開發模式,知道如何經過ORM和數據庫交互。 |
第12周 |
Spring MVC+ORM框架 |
能運行通一個簡單的Spring MVC+ORM框架的案例,並大體瞭解這種框架裏各部分的開發要點。 |
本人一直在上海上一個爲期3個月的政府補貼的Java培訓班(具體名字就不說了,有打廣告嫌疑),就按上述時間點要求學生(很多仍是零基礎的),經實踐下來,很多同窗上完後至少能出去面試初級程序員了。
換句話說,只要你肯了,大概也就3個月的時間(基礎稍微差的同窗最多5個月,若是上心點的,估計也就2個月),即能達到初級開發的水平。
我以前聽過一種說法,說Java培訓學校量產初級開發,根據我所見所聞,不無道理,並且量產對象,學歷甚至能夠是高中,讀過計算機大專的,也寥寥無幾。相比之下,學校通常的同窗基礎要好得多,更應該有能力和信心快速提高本身。
這個你們可能有個認識誤區,好學校高學歷的畢生生在工做後有優點,並非他們多學了幾門課多會了幾個知識點,而是在這些學校裏,項目實踐的機會比較多,實習機會也好找。換句話說,基本功比較強。
什麼叫基本功(俗稱內功)?分兩塊,第一是知識類的。 大學裏學的課很多,但實際對5年內程序員工做有幫助的,可能也就如下的內容。
1 數據結構知識,並且僅限於數組,鏈表,堆棧,隊列,Hash表和樹等知識,圖的知識不怎麼用獲得。
2 算法,用得最多的也就是排序,遍歷(樹鏈表等)。
3 編譯原理中的狀態機思想。
4 網絡通信裏的網絡協議知識點和通信包的發送流程。
5 操做系統裏的一些知識點和算法。
6 Java等編程語言,學校裏通常會更多地偏重知識點,而實際公司裏,要求更多的是動手開發能力。
你們能夠看下,這些其實不怎麼難學,這也是爲何非軟件專業的同窗能轉行,以及培訓學校能量產程序員的緣由。至於說,基礎理論知識阻礙了程序員升級,好比某程序員因爲不熟悉Hash表數據結構從而致使缺少優化能力,這不是程序員沒通過大學裏基礎課的培訓,而是在工做後,沒有主動彌補這方面的知識點。
基本功另一類是關於技能的,分爲以下幾個層次。
1 調試代碼的能力,好比邊上沒有人,你能本身經過debug把代碼調通。
2 能山寨別人代碼的能力,好比你要實現一個JDBC連數據庫的功能,本身不熟悉JDBC的操做,但你能夠從網上找段類似的而後改改實現。
3 學習的能力,比你是作後端的,但須要實現一些基本的前端功能,這你要能經過看資料快速上手。
4 搭建環境和框架的能力,小而言之,在linux上搭建mysql等zookeeper,大而言之,搭建一個nginx+zookeeper+dubbo集羣的能力。
5 能經過看日誌排查問題的能力,好比日誌在linux上, 你能經過grep, less等命令快速定位問題。
6 這個可能比較難點,叫解決問題的能力,好比目前系統性能通常,你得能經過壓測,看日誌等手段看出問題點,而後動手解決。
從上述描述裏,你們能夠看到,這些技能上的基本功,在大學裏能獲得鍛鍊的不多,不少都是在工做後慢慢積累的,也就說,哪怕學校通常,學歷通常,在工做中絕對是有機會迎頭遇上的。
那麼初級程序員該如何提高本身的基本功?實踐是最重要的,重要程度沒有之一,具體來說,怎麼作呢?
1 入門階段,先買本書,建議是紙質書,這樣閱讀效率更高,下載代碼,邊運行代碼邊看書裏的解釋。
剛開始不知道買哪類書怎麼辦?通常能經過出版社審覈的書都不會差。好比就拿Java後端方向,買本Java Core的,一本Web書(含SSM框架),數據庫的書也能夠買一本。因爲邊運行邊看,因此最長3個月能把代碼運行通。
2 在這三個月的過程當中,也能夠看些視頻,視頻裏通常會含代碼也代碼的配置步驟。
3 理論略過,着重看代碼運行。運行代碼時必定別先本身動手,由於剛開始能力弱,本身動手必定會遇到很快坑,這樣多遇到幾回調不通,信心就沒了,就會不了了之了,記得,剛開始時最多能夠在運行通的前提下改別人的代碼,以驗證各模塊和各參數的效果。
4 在看的時候,初級程序員每每會多看些平時用不到的知識點,因此在這個階段,能夠去看下別人培訓班的課程體系,或者看些面試方面的書,這樣就知道哪些知識點不怎麼用到,這樣能節省學習時間。
這樣看書看視頻運行代碼持續3個月後,就具有動手調試代碼和搭建環境的能力了,而後就有進軟件公司幹活的能力了。在這個時間點上,再瞭解上文提到的算法,若是能夠,再經過Java等語言,按數據結構書裏的代碼運行一下,瞭解下基本的數據結構和排序等算法,這樣能力甚至會高於通常學校軟件行業的畢業生了。
經過上述方法積累些理論方面的經驗以後,就得經過作項目來積累實戰經驗了。不少時候,在作完2到3個項目後,非科班出身的程序員和好學校科班出身的程序員動手技能實際上就差很少了,這個時候就得注意積累些「值錢」的技能點了。
第一,尤爲得注意調試問題的能力,好比一個模塊代碼開發好了,怎麼經過dubug或單元測試的手段,驗證模塊沒問題,或者出現問題了能知道怎麼解決。
第二,能經過SQL語句看數據庫,以及經過看日誌等手段,瞭解程序的運行流程,看下是否缺乏功能點,或者出了問題能據此解決。
第三,架構方面,這可能剛開始有些難,但能夠採用MVC的思路,好比看下前端的請求怎麼經過控制器,控制器如何把請求發送到後端,後端作好之後怎麼返回。在此基礎上,能夠看下分佈式部署的實現方式,好比反向代理,分庫分表等方式。
第四,必定得掌握些調優的手段,主要包括SQL語句調優(看執行計劃)和JVM性能調優(經過Jconsole,Dump等手段)。
若是有機會,再瞭解些大數據分析, AI等當前比較值錢的知識點。
不過,不少程序員會僅僅停留在「代碼「 層面,在此以外,你們能夠更開闊思路,掌握些項目管理部署和發佈方面的技能。
1 項目管理方面,好比能夠用敏捷開發的模式,你們能夠了解下敏捷開發的流程。
2 好比項目用Maven管理jar包,在此基礎上用jenkins打包部署,這個流程細節,你們能夠掌握下。
3 java項目開發後,通常會打成jar包或war包,部署到tomcat服務器上,在此基礎上還能夠作些負載均衡等方式,這塊配置步驟,或者tomcat等的細節,你們能夠掌握下。
總之,不管是哪類程序員,掌握了上述技能,並能在簡歷和麪試中充分證實這點,
工做2年後,若是注意積累,好學校和通常學校的程序員差異通常就不大了,可能這時候僅僅剩下「學校名「的差異了,不過話說回來,工做2年後,還得靠學校名來證實本身,這未免也有些可悲。
這時候,思考的出發點就應該從「如何站穩」轉變爲「如何更好的發展本身」。這時,視野就應該從通常公司升級到大廠了。
若是你想積累技能經驗,能夠剛開始選擇個互聯網公司,在其中體驗下這類公司的開發氛圍後,就再想辦法進BAT。如今,外企的吸引力未必有前幾年那麼強,不過也是個好的選項。或者,也能夠選擇個國內大點規模的公司發展,好比證券金融類公司。
若是你能直接進,那最好,或者還能夠經過外派的方式進大公司,這樣幹個兩年,或者有機會轉成正式員工,或者這個時候就有資歷直接進大廠了。
本來打算在週一時就發表本文,但本週公司事情太多,又在整理另外一本書,因此延遲到週五。不過在這段時間裏,我每天回顧文本,也加了些內容,因此「延遲」總算也有些價值。
總結下,若是要迎頭遇上,第一得靠信心,不妄自菲薄,第二得靠勤奮,笨鳥先飛,第三得靠方法,所謂事半功倍。
本文裏提到的方法和技能,若是能對你們有所幫助,請你們幫忙轉發,或者點擊下面的按鈕來「推薦本文」,或者經過評論來參與討論。
本文歡迎轉載,不過請註明文章來源,同時給出本人寫的兩本書的鏈接Java Web輕量級開發面試教程和Java核心技術及面試指南。
再次感謝你們讀完本文。