自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試時(shí),為什么寫代碼不如讀代碼?

原創(chuàng) 精選
開發(fā)
所有編程工作都更需要代碼閱讀,而不是編寫代碼。

編譯 | 云昭

在招聘開發(fā)人員時(shí),我們需要考核多輪面試來確保候選人的能力合格。在眾多的能力之中,我認(rèn)為,原始編碼能力,幾乎可以說是最重要的品質(zhì)。我可以很快地訓(xùn)練一個(gè)人掌握某個(gè)領(lǐng)域的知識(shí),但即便再廣泛深入實(shí)踐的訓(xùn)練,也很難彌補(bǔ)缺乏原始編碼能力的短板。

那么如何在面試中,較快測試出候選者的原始編碼能力呢?我發(fā)現(xiàn)傳統(tǒng)的 coding 辦法并不好用,反而某些別的方式更能發(fā)掘到人才。

傳統(tǒng)方法的弊端

典型的 Coding 筆試是這樣開始的:“編寫一個(gè)函數(shù),反轉(zhuǎn)字符串中單詞的字母順序?!比缓笤诮酉聛淼陌胄r(shí)或更長的時(shí)間里,候選人在白板上劃掉一些東西(或者也可以是共享的線上文檔)。

這種方法看起來能篩掉不少人,但其實(shí)作用很“弱”,根本達(dá)不到測試能力的要求。

首先,同樣的問題也會(huì)被傳來傳去,考生通常會(huì)非常努力地練習(xí)記憶答案。你是在考核他們的編程技能還是記憶答案的能力?

其次,這些問題通常是“吊詭”問題,需要某種深刻的洞察力才能提出 O(log(n)) 解決方案。在面試的時(shí)間范圍內(nèi),即使是最聰明的候選人,也幾乎從來沒有真正的洞察力。

這樣,面試主動(dòng)權(quán)的天平向有利于面試官的方向傾斜。誰喜歡在法官面前笨拙地編寫代碼,而面試官卻將決定你未來幾年的職業(yè)前景?

最后,在白板甚至文本文檔上編寫代碼既不自然又緩慢。沒有人在白板或記事本上“畫”代碼作為日常工作的一部分。大家真正做的是:在一個(gè) IDE 中用大量的 Google 來編寫代碼。

我在實(shí)踐中是如何做到這一點(diǎn)的

在實(shí)踐中,我面試候選人的過程一般是這樣的:

對于每一個(gè)新的面試周期,我都會(huì)創(chuàng)建一組預(yù)測輸出的練習(xí),這些練習(xí)一開始很容易,然后變得更難。我當(dāng)前的設(shè)置從一個(gè)基本函數(shù)調(diào)用開始,然后是多級(jí)函數(shù)調(diào)用,然后是遞歸,然后是 side effects 。這些通常都是“假裝”的功能,旨在讓應(yīng)聘者迅速取得成功,并為我提供面試剩余部分的一些線索。

對于更高級(jí)的問題,我會(huì)從我寫的東西中提取代碼。目前,我考核的“難題”,是探索對“讀”操作和異步操作的同時(shí)進(jìn)行的抽象能力,其他的,比如閱讀一段未標(biāo)記的例程,它們執(zhí)行大家相當(dāng)熟悉的算法,例如排序或樹遍歷,以及從錯(cuò)誤輸出中查找錯(cuò)誤等。

舉個(gè)具體的例子

在向應(yīng)聘者提問之前,我會(huì)根據(jù)與同事校準(zhǔn)面試題,以便對如何衡量應(yīng)聘者的技能有一個(gè)現(xiàn)實(shí)的期望。校準(zhǔn)這些問題也有助于我完善它們,剔除令人困惑的部分。

在面試開始時(shí),我會(huì)提前解釋:

一、我不是在考核語法知識(shí)??梢园盐耶?dāng)成真人版的“谷歌”,我會(huì)告訴你一些函數(shù)或操作符的功能。

二、我不指望你能完成,因?yàn)闆]人能完成。20 分鐘后我們會(huì)停下來。

三、我也不希望你得到正確的答案。如果答案是錯(cuò)的,我很想看到你回去調(diào)試你的想法。這對我來說和其他東西一樣有價(jià)值。

面試過程如下:

  1. 我展示了一行被注釋的代碼,它將調(diào)用某個(gè)函數(shù)并返回一個(gè)輸出。
  2. 候選者閱讀代碼并預(yù)測輸出。
  3. 我取消對這行的注釋并運(yùn)行程序,這樣他們就可以看到答案了。
  4. 如果答案與他們的預(yù)測不同,他們會(huì)回去解釋原因。

