#原來沒那麼簡單
#那些年我們做過的工作Part2
🎉「恭喜你/妳入選了!」
一場因緣際會💡,得知原來還有這樣的工作
一陣激烈競爭🤼,入選成為電視購物的新人
一點難以言語😓,告別了這一段奇妙的際遇
這一場差一點點成為購物專家夫妻檔的奇幻旅程☄,雖然時間不長,但也是一段歷練,帶給我們很多,學到了很多...
😤「原來一切都沒有想像中那麼簡單!」
🎙「EP28-那些年我們做過的工作Part 2~什麼!?還要海選!?原來沒那麼簡單,你所不知道的主持工作!購物專家夫妻檔駕到!」
✅Apple Podcast:https://reurl.cc/Q7dX85
✅Google Podcast:https://reurl.cc/l0L7b9
✅KKBOX Podcast:https://reurl.cc/v5n6bk
✅SoundOn:https://sndn.link/00ff77/B9uNUp
✅Spotify:https://reurl.cc/Kx63zq
✅Listen Notes:https://reurl.cc/xgZ7Y5
🖥YouTube頻道影音版:https://youtu.be/q0MWEkBPnu8
#差一點打對台的購物專家夫妻檔
「那些年我們做過的工作part2」的推薦目錄:
- 關於那些年我們做過的工作part2 在 林林夫妻 Facebook 的精選貼文
- 關於那些年我們做過的工作part2 在 [心得] 資料科學工作/ 技術交流Meetup Part.2 - 看板Soft_Job 的評價
- 關於那些年我們做過的工作part2 在 林林夫妻- #原來沒那麼簡單#那些年我們做過的工作Part2 🎉「恭喜 ... 的評價
- 關於那些年我們做過的工作part2 在 你所不知道的主持工作!購物專家夫妻檔駕到! 的評價
- 關於那些年我們做過的工作part2 在 Part 2: 接力篇 的評價
- 關於那些年我們做過的工作part2 在 如何为Rust 语言做贡献| Part 2 - Rust精选 的評價
那些年我們做過的工作part2 在 林林夫妻- #原來沒那麼簡單#那些年我們做過的工作Part2 🎉「恭喜 ... 的推薦與評價
原來沒那麼簡單#那些年我們做過的工作Part2 「恭喜你/妳入選了!」 一場因緣際會 ,得知原來還有這樣的工作一陣激烈競爭 ,入選成為電視購物的新人一點難以言語 ... ... <看更多>
那些年我們做過的工作part2 在 你所不知道的主持工作!購物專家夫妻檔駕到! 的推薦與評價
那些年我們做過的工作 「恭喜你/妳入選了!」一場因緣際會 ,得知原來還有這樣的工作一陣激烈競爭 ,入選成為電視購物的新人一點難以言語 ,告別了這一段奇妙的 ... ... <看更多>
那些年我們做過的工作part2 在 [心得] 資料科學工作/ 技術交流Meetup Part.2 - 看板Soft_Job 的推薦與評價
<< edit:本文同步刊載在Medium,隨個人喜好可至網頁版閱讀:https://goo.gl/XYjC4D
【前言】
本文主要內容為Data Science相關,並涉及大量個人經驗和觀察;這是做Data約莫五年
多的小心得,而這些經驗來自電商、零售或平台服務,並沒有純R&D的經驗。希望帶
你走過一趟能讓你身歷其境;我也會用整篇文章嘗試去回答「我這樣準備夠了沒?」這個
經典問題,也歡迎各位版友分享自身經驗或看法。內文將從心理素質和學歷及技術背景來
討論這個行業。另外,有個小假設,如果是前文已提及的事情,我會以大家都知道這些事
情的前提下繼續討論,恕我不重複自己 (DRY)。
上篇回文提到「最近爬文內建主題過濾器,一堆標題直接略過」,以SEO的角度來思考,
我的標題可能下的有點差;但本著隨緣分享的心情,這篇我就維持原標題了,讓有興趣的
人自己看到即可。
【 約5400字,平均閱讀時間13分鐘 】
本文為第二部分,文章主要面向想入行或是對Data工作感到好奇的版友。
有興趣的版友可以隨自己喜好隨意看看。
- 心理素質
首先,先不論你對Data Science的想像是什麼,Data Team,特別是Data Scientists,絕
不是個奇怪的數學社團。在這裡每個專案都有他自己的目標函數(Objective function),
這並不只是數學上,也包含到底能帶來多少商業價值。躲在角落動動筆和腦、寫寫Code、
發現或使用Model,大概只有30%的重要性是在做這個吧。我想說的也不是你常看到的
Data creation及Data clean,他們的確是佔了很大時間及重要性,我稍後會回到這個主
題。
做Data的思維應該要像是做科學般的嚴謹,又要有商業上的彈性,他跟工程師沒兩樣,沒
比較高尚也沒那麼特別,我們都在「發現問題」和「解決問題」。在理論與現實間如何搭
橋,數學、Domain Knowledge和Coding就是解決問題的手段。然而「發現問題」才是我們
的大挑戰,這其中包括了:我們如何將日常語言定義為嚴謹問題、是否能合理的做基礎假
設而不導向失真、又或者是如何定義才能幫助你完成目標...等等,畢竟很多事情並非那
麼直觀。我很喜歡一個在學習高微時助教舉的著名例子:錯誤的假設能讓你「證明 0 > 1
」。這種反直覺非常的自然,你也許覺得沒什麼困難去察覺,但當我們透過複雜的Model
、數千萬筆的資料加上千行的Code產出了結果,試問我們還可以允許多少錯誤假設?而又
能多自然的發現結果是違反直觀的?那些明顯如 0 > 1都是非常嚴重的錯誤,我們才會這
麼容易發現。而練習Kaggle是好的,但要記得是這裡的問題和Features完全都被定義好了
,甚至連評分的Objective Function都已經給了我們。Kaggle常被同事們當作消遣或是練
習新技術的地方,因為通常無需動太多腦筋。
因此,如果只是喜歡這種發現與解決問題的過程,那完全不需要執著於Data Science,這
世界上有太多工作是這個樣子的。另外,如果你的工作環境像在GAFA裡的一些部門允許你
做純R&D,不用步步都考量附加價值或成本,只能說那真的太幸福了。
接著討論Pipeline,經常一提到Data Science便會強調Data creating、wrangling和
cleaning三個過程佔絕大多數的時間,但其實還有很多重要的事;這是絕大部分想要跨行
(非資訊領域)者會有的盲點:工作不是打Kaggle,他無法帶給我們的是理解實際工作的
Pipeline。進入Production後,如何移交(deliver)你的結果?運算出的結果還打算用csv
來傳遞?要產出新預測的時候還去terminal打上make prediction或是python model.py?
也許高階一些,那麼除了cron job之外,是否有其他解法去監測每個步驟是否執行成功?
能否讓步驟間有相依性?如何確定你的code有容錯能力(Try Catch)?你有Logging?你有
做Functional test或你會寫Test?化約來說,就是些Design pattern或CI/CD的問題,我
想這一連串的問題有些惱人,也許你現在不知道怎麼做,但我們都必須知道有這些問題,
甚至在未來學會怎麼做;因為你想成為一個Scientist,這些都像是實驗流程的一部分。
這也是為什麼當我們覺得自己已經準備到一個程度了,為什麼還是沒公司願意給機會?或
是不知道自己一直無止境的上DS/ML相關課程,但到底何時能準備好?我個人認為這是視
野(vision)上的問題;你能把細節思考的多周全、做得多完美,給了你是否有自信作為一
個「獨立的」Data Scientist。
再來是對Data Team各個Function的理解,同時也將解釋為何說「Data Science不等於
Machine Learning」。嚴謹來說,Data Scientist、Data Engineer、Machine Learning
Engineer為三個不同的工作,即便都有重疊,但主要的工作內容有極大不同。然而網路上
已有太多詳細資料介紹,這邊我只做提醒不深談,接下來我只會針對Data Scientist和
Machine Learning Engineer「消歧義」。另避免爭議,每間公司在寫Job Description
(JD) 時當然可以有不同要求,這邊我想討論的是原始定義。
相信大家都有看過一個描繪Data Science的文氏圖,Data Scientist可以是個Software
Engineer在算法部分的特化,也可以是一個新潮的經濟、統計學家,他隨者時間的演變被
賦予不同的名稱,但在本質上都分享著一些明顯的繼承。而當中Machine learning是另一
個解決問題的手段,而非唯一;舉個例子,某些推薦系統問題我偏好用圖論來做,最後再
用ML做優化,原因是無論DFS、BFS...等相較古老卻是基石般的算法,在效率或資源的優
化都有一定的保障,而只要明白原理就能將之變形成一個ML能優化的問題;如果當有人看
到一間公司開出Data Scientist職缺,在他快速瀏覽後,立刻心生鄙視,想著:呿,這工
作連個明確的ML問題都沒有,這也叫Data Scientist?但也許其實是他不懂Data Science
。
接著是Machine Learning Engineer,據我了解台灣目前不多公司有這樣的職稱,即便國
外也不是所有公司都有明顯的分壘,這也是做Data和一些想做Data的人的痛。ML
Engineer比起Data Scientist,他就更專精在model上,從發現或實作高深的Model本身或
是在進入Production之後的各種問題如Model的Delivery等等。ML Engineer的定義可能就
比較接近部分群眾對Data Scientist的想像,但事實上這個職位吃的數學又多上更多;有
時是一些線上課程給的錯覺,導致有些人對Data Scientist的想像僅止於ML;多一點可能
還會把Data Analyst、Data Engineer的概念也加進去些。此外,另一個混淆人的原因是有
些Data Scientist的JD中,填充了許多Machine Learning的漂亮話,導致人們看到的
Data Scientist好像只要做ML就好了。
最後的Take Away:Data Science不等於Machine Learning;而想換工作時,先想想到底
對Data有熱情還是只是想玩玩ML。我們有時會在Job Affair戲弄一些看起來目標就很不明
確的人,會問說「哎呀,可能Data Scientist不缺了,但我們缺個Machine Learning
Engineer (Data Engineer),你覺得如何?」,這些心志不定的求職者通常都會說他有興
趣、他能做,但我們都知道他沒有真的理解他將面對的是什麼。
- 學經歷背景、技術要求
那麼到底什麼樣背景的人可以做這行呢?沒有限制,限制的是我們手上的技能有什麼?是
否有發現及解決問題的能力?畢竟同一個問題可以有很多種方式去解,這也是為何(前)同
事們,有應用物理博、天文物理博、語言博、理工碩、經統數碩、資訊碩...背景百百種
。至於哪些技能是必須的,這個網路上都有清單,這邊只想提醒幾個我覺得最重要的,給
非資訊出生或是覺得做DS一定要有個博的版友:
1. 學會讀Documentation、Source Code,善用Google和Stack Overflow(當然是英文)
2. Python
3. SQL 及 Database原理
4. Linux 及 基本網路、網站架構
5. 資料結構、算法及Machine Learning知識
6. AWS / Google服務
7. 學習做概念驗證 (Proof of Concept, POC)、看和做Benchmark
-. Kaggle、Mini Project
以上除了1, 2之外,重要性不分軒輊,數字只是想幫忙在時間有限的情形下知道先掌握哪
些。
Python,它很好用,但絕對沒有我們想的那麼簡單。「魔鬼藏在細節裡」用來形容Python
應該非常合適,它可能亂寫都跑的起來,等到結果真的出現細微的錯誤又被我們發現
時,真正的問題點可能想找還找不到,畢竟不是所有人都接觸過底層的語言。因此,和
Python相處,真的是要持續地學習和深入了解它。其他像是Profiling、Multiprocessing
或是Parallelization等等,其他文章可能都討論過,特別那些「我覺得不重要,但別人文
章總是會提到的東西」還是留點心,至少加入待讀清單吧。
然而不僅僅是Python,還要熟悉SQL和Database,新手時常想忽略他,覺得沒什麼用。這
裡說的Database是指像在記憶體優化的Server上,而非在練習SQL的筆電或是t2 micro
instance中。很多時候我們真的不會想讓個巨大的DataFrame在instance或local端花個十
分鐘做preprocessing,又或者如果資料不是只使用一次,如何先將資料處理好存進Data
Warehouse方便下次使用?這時如果我們熟悉一種以上的工具,那就知道如何怎麼操作才
最有效率,所謂效率除了運算資源外,也包含你的時間、同事的時間還有你是否會crush
自己或同事的運算。
舉例來說,在給定一定資料量的情況下,用Pandas把一個Column包含list的DataFrame全
部展開可能要用個數行(可能還加上些看不到的for loop)再加上短則以分鐘為單位的時間
;但如果熟悉SQL的話,可能很快就想到用cross apply只要兩個select就可完成,又或是
在Big Query或Snowflake環境中,可能用LATERAL FLATTEN來處理就是個好選擇,而處理
的時間可能是秒為單位;在這樣的情況下,我們就會選擇先在Server端處理好,再寫入資
料庫(或讀取)。因為即使真的需要使用包含list的DataFrame,也只需要一行groupby加上
unique,pandas很快就會幫忙處理好了。
很常時候這些wrangling並不是一次性的,更可能你生產(populate)出的資料也不是你一
個人要用,那麼做這些評估就是理所當然的了。小時候真的是鐵齒覺得pandas可以做的事
,幹嘛還要學SQL或了解Database的原理呢?但當越來越熟練後會發現,即使什麼都
vectorization去解決,也突破不了local硬體的極限,雖然形容的有點誇張,但概念大
致如此。再舉一個關於Database的例子,一般的RDB是用列來寫資料的,如果用python
connector加pandas可以很寫意的儲存資料;然而像是那些write by column的資料庫,如
果不明白其背後的原理還用insert by row的方式去寫資料,那可能真的等到天荒地老。
再來是Linux、網路等相關知識,這部分除了像是爬蟲、API之類的應用外,還有個心酸的
原因;說真的Data Scientist是個很奇妙的存在,Backend Developer不會當你是個
Developer,而是弄些奇怪數學的人;公司其他非技術的部門的同事卻都把你當Developer
,因為對他們來說反正搞不懂的都是程式和邏輯。而很多時候各種環境都需要你自己快速
的架設,除非公司有分配Data Team專用的Backend Dev和DevOps。否則當你的需求是因為
R&D而產生的,比起公司其他有產值的東西,RD的Priority很容易被排到最後。需要
NoSQL DB去紀錄每一個預測用的參數和結果?想要用開源的Dashboard,又需要url分享給
其他部門看?通通自己架。而這也是為什麼需要學會讀Documentation和Google,你很少
聽到資訊背景的人在抱怨這些,因為他們都很習慣一邊看說明書,一邊去摸索新玩具;這
也是為什麼有些公司開DS缺都會先要資訊背景,因為本科就是省事又好用。
接著是資料結構、演算法和ML的知識。好的資料結構才能讓 (ML) 演算法跑得好跑得快;
而且如果不明白資料結構,你做profiling也只是瞎忙而已,這些背景知識都可以幫助你
解決問題或加速解決問題。選擇好的Machine Learning算法亦是;例如,由於Kaggle的關
係,現在人人起手便是Xgboost,但如果沒有去理解bagging和boosting的差別,有沒有可
能你錯過什麼更輕便的算法或是讓你一直往overfitting去了呢?
AWS / Google的各種運算服務多的無法枚舉,而要學的原因和重要性我也不多說了。
學會做 POC 和Benchmark也非常重要,也很少有人在講Data Science時提起。然而就像我
們會想拿Data去打臉某些人事物一樣,在決定一個Solution前如果不做POC,不看已經有
的Benchmark,那我們和那些憑感覺做事的也沒差別,怎麼好意思說自己做Data呢?因此
千萬不要鐵齒,這個待定的Solution可以是算法、開源軟體或Package,或是選擇外部服
務如資料庫,或是選AWS還是Google。
最後才會是Kaggle或是mini project。做這些很重要,但要怎麼去做?是否知道如何呈現
?反而才是重要的。要做的原因很簡單:就是把手弄髒(Get your hands dirty),這不需
多做解釋。然而,開始弄髒手後可能掉進的誤區就是想衝高排名。在面試時,若面試者告
訴我他學到什麼,我絕對會專注的聽,因為也許能學到些什麼,更重要的是我可能會因此
找到一個有想法的好夥伴;然而,如果他自顧自的說他的Model多厲害、預測都是多精確
bla bla bla,我可能30秒後就會恍神或是失去耐心;原因是這些排名或嘴巴說的數字完
全無法反應真實,人人都可以去複製貼上個Kernel取得好成績。因此,Kernel和討論版要
看、多學,複製Kernel只是重製看別人Model效果如何,但要對自己誠實,那不是真的是
你的東西。
Mini project同理,現在太多書籍或網路資源在做同樣的東西,重要的同樣是你學到什麼
,如果只是說用過Tensorflow、keras做做MNIST等projects,那面試官看手上論文的
State of Art可能就夠了。除非你自己刻了一個Attention Layer去解決你的問題,或是
實作了Transformer等新東西去解決老問題,否則老調真的很難引起注意;這些都只是例
子,ML或DL的技術每個月都推陳出新,就看你多有心去理解這些新理論或應用了。
而到底是要繼續學新東西還是先把舊工具用熟?這個困境就很像Reinforcement Learning
中的Exploration-Exploitation Dilemma,但無論如何都不要把自己限制在非Machine
Learning算法不學;技能樹的廣度發展也要合理,否則面試官一下就認定你是在湊字數的
,那得不償失。回想那個文氏圖和那些可能看過的JD對技能的要求,單純要成為一個
Data Scientist可能更偏向廣度,而要成為「好的」Data Scientist差別則在於深度,那
些你特別之處造就你成為更好的。所以如果基本功優先點選,等到你開始覺得自己到達瓶
頸時,開始往廣度發展,回頭看看自己的盲點和缺陷,反覆這個過程就先讓你成為一個「
好的」OOO了。具體例子來說,如果你是唸資訊的,先Maximize你本科系的能力,再準備
開始往外點;即便你無法成為一個典型的「Data Scientist」,你也具備能力做一個好的
Software Engineer,或許你還能特別往算法或Text發展,那也是一種Data Science不是
嗎?而對於其他科系,Coding在你選擇想走這條路時早已經是必備,別只是想著「跟同學
比起來我會coding啊」,那些人可能根本也沒想和你在同一個pool,你的對手反而在外面
;因此本科那欄請自動補上coding和資訊相關的基礎,其餘的都可以參考那些網路上的清
單或是文中的小建議;勇敢面對現實,但也不需妄自菲薄。
- 除此之外
培養嗜好是恢復創造力的一大幫助,如何在忙碌的日子中達到work-life balance是無論
在世界哪個地方工作都要面臨的功課。最後身體健康很重要,這大家都知道,但怎麼做和
如何做適合自己,那需要自己調適安排。我對CodeTengu很久以前的標題很有印象,大概
是說「如果做不出來的時候,資深工程師知道什麼時候該站起來走走,而更資深的知道何
時該跑」。做DS和其他Function很像,很容易陷入停不下來的漩渦,無論是熱情還是
Debug或是Debug的熱情在驅使著你。
有興趣入行的你,綜上所述請先想好
1. Data Science對你而言是什麼?你為何愛Data的工作?
2. 如何規劃未來?你是學生,還是已經在工作了?該如何繼續學習以達成目標?
3. 到底想在什麼樣的產業中工作,是純DS (或ML或AI)?還是電商或其他有商品的產業?
4. 你的環境有這個工作嗎?沒有的話,是要自己創造、轉換環境還是退一步?
5. 是否願意花時間學好老技能:英文。
另外,如果你想跟我說:啊,這裡是台灣啊!
我明白也完全理解
但這句話不應該讓你允許自己直接忽略那些更重要的事實:變強和改變環境(無論是就業
環境、政治...)
也許我說的輕描淡寫,但這些都不是純粹的理想
而未來都在我們手上,該如何改變環境或自身,決定在我們而已。
衷心希望這篇文章的某些小想法能帶給你一些啟發,文章或多或少也有可爭議之處,歡迎
批評指教
謝謝閱讀,第三部分將會是與Meetup有關,但仍需要思考如何進行,如果對這個活動有興
趣的朋友歡迎隨時站內信,我們能透過其他方式先聊聊現有想法。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 81.250.134.182
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1547504507.A.8E1.html
而確實這挺看公司的,我個人就是個全包的概念...
以至於有像mago你說的這種現象。否則基礎好與不好,不就是我們為什麼需要面試的原
因嗎?
如果有任何想私下詢問的問題,煩請直接使用站內信詢問
不然時差8小時很難即時的用訊息一來一往
但想提醒的是,我真的沒有算命這個技能
可能無法回答一些真的不著邊際的問題,還請見諒
但無論如何,這是個好問題
基本上這是利用組織架構設計的方式來幫助我們互動
然而在PTT上用文字很難清楚又簡單的解釋
這也是我想辦MeetUp的原因之一
我很希望也能知道現在台灣的公司有沒有新的模式來幫助Tech的人們互動
想藉此機會定期交流
※ 編輯: benson415 (81.250.134.182), 01/21/2019 01:27:18
... <看更多>