iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 30
2
AI & Machine Learning

玩轉資料與機器學習-以自然語言處理為例系列 第 30

2017 資料分析師的練成之路

總體來說,2017算是最有希望的一年,從暗不見天日、徬徨錯愕的預期未來中,漸漸看見了一絲曙光。這篇文章除了訴說自己掙扎著逃出苦海的心路歷程之外,主要是希望給予正在同條路上的夥伴們一些分享。

人吶總是這樣
總想把對方改變成自己

2017我做了什麼?

2017年01月 開啟出逃事務所之旅:進入資策會
2017年02月 進入資科人的世界:修習蔡銘峰老師的資訊檢索課程
2017年04月 開始自學Python:以爬下公開資訊觀測站為目標
2017年05月 人生第一場Kaggle競賽:Quora Question Pair
2017年06月 人生第一個網站:「肆‧年」課程檢索系統
2017年07月 人生第一場黑客松:台大黑客松
2017年08月 人生第一個稅務程式專案:SimCorpFinder
2017年09月 習得資料探勘的理論架構:修習沈錳坤老師的資料採掘課程
2017年10月 習得深度學習理論基礎:修習Coursera吳恩達老師Deep Learning課程
2017年11月 人生一個拿獎的黑客松:新竹黑客松
2017年12月 記錄一整年習得的重要技術:ithome鐵人競賽

關於資策會,如何抉擇程式語言?

C#的優勢與劣勢

我在資策會上的課是六個月的C#課程,不過自從離開資策會之後,我就再也沒碰過C#了。推究其原因,C#是微軟開發出來的程式語言,而微軟的專長是「一鍵完成」,因此其在建構桌面、網頁應用程式都極度簡單方便,廣受傳統接案公司所親賴。然而個人發展上,比傾向新創公司以及資料處理相關技能,C#因為其封閉性,皆非這些領域的主流語言,所以後來也就沒有再接觸。

當然,如果你學程式純粹是希望可以找到一份穩定的工作,並且有穩定的升遷管道,C#未嘗不是一個好選擇,不過相對應的他們比較的就是誰比較有經驗?誰比較可以快速串接微軟寫好的各項工具?誰比較快速可以開發出一個網站?整體來說,還是比較穩定而缺乏創意空間的。

如果再選一次,我會不會進去資策會?

我想我還是會進去,不過不會選擇C#,而會選擇Java。會選擇進去資策會的原因有兩點:

第一、資策會一段時間的基礎程式設計訓練,可以督促自己在這段時間內耐住性子把基礎打好,所謂的基礎指得是變數、函式、迴圈、物件導向...等。畢竟剛開始寫程式有一段時間會完全沒有產出跟反饋,是極度煩躁的,如果有一群人可以跟你一起學習、討論這些極度枯燥的問題,當然可以增加自己學習的動力。

第二、網站前後端技術的溝通相當抽象、複雜,資策會內部的老師其實教的滿好,可以比較完整的建構網站技術的基礎知識。假若我沒有機會進去裡面,我想我大概不會有一天可以有耐心建構出一個網站。

當然,資策會也有一些缺點大家可以綜合考慮。畢竟他們以就業作為主要考量,而會去資策會找人的公司,大多是相對傳統的軟體公司或部門,因此他們有些技能需求已經過時或加值性不高了,不過資策會為了迎合廠商需求,還是會花一定的時間教授這些技術。另外,由於裡面有許多後段大學的同學或是二度就業的爸爸媽媽,可能多少有點經濟壓力,不得不說比較少人在這條路上如我想像的有時間、有熱忱。

為什麼會說再次選擇會選擇Java?

主要是因為Java是開源的,許多開源軟體或程式庫就是建構在Java上,舉例來說,Linux系統算是業界非常廣泛使用的Server系統,要在上面跑C#根本難如登天。另外,Java還可以開發android應用程式。當然也有參雜我個人的偏好因素,例如我目前使用到的數據相關的應用程式,底層大多是用Java寫成,一旦發生錯誤,我完全看不懂錯誤訊息,也不知道怎麼Debug。

至於Python與R的討論已經很多,我就不參戰了。
但是我愛蟒蛇!!!

學習寫程式,燃料很重要!

個人覺得在這條路上,支持我努力快速學習的動力,大約是完成某樣作品的期許吧。還記得決定要進入資策會時,很大一個動機便是覺得在事務所兼職那段日子太過苦悶,做的事情大多很routine,便期許自己可以將事務所自動化。因此,在技能點的分配上也都往這方向發展。

