程序員:為什麼大公司要設置這麼高的門檻?


程序員:為什麼大公司要設置這麼高的門檻?


目前一般的大點的公司,往往會在招聘時(尤其在招聘3年以下工作經驗的程序員時)會設置學校的門檻,比如需要211或985相關專業畢業。這裡我無意貶低不在這個範圍的程序員,相反在本文裡還將根據我所見和我所聞,為這些同學給出發展的建議。

首先我用我的切身體會給大家予以足夠的信心:我最近呆的都是一些不小的公司,雖然在招聘時有上述的門檻,但事實上,在3年左右的正式員工裡,大約30%是一般學校,或非科班出身,在外派的員工裡,這個比例會高到70%左右,而且,每個組平均每年有3個左右轉正的名額。所以,出身一般的程序員,只要有足夠的勤奮度,而且方法得當,絕非就一定低人一等。

程序員:為什麼大公司要設置這麼高的門檻?


恕我直言,在學校和學歷方面稍微欠缺的同學裡,我有見過能力很強的,但平均綜合能力確實不如好學校。(這裡如果我說高於好學校,說出來也沒人信)。 不過對於勤奮的同學來說,並非是能力不行,而是努力的方法和方向不對。對於這批敬業勤奮的同學,我非常敬佩,所以在這篇文章裡,我將專門分享些相關的提升技巧。

一、為什麼大公司要設置學歷和學校的門檻

平心而論,為什麼有這樣的設置呢?

第一,能進好學校的同學在之前的學習過程中已經證實了自己“綜合能力強“這個特質;

第二,好學校畢業的同學,一般基礎能力比較紮實,比如數據結構算法操作系統編譯原理等,不僅理論經驗,不少還有實訓經驗。


程序員:為什麼大公司要設置這麼高的門檻?


在前進的過程中,我們必須認清自己,所謂知己知彼百戰不殆,但認識自己絕非是讓我們妄自菲薄,而是明白自己的短板,歸納一下,在招聘時,一般會對這批程序員重點考核如下的要點(這其實就是目前普遍存在的短板):

1、是否有實際的商業項目經驗?

2、基本功是否能達標?比如是否熟悉鏈表Hash表的基本數據結構,是否熟悉排序等基本的算法。

3、學習能力,團隊協作能力以及責任心等是否達標?

其實歸根到底就一點:如果程序員在大學畢業前,有過實際的項目經驗,比如做過兼職,或在學校裡幫老師幹過商業項目經驗,這能一定程度上彌補學歷學校和專業方面的劣勢,而且,如果做項目的時間足夠長(一般1年左右),而且項目裡用到的技術和公司職位需求比較匹配,而且候選人動手能力強,一些規模不大的公司甚至會忽視學校等方面的因素。

二、如何讓自己有個不差的起點

程序員:為什麼大公司要設置這麼高的門檻?


程序員在踏上社會後前兩年的發展,會比較重要。這裡給出的建議是,如果你感覺學校和學歷會成為障礙,可以找個規模一般但乾的活和你的職業發展相關的工作,如果萬不得已,不得不幹銷售等之類的工作,但一定得讓自己乾點和編程相關的事情。下面給出些我見到過的案例:

案例1:小A本科畢業後,學校一般,能力屬於中下。不過他找了個外派公司,外派進了一個規模比較大的公司,在其中發展了2年,用項目經驗沖淡了學校的因素,後來就跳槽進了一個大公司,從初級開發做起,平時也經常學些知識,目前在升級到高級開發的路上順風順水。

案例2:小B學校一般,也大專學歷,但在大三期間已經在軟件公司實習,積累了一些基本的開發能力,畢業後就憑此順利進入到一箇中型公司做開發,至少能在社會上站穩腳跟。

案例3:小C大專學習,專業是理科,但和軟件關係不大,後來參加一個軟件培訓,積累了些技能,目前至少也能在公司裡做軟件開發的活。

在這個案例中,我絕非說一定得通過培訓學校,其實在培訓學校是用錢買時間買學習方法買項目經驗,如果你自己毅力足夠,靠自己看視頻運行項目,也能達到類似的效果。

案例4:我在面試時就看到不少簡歷,候選人學校學歷都一般,3年後,絕對有能力挑戰大公司的職位,而且公司更看重這些同學靠前3年工作積累的項目和技能經驗。

總結一下,如果學校學歷都一般,那麼該採取哪些措施呢?

程序員:為什麼大公司要設置這麼高的門檻?


1、最好在畢業前,進入軟件公司實習。這可以靠學校推薦,更得自己去找。學校裡的一些老師,會和外面公司合作,大家就可以找這些老師幹活。或者就到處投簡歷,工資看著要,以積累項目經驗為主。

2、平時可以適當放鬆娛樂,但就更得自己瞭解項目經驗。比如,通過視頻等方式,自己搭建一個框架,或者用python搭建一個數據分析平臺,這種案例多多益善。

3、準備簡歷時,一定得增加商業項目的經驗,同時靠刷面試題積累面試經驗

這裡也給大家交個底,我在上海,上海軟件公司數量多不勝數,往往一個樓裡就有5,6家,而且,小型或中型的公司,出於節省成本的考慮,往往只會看項目技能和基本功,不怎麼看學校和學歷。其實每個城市都一樣,所以要找工作,或者是不差的工作,絕對沒問題。

三、只要勤奮了,任何時間點都不算晚

在龜兔賽跑裡,最讓人痛心的不是兔子在中途睡覺,而是烏龜自暴自棄。天道酬勤,但如果自己都失去信心或貪圖玩樂,那真就沒人能幫你了。

在學校裡,就該去積累項目經驗,或自己通過運行代碼熟悉框架技能。不過如果已經不慎錯過學校裡的時間,但現在想迎頭趕上,只要努力了,什麼時候都不晚。

這裡給出些關於Java方面自學的途徑和時間點。

表1,第1個月的學習進度:

程序員:為什麼大公司要設置這麼高的門檻?

在第2個月裡,大家可以在掌握上述知識的基礎上深入瞭解Java Core的高級知識點,並可以進入Java Web初級階段的學習,這個時間段的學習進度如下表所示。

表2,第2個月的學習進度:

程序員:為什麼大公司要設置這麼高的門檻?

在第3個月裡,大家可以深入瞭解Java Web裡比較資深的框架技術,比如Spring MVC和ORM等,這個階段的學習計劃如下表所示。

表3,第3個月的學習進度:

程序員:為什麼大公司要設置這麼高的門檻?

本人最初就是在北京上了一個為期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。現在,外企的吸引力未必有前幾年那麼強,不過也是個好的選項。或者,也可以選擇個國內大點規模的公司發展,比如證券金融類公司。

如果你能直接進,那最好,或者還可以通過外派的方式進大公司,這樣幹個兩年,或者有機會轉成正式員工,或者這個時候就有資歷直接進大廠了。

八、總結

總結下,如果要迎頭趕上,第一得靠信心,不妄自菲薄,第二得靠勤奮,笨鳥先飛,第三得靠方法,所謂事半功倍。

最後,小編給大家分享一份編程學習從入門到精通的全套學習資料

轉發此文,關注並私信小編“學習”馬上免費領取

程序員:為什麼大公司要設置這麼高的門檻?

程序員:為什麼大公司要設置這麼高的門檻?

相關推薦

推薦中...