有點瘋狂的 SA 與 Programming 啟蒙

相信許多玩電腦的人都走過幫人組電腦的時光,那大概是從我國二開始(這樣故事好像起得有點早)。高中因為對電腦與網路的濃濃熱誠接手了 BBS 的管理,也開始了 System Administrator 與 Programming 之路(就說學生時代也有故事可講)。FreeBSD、各種 Linux distros 都玩遍,幾乎各種 services 都架設管理過,也嘗試開始改 BBS 的 C Program。沒有上過程式課,看了一晚的 C++ Primer 就去參加程式競賽,勉強寫了幾題,最後敗在看不懂 compiler error messages 在說什麼。O’Reilly 或其他電腦的書一本一本的看,舉凡 Bash、Perl、Apache、ProFTPD、Postfix、Bind、LDAP、Thinking in Java、C++ Primer、C programming language (K&R) 等等。接下來 intern 與外面的 case 大多都是 SA 相關。也經常泡在網路上回答 linux 相關問題,最瘋狂的時期,全電腦的套件都是自己 compile 且想辦法最佳化。玩遍 window manager、desktop env,甚至在純 console 沒有 X-win 下生活過幾個月。當時天真的目標就是想當個 Debian maintainer,或是弄個自己的 distro。

從 IC design 轉向 embedded system

到了大學,莽莽撞撞地進了電機系。但不可否認 programming 相關的課程才是我的菜,凡是相關的課程都覺得特別有興趣。經常翻 glibc 的 code,看看高手都怎麼寫的。例如要學 qsort 比較好的寫法當然翻出 glibc 來看。因為都使用 GNU/Linux 平台,當然也以 GNU development tools(如 makefile, gdb) 為主要的開發環境。 Visual C++ 是完全生手。沒事寫 CGI 做網頁,也寫些小玩具玩。由於學校的課程也不算輕,在高度壓力之下,我停止了瘋狂的 unix-like 平台專研。除此之外,在大四前都還是專心學習 IC design,修課都以 IC design 為重心。直到大四跑去輔資工系,才深深覺得走錯科系了,修課都覺得相當輕鬆且有趣。仗著對 Unix-Like SA 的多年經驗,覺得玩 embedded 搞 base system 與 kernel 非常上手,也就玩了一陣子。寫寫 C 也寫寫 Asm。整個大學歷程 Asm 也算簡單玩過三套。

NLP 與大資料處理

因為朋友的因素,幫忙 NLP 實驗室弄 Hadoop cluster 以及管理。接著也就誤打誤撞的進了那個實驗室做研究助理。跟著開始學 NLP 的一切,寫 Python、修課、看論文、發 paper。當然還有實驗室的許許多多雜事和 server 的管理。(當時實驗室約有 14 台 server,其中 8 台是 cluster,兩台 windows server)。由於 NLP 的資料通常也相當大,原始資料動不動幾十 GB,計算結果可能上 TB。正好跟上了所謂的「大數據」時代,開始玩了很多大資料處理的 framework 與 tool、platform。我們實驗室的研究成果也經常做成網站,所以也接觸了更多 web backend、frontend 的東西,舉凡 MongoDB、MySQL、DynamoDB、HBase、Redis 等 database 或是 Django、Flask 等 framework,什麼紅什麼好玩就用什麼。做研究之餘也要讓成果能漂亮有效的 demo。相較於業界要固守原本的 code base,在學界隨時想玩新花樣都能玩。之後覺得繼續待著有無訪,就推甄進研究所繼續留在那個實驗室,一樣的工作繼續做。只是修課有學分,畢業有證書,渾渾噩噩的日子繼續過。一間實驗室學習,總是專心在某個題目或方向的琢磨。不廣,甚至很狹隘。不太會管其他領域常用的方法,甚至同樣是 NLP 的技術也不見得會廣泛涉略。發 paper 找到 gap 比學習一個真的很有效很棒的作法來得重要。實驗室的作業模式通常也都比較各顧各的,缺乏能共同成長的同儕,一代換一代,不容易有經驗累積。研究之路並不開心,很難有團體共同目標。儘管自由,但不相關的學校雜事很多。軟體開發技術也比較守舊,新 tool、新 libray、當紅的 framework 大概都只有自己在玩。待久了,能學習的越來越少,要付出的卻越來越多。當然也就迫不及待想離開了。

