FCC DevTalk 001丨柳星:從材料工程師到 Apple 開發者

freeCodeCamp發表於2019-04-11

原文釋出在 freeCodeCamp 中文社群論壇:chinese.freecodecamp.org/forum/

FCC DevTalk 是一檔訪談欄目,邀請資深開發者、網際網路從業者分享學習程式設計的經驗、工作經歷以及其他有趣的故事。

我是 2016 年在 freeCodeCamp 社群認識柳星,對他的印象一直特別好。不過我們直到 2018 年才第一次語音通話,聊了 160 分鐘 12 秒,從那以後我就知道為啥社群裡很多小夥伴都會親切地叫他星星或者星星姐,因為他真的特~別熱情,特~別能聊,他的聲音也很好聽(京片子,你懂的)。星星目前居住在舊金山,就職於 Apple,是一位很酷的開發者。

小小透露一下,星星時常在 freeCodeCamp 中文社群 QQ 群(722075637)出沒,你們要不要去跟他探(qin)討(mi)技(jie)術(chu)吶~暗號就說“星星姐”好了,不謝

FCC DevTalk,美好的事情正在發生……

FCC DevTalk 001丨柳星:從材料工程師到 Apple 開發者

Q1: 可以講講你的童年生活嗎?

我是在湖南出生的。因為父母工作原因,1 歲的時候去了北京。一直住在西城區,直到上大學才離開北京。小時候的我比較喜歡汽車,也買過很多汽車模型。我對電視劇、動畫片之類的沒什麼興趣,甚至連《西遊記》、《包青天》、《灌籃高手》這類經典的都沒看過,感覺還是挺遺憾的,然而現在也不可能再去補番了?。4 歲開始學鋼琴,這也為之後學習架子鼓和組樂隊打下了一定的基礎。

運動方面,小學喜歡踢足球,初中開始打籃球。第一次接觸檯球應該是 10 歲左右,至今依然是我最喜歡、也是最擅長的球類運動。

父母對我的管理也相對嚴格,所以家裡從來不會買任何遊戲機。但我從小就接觸到了打字機、第一代的黑白印表機、彩色印表機。5 歲的時候,我接觸到了 Windows 3.2 和 Windows 95。儘管那時候對程式設計還沒有什麼概念,但這些經歷幫助我接觸並初步瞭解了計算機。比如,通過一些練習,我開始學著固定指法,進而學習盲打。再比如,如果沒有接觸過打字機,我可能到現在也不會明白鍵盤上為什麼會有 Shift 和 CapsLock,以及它們為什麼會佔用鍵盤上的黃金位置。

Q2: 你在大學階段做過的最酷的事情是什麼?

學習架子鼓,組樂隊。

FCC DevTalk 001丨柳星:從材料工程師到 Apple 開發者

Q3: 你在大學時讀的專業是材料化學,為什麼轉行成為一名開發者?在轉行過程中你遇到過哪些困難,是怎麼克服的?

我的本科專業是材料化學,研究生專業是材料科學。研究生畢業之後,去了一家做飛機發動機的公司做質檢。至於轉行的原因,首先,工資相對低是一方面;其次,工廠的工作環境、以及看不到未來發展也是很重要的原因;再者,材料領域的發展已經趨於穩定,雖然不算是夕陽行業(比如機械),但至少不像 IT 領域發展的那麼快。

【經驗 1:發展快也有不好的一面。如果我當時沒做好長期學習的心理準備,或者只是想過簡單的生活,有一份穩定的工作,工資夠用就好,那不如維持之前的樣子】

自學過程中,遇到的困難肯定是不少的。一開始很迷茫,不知道該從什麼學起,聽人推薦,就先接觸了 Java,但我的感受是,當時寫出來的東西都無法為我提供一種視覺上的直觀反饋。直到一兩週之後接觸了前端,才覺得這個是我想做的。但精力有限,不可能什麼都學,所以就放棄 Java,開始學習 HTML、CSS 和 JavaScript,我也很慶幸當初做了這樣的選擇。

