看一看Facebook工程師是怎麼評價《第一行代碼》的

本文同步發表於我的微信公衆號,掃一掃文章底部的二維碼或在微信搜索 郭霖 即可關注,每個工作日都有文章更新。

大家好,我是一名Facebook的工程師,同時也是《第一行代碼——Android》的忠實讀者。

雖然我最近幾年是在國外讀書和工作的,但是和很多人一樣,我也非常喜歡郭霖的博客以及他寫的《第一行代碼——Android》。

事實上,這本書在我面試 Facebook 的時候給我提供了很大的幫助。爲此,我專門爲這本書寫了這樣一篇書評,同時也跟大家分享一下我自己的經歷。

我是誰?

先來簡單介紹一下我自己吧。

2008 年,我進入北京理工大學就讀。

2012 年的時候以交換生的身份進入了美國普渡大學攻讀碩士。

2015 年畢業,之後加入第一家公司 VMware,在那裏工作了近 4 年時間。

今年年初,我參加了 Facebook 的面試,並且順利地通過成爲了一名 Facebook 的軟件工程師。

與書結緣

和很多人一樣,我最初知道郭霖,是通過他 CSDN 的博客。那時候我還在 VMware 工作,並且剛剛從 Windows UWP 組轉到 Android 組。

由於工作內容發生了很大變化,在開發過程中我遇到了很多問題。也許是機緣巧合吧,我在網上搜索 Android 學習資料的時候,正好在 CSDN 上看到了郭霖的技術博客。他的文章寫得很有邏輯感,思路清晰,總結得也很好,而且基本都有代碼展示,非常實用。

看了郭霖的博客,我連續解決了幾個之前不太懂的地方,而且還比較系統地瞭解了 Android 的知識。可以說郭霖的博客堪稱我 Android 學習之路上的“一盞明燈”。

後來得知郭霖要把博客內容整理出版,我就特別期待。《第一行代碼——Android》第 2 版出版以後,我第一時間就在國內購買了,並託朋友帶了過來,也算是海淘國貨了。

助力面試

事實上,《第一行代碼——Android》這本書在我面試的時候幫了我的大忙。

美國軟件工程師的面試和國內可能不太一樣。面試的內容主要分爲算法、相關專業知識、系統設計,還有 Behavior Question,俗稱 BQ。有的公司可能還會直接讓你寫一個 App 出來。面試的具體形式是什麼樣子的,面試官會提前跟你說清楚。

而面試 Facebook 時,我的 Android 主要備考資料就是《第一行代碼——Android》,事實證明這本書派上了很大的用場。我是在 2019 年年初開始準備面試的,總共面了 Facebook、LinkedIn、Airbnb 和一家西雅圖的初創公司 OfferUp。這幾家全部都是美國西海岸的公司,而我從美國東海岸飛過去需要四個半小時的時間。於是,每一次面試的時候,我都在飛機上覆習一下前面幾章關於 UI 方面的知識,然後到酒店之後再複習一下後面的內容,第二天面試一般都是十點開始。在面試之前,我又會翻開書來隨機看一看。可以說《第一行代碼——Android》完全成了我的 Android 複習資料。

就我自己的面試經歷來說,《第一行代碼——Android》覆蓋了絕大部分的 Android 面試題目,尤其是 UI 相關的問題,很多都在這本書裏面講到了。但是由於我簽了 NDA,所以不能透露具體哪一家公司考了哪些題目。其中 Facebook有一道題目我印象非常深刻,當時我把《第一行代碼——Android》中總結的知識點都說了出來,面試官大喜,說這是他面過的所有人當中回答得最好的!

其實,當時我還在亞馬遜買了一些美國的流行 Android 教材,比如 Big Nerd Ranch 什麼的。美國的教材特點是普遍篇幅很長,動輒 700 多頁,甚至上千頁。書中有很多細節和截圖,非常適合一步一步地跟隨學習。但是這樣的大部頭簡直就像是字典一樣,看起來非常不方便,對於想要快速入門或者準備面試的人來講可能並不是一個很好的選擇,因爲這兩種情景都需要在很短的時間裏面把知識點總結出來,那麼篇幅太長、充滿太多細節的書顯然不太適合這些場景。

而《第一行代碼——Android》是一本有細節同時又高屋建瓴的一本書。在知識點的取捨上面,作者拿捏得恰到好處;在內容章節的安排上,也做得非常科學與合理。這本書在有限的篇幅裏講明白了關於 Android 基本所有必需的知識點,甚至還有業界的 Best Practice,這和美式的圖書形成了鮮明的對比。


“Android 學習第一書”

《第一行代碼——Android》被讀者們親切地稱爲“Android 學習第一書”,因爲它對於新手來說非常友好,內容上由淺入深,語言上通俗易懂。

