Android 大牛是如何炼成的:郭霖的成长之路专访,flutter 游戏引擎
我当初不明白这个道理,那个时候更看重的是实践能力,觉得做出一个 App 比解出一道算法题要厉害多了。殊不知算法考验的是编程的思维和底蕴,而 App 考验的只是业务逻辑能力。这么多年过去了,当初我写 App 用到的技术现在早已过时,而算法永远都不会过时。
毕业多年之后,我才慢慢懂得了这个道理,后来我花了大量的时间在算法和数据结构方面进行补课,也算是为自己当年的无知买单吧。希望现在的学生能好好重视这门课程,不要像我当初一样。
另外,这几年人工智能技术非常火热,而这个行业的前面树立着高高的数学城墙。所以,大学时的高等数学和线性代数这两门课程就非常重要了。
很可惜,这又是我当初没能学好的两门课程。总之,感觉自己还是有很多遗憾的,希望现在的学生能更加意识到一些大学课程的重要性。
4. 你在学习和研究 Android 技术的过程中,有哪些重大的转折点或者让你印象深刻的经历?
我在学习 Android 技术过程中的重大转折点,我认为是在 2013 年的时候,我做出了开始写技术博客这个决定。没有这个决定,就不会有后来的《第一行代码》。所以我一直都认为这是我人生的一个重要转折点。
我在上大学的时候是学校里公认的编程高手,但是我却不知道自己有写技术文章的能力。这个事情很奇怪,我那时没有写过博客,没有这方面的经验,只是抱着记录自己的学习过程这样的心态去写的,但是看过我文章的朋友都说我写的文章最容易理解。
陈冰老师更是在我仅仅写了四篇文章的情况下,就邀请我去编写《第一行代码》这本书,当时我还担心自己是不是遇到骗子了。要知道,那个时候我才刚刚毕业不到一年时间,直到现在想想仍然还是觉得挺不可思议的。
5. 从 2013 年到现在,你坚持写作技术博客快 8 年了,这需要惊人的毅力和难以想象的付出。我们很多读者朋友都是通过阅读你的博客成长起来的,优质的内容让他们受益良多。那么坚持写作这件事对你自身而言,有哪些帮助或者好的影响?
我只能说,写技术博客对我自身的帮助和影响实在是太大了。前面已经说了,决定开始写博客对我来说是一个重要的转折点,没有这个决定也就不会有后来的《第一行代码》。
至于为什么可以坚持写了这么多年,其实并不是因为什么责任扛肩上。原因很简单,写博客对于我来说是一个自我学习的过程。技术变化日新月异,移动开发并不是一个学会了就可以一劳永逸吃一辈子的行业,你必须保持不断学习。
我在学习各种新技术的时候,为了更好地记录和整理,会将它们写成博客。我相信很多人在学习的时候都有做笔记的习惯,我只是把这个笔记写得更加详细和清晰,让这些笔记不光我自己能看得懂,别人也可以看得懂,仅此而已。
6. 你写作一篇技术博客平均要花多长时间?平时工作很忙,你是如何保持如此高产的?
正所谓慢工出细活,我写文章的速度其实很慢的,平均大概要一周才能写出一篇技术博客,直到现在这个速度也并没有提升多少。
我写文章会经历几个固定阶段,包括构思内容,勾画大体知识框架,编写 Demo,写成文章,检查语病和错别字,最后才会发布出来。很多读者觉得我的文章疏漏很少,因为我在发布之前会做比较严格的检查。
至于问我如何保持如此高产,这明显不是一个事实。因为我写文章的速度是比较固定的,所以空闲时间多的时候我就能高产一些,而工作繁忙的时候,我就很难抽出时间写文章。
从 CSDN 的年度文章统计其实就可以看出,2013 年我一共编写了 45 篇技术博客,而 2018 年一共只写了 7 篇。不过好在今年我的产能还算不错,目前已经写了 17 篇,平均每个月两篇左右,希望可以继承保持下去吧。
7. 你的博客写得通俗易懂,你的文字就像具有魔法一样,无论多么复杂的内容,你都能讲得清晰透彻,请问你有哪些写作经验和写作技巧?
这个问题还真有不少朋友问过我,但实际上,我也不知道该如何回答。
刚才说了,我其实自己都不知道自己竟然有写技术文章的能力,我之前没有做过这方面的练习,也没有学过任何写文章方面的资料,就只是凭着感觉去写,没想到竟然能够得到那么多人的认可。
上次和一位朋友聊天时,他就问了我同样的问题,我知道他是希望我能给出一个总结好的固定的套路和流程,然后按着这套流程就能写出一篇好文章。但是我自己的脑海里从来没有固定的写作框架。
我在写文章时,最多只是会列举一下这篇文章大体要写哪些知识点,把它们列成目录,然后就是想到哪儿写到哪儿了,我也总结不出更多的东西。所以最后反倒是他帮我总结出了一个结论,说我在这方面是有天赋的。
不过在写文章的时候,我有时会对一句话反复读来读去,感觉不够通顺或者表达不是很准确的时候,我就会尝试换一种表达方式,以保证整篇文章读下来的感觉都是通畅的,或许这也是我文章写得慢的其中一个原因吧。
8. 现在新技术的发展日新月异,开发者要提升自己的学习能力,不断掌握新知识,扩展知识领域,才能及时跟上时代的步伐。你的学习能力非常强,学习效率也很高,请你分享一下你的学习经验和建议。
这个就有点不太好意思了,我并不认为我的学习能力很强,可能只是学习方法比较正确而已。
想要持续跟上各种新技术日新月异的发展,首先要明确学习的方向才行。那么要怎样明确学习的方向呢?我个人的方式是始终跟着 Google 的节奏走。
我每年都会看 Google 的 IO 大会,在这些大会上,Google 每年都会推出各种新技术,而这些新技术通常就预示着下一代的开发潮流,那么就可以成为你的学习方向。
有了学习方向之后,接下来就是要怎样去学习的问题了,我通常会使用 Google 搜索好的学习资料。这个很简单,输入你想要学习的某个技术的关键字,一般搜索结果比较靠前的就是最佳的学习资料了。
我拥有的一个优势是,我阅读英文技术资料的能力还不错,通常学到的技术内容可能就超前一点。所以,把英语学好,对于你做软件开发这个行业,会有比较大的帮助。
另外,我一直热衷于参加 Google 的各种线下技术活动,之前都是作为观众参与,今年首次在 GDG 上进行了技术演讲。受疫情的影响,今年线下活动的人数受到了严格的限制,但即使是这样,我也感受到了非常浓厚的技术氛围。
有许多开发者与我进行了技术讨论,他们咨询了我很多问题,同时也发表了他们自己的观点,我也从中学到了很多。如果以后有机会,我还会去参加更多的线下技术交流活动,这是一个非常棒的体验。
9. 今年你申请了 Android GDE(Google 认证开发者专家),并且顺利通过,恭喜你!这一认证对于一位 Android 开发者而言,是非常有意义的。能否请你为大家分享一下申请的宝贵经验呢,比如需要具备哪些条件,申请流程是什么,面试流程是怎样的。
谢谢,能够成为 Android GDE 我也感到非常荣幸。其实,一开始收到 Google 邀请的时候,我还是有点犹豫的,因为 GDE 申请的流程非常复杂,而且还要用英文进行面试,我对此并不是非常有信心。
但是感觉如果拒绝 Google 的邀请又有点不太礼貌,所以我就抱着试一试的态度去申请了。结果我的运气非常好,成功地成为了一名 GDE,对此我也感到非常开心。
这一认证对我而言是非常有意义的。现在我和 Google 建立了直接的联系,有技术问题也可以直接向 Google 进行咨询,所以对于我自身的学习帮助是非常大的。
至于申请 GDE 的流程,Google 对申请人的技术能力以及技术影响力有比较高的要求,会对你的申请资料进行严格的审查,以评估是否满足 GDE 的资格,接下来还要通过两轮面试,才能正式成为一名 GDE。
我在博客中写了一篇非常详细的文章来介绍整个申请过程,感兴趣的朋友可以到《分享我成为GDE(Google开发者专家)的经历》这篇文章中去了解。
10. 除了研究 Android 技术和工作之外,你还抽时间开发了 LitePal、giffun、PermissionX 等多个开源项目。这些项目都是兴趣所致,但都受到了 Android 开发者的关注和喜爱,那么你开发这些项目的契机分别是什么?
其实对于任何一个开发者而言,如果你写的开源项目能够被很多其他开发者使用,这都是一件很酷的事情。所以我相信每个开发者都是愿意去写开源项目的,只是可能还没有找到一个好的契机或切入点而已。
而我写的这些开源项目,切入点都是那些我认为开发中存在的痛点。以前工作时需要频繁和数据库打交道,SQL 语句写到想吐,所以我就写了 LitePal 这个开源库,来简化 Android 上的数据库操作。
另外,Android 提供的权限申请 API 非常不友好,每次编写申请权限的代码,对我来说都是一个痛苦的过程,所以我一直希望能编写一个开源库来让权限申请变得简单,于是就有了 PermissionX。
值得一提的是,PermissionX 的第一个版本其实来自于《第一行代码——Android(第 3 版)》,本来主要是为了教读者朋友们如何开发一个开源库的,后来我发现这个项目的意义不仅限于教学目的,而是真的可以投入实际的项目中使用,所以后期又对它做了很多的功能增强,才变成了现在的 PermissionX。
11. Google 非常重视 Kotlin,将 Kotlin 作为了 Android 开发第一语言。你也一直比较看好 Kotlin,将《第一行代码——Android》(第 3 版)使用了 Kotlin 语言进行重写。但是与国外相比,Kotlin 在国内的热度目前似乎不是特别高,你觉得真实情况是怎样的,背后的原因是什么?
使用 Kotlin 语言的原因很简单,因为这就是未来。我觉得作为 Android 开发者,需要做的是去适应技术趋势,而不是去对抗它。
每年 Android 的开发技术都会发生很多变化,而近几年最大的变化莫过于编程语言的改变。
Google 在 2019 年的 IO 大会上明确宣布了 Ko
tlin First,所以 Kotlin 目前是 Android 开发的第一语言。作为 Android 开发者,我们必须去适应 Google 的技术趋势。
目前 Kotlin 在国内的热度还不算高,我认为主要是因为 Google 的新技术在国内有一定的滞后性,普及还需要一定的时间,但是毫无疑问,Kotlin 是 Android 开发的未来。
Google 现在主推的许多新技术都是基于 Kotlin 的,比如说协程。已推出的各种库也在用 Kotlin 重写,比如 Room、Paging3 等。未来即将推出的新技术也会基于 Kotlin,比如 Jetpack Compose。
也就是说,如果不学习 Kotlin,可能将会完全跟不上以后的 Android 技术开发趋势。所以,我相信 Kotlin 在国内终将会普及,只是时间的问题。这也是《第一行代码——Android》(第 3 版)使用 Kotlin 进行重写的原因。
总结
像郭霖这样的“大牛”国内虽然不多,但是也有不少,他们之所以获得这样大的成功,很大的原因就在于他们掌握的并不仅仅只有表面的技术,还会深入底层,在工作之余会关注新技术。
在 Android 这条漫长的道路上,我们不仅仅要掌握技术,还要深入底层,弄明白下面的原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。
我把自己这段时间整理的 Android 最重要最热门的学习方向资料放在了我的GitHub:https://github.com/xieyuliang/Android-P7-share/blob/master/Android%,里面还有面试题集合/面经、及系列技术文章等。
知识点整理
目录(不要说什么眼熟,是真的需要这些知识点)
(一)架构师必备 Java 基础(二)设计思想解读开源框架(三)360°全方位性能优化(四)Android 框架体系架构
评论