大家好,我是一名Facebook的工程师,同时也是《第一行代码——Android》的忠实读者。
虽然我最近几年是在国外读书和工作的,但是和很多人一样,我也非常喜欢郭霖的博客以及他写的《第一行代码——Android》。
事实上,这本书在我面试 Facebook 的时候给我提供了很大的帮助。为此,我专门为这本书写了这样一篇书评,同时也跟大家分享一下我自己的经历。
1. 我是谁?
先来简单介绍一下我自己吧。
2008 年,我进入北京理工大学就读。
2012 年的时候以交换生的身份进入了美国普渡大学攻读硕士。
2015 年毕业,之后加入第一家公司 VMware,在那里工作了近 4 年时间。
今年年初,我参加了 Facebook 的面试,并且顺利地通过成为了一名 Facebook 的软件工程师。
2. 与书结缘
和很多人一样,我最初知道郭霖,是通过他 CSDN 的博客。那时候我还在 VMware 工作,并且刚刚从 Windows UWP 组转到 Android 组。
由于工作内容发生了很大变化,在开发过程中我遇到了很多问题。也许是机缘巧合吧,我在网上搜索 Android 学习资料的时候,正好在 CSDN 上看到了郭霖的技术博客。他的文章写得很有逻辑感,思路清晰,总结得也很好,而且基本都有代码展示,非常实用。
看了郭霖的博客,我连续解决了几个之前不太懂的地方,而且还比较系统地了解了 Android 的知识。可以说郭霖的博客堪称我 Android 学习之路上的“一盏明灯”。
后来得知郭霖要把博客内容整理出版,我就特别期待。《第一行代码——Android》第 2 版出版以后,我第一时间就在国内购买了,并托朋友带了过来,也算是海淘国货了。
3. 助力面试
事实上,《第一行代码——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,这和美式的图书形成了鲜明的对比。
4. “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