順帶一提,在進入這個領域之後,我一直寫程式覺得很像在玩online game,不斷地往自己想要發展的方向累積技能,一個技能約莫兩天到兩周可以累積起來,從程式語言基礎、SQL資料庫、NOSQL資料庫、git、物件導向、html、css、javascript...等。不過大多時候,我並不是每個章節都字字斟酌的理解,把每個技術的細節都理解到淋漓盡致,而是選擇性地汲取我可能會用到的部分,以支持我想做的專案。

不要管自己學得透不透徹、完不完整,先找個專案來做吧!

這樣做有個絕對的好處,就是可以讓你持續有動力學習新技術,並且立即性的將新習得的技術應用在自己的專案上。當然,這過程也會有陣痛期,大多時候是在尋找相關技術的關鍵字,或有些時候甚至不知道有更方便好用的技術,因此常常耗費大量時間在網路搜尋上,有些人會覺得這很浪費時間,不過對我來說,這是一個透徹了解一個技術的優劣的手段,也讓我未來在技術選擇上更有信心。而且,很多時候因為這樣地尋找與理解,你會從根本地知道一門技術的價值以及可能對你專案所創造的貢獻,反而反過頭來用系統性的方式去理解他。

舉例來說,我自己在摸索爬蟲技術的時候,我剛開始甚至從程式語言開始選起,我想要做到爬蟲的功能可能的工具有C#、R、Python(當時還不知道node.js),後來發現Python教材好像比較多,另外與數據分析似乎很有關,因此就選擇了它。起初,我在完全不懂Python基礎語法的情況下,直接學了Python的爬蟲。過了兩周之後,雖然已經有寫出一些可以運作的程式,卻也發現這樣囫圇吞棗太過吃力,後來又安插了約莫一周的時間,把Python的基礎語法有系統性地跑過一輪,一方面可以跟之前程式中看不懂的部分相互對照學習,另一方面我也因為清楚地知道,這個東西學起來之後,我就可以隨心所欲地爬片各式各樣的網站,因此即便無聊透頂也學得很有動力很快。

關於資料分析的一些想法

關於資料技術學習的技能樹,我已經在ithome鐵人的第一篇文章寫過自己的想法,這邊比較想談心態與學習資源的問題。

AI沒有想像中的困難

我剛開始有機會接觸到資料技術是因為蔡銘峰老師的資訊檢索課程,當時已經四年沒有接觸過數學,最近一次接觸的大一微積分也約莫忘光了,因此每堂課下課後,回家都要花大量時間重新複習高中數學的相關章節。但是如果你眼尖一點,你就會發現,其實AI的絕大多數技術只會用到高中數學、以及大一微積分比較簡單的一些知識。甚至有些數學研究比較高深的同學會覺得,資料技術不過就是加加減減,不能算是數學。

如果你高中數學的基礎沒有太差
AI真的沒有你想像中的困難!

很多人喜歡把AI技術比喻為人腦,不過如果你有實際接觸過,你會發現其實AI技術要達到人腦的水準還是有一段非常遙遠的路。而現階段的AI技術,絕大多數的應用也就是透過解釋變數去預測被解釋變數,再說的簡單一點,其實無非就是拿X去預測Y。你可能會懷疑,蘋果的Series可以生產出一個句子,也是用X去預測Y嗎?你可能也會懷疑,有人用AI把所有的畫變成梵谷style,這也是用X去預測Y嗎?答案是對的,資料科學家終究要將這些困難的問題轉換成XY的最佳化問題。

2017最性感的職業–資料科學家

雖然學習這些技術並沒有我們想像中的困難,這門技術的研究成果卻非常性感而富有魅力。剛開始我在接觸資訊檢索時,一如劉姥姥進大觀園,看到什麼都驚艷不已。我發現原來一篇文章可以用向量的形式被電腦讀懂;我發現原來向量夾角,不只能用來計算數學課本上的題目,還可以用來計算兩篇文章間的相似性;我發現文章可以被mapping到空間上的一個點,計算他跟其他篇文章的距離,並將其分類到正確的類別。除此之外,資料採掘課程上的種種分類與分群的演算法,也是各個讓人感恩讚嘆。