這本書先討論了 Android 的整體框架,使讀者對整個 Android 的歷史還有運行的機制有一個大概的瞭解。這些內容雖然對開發沒有直接的作用,但其實非常重要,對於讀者形成一個框架思考模式很有幫助,在以後的學習和實踐過程中也可以起到一定的指導作用。

然後討論了能很快看到反饋的 UI 的知識,提升讀者的閱讀興趣。接下來分別對 Android 的四大組件進行了較爲深入的討論。本書特別值得稱道的一點是對四大組件的討論並不是毫無聯繫地、孤立地去闡述,而是通過 Intent、AndroidManifest 等內容把四大組件串在了一起。另外,每一個章節都有實戰的內容,親自動手實踐下會非常有好處。

就連官方內容之外的一些知識點書裏也有介紹。這些知識點很多都是業界常用的, 比如 OkHttp、Glide,等等。這些開源庫,如果沒有相關的開發經驗,只是看官方文檔,就很難知道爲什麼要使用它們,在面試的時候就很容易回答不上來。而這本書將所有的這些知識點都結合應用在了實戰當中,幫助讀者去更好地理解。

當然,限於篇幅的原因,《第一行代碼——Android》並不能覆蓋到所有的知識點,比如關於 memory leak 等方面的討論還比較欠缺,所以準備面試的時候還是要單獨準備一些常考的知識點。但就概率來講,能把這本書看完大半,就已經足夠應付初級程序員的面試了。

自 Android N 之後,Android 系統本身也進化了不少,開發的方式也有了一些變化,比如現在 Google 已經首推使用 Kotlin 來進行開發了。聽說《第一行代碼——Android》要推出第 3 版,我也非常期待。同時也希望能夠翻譯成英文版,賣到美國來,這樣子可以讓美國的同行們瞭解一下中國程序員思考問題的方式以及對知識架構的理解。

當然了,紙上得來終覺淺,絕知此事要躬行。在學習本書或者說任何技術類圖書的時候,動手總是最重要的。如果僅僅是看了書就想當然地覺得自己學會了的話,就很容易在實踐尤其是面試中吃虧,因爲在實際的編程過程中總會出現這樣那樣的小問題,尤其是一些公司面試喜歡直接上手寫 App,如果平時沒有大量的練習的話,就很難在這樣實操型的面試中勝出。

《第一行代碼——Android》的代碼很有代表性,絕大部分示例都推薦你親自去實現一遍,如果記不住,就算是上機抄一下代碼也是極好的。此外作者郭霖的微信公衆號也經常發很多高質量的乾貨文章,推薦關注。

seanlitow

2019 年 7 月於 Menlo Park


附:

很感謝seanlitow願意幫忙寫這樣一篇書評文章,但是大家應該不知道,這篇文章背後的誕生過程其實還是很不容易的,最後我跟大家分享一下。

實際上這篇文章早在6月11號就已經寫好了,我花了一週左右的時間進行了一些簡單的修訂。但是Facebook要求,如果員工對外發布與Facebook相關的信息時,需要通過公司的審覈才行。於是seanlitow又將文章翻譯成了英文,發給他的主管進行審覈,又花了一週多的時間。可是過了主管審覈之後才知道,原來還得再通過conflicts committee的批准才行,大公司在這方面的審查確實非常嚴格。

我不太懂conflicts committee的工作流程,但是估計他們每天都要處理很多審覈吧。正好又在7月初趕上了美國的國慶節,這篇文章的審覈流程就一直被卡在那裏好幾周,seanlitow也幫忙催了好幾次,到了7月下旬才終於審覈通過。

由於這是一篇《第一行代碼》的書評,因此我聯繫了一下圖靈出版社的編輯,希望這篇文章也可以在圖靈官方的公衆號上同步推送一下。雖然圖靈那邊很爽快地答應了,但是這篇文章也要經過圖靈編輯的審覈才行。而且出版社的公衆號對文章的要求更加嚴格,即使像我這種已經寫過兩本書的人,每次的稿件發給他們也會被做大量的修訂。

這篇文章當然沒能躲過這個命運,修訂又花了兩週左右的時間,以至於拖到了現在才發佈。但值得高興的是,經過圖靈的修訂之後,這篇文章的確變得更加出色了,圖靈編輯們的認真和專業態度值得欽佩。

在這篇文章從編寫到發佈的過程中雖然經歷了很多預料之外的情況,但seanlitow一直都極力配合。不管是文章的編寫、Facebook內部審覈的推進、還是聽取出版社這邊的修訂建議,seanlitow都做到了讓人稱讚的程度。我漸漸能夠理解他爲什麼可以進入Facebook工作了,真的和《第一行代碼》無關,而是因爲他是一個無論做什麼事情都非常用心的人,而我也很高興能夠認識這樣一位朋友。

郭霖

2019 年 8 月


關注我的技術公衆號,每個工作日都有優質技術文章推送。

微信掃一掃下方二維碼即可關注:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章