不想被淘汰,大咖有話說——程式猿一定要學大資料?
程式設計師一定要學大資料嗎?最近我聽到一些程式設計師朋友在問我這個問題,也有一些程式設計師朋友因為考慮轉崗而問到我這個問題。我覺得也許是時候說說我對這個問題的一些看法了。
衡量職場發展的指標
很多初學者,對大資料的概念都是模糊不清的,大資料是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完往哪方面發展,想深入瞭解,想學習的同學歡迎加入大資料學習企鵝群:458345782,有大量乾貨(零基礎以及進階的經典實戰)分享給大家,並且有清華大學畢業的資深大資料講師給大家免費授課,給大家分享目前國內最完整的大資料高階實戰實用學習流程體系
首先,我們都是職場人,在職場中摸爬滾打直到退休。我們都渴望去做有價值的工作,因為工作越有價值,自己的地位越穩固,收入越豐厚,把這個當做追求目標其實無可非議——當然追求其他信仰或情懷的朋友除外。在職場中,我們從年輕的時候開始就有類似的困惑,我們應該做什麼好呢?做什麼更有利長期發展呢?做什麼會讓自己工作更穩定呢?究竟什麼工種、什麼工作能解決我的需求和困擾呢?
從中長期來看,肯定是那些積累性好,或者越老越吃香的工作比較讓人心儀,這應該不難理解。什麼是積累性好呢?那就是,淘汰慢,經驗積累容易形成壁壘,不容易被人輕易趕上。
很多程式設計師沒有安全感的原因很簡單,比如Python語言或者Java語言,你工作了10年的Java程式設計師和一個5年的差距有多大呢?5年和3年的呢?根據我的經驗(或許不夠全面,但是能說明一定的問題),對於那些工作很努力且捨得動腦子的程式設計師朋友來說,工作的前一兩年的進步速度是最快的,可以說是陡升,這時候的積累主要是對語言功能方面的。語言怎麼使用,什麼特性,用什麼類實現什麼功能,這些技巧在這個時間裡相對容易積累。3~5年的時候開始偏重架構,怎麼設計類的繼承關係會讓重用更為合理,工程改動量小,維護成本低,執行速度快,資源消耗小……5年往後則是在3~5年的基礎上更為熟練,一些更注重架構的人可能會去研究虛擬機器的特性,並逐步在很多細節性的問題上有更多的發言權,例如堆疊的分配、執行緒的呼叫特點等。
但是我們觀察一下不難發現,雖然從時間上看,後面的進步看上去非常牛,非常顯檔次,但是在具體實際完成功能性任務的時候顯然幫不上什麼大忙。這樣的人才最後會成為金牌架構師的人也比較少。一是因為供需到了這個環節也就進入末端,架構師的需求和程式設計師的需求顯然不是正比關係。二是還需要自己花極大的力氣去做修煉,成材率還低,這是階段個投入產出比不那麼誘人的工作。而如果一旦由於主客觀原因不能成為架構師,而仍然是一名程式設計師的話,那再和年輕的小朋友們競爭,就顯得有點拙荊見肘了。尤其是在專案上需要用到新的語言或者技術的時候,優勢從何而來呢,這個問題就給很多老程式設計師造成了困擾。
這個問題也並不能說無解,多年的程式設計師生涯,如果一個人肯動腦子的話,肯定還是能夠總結出不少有價值的東西,例如很多有用的程式碼片段,以及很多有用的設計模式,很多輔助自己工作的工具,很多總結出來的設計技巧等等。這些萬變不離其宗的東西會幫助一個程式設計師在職場競爭中獲得一定的優勢,但是時間再久一些,比如到了15年或者20年的時候,這些東西是不是還能跟10年經驗左右的人抗衡呢?這又是個問題了。
說到這裡,我只是想懇切地提醒各位程式設計師朋友,注意積累的問題,以及注意要給自己積蓄足夠的能量讓自己蛻變,化繭成蝶。
大資料產業為何讓人如此著迷
再回過頭來說,程式設計師究竟要不要學習大資料的事情。我覺得思路和剛才差不多,那就是看看在大資料學習的過程中,能不能給我們帶來這種積累性的優勢。這種優勢越大,我們就越值得學習,反之則不必考慮。那麼大資料是這樣一種東西嗎?
我們說,大資料這種產業之所以讓人著迷,之所以被社會所看好,主要的原因是大資料產業最終的目標是為了通過大範圍資料的交換與寫作分析消除不確定性,減小試錯成本——這個才是根本。
大資料相關的工種裡面粗分有開發崗、架構崗、分析崗三種。開發崗和其它語言種類的開發崗一樣,是對語言工具或者工程性工具的使用,比如Hadoop的使用等。架構崗側重的是根據專案特性的不同進行效能調優和穩定性調優等工作。分析崗則是注重對資料的分析和解讀,以及歸納和預測等。
程式設計師朋友們在學習大資料的時候,容易迷茫,現在的框架非常多Hadoop、Spark、Storm、Scikit-learn、Mahout、TensorFlow等,究竟應該學哪個才對自己的職業生涯更有價值呢?我認為,在這個裡面,除了剛剛我們說的積累性好這個特點我們需要把握以外,還有四個字需要注意,那就是“揚長避短”。
對於這些開源框架,尤其是比較火熱的開源框架,是在業界廣泛獲得認可的,生命週期長,供需旺盛,通常可以作為普通程式設計師切入的落腳點。對於Hadoop、Spark這些工具的使用,其實已經是在接觸大資料開發這一工種了。學好用好一兩種流行框架,謀生肯定不是問題了。
對於分析能力比較好的程式設計師,尤其是數學比較好的程式設計師,可以考慮去做機器學習、神經網路(深度學習)相關的一些框架和專案,這類專案的積累性比前面工程性的Hadoop和Spark甚至要更好。從中長期來看,在機器學習和神經網路方面的發展是能夠作出一個垂直領域的“無人裝置”的——凡是“無人”的東西都是改進和發展生產力的,都是會被自己所服務的行業所接納的東西。
而對於專案管理以及其他更高級別的職場人來說,大資料能夠帶給你的就是更多的思維層面和辯證看待資料的邏輯,而且在普及性學習的工作中,你會了解到哪些技術能做什麼,有什麼優勢。這樣的知識對於一個管理者對當前技術形勢作出判斷,估算難度和成本,以及開闊創新中的想象力都是大有裨益的,同樣是有重要積累意義的東西。