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