【經驗 2:興趣是最好的老師。對於沒興趣的 topic,逼著自己學就會很辛苦】

然後我用 10 天快速看完了《HTML & CSS》以及《JavaScript 語言精粹》。同時,在網上找到了 Codecademy,花了幾天刷完他們當時的所有教程,這才接觸到了 jQuery 和 angular.js。

【經驗 3:不滿足於現狀,更不要限制自己的學習資源和學習平臺。網際網路那麼大,多發掘一些,這樣你不僅會比其他人學得更多,還會學得更好】

在當時的 job market 上,jQuery 熱度已經逐漸退去,那時候的三大框架是 Backbone.js、Ember.js 和 angular.js。當時,React 還處於初級階段,只有 Facebook 以及那些特別 aggressive 的公司才會採用;Vue.js 甚至都還沒進入 market。所以,我就開始主攻 angular.js。

【經驗 4:過時的工具自然有過時的原因,有時候光聽別人說是不夠的,自己用過才能體會到,甚至能悟出一些只屬於自己的東西。雖說長期看來,學什麼都不會是錯的,但如果我們在學習的過程中多瞭解一下市場,看看現在的公司都需要什麼技術棧,就可以少走些彎路】

之後的一個月都是在學習 angular.js,學習的平臺也不侷限在 Codecademy。還發現了像是 egghead.io、Lynda 和 Udemy 等教學平臺,同時,我發現其實 Youtube 上的很多免費視訊也是非常好的學習資源。如果有人好奇我是如何在短時間內看完大量視訊的,祕訣就是 1.5 或 2 倍速,這個習慣一直保持到現在。

【經驗 5:只要是自己聽得懂的人類語言,加速播放絲毫不會影響你理解內容。如果加速聽不懂,多半說明普通速度播放的時候也聽不懂。唯一區別在於,聽加速的內容需要更高的專注度。這對我來說不是問題,相信對大多數決心轉行的朋友也不會是問題】

這期間,我還看完了《Pro AngularJS》和《ng-book》兩本書(儘管有些部分是跳過或快速看完的),這兩本書中會提供一些個人專案的建議和指導。同時,我也發現了一些高質量的技術部落格。我在學習做這些專案的時候接觸到 MEAN stack,就開始學習相關的內容。

【經驗 6:多寫專案遠比多看書重要。看書可以認為是系統的學習,但書本上的知識與實際應用之間是存在差距的。寫專案就是在解決實際問題,更是對書本知識的很好補充】

做專案過程中,遇到問題很正常(其實我覺得遇不到問題、一切順風順水才很奇怪)。我的解決方案很簡單,同時也很有效:看文件和 Google 搜尋。一開始不熟悉,由於關鍵詞不準確,經常找不到需要的內容。但不得不說,Google 的搜尋建議和匹配機制還是很不錯的,我可以看到可能相關的問題,同時瞭解到別人是如何提問以及如何解決的。

【經驗 7:學會自己解決遇到的問題,程式設計無非就是一個解決問題的過程。如果自己解決不了,學會如何提問真的很重要】

到了後半段,時常會遇到瓶頸,特別是有些內容理解不了。這時,我選擇有針對性地補一些相關的基礎知識。

【經驗 8:學習過程中遇到瓶頸,多半是因為基礎不牢】

然後就開始投簡歷,找工作。一個月的時間面了差不多 10 家,最後入職了 Rackspace。

【經驗 9:面試是一個查缺補漏的過程,不用害怕面試失敗,要及時總結。但要注意,有些公司,特別是大廠會有 frozen time,意思是不會允許一個未通過面試的人短期(可能是幾個月,可能是半年或一年)之內再來面試。所以如果目標是大廠,最好先面一些小公司練練手】

Q4: 你認同 Stack Overflow 聯合創始人 Jeff Atwood 說的“任何可以用 JavaScript 來寫的應用,最終都將用 JavaScript 來寫” 嗎?

