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