PART 1:關於在 BloomReach 擔任軟體工程師的工作經驗分享
資訊工程是第一線接觸到社會的科技
「比起硬體工程,軟體工程會更直接影響到人的生活,這是我很有興趣的。」謝易昇 Sam 雖然大學、研究所都是讀電機工程,但是在台灣新創公司 Story Sense 的實習經驗開啟了他對資訊工程的興趣,「以後軟體不會是一個獨立的學門,而是各個不同的產業都會需要軟體成為它的一部分,這樣的自由和變化是我很嚮往的。」由於發現到寫程式的無限可能與較為彈性自由的工作性質,所以他在密西根大學電機所畢業後,積極找尋矽谷軟體工程師職缺,如今則在 BloomReach 擔任產品開發工程師,對於後端資料庫設計與前端網頁開發都相當熟悉。
BloomReach 簡介
BloomReach 是一間未上市的中型軟體公司,已獲得 D 輪資金,員工總數為 200 人,總部位於美國矽谷,在英國、荷蘭、印度皆設有據點,採 B2B 商業模式,服務內容為運用大數據分析、演算法幫助零售商顧客優化其電子商務網站,改善一般消費者線上購物體驗,進而提升零售商網路銷售金額,知名的玩具反斗城、Forever 21 都是 Bloom Reach 的顧客。
具體而言,BloomReach 的服務有兩大特色,第一是運用演算法分析網站使用者的行為數據,進而即時優化網站,減少人力更新的工作;第二是考量到零售商顧客對市場趨勢也有獨道的洞察,故 BloomReach 也會依顧客想法去優化網站頁面,「讓人跟機器彼此分工,由機器做比較簡單、大量而自動化的事情,而人則能專精在自己的專業上面」,Sam 如此形容道。
BloomReach 工作氛圍
BloomReach 企業文化為 ”Truth、Own、We、Think、No Drama”,期盼能營造出員工能認真盡責、平等溝通、客觀待人處事的工作氛圍,公司每季還會針對符合企業文化的員工頒發禮券。在工作環境、福利上,總部採開放式辦公空間,便於同仁在工作上的交流溝通,公司不只提供中餐,還設有免費的飲料零食,每週還會安排瑜珈體能課讓員工放鬆身心,而無休假限制、可申請在家工作更是許多人夢寐以求的福利。BloomReach 也相當注重社區服務,它與 Spark 組織合作,由員工引導當地學生進行實作專題,藉此幫助原本相對缺乏資源的學生能找到學習的目標。
在 Sam 眼中,BloomReach 是一間自由開放、以人為本的企業,在開會討論之外其餘的時間幾乎都是讓員工自由運用、甚至想外出到咖啡廳工作也行,公司更鼓勵員工發表對產品的想法,只要是具有可行性的點子就極有可能被採納,主管和部屬間是平起平坐地溝通、支援彼此狀況,而非上對下的管理,這都促使員工能更投入於工作中。
用數據輔助商業決策
BloomReach 的部門是以產品區分,Sam 隸屬的洞察部門(Insight Team)是將網路使用者的行為數據整理成有意義的統計資訊(如本週最熱賣的商品、被搜尋最多次的商品、推薦商品選項),藉此輔助零售商進行行銷、產品規劃上的決策,或者從中找出能提高其利潤的策略。
前端、後端大解密
Sam 在擔任產品開發工程師的兩年間,原先是負責後端,後來才轉為前端工程師,後端工程師是負責設計網頁的資料庫、以及管理資料如何寫入、儲存、讀取的方式,舉例來說,當網站使用者點擊網頁連結,這筆行為資料會經過轉換後儲存至資料庫中,當網站使用者眾多,自然會產生相當龐大的資料,是故後端工程師就要去思考出最有效率的資料處理方式,所以在工作中會需要使用大數據框架(如 Hadoop)、設計演算法等等。
前端工程師則是處理網頁上看得到的功能,例如機器間的資料傳輸與溝通,當要在網頁上顯示A產品給使用者,就會需要透過 API 跟後端拿資料;再者,就是前端網站開發,從更改網頁上的按鈕外貌到設計一個複雜的互動效果都屬於前端的範疇,目前 BloomReach 在前端使用的語言為 JavaScript、React 框架。
一窺軟體開發流程
在軟體開發流程中,產品經理、設計師、工程師會先討論要開發哪些功能,接著交由設計師畫設計圖後,讓工程師實際把功能開發出來,再進入測試階段,根據使用者反饋做進一步優化,此流程短則兩天、長則兩三週完成一個循環,視專案的大小決定。Sam 認為開發功能前的討論相當重要,必須和產品經理、其他工程師妥善溝通分工,才能確保專案後續能如期完工,此外,大型專案往往會是跨部門合作,Sam 就曾因為是和印度分公司同仁協作,而需要在晚上開視訊會議討論。
軟體工程師的日常
在每日工作行程上,早上 11 點會舉行團隊內的 Standup Meeting,讓每位成員分享近日的工作事項,確保彼此都能對各項專案進展瞭若指掌,會議結束後基本上都是員工的自主時間;每週則固定有和主管一對一的討論時間,以及Team demo meeting,後者是讓同仁能展現工作成果,也讓其他人能給予建議,激盪出新火花;而每季都會進行 Objectives & Key Results(OKR)會議,制定出各部門重大目標。
開發軟體的美麗與哀愁
Sam 在工作上的成就感多跟技術有關,像是立即看到自己寫的程式使得產品變得更完善、發現到能用更簡單的程式去寫出功能,以及當大型專案在眾人協調努力之下,終於得以順利完成。挫折感則來自於職場文化差異,例如人際溝通問題,因為時常要跟不同國家的同事協作,受限於口音因素,在溝通上難免會較不順暢,也因為各國同事性情大不相同,人際往來間產生衝突是必然,這些也只能多花時間去適應磨合。此外,在外國職場裡,積極爭取自身權利更顯得重要,譬如自己從事這項專案會需要多少工作時間和資源、甚至是加薪這件事都要由自己主動提出。
Work Smart 的重要性
最讓 Sam 印象深刻的是主管有次竟提醒他:「你應該更聰明地工作,而不是這麼認真地工作。」在亞洲職場,許多人認為埋頭苦幹、把所有事情往身上扛才能獲得老闆賞識,然而在矽谷,主管更希望的是員工能表達自身能力所及的範圍,如此一來,更有利於團隊分工,提升整體工作效率。再者,軟體工程師的一些日常工作其實不見得要親力親為,「如果你在工作中發現自己做了同一件事情兩三次,你就該想辦法寫程式去自動化它。」Sam 提及工程師多半會用 Python 寫腳本(script),去自動化一些瑣碎事務,提升工作效率。
寫程式是一個團隊的事
想成為矽谷軟體工程師,Sam 認為基本技術知識當然要有,例如至少要精熟一種程式語言,即便工作中是使用不同的語言,也會因為你過去有一定程式基礎,在學習上將比較順利;熟悉軟體系統常見的架構也很重要,以寫網頁為例,就可以多去了解客戶端(Client)、伺服器(Server)間資料傳遞的方式。又因為開發系統是浩大工程、絕對需要團隊合作,一段程式碼出錯都可能導致不堪設想的後果,所以工程師必須注意自己程式的邏輯是否清楚,確保其他團隊成員也能看懂,「你做的每一個部分最後都需要跟其他人磨合,所以你寫得東西有沒有好懂、好使用,就變得很重要。你寫出來的程式並不是只有你在使用,更需要清晰的邏輯去統整。」Sam 也坦言軟體產業變遷相當快速,公司昨天的決策可能因局勢一變,今天就要大改,而且程式語言是不斷推陳出新的,工程師必須不斷主動學習新知,才能跟上時代的腳步。
在矽谷討生活會很困難嗎?
在矽谷,要達到工作與生活的平衡其實相對容易,通常上班時間為早上 10 點到下午 6 點,有些甚至沒有硬性規定上下班時間,在工作中途離開去接小孩放學也沒關係。根據北加州軟體工程師市場行情,研究所學歷新鮮人年薪約為 9 到 12 萬美金(扣除稅金後為 6 到 8 萬),當地房租為 1,500 到 2,000 美金(房型為兩人兩房),房價市場更因為許多民眾搶好學區,而水漲船高。在交通上,大眾運輸系統較不發達,一般人多會自行開車上下班。當地台灣人的工程師社群有 TAITA、UXD,多參加這類社群交流將有助於自己拓展人脈、了解新創圈。整體而言,矽谷的薪資水準、生活品質是好的,但各方面開銷也大,值得一提的是有些工程師會在工作兩年後就跳槽到其他公司,部分原因是為了尋求更多學習成長的機會,也有部分是因為不少公司願意以高薪聘請有經驗的工程師。
主動嘗試才不會讓機會擦肩而過
「一開始在工作時,我也會期待主管、或比較資深的工程師能教我怎麼做比較好,後來才發覺其實大家期待你自己主動提問、或自己去找出問題發生的原因。」隨著工作經驗越多,Sam 益發體認到保持「主動性」的重要,他引用朋友給他的建言:”Ask for forgiveness, not permission.” 與其去問一件事能不能做、如何做,倒不如自己主動嘗試,就算最後搞砸了,頂多是請求他人原諒,有失敗的經驗至少可以記取教訓,這也正是矽谷的精神──”Fail early, fail fast, fail often.”「沒有人厲害到不論嘗試什麼事情都可以第一次就成功,能馬上找到最好的解決方法,都是需要不斷測試、失敗、修正自己,才有可能慢慢趨向成功的地方。」Sam 有感而發地說。
PART 2:關於工作申請與面試的準備分享
求職管道簡介
若想要找矽谷軟體工程師職缺,Sam建議可以查閱 Indeed、企業網站,不但要海投履歷,更要好好經營自己的Linkedin頁面,也可以把自己過去的專案作品展示在GitHub上。校園就業博覽會也是求職管道之一,因為負責招募的人資專員通常會到現場說明、收集履歷,求職者在就博會投履歷的好處在於競爭者就侷限於學生圈,而且人資回覆此類履歷的速度較快,通常會在一週內通知面試,故Sam建議在就博會前兩三個月就應準備好自己的履歷、面試內容。此外,內部員工推薦是人資特別看重的招募管道,Sam本身也是透過學長姐的推薦而拿到BloomReach的面試機會。
面試是考驗你解決問題的能力
面試階段分為一到兩次40分鐘電話面試以及為期一整天的公司面試,面試中會出程式考題,考題內容如資料結構、演算法、系統設計,是以易讀性作為評量指標,換言之,就是求職者寫的程式必須是簡單易懂、合邏輯,並且能正確、有效地發揮功用,「不管最後你是否有把問題解出來,你面對問題的態度都會是很重要的參考指標。」Sam強調即便是解不出題目,也要能呈現出自己思考、分析問題的方式,幫助考官能夠更認識你。
程式題庫練習
Leetcode網站上有著大量的程式題庫可供求職者練習,題目還會標明難易度和通過率,題庫中最大的項目為演算法,有將近600多題,Sam覺得不見得要練過所有的題目,但至少要將動態規劃、遞迴、資料基本結構等重要觀念的題目弄懂,他自己是練了將近200題,便去應試了。
工程師的溝通能力也很重要
除了程式考題之外,在面試中,考官也會要求職者做簡單的自我介紹,自介內容多寡其實不會影響到面試成績,求職者只要能傳達出自己的技術專長、未來能帶給公司什麼幫助即可。考官多半也會詢問求職者過去的經歷,目的並非想聽到什麼豐功偉業,而是了解求職者的溝通能力,確保其能清楚表達自己的工作,不會在往後工作中難以與他人協作。
短時間集中火力準備求職
回顧自己的求職歷程,Sam認為準備跟練習是成功的不二法門。在求學階段,所學的程式知識往往是零散的、實作練習又不多,而在求職的準備中,正讓自己可以有系統地複習、統整過去所學,真正地內化知識,提升自己的工作技能。至於該從何時開始準備呢?Sam認為在三到五個月內集中火力準備會是最適合的,因為準備期若拉太長,有時候可能導致沒有效率,結果還搞得自己心力交瘁。
關於求職這檔事
Sam認為新鮮人找工作應首重學習成長的機會,因為往後若要轉職,任何公司都是要求有經驗、專業能力的人才。至於應該選擇到小公司還是大公司發展呢?Sam覺得想要多方涉獵的人應該較適合小公司,想要追求大舞台表現的人則較適合到大公司。另外,公司同事、老闆也會是影響自己學習成長的重要因素,所以Sam建議在面試中應多多觀察其他同事的做事方式,也可以試探老闆是否願意給予員工協助與資源。
觀眾若對於美國軟體工程師職缺有興趣的話,Sam很推薦參考ChrisHsu(現任職於Facebook)所撰寫的文章: