知乎 | 一年半的時(shí)間成為算法工程師,這可能嗎?
點(diǎn)擊上方藍(lán)字,關(guān)注并星標(biāo),和我一起學(xué)技術(shù)。
最近在知乎里面看到了一個(gè)很有意思的問題,提問的同學(xué)是這樣說的:
今年研一,感覺自己什么也不會(huì),導(dǎo)師完全放養(yǎng),2個(gè)月沒見過面,從入學(xué)到現(xiàn)在一個(gè)學(xué)期快結(jié)束了總共見了5次面,沒有項(xiàng)目,沒有指導(dǎo),哎 想做機(jī)器學(xué)習(xí)方面的工作,距離明年秋招還有一年半,目前在看C++primer,然后學(xué)一學(xué)數(shù)據(jù)結(jié)構(gòu)和算法,同時(shí)再學(xué)校李航的《統(tǒng)計(jì)學(xué)習(xí)方法》,但是感覺很吃力;另外面試肯定需要介紹項(xiàng)目經(jīng)歷,這方面又太欠缺,不知如何是好,輾轉(zhuǎn)反側(cè),徹夜難眠。求助各位大佬,我該如何準(zhǔn)備,才能拿到一個(gè)算法offer?
感覺自己什么也不會(huì),導(dǎo)師放養(yǎng),又想要拿一個(gè)offer,但時(shí)間有限,只有一年半。我想,很多同學(xué)在碩士階段可能都有這樣的困惑。本來(lái)這是一個(gè)很好的問題,但讓我遺憾的是,高票回答聊的都是項(xiàng)目經(jīng)驗(yàn)、競(jìng)賽、簡(jiǎn)歷、LeetCode這些。感覺沒有一個(gè)達(dá)到點(diǎn)上的,所以今天和大家聊聊這個(gè)問題,希望可以對(duì)迷茫當(dāng)中的同學(xué)們有點(diǎn)幫助。
一
為什么說上來(lái)就回答應(yīng)該刷項(xiàng)目經(jīng)驗(yàn)、LeetCode的回答不在點(diǎn)上呢,先不說這些舉措究竟有多大的用處,單說這樣的答案本身就是不對(duì)的。因?yàn)檫@只是知其然而沒有知其所以然,我們知道要刷LeetCode,但是不知道究竟為什么要刷,它究竟有什么用。我們知道要刷項(xiàng)目經(jīng)歷,但不知道要刷什么樣的項(xiàng)目,又要刷到什么樣的程度。這些建議看似非常明確,但是背后有著非常巨大的未知,貿(mào)貿(mào)然去做,反而會(huì)陷入迷茫。
如果我們把一年半拿到offer看成是目標(biāo)的話,我們首先要做的不是立即行動(dòng),而是先對(duì)目標(biāo)進(jìn)行背景調(diào)查、搜集信息,對(duì)它積累足夠的了解。之后再來(lái)分析目標(biāo),拆解它的必要條件。最后再?gòu)倪@些必要條件出發(fā),把滿足這些必要條件當(dāng)做是目標(biāo),再來(lái)進(jìn)行同樣的分析。
我不知道這位同學(xué)為什么想要做算法,不知道他出發(fā)的初心。但是當(dāng)我們做出職業(yè)方向的選擇的時(shí)候,我們是需要一個(gè)強(qiáng)有力的心理支撐的。就是你究竟為什么想做算法?你覺得算法工程師都是干嘛的?它在互聯(lián)網(wǎng)公司當(dāng)中起到的作用是什么?
只有這三個(gè)問題想清楚了,才不會(huì)陷入迷茫,也不會(huì)將來(lái)入行了之后發(fā)現(xiàn)和自己當(dāng)初想的不一樣而后悔。
二
那算法工程師究竟是干嘛的呢?
很簡(jiǎn)單,這行的作用就是推動(dòng)業(yè)務(wù)的發(fā)展。調(diào)參、訓(xùn)練模型、復(fù)現(xiàn)paper……這些只是手段,不是目的。核心的目的還是業(yè)務(wù)的增長(zhǎng),提升業(yè)務(wù)指標(biāo)。其實(shí)也不只是算法,幾乎所有技術(shù)崗位的本職都是這個(gè)。所以為什么我之前會(huì)說技術(shù)驅(qū)動(dòng)的公司只是一個(gè)口號(hào),實(shí)際上幾乎所有公司都是業(yè)務(wù)驅(qū)動(dòng)的。
問題來(lái)了,既然使命是推動(dòng)業(yè)務(wù)增長(zhǎng),那么業(yè)務(wù)是什么?
電商的搜索、推薦、廣告算不算業(yè)務(wù)?自動(dòng)駕駛算不算業(yè)務(wù)?機(jī)器翻譯、語(yǔ)音識(shí)別是不是業(yè)務(wù)?如果讓我回答,第一個(gè)肯定是業(yè)務(wù),第二個(gè)勉強(qiáng)算,第三個(gè)更偏技術(shù)。當(dāng)今算法領(lǐng)域幾大方向,推薦、CV、NLP,你會(huì)發(fā)現(xiàn)只有推薦是和業(yè)務(wù)強(qiáng)掛鉤的。CV和NLP都不直接關(guān)聯(lián)業(yè)務(wù),比如CV做圖像識(shí)別,圖像識(shí)別只是技術(shù),我們把圖像識(shí)別用在安保上,安保才是業(yè)務(wù),圖像識(shí)別本身不算。NLP也是一樣,單純的NLP技術(shù)不算是業(yè)務(wù),大廠當(dāng)中往往把NLP用在提升搜索、推薦的效果上,搜索、推薦是業(yè)務(wù),NLP不是。
這就是我為什么推薦大家選擇推薦的原因,除了技術(shù)本身門檻相對(duì)較低之外,另外一個(gè)很重要的點(diǎn)是它距離業(yè)務(wù)很近。想要入行,最起碼得知道,你想要做哪一塊業(yè)務(wù),在這一塊業(yè)務(wù)當(dāng)中算法是如何起作用的,又涉及哪些知識(shí)和技能。到這里基本上沒涉及技術(shù),你可以理解成對(duì)這個(gè)行業(yè)的一個(gè)背景調(diào)查。
搜索推薦不談了,拿CV舉個(gè)例子,如果是電商領(lǐng)域,CV大概會(huì)有這么幾個(gè)作用。一個(gè)是以圖搜圖,也就是基于圖片的搜索;一個(gè)是鑒黃、風(fēng)控,對(duì)違規(guī)的商品、圖片進(jìn)行識(shí)別;一個(gè)是圖片分析提取特征,比如說商品的封面圖的質(zhì)量,對(duì)用戶的吸引力等等。然后再是針對(duì)這些場(chǎng)景需要用到的一些技術(shù),比如CNN、YOLO等等。
業(yè)務(wù)方向選好了,那么對(duì)應(yīng)的技術(shù)棧也就清楚了。比如說你選了推薦,那么你剩下的就是了解當(dāng)今的推薦系統(tǒng)是如何運(yùn)作的,它當(dāng)中設(shè)計(jì)那些技術(shù),算法的作用是什么,用到哪些模型,哪些技術(shù),又有那些前沿的paper。你順著這條線一路摸下來(lái),按圖索驥,網(wǎng)上大神的博客讀一讀,各類專欄看一看,走馬觀花,了解一個(gè)大概,基本上就可以做到心中有數(shù)了。
三
當(dāng)你對(duì)于崗位的業(yè)務(wù)以及對(duì)應(yīng)的技術(shù)棧都有一個(gè)大概的認(rèn)知之后,就可以開始動(dòng)手學(xué)習(xí)了。
學(xué)習(xí)的順序也比較明確,首先是機(jī)器學(xué)習(xí)基礎(chǔ),再是深度學(xué)習(xí)基礎(chǔ),再是對(duì)應(yīng)領(lǐng)域的一些前沿技術(shù)和paper。這是一個(gè)萬(wàn)金油的路徑,不管你想要從事什么領(lǐng)域的算法,都可以沿著這個(gè)路徑出發(fā)。這里我有一個(gè)建議是機(jī)器學(xué)習(xí)相關(guān)的模型淺嘗輒止,知道原理和推導(dǎo)過程就可以了,不需要細(xì)扣。一個(gè)是因?yàn)檫@些模型基本上淘汰用不到了,另外一個(gè)反正之后準(zhǔn)備面試的時(shí)候也是需要復(fù)習(xí)的,再加上一些模型的細(xì)節(jié)很容易忘,比如SVM的推導(dǎo)過程什么的,所以前期學(xué)習(xí)的時(shí)候可以適當(dāng)寬松一些。
根據(jù)我個(gè)人的經(jīng)驗(yàn),機(jī)器學(xué)習(xí)基礎(chǔ)再加上深度學(xué)習(xí)的基礎(chǔ)這兩個(gè)加在一起三個(gè)月綽綽有余。業(yè)務(wù)相關(guān)的技術(shù)和論文篇幅也并不大,以推薦領(lǐng)域舉例,如果只是學(xué)習(xí)技術(shù),不涉及實(shí)戰(zhàn)的話,我個(gè)人感覺三個(gè)月也綽綽有余。這兩項(xiàng)加在一起也不過用了半年的時(shí)間。只有再用半年的時(shí)間去刷一些實(shí)戰(zhàn)經(jīng)驗(yàn),比如kaggle當(dāng)中的比賽,比如騰訊、阿里舉辦的各種比賽等等。
最后剩下的半年才是刷LeetCode和算法題,復(fù)習(xí)鞏固一些機(jī)器學(xué)習(xí)的基礎(chǔ)(SVM、隨機(jī)森林、決策樹)這些,準(zhǔn)備實(shí)習(xí)面試。真能拿出半年的時(shí)間來(lái)準(zhǔn)備,每天花兩個(gè)小時(shí)刷5題,LeetCode前300題刷上個(gè)三遍問題不大。剩下的時(shí)間海投簡(jiǎn)歷,看看面經(jīng),復(fù)習(xí)一下學(xué)過的基礎(chǔ)。不說板上釘釘,至少找到一個(gè)還不錯(cuò)的實(shí)習(xí)機(jī)會(huì)問題不是很大。
只要能拿到實(shí)習(xí)的機(jī)會(huì),基本上就算是入行了,后面的校招路會(huì)好走很多。就算一下子進(jìn)不了大廠也沒有關(guān)系,先進(jìn)個(gè)中小型企業(yè)打磨技術(shù)和能力也未嘗不可。
尾聲
簡(jiǎn)單總結(jié)一下,學(xué)技術(shù)是為了應(yīng)用在業(yè)務(wù)當(dāng)中,算法尤其如此。所以首先應(yīng)該找到從業(yè)的方向,找到自己想要從事的領(lǐng)域。有了方向之后再根據(jù)對(duì)應(yīng)的要求來(lái)進(jìn)行學(xué)習(xí),等學(xué)得差不多了,也有了一定的實(shí)戰(zhàn)經(jīng)驗(yàn)之后,再是刷題準(zhǔn)備面試。我自己當(dāng)初轉(zhuǎn)行的時(shí)候只用了幾個(gè)月,一年半的時(shí)間真的完全夠了。路走對(duì)了,只要能堅(jiān)持下來(lái),成功率絕對(duì)不低。
千萬(wàn)不要盲目,上來(lái)就刷LeetCode,就啃一些模型,搞了半天也不知道這些東西學(xué)來(lái)干嘛的,這就本末倒置了。
好了,今天的文章就到這里,感謝閱讀,喜歡的話不要忘了三連。
