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