知言:《第一行代码》作者郭霖:不要成为工具的奴隶
知言是CSDN知识库特邀编辑的一类采访栏目,主要是听听特邀编辑讲讲技术那些事。
Android在最近几年得到了快速发展,2015年Google推出了Android 6.0系统,2016年又推出了Android 7.0系统。
紧跟技术更新步伐,郭霖推出了他的《第一行代码——Android 第2版》,该版本里面加入了很多很新的知识。新增内容包括有Android Studio、Gradle、Material Design、运行时权限、多窗口模式、RecyclerView、百分比布局、Lambda表达式、OkHttp、Doze模式等等,几乎囊括了Google近几年推出的所有热点技术。除此之外,还加入了几个比较完整的项目,不仅单个知识点的内容更加丰富,还加上了对各个知识点的综合运用。
与此同时,为了帮助大家更加系统全面地学习Android知识,CSDN特创建Android知识库,集中挑选优质内容(文章、图书、视频)呈现给大家。
郭霖,Android开发工程师,同时也是CSDN上的知名博主,《第一行代码》以及LitePal开源框架的作者。目前就职于蜗牛游戏,一直从事着Android开发工作。博客地址:[http://blog.csdn.net/sinyu890807/](http://blog.csdn.net/sinyu890807/)
CSDN知识库:可以跟大家分享一下你的技术成长之路吗?
郭霖:无论是谁,技术的成长都是靠不断学习慢慢积累来的,但不断学习是一个长期过程。人都是有惰性的,很多人白天在公司里累了一整天,晚上回到家就想好好休息休息,这也是人之常情。因此,如果你想比别人付出更多的努力,可能就需要一些额外的压力来推你一把,而我当时选择的这个额外的压力就是写博客。我在2013年刚开始写博客的时候,更新的频率还是很高,那个时候每周都要写一篇博客,每天晚上回到家之后就感觉还有很多忙碌的工作要做。而坚持写博客对我的技术成长起到了极大的正面作用,因为很多时候我并不是已经会了这个技术,然后写博客分享出来,而是我为了写博客分享出来,而专门去学习研究这个技术,这样每写一篇博客我自己也能成长很多,坚持了几年下来,技术也就有了很大的提升吧。
CSDN知识库:作为一名资深的Android开发者,能否分享一下Android程序员入门到精通可能遇到的瓶颈及挑战。
郭霖:精通这个我不敢说,因为我自己也没能达到精通Android的水平。不过Android和任何其他的技术一样,由浅入深都是越来越难的。而且刚入门的时候一般都有套路可寻,因为知识体系架构就是那些东西,但是当入了门之后想继续进阶,这就相当于打开了一扇新大门,很多人直接就迷茫了,不知道该如何进一步提升。其实不管是Android也好,其他技术也好,好的技术都是博大精深的,我觉得从来没有一个严格的标准能够定义什么样的知识属于进阶。很多人觉得会自定义View就是进阶,确实,自定义View是属于进阶知识,但这也只是进阶当中的一个UI方向而已。不同的项目侧重的知识点也不一样,比如IM软件就需要即时通讯技术、视频软件就需要视频编解码技术、游戏就需要引擎技术。即使是同一个项目,每个人负责的工作方向也会不一样,有些人负责架构搭建,有些人负责网络通信,有些人负责UI实现。因此,对于一些处于迷茫中的朋友,我给你们的建议就是,不必盲目去寻求到底该如何去进阶,其实只要你学会了之前所不会的东西,只要今天的你强过了昨天的你,那你就一直是在进阶的路上了。
CSDN知识库:已经有了《第一行代码——Android》,为什么还要写《第一行代码——Android 第2版》呢?两本书有什么区别?
郭霖:其实《第一行代码》对于我来说一直有些小小的遗憾,因为我在开始写这本书的时候,Android最新的系统还是4.3,主流的开发工具还是Eclipse,结果等这本书写完的时候,Android最新的系统已经是5.0了,主流的开发工具也变成了Android Studio。《第一行代码》在刚出版的时候内容就已经稍稍过时了,因此我一直计划着想在合适的时候推出《第一行代码 第2版》。恰巧这两年Android的发展极为迅速,去年推出了6.0系统,今年又推出了7.0系统,我认为现在可以说是非常恰当的时机来推出第2版,于是在今年年初的时候开始动笔更新,终于赶在年底之前成功出版了。
两本书之间最大的区别其实也就是Android 7.0和Android 4.x之间的区别,第2版中将这Android这些年引入的各种新技术进行了非常详尽的讲解,包括Android 5.0中引入的Material Design、Android 6.0中引入的运行时权限、Android 7.0中引入的多窗口模式等。另外,开发工具上的改变也是新书中的一大特色,第2版使用了最新的Android Studio 2.2来作为开发工具,相信会对很多不知该如何从Eclipse转向Android Studio的开发者们起到很大的帮助作用。
CSDN知识库:第2版能为开发者解决哪些问题?阅读本书的程序员是否需要有一定的基础技能要求?
郭霖:其实Android每升级一次系统,改动点都非常繁多,很多开发者可能并不知道新系统中到底增加或修改了哪些东西,因此在项目的适配方面也做得马马虎虎。而新版《第一行代码》中的所有例子都是兼容到Android 7.0系统的,并且新书也是非常详尽地介绍了5.0、6.0、7.0系统中的各种新特性,相信还是可以帮助开发者们解决不少项目在新系统适配方面的问题。
另外,《第一行代码 第2版》的主要知识体系仍然是基于《第一行代码》的。因此,这是一本对于初学者非常友好的书,阅读本书并不需要有任何的Android基础,但是必须要有一定的Java基础才行。
CSDN知识库:本书是基于Android 7.0编写的,分享一下你对7.0版本使用感受?在写作过程中遇到过哪些困难。
郭霖:本书虽然声称是基于Android 7.0编写的,但其中的内容并不仅仅是只有Android 7.0而已,而是集合了5.0、6.0、7.0中的综合知识。Android 5.0系统的改变非常巨大,除了底层虚拟机的完全替换之外,还衍生出了手表、汽车、电视等子系统。不过在我看来,5.0系统最大的改变就是Material Design了,因此新书中也是花了非常大的篇幅来详细讲解Material Design。Android 6.0系统对于用户隐私的保护越来越重视,最主要的一个变化就是加入了运行时权限功能,那么新书中对于这种重点功能的讲解当然也是绝对不会放过的。Android 7.0系统中引入了多窗口模式功能,可以允许用户同时打开两个应用程序来分屏进行操作,新书中对于这项炫酷功能也是进行了详细的讲解。其实我用Android手机已经从1.5系统用到7.0系统了,我确实是感觉Android系统一直都在越来越好,尤其是5.0系统的时候有了一次突飞猛进。现在最新的7.0系统变得更加人性化,我也希望未来的Android系统可以更加出色吧。
其实我在写《第一行代码 第2版》的时候,确实是遇到了不少困难。这本书目标是要兼容到7.0系统,但我开始写这本书的时候,7.0系统还没发布。可是我也不能等到7.0系统正式发布了以后再开始动笔,那就太迟了。因此,这本书一开始完全都是基于6.0系统来写的,然后等7.0系统发布了之后我又对全书进行了一次大规模的修订,将很多知识点进行增加和替换等等,返工量还是挺大的。不过这也是为了成为国内第一本基于Android 7.0的技术书所要付出的代价吧。
CSDN知识库:在实际Android的应用开发中,你是如何提高应用程序性能的?
郭霖:提高应用性能的手段实在是太多了,我觉得并没有一个什么固定的模式来提升。其实几乎所有的应用都有不少的性能提升空间,少执行一次循环可能都是一次不小的提升。另外优化程序的各种算法也可以为应用带来不错的性能提升,就拿一个最简单的排序算法举例,快速排序和冒泡排序的效率绝对不是在一个档次上的。
我之前在博客上写过一个Android最佳性能实践系列的文章,感兴趣的朋友可以去读一读这个系列,了解更多提升应用性能的技巧。文章地址是:http://blog.csdn.net/guolin_blog/article/details/42238627
CSDN知识库:分享一下你最近使用的开源框架,它们都解决了哪些方面的问题。
郭霖:其实我个人使用得开源框架非常少,不是因为我不信任开源框架的代码,或者是我能写出比开源框架更优秀的代码,而是因为我喜欢对代码有更强的把控力。使用框架虽然使开发变得更加简单,但是我觉得可能并不利于程序员真正理解底层的技术以及提升自身的能力,框架中出现了什么问题也不知道该怎么解决。就拿Glide举例,使用它来加载图片实在是太简单了,只需要一行代码就能搞定,但是Glide在背后帮我们执行了上千行代码的逻辑。开发是变得简单了,可是同时也变得傻瓜化了,这到底是一件好事还是坏事我也不知道,但我自己在选择使用框架的时候都会尽量尝试将它的源码也读懂,这样我觉得对自身能力的提升帮助更大。目前我使用得最多的开源框架大概就是OkHttp、Glide、以及我自己写的LitePal了,分别覆盖了网络、图片、数据库等领域,已经满足我平时开发工作的大多数场景了。当然我也有用过许多小型的开源框架,如CircleImageView、PhotoView等等。
CSDN知识库:除了Android开发,你平时还关注哪些技术?
郭霖:我平时还会时常关注一些服务器开发的技术。因为我一开始是做Java服务器开发的,当时在学校学习的时候目标就是做全栈开发工程师,因此,前端、Java、数据库之类的技术当时都有学习。虽说现在是做Android开发,但之前学过的那些知识也并没有都忘掉,偶尔需要开发一些简单的服务器功能的时候我还是可以做的。比如说《第一行代码》的第14章中会带着大家一起开发一个天气预报程序,但由于之前第1版中使用的第三方天气预报接口后期失效了,导致很多人这一章都无法正常学习。而第2版为了避免再次出现这个问题,我就自己开发了一套服务器接口来给读者们使用,以此保证书中的接口都是长期有效的。
我觉得任何一门技术都不能指望一辈子就靠它吃饭,每个程序员都可以适当多去了解一些额外的技术,说不定哪天就可以给你带来意外的帮助。
CSDN知识库:接下来是否还会有其它写作著书计划?
郭霖:暂时还没有,因为写一本书真的实在是太辛苦了。其实当时《第一行代码》出版之后就有不少出版社联系到我,想让我再写一本进阶的书,不过都被我拒绝掉了。因为我感觉一本书的工程实在是太浩大了,每次我翻一翻《第一行代码》那五百多页的内容,我都仍然不敢相信这些竟然是我一字字地敲出来的。之所以这次会写《第一行代码 第2版》,是因为它并不算是一个全新的著作,而是基于第1版的主体知识架构进行的升级,但即使是这样,我也觉得已经非常辛苦了,总共花费了近九个月的时间才完成。因此,短期内我想先休息休息,腾出更多的时间来钻研钻研技术、写写博客。当然,技术这个东西发展得非常迅速,尤其是现在VR(虚拟现实)和AI(人工智能)的呼声越来越高,等这些未来的技术变得越来越普及,逐渐影响到我们生活的时候,我可能会考虑开始写下一部著作吧。
CSDN知识库:工作中,你有哪些技术提升方法?
郭霖:其实我每天也在不断学习新的知识。我所学的东西涉及的面并不广,但是我一般会尽可能研究得深入一些。通常我都会尽量去阅读英文原文资料,包括Android官方文档、*等,这个时候Google就是我最好的帮手。然后我还会在GitHub上挑一些感兴趣的开源项目来进行研究,其实我用过的开源项目真的很少很少,但是一旦我开始研究它,那就不会仅仅停留在使用的层面上,而是会去研究它的源码,了解它具体是如何实现的。其实多看看一些开源项目的代码,对于自己的编程思路以及编程能力都是有挺大提升的,这也是我现在提升自己的其中一种方式吧。
更多内容请关注CSDN知识库。该产品汇集了领域专家们精心绘制的各重点技术领域的知识图谱,及由特邀编辑(领域专家)从海量数据中层层筛选出的精华内容和资源(学习视频、实践Demo、图书)。知识图谱可以帮助开发者全局把控该技术领域,而精选内容更能让开发者从技术细节加深了解该领域的每个核心技术点。扫描以下二维码,获取更多CSDN知识库内容。
快来领取你的个人知识库=>>点击创建