Life in LINE – 直擊 TECH FRESH 實習內容!

前言

大家好,我是 LINE Taiwan HR – Kimi,從 TECH FRESH 計畫分享會開始,陸續跟許多學生互動,也聽到大家的共同心聲。許多同學都很擔心,企業實習是不是只是在打雜,永遠只能做 side project 或是不會上線的實驗性產品呢?又或是參與企業實習到底能不能為自己的履歷加分,還是我去多接幾個案子,或待在實驗室反而可以學到比較多東西呢? 

這篇要來跟大家分享,TECH FRESH 的團隊介紹,以及我們邀請了目前在職的實習生進行分享,加入 LINE 實際會接觸到哪些專案及技術內容。讀完這篇文章讓你的擔心都煙消雲散,如果你還在猶豫到底要不要申請學習間的實習,又或是到底要不要加入 LINE,那你一定要看完這篇文章再決定!

成為 TECH FRESH 之後的日常生活及公司福利,在這裡都有:

TECH FRESH 團隊介紹

2020年 LINE 錄取了近 30 位 TECH FRESH,而每一位實習生所負責的專案及所屬團隊皆有所差異,參與到的服務也有所不同,今天就來跟大家分享到底有哪些團隊有在招募實習生,並且會參與到什麼樣的工作內容吧!

  • Frontend Team:前端實習生,目前的實習生會負責處理服務的各項使用者互動介面、前端頁面設計等任務,實際參與 LINE TODAY 的使用者介面,超高量級的服務,可以參與這麼多的用戶都在使用到的介面開發,這個機會可不是哪裡都有,別再說實習生只能打雜做 side project 了,LINE 提供給你這麼大的平台讓你展現你的優秀天份。
  • Backend Team:在 Backend 團隊中,許多服務都有實習生的參與,包含:LINE MUSIC、LINE TODAY、LINE SHOPPING、LINE SPOT、Sticker、Official Account…實習生將在其中參與服務新功能開發、既有版本優化等,同時也可以學習到服務架構跟新的技術,看著自己做出來的產品被上千萬人使用的感覺真是太棒啦!
  • Data Dev Team:講到 Data,大家第一個聯想到的大多是機器學習 Machine Learning,在 Data Dev Team,你可以接觸到跟機器學習有關的任何東西,包含資料處理、研究模型、自動化訓練與部署…等等,此外 Data Dev Team 的同仁們很喜歡一起發想、實作有趣的ML專案,歡迎一起來把你腦袋中有創意的想法加以實現。
  • QA Team:QA 應該是大部分在學學生最少接觸到的一塊了,不管是日常的專案還是 side project 都很少需要額外進行 Quility Test,但在LINE 的各項服務上線前,QA 可是不可缺少的重要流程呢(LINE 很注重品質)!在 QA team 的實習,你會接觸到 app 及 web 的相關測試,除了手動測試之外,我們更歡迎有能力的同學一起來處理自動化測試、參與服務的各項測試,並與 Developer 一同合作減少系統中的 bug,優化 LINE 的各項服務。

實習心得分享

聽完團隊介紹之後,大家一定很好奇詳細的工作內容及任務對吧!我們邀請到兩位優秀的實習生: Ming & Sam 來進行分享,透過他們的角度可以更加真實且貼近實習生的日常工作狀況,兩位同學分享了自己從入職以來參與到的專案及應用的相關技術,話不多說,馬上往下閱讀吧!

TODAY Team Intern – Ming Hsu

嗨我是 Ming,一位 TODAY team 的 TECH FRESH。我在 LINE TODAY 負責 data 相關的開發,特別著重在自然語言處理 (NLP)。在這份實習中,我接觸了許多業界常見的技術,也得到參與各種開發者社群的機會,實在收穫良多。

在這邊分享一些這幾個月實習以來所累積的技能樹,希望幫助大家更了解 TECHFRESH 的種種開發日常!

自然語言處理

自然語言處理是這份實習的重頭戲。在實習剛開始時,我與另一位 TECH FRESH 閱讀了許多篇 paper,並且在 daily syncup 時與主管何 mentor 討論如何設計 data pipeline 並實際應用在現有的專案中。在各種理論與實務的來回切換中,我學習到了許多 NLP 的實作細節,比如資料清洗、斷詞斷句、word vector、sentence embeddings 與關鍵字提取等。

整合既有的服務

懂得站在巨人的肩膀上也是工作上很重要的一環。許多常用的功能前人可能都有寫好 library 或是已經有提供 API,這時我們應該要善用它們而非自己重新造輪子,這樣除了可以省下許多開發時間,也可以讓自己的程式更可靠,因為那些功能都有專門的 team 負責維護。如果對那些功能的實作有興趣,可以直接到 git 上查看原始碼,觀摩那些優秀程式的寫法對於自己能力的提升是非常有幫助的。

前端開發

工作上雖然是做 data 與後端相關的 task,但還是需要寫到前端以方便 demo 成果。為了寫一個 demo site 串後端的 api,我使用了 Vue.js 這個前端框架。在研究 Vue 的過程中,我學到許多設計 component 的小技巧與 webpack 的神奇用法,我的 JS 功力相比以前也提升了不少。

平行計算

最後想提的是資料的並行處理。在工作上,我們常常需要從資料庫撈出海量資料、預處理後再做進一步的分析。如果能善用資料平行處理的技巧,便可充分利用系統的多核環境大大提高運算的效率。

Multiprocessing vs. Multithreading