我會(huì)給候選人 20 分鐘的時(shí)間,讓他們盡可能地去運(yùn)行更多的代碼。這給了我額外的時(shí)間去問后續(xù)問題。在面試報(bào)告中,我寫下他們運(yùn)行了多少行代碼,以及他們表現(xiàn)出的優(yōu)勢和劣勢。

顯然,這些編碼技巧并不是面試中唯一需要考查的東西。領(lǐng)域知識(shí)和文化契合度很重要,但我發(fā)現(xiàn),閱讀代碼能很好地剔除那些不具備最重要的基礎(chǔ)能力的應(yīng)聘者。

面試者如何提升技能

每年都有大量的開發(fā)者前來應(yīng)聘,他們可能想知道如何提升自己的技能,以便在這樣的面試中表現(xiàn)出色。我的答案很簡單:多動(dòng)手寫代碼,因?yàn)槌R?guī)的練習(xí)是無法替代的。

如何練習(xí)?最簡單的方法是啟動(dòng)一些你感興趣的、非瑣碎的次要項(xiàng)目。一個(gè)游戲,一個(gè)網(wǎng)站,一個(gè)應(yīng)用程序等等。每周花 4-8 個(gè)小時(shí)研習(xí)這些代碼,讓它成為你喜歡使用的東西,并能引以為榮。此外,這樣也方便應(yīng)聘者將來的面試呈現(xiàn),比如將源代碼放在 github上,以便未來的雇主可以看到候選人平時(shí)的功底積累和工作方式。

希望這能有所幫助。

面試應(yīng)當(dāng)結(jié)合實(shí)際

事實(shí)上,所有編程工作都更需要代碼閱讀,而不是編寫代碼。能夠清晰地思考,并辨別出別人的胡說八道是至關(guān)重要的。

通過讓某人反轉(zhuǎn)字符串或排序數(shù)組來面試他們,簡直是在考核錯(cuò)誤的能力。我不在乎你以前是否見過這個(gè)問題,是否像許多算法測試一樣記住了答案——唯一重要的是你能否思考、理解問題、設(shè)計(jì)和實(shí)施解決方案。能夠閱讀真實(shí)世界的代碼并說出它的優(yōu)點(diǎn)和缺點(diǎn),這比粉碎一個(gè)冒泡式的練習(xí)更能說明你的能力。

基于瀏覽器的編碼環(huán)境使情況變得更糟。在工作中,開發(fā)者所習(xí)慣的編輯器使用自動(dòng)完成的建議、腳本、宏、代碼片段等進(jìn)行調(diào)整。而在代碼考試中,卻經(jīng)常使用 CoderPad 之類的東西,它不具備上述調(diào)整功能,而且不時(shí)會(huì)造成瀏覽器窗口關(guān)閉或其他情況,浪費(fèi)更多的時(shí)間。

后記    

開發(fā)者參與面試時(shí),往往會(huì)被要求手寫一段代碼,這種做法在網(wǎng)絡(luò)上一直持有反對的聲音:“考察的背題能力”、“代碼寫得好,不代表能當(dāng)面寫算法”等等。通過文中“閱讀一段代碼,要求候選人預(yù)測輸出”的面試過程,不失為一種有效的初步技術(shù)篩選手段,能節(jié)省淘汰不適合者的時(shí)間成本。 輸入代碼是工作中最不重要的部分。閱讀、理解和解決問題才是工作中更被重要的能力。畢竟如果讓面試者參加40-60 分鐘的編碼挑戰(zhàn),你實(shí)際上只是在選擇速度最快的打字員。

從這種角度上看,面試時(shí),閱讀代碼比手寫代碼更重要!

責(zé)任編輯:薛彥澤 來源: 51CTO
相關(guān)推薦

2012-07-11 11:05:16

編程

2012-08-20 14:09:29

面試

2020-12-23 13:26:53

代碼麻省理工學(xué)院語言

2014-07-21 13:04:34

代碼

2010-08-09 16:30:53

面試

2020-09-24 06:41:33

通信IT行業(yè)

2010-11-09 10:24:46

面試

2010-08-10 16:21:48

面試薪資

2025-02-25 08:36:56

2020-03-30 16:45:06

代碼看不懂

2022-07-27 11:05:31

面試經(jīng)驗(yàn)

2019-12-23 15:17:21

JVM結(jié)構(gòu)

2021-10-18 05:42:23

代碼編碼開發(fā)

2015-11-23 17:27:19

程序員寫代碼

2013-03-04 09:46:06

2024-08-05 00:00:00

RocketMQKafka磁盤

2010-08-04 14:11:58

面試木訥

2009-02-27 10:30:09

面試聯(lián)想智力

2012-12-28 15:53:53

面試應(yīng)屆畢業(yè)生

2012-08-01 09:23:31

代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)