寫在開頭的話:找工作的目標和方向
一位親戚家的年輕人馬上要從大學畢業了,學軟件工程,參加過培訓的普通新手程序員,不是TOP學校也不是高學歷,于是找我這十幾年的老程序員給點建議。
說來慚愧,自己當年也不過是對計算機的興趣加上熱血和自信,稀里糊涂就跳上了程序員的車,干了十幾年還是個程序員,還真沒怎么仔細考慮這車究竟是怎么開的。這要是沒畢業就一堆大公司排隊等著簽協議的高手,咱也不敢給啥建議不是。也曾經三言兩語地給過其他一些新人建議,也有同學借鑒了建議通過改進找到了工作。所以這一次準備借這個機會把這事總結一下,拿出分析程序邏輯的勁頭,仔細講一講我的建議。
職業的人生從程序員開始,找工作是第一步。新手程序員,剛從學校畢業或者剛培訓出來,沒有什么實際工作經驗,然后很多崗位又需要經驗,這是新手最大的挑戰。
職業的人生從程序員開始,找工作是第一步。新手程序員,剛從學校畢業或者剛培訓出來,沒有什么實際工作經驗,然后很多崗位又需要經驗,這是新手最大的挑戰。
所以,新手找工作的目標,就是積累實際工作經驗。說白了,就是看看實際工作中怎么寫代碼,怎么面對需求,怎么分析業務,怎么做項目,怎么開發工程,怎么與同事協作,怎么處理線上問題,等等很多類似的,怎么應對工作的方方面面。即使是經歷了培訓機構的培訓,所謂的真實項目、實戰培訓,歸根結底那也是培訓,和實際的工作情況其實遠遠不一樣。
但是,單純為了積累工作經驗去找工作也是不夠的,找工作也要有方向。有人在這時候去大談職業規劃,我覺得對于萌新來說,就是揠苗助長。這第一個工作,是從學校進入社會的第一步,往往還處于懵懂的狀態,這時候連對職場的體會都沒有呢,談職業規劃真的有點空中樓閣的味道。
作為一個程序員,思考的方式很重要。第一份工作只是一個入門,但會影響一個人思考的基礎方式,個人以為最應該在乎的是開發是否正規,所以找工作的方向,是去更規范更前沿更有競爭力的互聯網或者軟件公司。這些公司往往正在經歷或經過了市場的殘酷考驗,形成了比較完整正規的協同開發能力,不會像手工作坊那樣稀里糊涂地做事。
接下來具體講講,萌新程序員找工作的三板斧。
第一板斧:簡歷
簡歷這東西,是突破企業招聘的第一個敲門磚,其他的面試啊答題啊編程能力啊都在后面呢,所以對簡歷這一項必須重視。
很多公司在招人的時候,HR或者獵頭要先篩一輪簡歷,然后技術人員才篩,然后通過了才通知去面試。甚至更大的公司很可能篩簡歷的輪次就多一兩輪,找工作首先要通過這幾輪簡歷篩選。
總的來說,簡歷這第一板斧的基本原則是:點到不點破。
第一是要點到。總結自己的特點,自己的優勢,就是能引起看簡歷的人興趣的那些亮點。對于萌新程序員來說,本來項目經驗不夠豐富,亮點不夠明顯,所以這份簡歷不能太籠統,要寫出自己最擅長的,最好確確實實相對于其他人是優勢。
技術方面,不能概括起來一句“擅長Java開發,熟練使用IDEA、Eclipse”就完事了,總是有自己學得比較深入的技術點,舉個例子,比如Spring Boot項目搭建、Spring MVC應用、數據庫事務配置、SQL索引處理,這種技術點最好能寫上幾個,既豐富內容,也證明自己確實學習過。
工作方面,首先是工作任務描述要具體,不能是類似“多個功能接口與頁面的編輯”這種千篇一律的話,盡可能寫出具體成果和業績來,其次既然是做技術,很大程度上工作經歷也是為了考察技術點,所以工作中采用了什么技術,應用了什么框架,有哪些技術邏輯,尤其是能夠顯示自己特點的證明,每一個點要盡可能點到,讓這些點去佐證你相對于其他人的優勢。
有人說如果不寫這些,等面試的時候再具體說不一樣嗎?還真不一樣,因為面試官拿到這樣一份沒有具體點的簡歷,他不知道你的側重是啥,亮點是啥,優勢在哪里,那為啥要讓你來面試呢?要知道面試官面試一個人,成本其實很高的。
第二是不點破,畢竟是簡歷而已,不用針對具體的技術點說詳細的原理,也不用細致地講過程。剛才說的那些技術點和工作業績,寫在簡歷上是為了證明你的優點,也是為了引起面試官的興趣,讓面試官產生進一步了解你的想法,就能通過篩選進入面試環節了。不過既然寫了,那就必須準備好面試時候被提問。凡是點到的點,都要準備應付面試被考察,技術點要盡可能深入一些原理,工作經歷要有完整的作事邏輯,這個之后再細說。
還有,簡歷不要有錯別字。不要小看這件小事,因為認真,是優秀工程師的第一要求。我曾經上各個官網去核對每一個技術名詞的寫法包括大小寫,MySQL,MyBatis,RabbitMQ,等等。
第二板斧:做題
因為應屆畢業生儲備的知識和經驗一般不會有多豐富,所以考察基礎能力和發展潛力是側重點。
之前我做Team Leader的時候,也在負責招聘各級工程師,也曾多次作為面試官參與應屆畢業生的統一招聘。個人以為,對于一個萌新工程師的最基本要求就是,能通過一些思考,寫出邏輯清晰完整、開發習慣良好的代碼。其他的各種技術點,知識點,項目經歷,都是加分項。當然,面試都是擇優錄用,所以首先一定要給面試官展現出你能達到最基本要求,而且最好能展現你的知識和你的努力,獲取一些其他的加分項。
在應屆畢業生招聘過程中,無論是企業要求,還是我個人意見,一般都要出一到兩個筆試的算法題,這個算法題的作用就是考察一個人的思考能力,看邏輯是否清晰完整,考慮事情是否周全,能不能把業務落實到代碼上。用我的話講就是,能夠用代碼來展示清晰完整的邏輯,是程序員的基本功。
因為很可能是紙上手寫答題,所以不一定非要寫得非常完整非常精確,但一定要通過這道題的回答,體現出你盡量清晰的邏輯,盡量完整的思路。最好要對基本的數據結構和算法有一些了解,比如基本的鏈表操作,基本的排序算法,這些很可能對解題有著重要的幫助。如果是計算機以及軟件類專業的,更應該熟悉這些數據結構和算法,因為這都是大學的課程學過的。如果說一個計算機專業的畢業生,連鏈表是什么東西都一臉懵逼,面試官會滿意嗎?
所以,如果面試之前沒有積累過,那還是要針對性地找一些題目去練習,當然難度我覺得不用太高,一般難度的就可以了,畢竟一般的企業招聘也不是在招天才是不。練習的目的也不是記住這些題的答案,甚至是解題技巧,而是通過這些題去鍛煉一下自己的思考能力和積累一些解題的思路方法。真到了面試答題的時候,有類似的題當然好,即使沒有,也能展示出自己積累的分析能力和解題能力。
第三板斧:面試準備
針對某一項語言種類的招聘,比如Java工程師,肯定要問Java的一些基礎知識,比如LinkedList和ArrayList,我做面試官時,一般不會太深入,底層原理之類的一般不會問應屆生,因為這是知識性質的,學校可能沒有專門學過。但是有的面試性質可能不一樣,因為有可能企業要招的是一個比較懂Java的人,所以面試官會問比如一些涉及Java的內部原理的東西。
準備崗位所需的基礎知識,也是一個重要的點。因為沒有更多的項目能力和更高級的架構能力去考察,所以面對應屆畢業生,很多面試官會看重知識點,即使這個點看起來是死記硬背的,比如Java里HashMap的默認初始容量這種。往往是要通過這些貌似死記硬背的知識點篩選出基礎知識更扎實牢固的同學,所以這些知識吧,其實面試之前還是捋一遍,也可以網上搜一搜Java的基礎知識題做一做,把基礎的知識點搞清楚。
前面曾經說過,簡歷點到不點破的那些點,在面試準備的時候都要搞明白,盡可能深入,既然寫到了簡歷里,就要有針對性的準備好。面試官在瀏覽簡歷的時候,很可能會考察這些點的實際執行情況、技術原理、實現方式、一些常見問題的處理等等具體的內容。這不僅僅是驗證一個人在工作中確實是有這些經驗的,更重要的是體現一個人深入鉆研的精神和能力。
在我個人做面試官的過程中,都會看候選人的簡歷去挖掘一些點,比如簡歷上說到事務,我可能就會問一些事務的基礎,在程序里事務是如何配置的,如何實現的?比如簡歷上寫的用過緩存,我可能就會問緩存雪崩是怎么回事,該怎么辦?緩存擊穿了又怎么辦?比如說簡歷里涉及到消息隊列的,我可能會問,有沒有可能丟消息,有沒有可能重復消息,這些怎么處理?
所以作為候選人,不能簡單地說我用了什么框架,配置一下參數,能做出來功能,就行了。如果能和面試官講講,這里用了什么技術,為什么要這樣配置,為什么通過框架配置了就行,那面試官就會覺得你不僅知其然還知其所以然,自然是要加分給你的。
最后的話
最后就是面試了,面試的過程其實就是告訴面試官,我能行,然后想辦法證明我能行。所以首先要自信自己能行,沒有通過面試不要緊,其實有的時候真的看臉,不是不夠優秀,是緣分沒有到而已。
面試本身也是實踐的過程。面試做過的題,盡可能記下來,不管是會的還是不會的,回來仔細思考解答。和面試官的溝通過程,也要認真復盤。到實踐中去總結學習,積累經驗,逐步提高。
當然,所謂三板斧只是我個人的建議,也只是個基礎。有很多我曾經面試過的應屆畢業生都非常優秀,已經遠遠超出了三板斧提到的能力。所以最重要的還是好好學習天天向上,我相信,只要努力,找一份起步的新手工作并不難。所謂江山代有才人出,長江后浪推前浪,希望大家能更快地成長,更快地發展,更快地找到滿意的工作。