這個問題我覺得應該分三方面來看:

  • 什麼 application 可以用 JavaScript 來寫

  • JavaScript 是否在特定領域具有不可替代性

  • 其他技術的發展是否會推動 JavaScript 的普及

FCC DevTalk 001丨柳星:從材料工程師到 Apple 開發者

語言層面,JavaScript 不太可能發展成為一個底層語言,所以它的使用場景一定是受限的。

顯然,JavaScript 在瀏覽器這個環境是不可替代的。但在服務端,我認為它是可替代的。

瀏覽器技術的發展不可謂不快,雲技術的發展同理。類似的,還有網速的提升,IoT 的普及,這些都會對 JavaScript 的發展起到推動作用。

所以我對上面的 statement 持中立態度。但相比之下,我更相信:

“Any application that can run on cloud, will eventually run on cloud”。

Q5: 你在 freeCodeCamp 社群中是一名非常活躍的貢獻者,特別是花了很多時間維護中文社群,可以分享一下你參與到這個專案的過程嗎?你希望接下來在這個專案中再做些什麼事情?

我最初遇到 freeCodeCamp 英文版是在入職第一份工作之後,大概是 2016 年初。當時我的感覺是,如果可以做出中文版,應該可以幫助到更多人,所以我就去搜尋了一下,發現已經有中文版了,而且程式碼就在 GitHub 上。

然後我就開始給 freeCodeCamp 中文版提交程式碼,主要是改正翻譯的錯誤,還有修復一些簡單的 bug。在這個過程中,我結識了很多小夥伴,也從他們身上學到了很多知識。

FCC DevTalk 001丨柳星:從材料工程師到 Apple 開發者

星星的部落格:singsing.io/blog/

同時,我開始寫 freeCodeCamp 演算法題詳解,併發布在自己的部落格和知乎上。

之後,我參與了新版課程從翻譯到上線的全過程,主要負責的是前端部分的程式碼,以及翻譯的稽核與校對。

最近一段時間,我在給英文版課程提供新的 project 挑戰題目,預計會貢獻兩道題。接下來,我計劃做 project 挑戰的視訊詳解,希望能幫助大家填補基礎知識與實際應用之間的鴻溝。

Q6: 為什麼 freeCodeCamp 社群小夥伴叫你星星姐?因為你是傳說中的女裝大佬嗎?

不是。。? 最早是在一個群裡,因為我喜歡、而且經常發 emoji 表情(就像前面這個),所以很多群(zhi)友(nan)就認為我是女的。然後這個叫法就一直流傳到現在。

Q7: 可以分享一下你在 Apple 的面試經歷嗎?在 Apple 工作是一種什麼樣的體驗?

限於保密協議,我沒法分享具體的面試題目。這邊大部分面試的流程都是演算法 + System Design + Behavior,一般需要一整天。面試內容的話,很少會專門考察某一個框架的細節,但不排除會聊到某個框架的使用經歷、解決了什麼問題、以及如何看待這個框架。

FCC DevTalk 001丨柳星:從材料工程師到 Apple 開發者

工作體驗的話,入職不久,整體上我感覺和之前在的公司(Rackspace 和 VMware)差不多。工作時間方面,啥時候幹完啥時候走就行,不打卡,也不要求工作時間。畢竟裝作很忙,實際沒事做是很浪費資源的。每週肯定是工作五天,有一天或兩天可以在家工作。我們組的工作時間基本上是早上 10 點到晚上 4 或 5 點。比如說,事情沒做完但要去接孩子放學,那早走一些再回家繼續做也是沒問題的,很多公司其實都是這樣,就是 flexible work hour。套用現在流行的說法,就是 WLB(work-life balance)。但在一些細節方面(比如吃喝,這個我其實很關注),Apple 就會稍差一點。然而,Apple 的員工卡、內部系統是目前我呆過的公司裡最好看的,這可能進一步印證了 Apple 的強項其實是設計?

