適逢程序員佳節(jié),來(lái)聊聊自己從無(wú)到有成為程序員的歷程以及自己的經(jīng)驗(yàn)吧。
懶人目錄:
簡(jiǎn)單歷程。
入門。
修煉。
小結(jié)。
歷程
高考結(jié)束,確認(rèn)自己大學(xué)最想學(xué)有兩個(gè),當(dāng)醫(yī)生和學(xué)計(jì)算機(jī),雖然最后陰差陽(yáng)錯(cuò)地到了數(shù)學(xué)專業(yè),但考慮到自己的喜好,仍然在考慮往計(jì)算機(jī)上走,最直接的方式就是拿了計(jì)算機(jī)專業(yè)的培養(yǎng)計(jì)劃,加上自己的計(jì)劃開始寫起代碼,大一過(guò)了計(jì)算機(jī)等級(jí)考試二級(jí)(說(shuō)起來(lái)你們可能不信,VB),除了課程要求的c#、c++、matlab和mathematica,還整了點(diǎn)java,加入了一位老師的項(xiàng)目組,開始了第一個(gè)項(xiàng)目。
有意思的是因?yàn)轫?xiàng)目組的需求我還寫過(guò)爬蟲和前端,前端整過(guò)jade/less體系,也玩過(guò)現(xiàn)在可能還在用的react/redux體系,搭配的是antd UI庫(kù),至于爬蟲就是最經(jīng)典的request或者是urllib,后續(xù)還玩過(guò)類似線程池的操作。
雖然有著對(duì)計(jì)算機(jī)的熱愛(可能這就是一種浪漫吧),但是也不想自己的數(shù)學(xué)白學(xué)了,所以一直在探索計(jì)算機(jī)和數(shù)學(xué)結(jié)合的道路,當(dāng)時(shí)有幾個(gè)備選項(xiàng),運(yùn)籌、數(shù)值計(jì)算,然而有意思的是,16還是17年,發(fā)現(xiàn)了機(jī)器學(xué)習(xí)的機(jī)會(huì),于是學(xué)習(xí)了當(dāng)時(shí)最新潮的《統(tǒng)計(jì)學(xué)習(xí)方法》,也翻閱了可能被聊到更多西瓜書,結(jié)合同一位老師的方向,最后選擇了統(tǒng)計(jì)。
后續(xù)就是學(xué)術(shù)和技術(shù)兩條腿走的過(guò)程了,還接觸了NLP這個(gè)東西,結(jié)合機(jī)器學(xué)習(xí)本身依賴的場(chǎng)景,把NLP當(dāng)做自己研究生期間的主修技能,當(dāng)然,時(shí)間序列、最優(yōu)化方法也是自己的研究方向,所以自己這塊還不錯(cuò)吧,于是就走上了算法這條路。
在這也借此機(jī)會(huì)感謝我的這位老師,還有幾位帶我入門的學(xué)長(zhǎng)學(xué)姐,還有工作(含實(shí)習(xí))過(guò)程中的領(lǐng)導(dǎo)、導(dǎo)師和同事。
入門
首先來(lái)聊聊入門,寫代碼入門在包括我在內(nèi)的很多人看來(lái)是一個(gè)非常痛苦的過(guò)程,甚至和第一次接觸數(shù)分(大部分人應(yīng)該是高數(shù))其實(shí)是類似的,我歸結(jié)的原因是這個(gè)東西和我們習(xí)慣的思維是不一樣的,我們可能很容易就能想到、能理解、很顯然的東西,卻偏偏還要從中挖掘出新的東西來(lái),例如一些重復(fù)工作我們照著做就行,卻需要抽象為一個(gè)循環(huán),這肯定是非常困難的。
第一門語(yǔ)言,還是非常建議系統(tǒng)地學(xué)一遍,完整地理解下面幾個(gè)對(duì)新手來(lái)說(shuō)比較陌生的概念,其實(shí)但凡是教程,這些東西真的都會(huì)有提到:
數(shù)據(jù)類型(Python可能沒有那么明顯,但是其實(shí)報(bào)錯(cuò)看多了大家都很容易理解了)
分支(條件)和循環(huán)。計(jì)算機(jī)能夠理解的最核心邏輯。
面向?qū)ο螅惻c對(duì)象,甚至到繼承。
完整地學(xué)完這些,其實(shí)你會(huì)對(duì)整個(gè)計(jì)算機(jī)語(yǔ)言體系有非常完整的認(rèn)識(shí)。那么學(xué)習(xí)過(guò)程中,還有幾個(gè)建議吧。
報(bào)錯(cuò)不可怕,不堅(jiān)持自己邊查邊改才可怕,久病成醫(yī),是程序員技術(shù)進(jìn)步的重要體現(xiàn),從報(bào)錯(cuò)中學(xué)習(xí)和定位解決問(wèn)題的能力必須提升,這也應(yīng)該是你和非程序員對(duì)比最鮮明的地方。
自己多動(dòng)手,只有動(dòng)手了才知道哪些地方是真的是沒有理解。
多看文檔多查資料,一份材料沒看懂就多看幾份,看看別人的經(jīng)驗(yàn)。
自認(rèn)為學(xué)會(huì)以后,可以開始復(fù)現(xiàn)別人的東西,哪怕一個(gè)小項(xiàng)目也好,論文也行。
知其然知其所以然。在做項(xiàng)目過(guò)程中效率優(yōu)先所以可以先知道怎么做然后在看背后的原理,但是在事后還是要總結(jié)這么做背后的原理,后續(xù)相似的問(wèn)題自己就能快速解決。
多做筆記,尤其是一些比較難解的問(wèn)題,記錄下來(lái),日后就不容易犯了。
另一方面,有關(guān)算法方面的入門,雖然技術(shù)迭代更新地很快,當(dāng)時(shí)word2vector都是一個(gè)非常新潮的東西,現(xiàn)在bert都爛大街了,但是時(shí)至今日,我仍然建議大家從簡(jiǎn)單的開始學(xué)起來(lái),機(jī)器學(xué)習(xí)基礎(chǔ)(仍然推薦統(tǒng)計(jì)學(xué)習(xí)方法)和基本的深度學(xué)習(xí)幾塊積木(Dense、CNN、RNN等等),nlp領(lǐng)域則基本的word2vector、fasttext之類的還是都要了解,推薦系統(tǒng)則還是要了解協(xié)同過(guò)濾等一系列的操作,現(xiàn)在絕大部分的工業(yè)界場(chǎng)景還輪不到這些學(xué)術(shù)界的飛機(jī)大炮派上用場(chǎng),最基本的其實(shí)就足夠了,或者說(shuō)大部分場(chǎng)景其實(shí)并不能充分發(fā)揮學(xué)術(shù)界飛機(jī)大炮的優(yōu)勢(shì),例如如果這個(gè)分類問(wèn)題可能并不需要注意力機(jī)制,則加了注意力其實(shí)意義不大。
其實(shí)熟練了以后,后續(xù)的學(xué)習(xí)推進(jìn)起來(lái)并不會(huì)很難,畢竟自己有了一定程度的學(xué)習(xí)能力,這點(diǎn)能力將會(huì)在自己的職業(yè)發(fā)展起到非常重要的作用。
修煉
自己如愿以償?shù)刈呱献约河?jì)算機(jī)和數(shù)學(xué)結(jié)合的道路——算法工程師。之前其實(shí)聊過(guò)自己一年的工作經(jīng)驗(yàn):ML&DEV[8] | 算法在崗一年的經(jīng)驗(yàn)總結(jié)。這里著重聊聊自己怎么提升,這也是自己嘗試突破幾次瓶頸的收獲吧。
算法線技術(shù)修煉
算法方面的修煉,我的理解往往在于兩點(diǎn)——深度和廣度。
深度,我理解是支撐一個(gè)人更好地完成任務(wù)的前提條件。在于對(duì)一些小領(lǐng)域甚至特定任務(wù)的理解,一方面了解基線方法,能在接到任務(wù)后快速調(diào)集需要的資源就能快速有個(gè)基線,然后能快速調(diào)整達(dá)到所需目標(biāo);另一方面要知道前沿的技術(shù)方案,無(wú)論是論文還是業(yè)界分享的方案(這也是我現(xiàn)在把文章類型分成了),一定要堅(jiān)持看。
廣度,廣度是支撐一個(gè)人能完成更多任務(wù)的條件。無(wú)論是出于晉升,還是出于自己的能力,都要求自己具備完成更多事情的能力,故步自封或者只求深度會(huì)讓自己未來(lái)的選擇變得很窄。至于提升的方式,還是多看論文和文章,且要不要設(shè)限,不要覺得與自己無(wú)關(guān)所以就不看,可以步步為營(yíng)地走出舒適區(qū),例如會(huì)文本分類了,可以試試NER問(wèn)題,還有相似度問(wèn)題,慢慢拓寬自己的知識(shí)疆土。
總結(jié)起來(lái)就是兩點(diǎn):
認(rèn)真學(xué)習(xí),各項(xiàng)前沿的東西都要接觸,同時(shí)要扎實(shí)好基礎(chǔ)。
工作后要注意總結(jié)和補(bǔ)充,要把因?yàn)楣ぷ骶o急而忽略的知識(shí)及時(shí)補(bǔ)充總結(jié)起來(lái)。
不設(shè)限,定制好學(xué)習(xí)策略,不斷探索未知,這是一個(gè)做技術(shù)的人該做的修煉。
技術(shù)線的修煉
算法工程師首先是一個(gè)工程師然后才是算法,所以技術(shù)是算法的立命之本,有各種厲害的算法不會(huì)落地,就和有腦子沒手一樣,不能產(chǎn)出了。那么技術(shù)線的修煉有哪些:
首先算法設(shè)計(jì)的技術(shù)都要了解。常用的python肯定要懂,sklearn、tensorflow、numpy之類的要熟練,尤其是tensorflow,迭代更新很快,對(duì)初學(xué)者其實(shí)我并不會(huì)要求tf2要會(huì),但是如果已經(jīng)入門了,開始工作了,我還是希望能盡快學(xué)會(huì)keras這套新生態(tài),如果是不會(huì)1,那tf.nn、tf.layers這套也要嘗試了解。
工程和服務(wù)相關(guān),python要自己會(huì)包裝一個(gè)簡(jiǎn)單的服務(wù),理解服務(wù)的是基本原理和運(yùn)作方式,這是理解整個(gè)架構(gòu)的基礎(chǔ),當(dāng)然,在項(xiàng)目的推進(jìn)過(guò)程,要逐步把java和c++學(xué)起來(lái)。
希望大家還是能了解數(shù)據(jù)領(lǐng)域的操作了。巧婦難為無(wú)米之炊,對(duì)算法而言米就是數(shù)據(jù),數(shù)據(jù)怎么來(lái),希望大家要了解,數(shù)據(jù)工程方面的技術(shù)希望大家能盡可能懂,技術(shù)點(diǎn)上就是hadoop、spark、hive之類的,架構(gòu)上就是了解數(shù)據(jù)的流轉(zhuǎn)過(guò)程,在線數(shù)據(jù)怎么到算法模塊,離線自己需要的特征能不能落到自己的特征表。
數(shù)據(jù)結(jié)構(gòu)可以說(shuō)是技術(shù)的能量,缺了事情就推進(jìn)地很慢。
總結(jié)
說(shuō)實(shí)話,上面說(shuō)的很多,其實(shí)上面我能想到這么多,個(gè)人認(rèn)為最重要的一個(gè)點(diǎn)就是——主動(dòng)。主動(dòng)溝通獲得學(xué)習(xí)進(jìn)步的機(jī)會(huì),主動(dòng)總結(jié)找到自己的問(wèn)題所在,主動(dòng)學(xué)習(xí)自己的不足,主動(dòng)為自己的學(xué)習(xí)和進(jìn)步進(jìn)行規(guī)劃。很多時(shí)候,主動(dòng)能為自己獲取更多主動(dòng)權(quán),而不要把主導(dǎo)權(quán)交給別人,其實(shí)不主動(dòng)拿主動(dòng)權(quán)就是再把這個(gè)東西交給別人了。換個(gè)角度反思下,自己是不是在嗷嗷待哺等導(dǎo)師給你方向給你論文,自己是不是在等著有人告訴你該學(xué)什么,自己是不是在等著老大給你活干。
就聊到這吧,大家共勉。
責(zé)任編輯:xj
原文標(biāo)題:【經(jīng)驗(yàn)】聊自己非計(jì)算機(jī)專業(yè)做程序員的經(jīng)驗(yàn)
文章出處:【微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
JAVA
+關(guān)注
關(guān)注
19文章
2952瀏覽量
104495 -
程序員
+關(guān)注
關(guān)注
4文章
949瀏覽量
29746 -
計(jì)算機(jī)語(yǔ)言
+關(guān)注
關(guān)注
1文章
15瀏覽量
9379
原文標(biāo)題:【經(jīng)驗(yàn)】聊自己非計(jì)算機(jī)專業(yè)做程序員的經(jīng)驗(yàn)
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論