現在,我們可以用一年的時間學完資科領域淬鍊幾十年的精華,何樂不為?

當然比起大多數的社會科學領域,只是不斷的用迴歸分析製造論文,要看到真正對於該領域有革新性影響的研究可說是百年難得一見,還記得在財政系待了四年,讓我如此驚艷的理論大約只有兩個,一個是財務管理中的CAPM模型、另一個是計量經濟中的回歸模型。然而,反過來看資科領域,在我一年學習的中,幾乎每周的課程回去消化反芻之後,都有種想法,想問真正發明這些演算法的人究竟是何方神聖,竟然可以想到用這些數學工具解決問題。或許是興趣吧,但是這真的比較吸引我。

有「希望」的環境

不得不說,就我個人的經驗來說,社會科學領域的學習氛圍,大都比較死氣沉沉,真的會看到幾個認真的同學,也大都是傳統國高中的學習模式,因為要考高分、要考公務員,所以我要念書。但是這個領域很不一樣,雖然也不乏興致缺缺、無法轉系出去的學生,不過至少不會整個班上瀰漫著「我的未來在哪裡」的困惑。

從比較溫和的角度來看,在慢慢地汲取各項技能的過程當中,你會慢慢發現你真的有機會可以做很多事,讓這個世界變得更好。想像一個情境好了,假設你問一個社科院的研究生最近在做什麼事情,大多時候的回應可能跟他的專業不太會相關,就算相關也就是準備考試、報告、論文...云云。但是很有趣的是,當你認識一些這個系上比較高年級的同學或是研究生時,你問他最近在幹嘛?我聽過的回答有:

我試著用深度學習的方法自動產生出一套字體。
我創造出了一個自動對抗的貪食蛇遊戲。
我可以把任何畫都變成梵谷的畫風。
我正在將政府公開資料放到GIS系統上。

從比較功利的角度來看,薪資上的落差是非常明顯的,當然這也要跟你原本的科系來比較。不過以我個人為例,財政系的主要出路有二,公務員與會計師事務所。我個人不喜歡穩定的公務員生活,至於事務所...大學起薪34K、研究所38K、第二年40K、第四年50K,這是你花了最黃金的四年打下會計基礎,汲汲營營考取會計師,事務所給你的回報。比較一下,我在資策會畢業的同學,雖然沒有任何工作經驗,一離開資策會就已經50K以上,而且領14個月以上,更不用說第二年年薪就快要破百了。

到了資科領域之後,這個領域比較少瀰漫著「放棄人生」的霾害。

當然,有希望或沒希望都是相對的概念,我不會說其他領域就完全沒有希望,不過就我個人的經驗來說,到了資科領域之後,這個領域比較少瀰漫著「放棄人生」的霾害。

願意「分享」的氛圍

這也是跟商學院或社科院很大的一個落差,在大學的時候,看到許多講者來分享自己的經驗,總是害怕別人把自己謀生的技能偷走,而顧慮東顧慮西,不願意發PPT,禁止拍照攝影...。在我看來,很多時候這種顧慮的產生是來自於學習停滯,因為沒有新東西好學、或是懶得學新東西,所以鞏固既有的知識變得極度重要,當然這也只是我的黑心踹測。但是我想比較實際的問題是,商學院或社科院同學在還沒出校園之前,要對社會上的人才或技能需求有所意識根本難如登天,而這跟業界的不斷的鞏固自己既有知識的城牆疆域,很難說完全沒有關係。