Q8: 你平時有些什麼愛好?

除寫程式碼之外,

  • 打檯球,之前幾年經常會去參加 local tournament 或者 league,最近兩年參加得少了。

  • 偶爾出去拍拍東西,記錄生活。玩兒單反和無人機,最近開始嘗試拍視訊。

  • 很偶爾打遊戲。

  • 關注且喜歡買電子產品。

  • 喜歡看重金屬的 live show。

FCC DevTalk 001丨柳星:從材料工程師到 Apple 開發者

Q9: 你在 2019 年有些什麼計劃?

  • 之前在重構部落格,後來因為面試耽誤了,現在只想儘快寫完。

  • 做視訊,freeCodeCamp project 相關的視訊。

  • 寫部落格,主題是用 JavaScript 刷 LeetCode,這也算是對之前準備演算法面試的一個總結了。

  • 買房!

Q10: 你一般是怎麼安排每天的生活和工作的?

結合我之前在 VMware 的時間安排,基本是這樣:

  • 如果沒有特別的安排,早上 8 點半或者 9 點起床,洗個澡出門,一般 9 點之後路上就沒那麼堵了。

  • 開車通勤,路上一般會聽播客節目,技術類的為主。一直在追的有 Syntax.fm、JS Party、MacCast、Tools Day、freeCodeCamp 英文播客以及 Codepen Radio。非技術類的,個人比較推薦一天世界、科技聚變和科技富能量,這幾個是我認為比較有深度的播客。

FCC DevTalk 001丨柳星:從材料工程師到 Apple 開發者

  • 一般 10 點之前到公司,吃一點早餐,喝杯咖啡,吃點水果,看看郵件,準備一下 stand-up meeting 的內容。

  • 10 點半 stand-up meeting,會議結束後繼續喝咖啡,處理一些要緊的事情,或者做一下 code review,有時還需要和同事討論些問題。如果沒有特別的事情,就寫寫程式碼。

  • 11 點半或者 12 點吃飯,一般是和組裡的同事一起吃,有時候是和其他組的中國朋友一起。

  • 吃完飯我會選擇在周圍走走,一般 1 點之前回到座位上。

  • 午飯之後就不再喝咖啡了,我會泡上一杯茶(最近很迷鳳凰單樅),戴上耳機,開始幹活。

  • 我會選擇每工作 40 分鐘左右就休息 10 分鐘,在周圍走走,或者看看手機,刷刷 twitter 或者 instagram 之類的。

  • 3 點左右,開發任務一般都可以完成了,就 deploy 了測試一下。如果要開會,那我會爭取在開會之前把程式碼測試完。

  • 4 點左右,趁著路上還沒那麼堵車,抓緊時間回家。如果真的有要緊的任務沒做完,那就會晚點回家。

  • 5 點之前到家,做上米飯,解凍肉,和老婆一起去健身房(現在已經基本改成一個人去,另一個人做飯,輪換制)。

  • 6 點之前回家做飯,順利的話,7 點半、8 點就吃完並收拾好了。

  • 之後的半個小時或一小時一般會處理一些未完成的工作,或者看看有沒有重要的郵件和 Slack 留言,因為其他組員有在歐洲的。如果需要,會跟他們更新一下我這邊的進度。

  • 8 點半之後就是自己的時間了。逛逛 GitHub、處理一些問題(如果需要),翻翻 dev.to、看看訂閱的 RSS(強烈推薦這些:JavaScript Weekly、Node Weekly、Front End Weekly、Web Tools Weekly、Angular Weekly、React Status、Medium Daily Digest 和 Product Hunt Daily)。

  • 然後就會寫寫程式碼,自己的專案或者在做的開源專案。偶爾也會和老婆一起玩兒玩兒 Switch,比如前一陣剛通關 Overcooked,全三星。

  • 12 點或者 1 點睡覺。

相關文章