(回應上一篇分享。我在實驗室推過 git 但失敗了,在學校常常收到信寫「麻煩給我 XXX project 的最新版 code」,然後我就把 public github repo link 再寄一次過去 Orz。對方就 download zip。Orz Orz。真的入手的第一套 VCS 是 svn,然後是 hg。)

廣泛涉略學習 Data Scientist 技能

原本以為做 NLP,在 machine learning、datamining、information retrieval、big data 已經算玩不少了。研究所修課也都著重在相關領域。畢業後自然走向 Data Scientist 的路。但就在差不多時候,去上了 Andrew Ng 的 Machine Learning。就跟這篇 LEARNING MACHINE LEARNING – SOME PERSONAL EXPERIENCE(Arthur) 文章的作者一樣,儘管 Andrew Ng 的課不算是很深的課程,但卻讓我推翻了自己,驚覺我以前根本不熟 ML 啊。過去太縮限自己在 NLP 的常用方法,而忽視了太多可能。許多 Algorithm 也只是用而不知其所以然。

roadtodatascientist1

圖片來源 http://nirvacana.com/thoughts/becoming-a-data-scientist/

這是一張很可怕的圖,列了 Data scientist 所需要的技能。也跟所在公司狀況有關,一人 Data Scientist + Data Engineer。知識的廣度比絕對的深度來得實在,永遠不知道下一個 task 需要怎樣的技能。在 Andrew Ng 的 ML 課之後。也持續的找 online course 或是書籍學習,諸如 online learning、deep learning、statistics。Backend、ETL 與 visualization 的東西也持續在涉略。在必要的聚會與休閒之外,所有下班時間都在進修。但相較於在學時,就業後的學習更有方向也更專心(畢竟時間少)。這時候想到似乎翟大講的,工作需要的技能進修也要算薪水,這時候真的很希望是這樣啊。

未來與總結

接下來的計劃?恐怕是換到一個能夠成長更快的環境。就跟實驗室一樣,能學習的東西比不上付出時…。但對於工作的選擇,我也很希望我手上的產品是我有興趣且認可的。算是標準 3C 控心態?

整體來說是一個很繞路的學習經歷。玩過很多東西,也不斷轉換跑道。有時候興趣太廣泛並不是件好事。因為好奇想學走了歪路,也因為好奇想學找到了新的興趣,因為對許多事都很好奇,永遠不知道下一步在哪。現在擅長的技能也不代表就是未來想走的路。提早起步也要同條路一直走才能真的走得快,只能說看了很多單走一條路看不到的風景,只是風景也只能留在心裡。

再走一次就會走對路嗎?很難說。眼界需要環境培養,更早參加社群、多認識人、找真的有興趣有挑戰的 intern、case 做做,或許能及早培養眼界,找到自己真的想走的路,瞭解自己不足之處。與其怪環境沒給你機會,不如怪自己沒趁早往外走。

關於本文作者

d2207197 Soft & Share Slack站友

如果您想與本文作者互動與討論, 歡迎到 https://github.com/softnshare/careergrowth/issues/5

為什麼會有這篇文章?

目前我們在Soft & Share slack的 forum-careergrowth 辦一個很有意義的活動, 大家一起來分享自己的學習成長, 職場, 脫離舒適圈等經驗, 如果您看了我們的分享, 您覺得您的故事也可以對大家有所啟發, 歡迎來加入我們的分享行列

最近招募中的網路讀書會

Soft & Share 的讀書會願景- 我們希望每本書會是一個連結, 最後這個連結會形成一個網路, 這個網路甚至會誕生新的創意, 這個新的創意會對社會有幫助, 讓人的生活變得更美好. 

目前招募中的網路讀書會請參考這個頁面

相關課程與書籍

喜歡我們的分享嗎? 記得使用以下社群分享按鈕分享給您的社群朋友吧!

Join the conversation! 1 Comment

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

分類

大數據分析, 人工智慧機械學習