freeCodeCamp 訪談丨柳星:從材料工程師到 Apple 開發者

原文發佈在 freeCodeCamp 中文社區論壇:chinese.freecodecamp.org/forum/前端

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

小小透露一下,星星時常在 freeCodeCamp 中文社區 QQ 羣(722075637)出沒,大家要不要去跟他探(qin)討(mi)技(jie)術(chu)吶~暗號就說「星星姐」好了,不謝。算法

Q1: 能夠講講你的童年生活嗎?編程

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

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

父母對個人管理也相對嚴格,因此家裏歷來不會買任何遊戲機。但我從小就接觸到了打字機、第一代的黑白打印機、彩色打印機。5 歲的時候,我接觸到了 Windows 3.2 和 Windows 95。儘管那時候對編程尚未什麼概念,但這些經歷幫助我接觸並初步瞭解了計算機。好比,經過一些練習,我開始學着固定指法,進而學習盲打。再好比,若是沒有接觸過打字機,我可能到如今也不會明白鍵盤上爲何會有 Shift 和 CapsLock,以及它們爲何會佔用鍵盤上的黃金位置。app

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

學習架子鼓,組樂隊。工具

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 的普及

語言層面,JavaScript 不太可能發展成爲一個底層語言,因此它的使用場景必定是受限的。

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

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

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

「Any application that can run on cloud, will eventually run on cloud」。

Q5: 你在 freeCodeCamp 社區中是一名很是活躍的貢獻者,特別是花了不少時間維護中文社區,能夠分享一下你參與到這個項目的過程嗎?你但願接下來在這個項目中再作些什麼事情?

我最初遇到 freeCodeCamp 英文版是在入職第一份工做以後,大概是 2016 年初。當時個人感受是,若是能夠作出中文版,應該能夠幫助到更多人,因此我就去搜索了一下,發現已經有中文版了,並且代碼就在 GitHub 上。

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

星星的博客:singsing.io/blog/

同時,我開始寫 freeCodeCamp 算法題詳解,併發布在本身的博客和知乎上。

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

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

Q6: 爲何 freeCodeCamp 社區小夥伴叫你星星姐?由於你是傳說中的女裝大佬嗎?

不是。。😂 最先是在一個羣裏,由於我喜歡、並且常常發 emoji 表情(就像前面這個),因此不少羣(zhi)友(nan)就認爲我是女的。而後這個叫法就一直流傳到如今。

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

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

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

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

除寫代碼以外,

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

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

  • 很偶爾打遊戲。

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

  • 喜歡看重金屬的 live show。

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

  • 以前在重構博客,後來由於面試耽誤了,如今只想儘快寫完。

  • 作視頻,freeCodeCamp project 相關的視頻。

  • 寫博客,主題是用 JavaScript 刷 LeetCode,這也算是對以前準備算法面試的一個總結了。

  • 買房!

Q10: 你通常是怎麼安排天天的生活和工做的?

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

  • 若是沒有特別的安排,早上 8 點半或者 9 點起牀,洗個澡出門,通常 9 點以後路上就沒那麼堵了。

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

  • 通常 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 點睡覺。

相關文章
相關標籤/搜索