LY Corporation Tech Blog

支持 LY Corporation 和 LY Corporation Group (LINE Plus, LINE Taiwan and LINE Vietnam) 服務,宣傳技術和開發文化。

從心開始的純軟之路 -- 一次解答非本科走進軟體業的迷思 @ 臺師大企業參訪

前言

大家好,我是 iOS Team 的 TECH FRESH - Max Gao,很開心今天有機會可以和臺師大各系所的同學們分享我的實習經歷,讓我用問題打開非本科成為 LINE TECH FRESH 的故事。

Why I'm Here?

相信同學們一定相當好奇,心理系怎麼會出現在這裡?我在大三時進入現在的實驗室,我們的研究領域就是將心理學與資訊學結合,例如我做的專案是寫一個手機 App 去記錄使用者的使用習慣,拿這些資料來預測使用者的心情或者認知能力。很酷吧!而在參與專案的過程中,對於開發手機 App 感到相當有興趣,成為軟體工程師的念頭也逐漸萌芽。

在大學畢業之際,我面臨了重大的抉擇,要繼續念心理所還是考資工所,又或者直接出社會找工作,對於兩個研究所的資訊,例如準備成本、預期獲利、喜歡程度,我都有所掌握,但我對於出去工作的資訊相當缺乏,我想知道業界都是如何開發軟體的、想體驗在軟體業工作的感覺、想知道自己還有什麼不足,所以我希望透過實習獲取這些資訊,讓我能更有底氣做出決定,這就是我找實習的初衷。

Why LINE?

而為何要選擇 LINE?當時我就在網路上獲取資訊,認為在 LINE 實習有四大優勢:

  1. 台灣最大的 App:對於 App 相當有興趣的我,當然會好奇 LINE App 的開發及運作模式,也因為是大公司,制度勢必很完善
  2. 為期一年的實習:相對於多數公司的暑期實習,對於實習生的養成會更有規劃,也更有利於體驗職場生活
  3. 能有產品開發經驗:承上一點,暑期實習多是自己做一些研究、專案,但在 LINE 實習很有機會碰到實際上線的產品,這相當寶貴的經驗完美符合我找實習的目的
  4. mentor 制度:每個實習生都至少會有一個 mentor,不管是技術、職涯、甚至生活有關的問題,mentor 都很樂意協助,讓實習生能快速地適應環境、提升自己的能力

How I prepared?

在應徵 LINE TECH FRESH 的過程中,我認為有三個點很值得提

  1. Side Projects
    對於非本科來說,最難的就是說服別人自己具有實作能力,因此 Side Projects 就顯得格外重要,除了能展現自己的技術能力外,也可以顯示自己的創意,尤其非本科的人常將技術能力發揮在自己本科上,對審視履歷的人來說或許會覺得新奇,而有關如何找Side Project題目、如何執行等資訊,可參考 Morrison 的文章。
  2. Customized Resume
    所謂客製化的履歷,除了針對不同職位、公司外,我認為可以按照 JD 描述去撰寫履歷
    除了必備的硬實力(如 JD 上說技能要會寫 Java 就在履歷上寫有 Java 經驗),更重要的是針對軟實力去描繪自己的形象,要特別強調自己的人格特質符合公司招聘人員的期待。具體而言,JD 上通常會寫希望員工擅於溝通合作,那就可以在履歷中提及參與過多人專案,並把重點放在如何和團隊成員溝通而非單純的技術能力。
  3. Pre-Assignment
    很多公司會在面試前請應聘者寫一份作業,並在面試時針對作業內容討論,目的是了解應聘者的實作能力。以我自己的經驗為例,面試 LINE 時僅花一週的時間寫了一個 iOS App,內容是拿被政府認定為詐騙網站的清單,呈現在畫面上,並且可以根據關鍵字搜尋,功能上相當單純。而我在寫這份作業時,目的非常明確,我不需要把 UI 做的多精緻、功能多做幾個,而是將重點放在「讓面試官知道我熟悉軟體開發的架構和流程」,因此我採取 Clean Architecture 的架構開發 App,並建立 Kanban 記錄我的開發狀態。此處想強調的是,Pre-Assginment 和 Side Project 不同,並沒有足夠的時間可以將專案雕塑成自己想要的樣子,所以必須將自己想傳遞的訊息明確展現出來,例如很擅於做 UI 就把 UI 刻得漂漂亮亮的,其他部分只需達到作業要求即可。