Multiprocessing 是一種將程式或指令同時跑在多個平行 process 的運算模式。當你的工作可以高度平行化時,也就是 subtask 之間是互相獨立的情況下,multiprocessing 就可以利用多核的環境幫助你加速運算。

說到 multiprocessing 就不得不提到 multithreading。Multithreading 與 multiprocessing 很相似,目標都是要將工作平行化處理,然而在 multithreading 中,多個平行的 thread 共享 heap (動態記憶體空間)、data section (global/staic 變數)、與一些 OS 資源,如 open files 與 signals。因此若多個 thread 共享某塊 memory 內的資料,那麼程式設計者就必須使用一系列 synchronization 的技巧來預防 dead lock 與 race condition。

Python 與平行化

CPython 有一個 GIL (Global Interpreter Lock) 的設計,它保證在任何時刻只會有一個 thread 執行 Python code 以確保 multithreading 下的 thread safety。當執行一定數量的 code 或是 I/O 被阻塞時, CPython 為了平衡不同 thread 的執行時間,會強制釋放 GIL 並轉移到其他的 thread 上。

在 single thread 的情況下 GIL 不會造成嚴重的問題。但是當我們嘗試把工作分佈到多個 thread 上時,GIL 會 CPU-bound 的工作效率低下,這是因為 GIL 限制了多個 thread 的並行。要注意的是,GIL 不會對 IO-bound task 造成影響,這是因為 GIL 在 thread 等待 I/O 時就會被釋放。

然而在資料處理上,大部分的 task 都還是 CPU-Bound 的,難道 Python 就不能平行話 CPU-bound 的工作了嗎? 當然不是。我們還有 multiprocessing 可以使用!當我們運行多個 Python 的 process 時,每個 Process 都會有一個它自己的 Python interpreter 與記憶體空間,這解決了上述提到的 GIL 的問題。雖然運行多個 process 的開銷遠比 thread 還要大,但對於 CPU-bound task 來說這樣的 overhead 是可以忽略的。

總結

這份實習不僅幫助我累積了許多實作上的經驗,也讓我理解如何在實際開發中結合在學校所學的基礎知識。感謝 LINE 提供一個這麼棒的機會與工作環境以及主管與 Mentor 的耐心指導!

Engineering Team Intern – Sam Wang

我是 Sam,目前是即將畢業準備讀研究所的台大資管系四年級的同學,我在去年七月中的時候加入 LINE 成為 TECH FRESH 的一員,我在實習的過程中感到非常充實,每天都可以學習/練習很多新技術,很多都是以前在學校完全沒有機會碰到的技術,以往在學校頂多只是做做簡單的系統,只要能夠在期末報告前能夠 demo 就好,完全沒在管維運或是 scalablility 的問題,但是在 LINE 裡面卻要將所有層面的問題都做到最好才行,而我的 mentor 也會耐心的教導我如何建造出一個完美的服務與系統。

目前負責在做 LINE 內部會用到的服務,也就是專屬 HR 的 OA(Offical Account) 、員工綁定 LINE 帳號、打卡系統、訂早餐系統等,其中主要會用到的技術包含了 Web frontend & backend、MySQL、Kubernetes、DevOps 等。在應用層面, web 的部份我們主要用 React.js 以及 Node.js 為主,在一些需要處理資料的服務中用 Python 來做,並且使用 OpenAPI 來統一我們的 API 格式;在系統層面,我們使用 Kubernetes 來部署我們所有的服務,並用 Traefik 來做 Ingress Controller;在維運層面,我們使用 Drone CI/Argo CD 來做持續整合、持續部署,並且搭配 OpenTelemetry(tracing)、Loki/Kibana(logging)、Prometheus(monitoring) 和 Grafana 來幫助我們持續的追蹤以及監控我們的系統。

在還沒進來實習之前,我只會一點簡單的 web development,但是我認為只要對這方面有興趣、願意透入心力學習,LINE 的實習都非常歡迎,如果你也對這方面有興趣並且還是個學生,也歡迎考慮 LINE TECH FRESH,在這裡你可以學到非常多技術!

結論

2021 年的 TECH FRESH 實習生計畫預計從 7 月開始實習,為期一年的實習計畫讓你可以深入參與 LINE Taiwan 實際上線的服務開發及優化,此外透過各種月會、Team building、讀書分享會,讓你在工作外的日常還可以跟許多大神工程師們交流,同時還有眾多的實習生可以跟你一起學習、成長,這麼棒的實習機會,你還在猶豫嗎?

今年計劃的招募時程表如下:

  • 即日起~5月初:履歷收件截止
  • 五月中:進行技術測驗
  • 五月底~六月中:面試
  • 七月:TECH FRESH 報到

不要再猶豫了,馬上手刀申請送出履歷,下一位 TECH FRESH 就是你!

Q & A

Q: 我已經投履歷了,請問什麼時候會收到通知?

A: 我們會在收到資料後陸續進行審核,並在履歷收件截止後各別進行通知,但因部門別處理時間會有些許差異,也因申請同學眾多,還請靜待佳音,希望很快可以在LINE看到您喔:)

Q: 我去年有投履歷,但沒收到通知,請問我還可以再次投遞嗎?

A: 很遺憾我們在先前沒能在人海中看到你,我們歡迎勇於挑戰的優秀同學再次投遞,是金子在哪裡都會發光,也許這次在人海中被看見的就是你!

更多 Q&A 請參考以下文章