我有個程序員朋友,在深圳工作。他曾經(jīng)幫公司面試過一些工程師,也要求現(xiàn)場手寫代碼。有一次,在一個招聘會上,公司有個職位是嵌入式軟件工程師,有一些看著還不錯的應(yīng)屆生投了簡歷,為了做一輪刷選,我那朋友就讓他們現(xiàn)場寫一段代碼,實現(xiàn)流水燈功能。
如果是做過單片機相關(guān)的開發(fā)和調(diào)試,一定會寫得出來,因為這是單片機入門的第一個基礎(chǔ)實驗。而我那朋友,考查的并不是他們書寫的語法或格式,而是他們解決問題的思路,只要代碼中體現(xiàn)了左移或者右移的算法,就可以通過。
結(jié)果有些出乎意料,只有少數(shù)幾個應(yīng)屆生寫得出來,所以就只允許他們進一步去公司面試。
你看,用不著大張旗鼓的給面試題,只需要手寫個簡單的代碼,就刷下了一部分人。
所以,你的問題中,程序員面試被要求手寫代碼,真的行的通嗎?
其實,這不僅行得通,而且還是大部分公司面試程序員時常用的一個方法。理由如下:
一、面試官考查的并不是你的語法,而是你的思路
就像我的朋友一樣,讓求職者手寫代碼,真不是刁難他們,而是為了甄別更優(yōu)秀的求職者。在這種情況下,面試官往往會忽略手寫代碼的語法等錯誤,只要思路、所用的關(guān)鍵函數(shù)正確,基本就算是通過了。
而一行代碼都寫不出的人,肯定是沒有“手感”,這種手感,指的是經(jīng)常調(diào)試軟件培養(yǎng)的那種思維保持能力,一旦你沒有接觸過相關(guān)知識點,那么你肯定無從下手。
有人會問,那上機測試來考查不行么?
這也可以,但一旦上機測試,就不會是這么簡單的題目了,而且往往花費更多的時間;再說,上機測試,就會提出更高的要求,比如說不能有語法錯誤,要實現(xiàn)正確結(jié)果等,就不是面試官想要考查的重點了;最后,上機測試可以“作弊”,這種作弊,指的是他可以多測試幾次來驗證,然后反向推導(dǎo)出正確的步驟,這明顯違背了面試官的初衷。
所以,手寫代碼是最快、最好的方式之一。
二、手寫代碼,最能體現(xiàn)一個人的能力
如果一個求職者能當場寫出代碼,并得到正確的結(jié)果,那么,他對代碼、算法的臨場應(yīng)變能力還是很強的,在平時工作中,效率也是有保障的。
很多人對程序員有誤區(qū),認為他們寫代碼的時候,就應(yīng)該像影視劇中的黑客一樣,噼里啪啦敲一陣鍵盤,顯示屏不斷的滾動刷新黑底白字的英文,就能迅速得到想要的結(jié)果。
現(xiàn)實是,很多程序員寫代碼時,需要通過百度搜索等手段查閱很多資料,有些代碼甚至是復(fù)制粘貼得來的,調(diào)試看起來遠沒有那么酷。
在這種情況下,一個人能在電腦上寫出代碼,并不一定能手寫出來;反之,能手寫出思路、步驟、關(guān)鍵算法等部分的程序員,在電腦上寫代碼也一定如魚得水。
所以,手寫代碼,更能體現(xiàn)一個人在沒有外界或電腦的幫助下,自己獲取結(jié)果的能力。而這個能力,是面試官更看重的。
三、如果被要求現(xiàn)場手寫代碼,該如何應(yīng)對?
如果面試官要求你手寫代碼,該如何應(yīng)對呢?可以參考以下方法:
就像上面說的一樣,面試官考查的并不是結(jié)果,而是你實現(xiàn)方法的思路,所以不要糾結(jié)于結(jié)果,而是把重點放在實現(xiàn)過程,把過程厘清,更能體現(xiàn)自己的能力。
一段代碼的靈魂,本質(zhì)上就是它的算法。如果你的算法得當,哪怕你寫錯語法,都沒有關(guān)系。但是如果你的算法不合理,即使你字寫得再好、語法再沒錯誤,也入不了面試官的法眼。
有時候,面試官想考查你是否會多種方法來解決同一個問題。在這種情況下,你可以嘗試寫下幾種不同的實現(xiàn)方法,然后給出他們之間的優(yōu)劣,這更能贏得面試官的青睞。
總之,手寫代碼不像很多人想像中的那么復(fù)雜,相反,它反而能簡化面試流程,節(jié)省大家的時間。作為求職者,你需要在意的,也不是它的結(jié)果和語法,而是實現(xiàn)過程和方法,只要把握住以上說的幾點,基本上都能通過。
這就是我的看法和建議,希望對你有幫助。
@焱公子,十年500強,專注寫職場,每天與你分享職場干貨與成長心得。