How I Learned?

而我是如何學習的寫 App 的呢?

本科生的學習方式:從下到上,通常都是從基礎學起,學校會這樣規劃課程的目的就是希望學生能有深厚的背景知識。但我當時其實沒有那麼多的時間了,我當然知道我要更努力,不過更重要的是我要把時間直接投注在我想做的事情上。舉例來說,我想開發手機 App 那就去學 App 相關的知識,繪製 UI,串 API ...,先自己試著實作看看。過程中可能會用到下方的基礎知識,等到要用到的時候再去挖掘,或趁有時間、動力就看一下。

必須強調的是,我的學習地圖是因為我想要在短時間內就把 App 的知識網建立起來。我現在也會去吸收下方的基礎知識,畢竟如果我只會 App 層的事情,我能處理的問題就只有這些,能力可能就會停滯不前。

What Level I need?

進入 LINE 前總有個問題困擾著我,「我的能力要到什麼程度才能去實習、工作?」,因為是非本科,沒有什麼比較的基準(例如同學),不知道自己的狀態在哪,也只會對自己不夠有自信,覺得能力應該還不到。這個問題的解法,在有了面試 LINE 的經驗後,我可以給過去的自己答案了。

先來個心理學小教室,介紹一下「達克效應」,橫軸是能力,縱軸是自信,常理而言能力越強的人自信越高會越高,但事實上人的想法並非如此,當人在剛開始學新事物時,只要一上手就會覺得這很簡單,但漸漸的你會發現自己在該領域不知道的資訊越來越多,這時候自信心就會盪到谷底,而後才會因為了解更多,知道自己知道什麼,自信心逐漸提升,能力也持續成長。

回到問題,「我的能力要到什麼程度才能去實習、工作?」,我認為當我已經處於「知道自己不知道」的後期以後,就可以出去找看看了,因為此階段會低估自己的能力,且容易受負面情緒影響。我會有這個問題,除了我自覺個人能力不足外,還是會擔心害怕,害怕被覺得不夠格、面試被電爆回答不出來。然而事實上,更符合我需求的命題應該是「我的能力要到什麼程度才能拿到 offer」,但這件事並非由我決定,而是面試官決定的,我能決定的只有我要不要投履歷和去面試而已;我當時也不覺得我會進 LINE,但我想要,所以就試試看。如果真的丟了很多間都沒有下文,那就代表自己能力不足,就再繼續加強自己的技能,至少對於自己的能力有比較明確的掌握度。

What My Daily Work Like?

在進入 LINE 之後,我主要的工作內容可以分成四類

  1. Coding:工程師的必要任務,開發功能、解 Bug...
  2. Meeting:開會討論功能的細節、同步彼此的進度、技術上的分享
  3. Review PR:簡單來說就是看別人寫的 code 有沒有問題,哪裡可以修改的更好
  4. Write Docs.:書寫文件,例如開發工具的使用教學、概念上統整、大家建立的共識...,讓參與專案的人(包含自己)看完文件能快速進入狀況

值得一提的是,進入 LINE 後我發現在 coding 上的時間並沒有想像中多,比我預期多的是在開會,而會花這麼多時間開會就是為了同步大家的資訊,確認要做的事情,也發現花這些時間是絕對划算的,比起自己埋頭苦幹,更好的方式是確保自己在正確的道路上以及與別人合力完成任務。