但是回到資科領域,這個領域很酷炫的地方在於,很多東西是開源的、免費的,甚至期待每個人的加入讓整個體系變得更好。你可能會問,為甚麼他們要把自己的成果免費公開出來讓大家使用,說實話我也不是很清楚,可能是純粹的一種「開源」信仰,也可能是期望累積個人的知名度。總而言之,你會發現這個領域實在太多佛心的大神,讓我們可以很輕易地爬上巨人的肩膀,做我們想做的事情。以下舉幾個例子:

  1. 教學資源免費:在學習資訊檢索時,被我們老師稱為資訊檢索領的聖經的Introduction to Information Retrieval,竟然直接在網路上公開PDF檔。另外,你也可以在網路上找到許多免費的教學資源,像是我之前暑假的一個讀書會上的史丹佛大學的公開課CS224: Natural Language Processing with Deep Learning

  2. Git和GitHub免費:Git是一個非常強大的版本控管工具,這個工具可以幫助你非常輕易的儲存每一次的變更,也可以做變更前後的差異比較,更可以讓你做時光機回到每一次變更前的狀態。而GitHub是網路上讓你存放Git資源庫(repo)的一個平台,這個平台如同Google Drive跟OneDrive很像,不同之處有二,其一他必須透過終端機的方式連結,其二上傳過大容量的單一檔案比較麻煩。但是無論是Git或是GitHub目前為止都是免費的,除非你想要做權限控管,不讓別人看到你的code(其實有學生信箱也是免費啦)。

  3. Kaggle的分享氛圍:Kaggle是一個被Google買下的大數據比賽平台,在這個平台上許多知名企業都會上去辦比賽,而且獎金一般都不低,當然相對應的要得獎則是相當的不易。我第一個參加的Kaggle競賽Quora Question Pair,Quora是一個外國很大的問答網站,如果Yahoo奇摩知識加或是知乎,而比賽項目是,給你兩個問句,要你預測這兩個問句問的意思是不是一樣的,如此一來便可以幫助他們偵測到重複的問題。
    而這個平台上最令人驚訝的不只是上述好玩的競賽模式,更是他的分享氛圍。其實要做完一個完整的資料分析流程從資料取得、處理、訓練到預測真的不容易,不過你可以上去這個平台看一下,在比賽進行當中,一般都會有人出來分享一些比較基礎的作法,裡面除了程式碼外,還會配上細緻的解說,讓你瞭解這場比賽一班都從哪個方向開始做,或是有哪些基礎工具可以使用,讓你可以在幾天內上手這個資料集。

雖然很難真的在這場比賽中得獎,不過能夠建構對於初心者如此友善且高效率的學習環境,真的令人為之驚嘆。

文憑與技能的抉擇

說到這邊其實有些傷感,還記得剛上大學的時候遇到一個經濟學的假設,大約是我這輩子覺得最實際的經濟學假設「Education As A Signal」。意義大約是說,讀大學只是一個象徵,完全不代表你待在大學這段期間你會真正學到什麼有用的技能。其實也滿實際的,雖然不能夠很武斷地一概而論,不過我敢說我大學八成以上的課對我的人生沒甚麼幫助。

Education As A Signal

以前在打辯論比賽是常常在討論「興趣跟麵包應該如何選擇」,很諷刺地我們慢慢發現文憑已經不再等於麵包的象徵,而現在的討論也已經慢慢轉向「虛偽的文憑跟扎實的技能應該如何選擇」,其實我的用字已經很明確的表示我自己的抉擇。我在研究所的一年半期間內,只真正上過自己所上的一門課「國際智慧財產權法」(有一部分是因為他全英文授課,可以好好訓練一下自己的英文能力),未來也不打算要畢業。

不過我自己覺得,這並不表示我浪費了一年半的時間,回頭過去想想,其實我覺得滿值得的。這一年半的時間中,我花了半年時間學習英文,花了一年時間學寫程式,而在學習寫程式的過程中,不僅善用了政大資科系的資源、修習他們的課程、與他們的教授合作專案,也結交了統計系、資科系、應數系的一群朋友,一起在這個領域討論與學習相關的議題,最終也成就了在文章初始時所羅列2017年完成的各項事蹟。

當然,這過程當中會有很多的自我質疑與矛盾,很多時候你會想,這樣的摒棄文憑的任性與傲嬌,究竟是追求興趣的義無反顧?或是摸索職涯發展的各種可能?甚或是汲汲營營的迎合市場需求?反正無論如何,目前為止還沒有絲毫後悔的感覺。至於我鼓不鼓勵其他同學跟我走上同樣的道路,我只能說我就嘴嘴,我也沒辦法為你們的人生負責。一如當初許多會計師說過「國際租稅人才缺乏」、「事務所現在很缺T型人才」,但即便我認真成為了他們想要的樣子,他們也不會為我負責。

最後...

這篇文章純粹是個人看法,也不普遍適用在每個人身上,更無法反映絕大多數學生的價值觀。另外,如果你們有甚麼樣的議題,希望我可以分享看法,可以在底下留言,我會視情況回答。


上一篇
分類演算法實作-LineBot專案
下一篇
周末特別節目-預測文章頭十天的瀏覽人次(限iThome鐵人文章)
系列文
玩轉資料與機器學習-以自然語言處理為例31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言