為什么碼農(nóng)不應(yīng)該在面試中同意進(jìn)行編程測(cè)試
當(dāng)今的軟件工程訪談經(jīng)常涉及某種編碼測(cè)試或編程練習(xí),我認(rèn)為這是一件很糟糕的事情。下面我說一下為什么。
懶惰的人
可以很容易地事先記住要求軟件工程師執(zhí)行特定任務(wù),例如編寫算法以生成階乘(非常常見的一種)或?qū)單]鏈表進(jìn)行排序,并且除了候選人的能力外,不提供任何對(duì)候選人技能的見解。死記硬背。您也可以詢問字符" A"的ASCII碼。
許多此類練習(xí)的詳細(xì)解決方案可在各種參考資料中在線獲得,在許多情況下,在包含針對(duì)所有常見采訪編碼問題的算法和特定程序語言實(shí)現(xiàn)的書中。
在一家公司工作時(shí),我正在與一位同事討論他們與一家大型對(duì)沖基金合作進(jìn)行的詳細(xì)面試過程。他們要求他掌握的所有技術(shù)知識(shí)均已從廣泛可用的面試題和答案書中認(rèn)真記住,當(dāng)前員工已將其作為所有面試題的來源。幸運(yùn)的是,他是一名熟練的工程師,但同意接受這一坦率單調(diào)且平常的鍛煉以確保姿勢(shì)。他不應(yīng)該這樣做-不僅浪費(fèi)了他寶貴的時(shí)間,而且也沒有在確定他的能力方面給招聘公司任何東西。一年后,他離開了,無論如何,他們對(duì)技術(shù)水平低下感到厭倦。雇用和持續(xù)無效的項(xiàng)目管理實(shí)踐的標(biāo)準(zhǔn)…
記憶的使用
用特定的編程語言對(duì)算法進(jìn)行編碼也具有相同的理由。沒有某種語法檢查輔助工具(例如編輯器的內(nèi)置代碼完成功能),沒有參考一些技術(shù)文檔或沒有復(fù)制預(yù)先實(shí)現(xiàn)的解決方案,在現(xiàn)實(shí)世界中工作的軟件工程師不會(huì)編寫一段代碼。適用時(shí)。重新發(fā)明輪子沒有意義。
我敢打賭,運(yùn)行當(dāng)今世界上許多系統(tǒng)的代碼起源于Stack Overflow。
實(shí)際上,使用特定編程語言的語法來自使用和熟悉。面試官可能認(rèn)為測(cè)試候選人的特定語言的語法細(xì)微程度是他們理解程度的衡量標(biāo)準(zhǔn),例如,我可以斷言,盡管我使用C語言已有30年了,但我仍會(huì)定期語法錯(cuò)誤。
實(shí)際上,隨著我的軟件工程事業(yè)的發(fā)展以及我對(duì)自己感興趣的語言的熟悉,我經(jīng)常對(duì)C和C ++或Objective-C等語法上的細(xì)微差別感到困惑。這并不是因?yàn)槲沂且晃辉愀獾能浖こ處?盡管有些人可能會(huì)不同意……),而是因?yàn)橹挥刑嗟闹R(shí)可以讓您牢牢記住,并且可以隨時(shí)回想起。
優(yōu)秀的軟件工程師常常不知道特定問題的答案,但一定會(huì)知道在哪里可以找到答案。也許考慮問一個(gè)最佳地點(diǎn)以找到諸如面試問題之類的信息?
常見任務(wù)
我在前面簡(jiǎn)要談到的一件事是不重新發(fā)明輪子。例如,如果您使用C語言工作,并且需要一個(gè)串行端口例程,那么除非情況特別需要,否則您不必從頭開始重寫它。也許您需要一個(gè)JSON解析器,這是一個(gè)非常普遍的要求-除非您是在資源有限的嵌入式板上,對(duì)地靜止軌道上的衛(wèi)星上或在Malbolg中進(jìn)行編碼,否則也許只應(yīng)該從庫(kù)中提取預(yù)先編寫的代碼即可。它可能已經(jīng)使用了很長(zhǎng)時(shí)間,已經(jīng)過全面測(cè)試,并且具有詳細(xì)(正確)的文檔。固體。
在現(xiàn)代軟件工程中,不太可能遇到一項(xiàng)常見任務(wù),即該任務(wù)尚未在預(yù)先編寫的庫(kù)中實(shí)現(xiàn)自動(dòng)化,或者其實(shí)現(xiàn)無法以算法形式廣泛使用。
如果您像我一樣,并且在游戲中主要是由于對(duì)主題的熱愛,那么您可能會(huì)積極尋找那些您正在實(shí)施以前實(shí)現(xiàn)的角色的角色。尋找陌生的,新的世界,新的生活,新的文明……
實(shí)際上,在不遠(yuǎn)的將來,軟件工程師的概念已被代碼考古學(xué)家比作了不止一次,他們主要重用現(xiàn)有代碼,而花費(fèi)較少的時(shí)間來設(shè)計(jì)和編碼新的和新穎的算法。
討論討論討論
我完全贊成找出正在面試的人是否"知道他們的東西",但是我認(rèn)為使用上述任何方法都是毫無價(jià)值的。照原樣說。
例如,關(guān)于現(xiàn)代軟件工程中使用的編碼范例的簡(jiǎn)單討論,是特定語言是否是特定實(shí)現(xiàn)的理想選擇,還是特定軟件工程方法論(我在看著您,敏捷)與之相關(guān)的是更多有意義且令人發(fā)指的話題。
引導(dǎo)討論突出一般領(lǐng)域,看看候選人對(duì)新問題有什么見識(shí),也許還有其他新穎的方法可以解決老問題。他們?nèi)绾慰创挛锏陌l(fā)展,如何開始解決問題。保持開放狀態(tài),遠(yuǎn)離細(xì)節(jié)和細(xì)節(jié)。
關(guān)鍵是討論。確定價(jià)值不僅僅只是在復(fù)選框上打勾,而且不斷讓我感到驚訝的是,許多被認(rèn)為是"崛起"和"領(lǐng)域領(lǐng)導(dǎo)者"的公司仍然落伍于過時(shí),單調(diào)且完全可預(yù)測(cè)的雇用方式,在衡量方面幾乎沒有價(jià)值實(shí)際技術(shù)敏銳度。
人們常說,受訪者應(yīng)與公司面試一樣多地采訪公司。我完全支持這個(gè)。
接受具有一系列確切技術(shù)問題的人員的采訪幾乎總是一個(gè)危險(xiǎn)信號(hào),尤其是當(dāng)他們不想延長(zhǎng)任何一點(diǎn)的討論時(shí)。它通常表明,面試官可能無法完全理解他們的要求,并且任何與他們的腳本所寫內(nèi)容不完全匹配的答案都將被歸類為錯(cuò)誤。
底線
一些公司已經(jīng)改變?yōu)楦玫姆椒?,而其他公司則遠(yuǎn)遠(yuǎn)沒有達(dá)到目標(biāo)。在這里,我敦促軟件工程師同仁不要與那些遵循過時(shí)的招聘慣例并堅(jiān)持編程測(cè)試和練習(xí)的公司合作,尤其是長(zhǎng)時(shí)間的測(cè)試和練習(xí)!
我聽說過一些公司要求在候選人的時(shí)間上完成項(xiàng)目的故事,通常需要幾天的時(shí)間。
其他人則針對(duì)特定語言進(jìn)行通用的"能力測(cè)試",有多種選擇,其中在有限的分配時(shí)間內(nèi)出現(xiàn)一團(tuán)大腦迷霧就等于游戲結(jié)束了!
如果您是游戲新手,那么也許您無法拒絕采訪,我完全理解這一點(diǎn),但是一定要把它看作是一種學(xué)習(xí)經(jīng)驗(yàn)。進(jìn)行動(dòng)作,獲得經(jīng)驗(yàn),盡可能多地學(xué)習(xí),如果工作確實(shí)令人失望,那就繼續(xù)前進(jìn)。隨著您的前進(jìn),您的信心會(huì)隨著您的知識(shí)和經(jīng)驗(yàn)而增長(zhǎng)。畢竟,公司從您那里受益,所以您也必須從公司中同樣受益。
如果你像我一樣是年紀(jì)較大的人,那么請(qǐng)雇用公司-跟我說話。我到過各地,看到過的事情和做過的事情,所有的資格都在墻上和簡(jiǎn)歷上,我很討厭被一些通用的招聘渠道吸引,并反復(fù)測(cè)試我的能力。
如果您認(rèn)為自己是一個(gè)體面的雇主,并且不明白為什么看似優(yōu)秀的候選人會(huì)繼續(xù)退出,那么您應(yīng)該對(duì)自己的雇用作法有個(gè)很長(zhǎng)的了解。
原文鏈接:
https://medium.com/swlh/why-you-should-never-consent-to-a-coding-test-in-an-interview-8e22f5078c7f