What I have Learned

Tool vs Product

通常像是我們這種本科/本業非資訊領域的開發者,很常會把程式或軟體當作「工具」應用在自己原先的領域上,例如我開發了一個手機 App,搜集使用者的習慣,可以用在心理學研究領域,那對我來說只要這個 App 可以用、不太會壞就好,不會花上太多的心力在優化這個 App 上,畢竟它只是幫助我做這個研究的工具,我在意的是研究相關的細節。但是開發「產品」不能抱持這樣的心態,一個網站壞掉可能造成偌大的金錢損失、公司聲譽、用戶流失等等,所以我們要確保產品品質,要明確知道自己寫的 code 會造成什麼結果

工具和產品的差異,最主要有四點

  1. Stability:功能要具穩定性,要把問題減到最少
  2. Continuity:服務要持續存在,不能中斷
  3. Scalability:要有擴張性,能讓更多人使用、未來開發速度更快
  4. Value:要盡可能提高對於用戶的價值

Adapt Quickly

軟體開發的流程大多會是:定義需求 → 設計流程&介面 → 開發 → 測試功能 → 產品上線

過去的開發方式都是一次做完每個階段該做的事,稱為 Waterfall Development,就像是瀑布一樣,一步一步往下做,跑完一次流程可能要耗費數月甚至超過一年。而這種開發方式的缺點是,一旦項目進入下一階段,要回到前一階段更改的成本非常高,而且需要等待很久才能看到產品,甚至有時候產品已經開發完,才發現跟需求方想法有出入。

為此,Agile Development 應運而生。和原先的開發流程相同,但不再一次做完每階段的事,而是先定義一些需求,進行設計、開發、測試、上線,在短時間內迭代這個歷程,以我在的團隊為例,上述這些過程僅在兩週內完成,每次都交付一些功能。好處是需求方可以很快看到需求是否符合預期、不用等到全部開發完才知道無法對應到市場需求;對於設計、開發方來說,如果需求有需要修正的可以馬上修,能即時的應對狀況。簡言之,讓流程具備彈性以因應變化。採用 Agile Development 的條件是必須花很多時間開會確認細節,雖然會增加溝通的成本,但對於整個專案來說是進展更快的。這讓我學到最重要的概念是:「快速適應並做出改變」,我不用擔心自己辛辛苦苦寫了一整個月的 code 完全沒有用,有需要修正的可以馬上處理,讓自己更有彈性。

How to Rest

而在工作之餘,休息也是相當重要的。因為對自己的認識,我認為非本科的我會害怕自己跟不上進度,要多花點時間在工作上補足差距,可能讓自己很緊繃,或花比較少心力跟別人相處,所以我會要求自己在該休息的時間就休息,並且明確切分工作、學校、生活,例如在上班日決不碰學校的事,下班後都不碰公司電腦,盡可能掌握自己的 work-life balance。此外,工作中也要讓自己放鬆,如果工作累了我就會去射射飛鏢或是坐按摩椅,也會參與團隊的 team building 以及家庭日活動,和同事建立良好關係,這些也都是 LINE 特有的福利。

結語

相信大家一看到標題「從心開始」就認為是諧音雙關:我從心理系踏入資訊領域,重新開始學習軟體開發。然而事實上我的本意並非希望非本科的大家,如果想進入軟體業,就把自己過去所學擱置,重新開始學習資訊相關知識,而是希望透過這場演講,讓大家重新思考,在轉領域或跨領域的過程中,有哪些是從心態上、認知上的迷思或癥結點,在釐清這些想法後,能降低非本科走進軟體業的阻力。

最後借用 LINE 的使命,Closing the Distance,希望這場演講有拉近你們與我的距離,有帶給你們一點收穫,謝謝!


若對於 TECH FRESH 有興趣請參考以下文章:

如果想實習的同學可以直接投遞您的履歷 (URL),我們 LINE 台灣見!