专访任玉刚:从菜鸟到资深工程师的进阶之路

任玉刚,百度公司Android资深工程师,《Android开发艺术探索》作者,热爱分享和开源,常年活跃在CSDN和Github。除此之外,他还是CSDN博客专家,2014十大博客之星。从一名菜鸟演变为资深工程师,在他看来,也有自己的辛酸历程,尽管他已成为一名资深工程师,但他仍然不敢自称为“高手”,因为技术是无止境的,对技术应该抱有一颗敬畏的心理。
  
  任玉刚,百度公司Android资深工程师
  CSDN:请先自我介绍下,目前的工作领域以及公司。
  任玉刚:大家好,我是任玉刚(微博),是一名Android程序员,目前我在百度公司参与百度手机卫士的开发工作。我时常活跃在CSDN和Github上面。
  CSDN:从最初的Android菜鸟到如今的Android高手,这一路走来你有哪些辛酸历程?给你最大的感悟是什么?
  任玉刚:虽然我在Android开发技术领域有了一些自己的理解,但是仍然不敢自称为“高手”,因为技术是无止境的,我们对技术应该抱有一颗敬畏的心理。
  目前我从事Android开发工作已经有3年了,和大多数Android开发者一样,我也是一步一步过来的。尤其是我12年刚接触Android开发时,由于缺乏专业的指导,整个学习过程基本上都是以摸索为主,这个阶段就会感觉进步很慢,甚至有时候还会犯一些比较低级的错误,比如曾经用View去post一个runnable,然后在run方法中做耗时的操作。这种摸索的学习方式在一年后有了改善,毕竟摸爬滚打了一年,我也渐渐有了自己的学习方式和心得体会,就这样持续努力地学习着,到目前为止可以算是对Android应用开发有了一个不错的理解吧。
  如果问我这三年的学习生涯中最大的感悟是什么,那我想说:“应该是学习路线和技术书籍的缺乏吧“。为什么这么说呢?
  首先说学习路线。Android开发给人的感觉是门槛很低,因此有不少人会说Android很简单,实际上Android开发即简单也不简单。简单是因为它入门快、上手简单,不简单是因为Android的知识点比较琐碎,如何从琐碎的知识点中理解Android的本质并形成一个完整的知识体系,这是不简单的。相信不少开发者会有这种感觉,那就是觉得Android的好多知识点自己都懂,但是又不是特别懂,这点在面试中体现地比较明显,“我做应用开发完全没问题,但是大公司的技术面试却很容易失败”这种感觉相信很多人都会有,这就是碎片化的知识未形成一个完整的体系的表现。如何对Android建立全面的理解?这需要一种有效的学习方式,在学习过程中需要知道哪些知识点需要深挖、哪些知识点需要融会贯通、哪些知识点了解即可。有关Android学习路线这是一个深入的话题,并且有可能没有最佳的学习路线,因人而异。我结合自己在Android应用层的学习过程,描述了一个适合我自己的学习路线,大家可以适当参考下:http://blog.csdn.net/singwhatiwanna/article/details/49560409
  然后说一下技术书籍。如果大家看了上面的那篇Android学习路线,就会发现那上面提到的很多知识点都有一定的难度,并且也没有相应的书籍去专门介绍这些知识点,我曾经翻遍了图书馆的Android书籍,也没有找到一本书有讲述View的滑动冲突这方面的内容。所幸的是国内的Android技术圈比较活跃,网络上会有一些比较不错的技术文章可以供开发者提高Android开发水平,但美中不足的是,不少技术文章都比较零散并且也没有那么全面。这个时候一本好的技术书籍,它的作用无非是巨大的。
  CSDN:为何想到写《Android开发艺术探索》这本书?契机是什么?
  任玉刚:相信很多人已经阅读过《Android开发艺术探索》并且也很理解我写这本书的初衷,因为我在前言中做了详细的描述。我在前面有提到,国内的Android开发者在提高的过程中缺乏合适的学习路线和技术书籍,主要是市面上入门书籍太多了,但是我们不否认入门书籍为Android技术普及所做的巨大贡献,然而仅仅通过入门书籍的确无法进一步提高开发者的技术水平。为了让Android开发者更好地提升自己的技术,于是我写了这本书,读过书的朋友都知道,书中很多知识点都是新颖的、网络上无法搜索到的。
  从内容上来说,《Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。书中从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些知识点;第二,结合Android源代码和应用层开发过程,融会贯通,介绍一些比较深入的知识点;第三,介绍一些核心技术和Android的性能优化思想。可以看到,书中通篇几乎没有入门知识,更加侧重于Android知识的体系化和系统工作机制的分析,通过这本书的学习可以极大地提高开发者的Android技术水平,从而更加高效地成为高级开发者。
  有很多读者和我反馈,说这本书适合面试,很多公司的一些看起来很难的面试问题书中都有提及。但是我写这本书的目的不是为了让大家更好地面试,而是更好地提高技术从而成为高级工程师。
  CSDN:写这本书期间有没有遇到过困难,又是如何克服的?
  任玉刚:写书的过程是艰辛的,遇到最大的困难就是难以坚持。由于白天需要上班,晚上有时候还有加班,因此写书的时间就只有周末和每天晚上下班后了。大概书写到第4章的时候,有时候写着写着就会突然觉得好难受,压力好大的感觉,但是想到这本书对广大Android开发者的意义,想到我写这本书的初衷,我就会觉得这件事必须坚持下来,很多时候我们缺乏的就是坚持。回想起写书的过程的确很辛苦,但是书出版后我收到了很多读者对我的反馈,其中最多的反馈就是类似于“谢谢你写了这本书,让我很多知识点都豁然开朗”这种了,我很欣慰,总算心愿得以完成。可能有人说,写书是为了赚钱,这个了解的人都知道,通过写技术书籍来赚钱其实是不划算的。就我来说,写这本书的目的是为了更好地提高Android开发者的技术水平,同时传播我的技术,我是一个热爱开源、热爱分享的Android程序员。
  CSDN:在你看来,Android开发者在学习过程中最棘手的问题是什么?
  任玉刚:其实棘手的问题有很多,这里列举几个,比如自定义View、滑动冲突、IPC、源码阅读等等,Android开发者都深有体会,自定义View算是一个比较难的话题了,滑动冲突就更不用说了,很多开发者都搞不清楚如何处理滑动冲突。IPC的话主要是指AIDL和Binder相关的一些东西,这个在Android开发中真的很重要,至于源码阅读这个就更难了,很多人估计会觉得无从下手,其实这些都是可以理解的,因为它的确有难度,但是它们都是可以克服的。
  自定义View和滑动冲突其实归根结底就是View相关的东西,把诸如View的滑动、事件分发以及View的底层工作原理搞懂,自定义View和滑动冲突就可以很好地解决了。
  这里再说一下源码阅读的事。首先要学会下载源码,推荐的下载方式是从Google的源中把整个aosp的mirror都下载回来(大约80G,需翻墙),然后想看哪个版本就checkout哪个版本,还可以体验下编译源码的过程,这个事情看起来复杂,其实做起来很简单,大家可以尝试下。源码下载回来后,就可以阅读了,怎么阅读呢?给两个建议,第一:不要纠结太多的代码细节,第二:选择一个自己感兴趣的入口看下去。很多人一上去看源码就纠结代码细节,Android源码是非常复杂的,纠结细节只会让自己望而却步,纠结多了就“走火入魔”了。因此看源码前期主要以整体流程为主,尽量把系统的工作机制搞懂。为什么要选择一个入口看下去呢?因为Android源码很庞大,从哪里开始呢?我的建议是找一个自己感兴趣的入口,比如Activity的启动过程,从startActivity方法看下去,直到底层的AMS。
  再强调下,阅读Android源码是一个合格的Android工程师必须要掌握的技能,不阅读源码是不可能理解系统的工作原理的,不理解工作原理就无法真正地提升技术水平。
  CSDN:日程工作中你会通过哪些方式提升自己的技能?
  任玉刚:在Android开发的学习过程中,我主要通过如下几种方式来学习:
  在公司进行产品开发;阅读Android源码和Android官方文档;在CSDN写技术博客对知识进行总结和分享;关注Github中优秀的开源项目并提交自己的项目;在公司内部做技术分享;阅读相关技术书籍;业余时间持续学习。
  CSDN:你认为作为一名高级工程师应具备哪些职责?如何向高级开发者进行演变?有哪些学习方法吗?
  任玉刚:高级工程师首先要对Android应用层的理论体系有一个全面的理解,然后对Android Framework层也要有一定的了解,这2个方面都是Android层面的。除此之外,高级工程师还要有一定的技术架构能力,包括架构设计、代码规范、性能平衡等,还有很重要的一点,那就是高级工程师要能够指导初中级开发人员。
  高级工程师是一个逐渐积累的结果,一个开发人员从初级工程师通过不断地自我学习和自我提高,当技术能力和项目经验都提升到一定程度后,也就达到了高级工程师的状态了。至于学习方法,因人而异,但是也不会相差太大,可以参见上一个问题中我对Android学习方式的描述。
  CSDN:你在CSDN上的博客访问量挺高的,现在还会经常写博客吗?除了Android方面,你还会关注哪些领域?你用的比较多的语言有哪些?为什么?
  任玉刚:我现在还是会坚持写博客,只是频率上较之前低了不少,我最近的一些博客主要侧重对Android学习路线的探讨,因为我觉得很多开发者需要找到自己适合的学习方式,因此我愿意把我自己对Android学习过程的理解分享出来给他们参考。
  我现在的学习内容已经不仅仅局限于Android了,我目前开始关注iOS和HTML5的开发,包括最近很火的React-Native我也会去看,此外最近也在关注架构设计相关的东西。但是对于我来说,Android开发肯定是我主要关注的,iOS和HTML5我应该不会去深入地研究。其实这个话题涉及到深度和广度的问题,对于我来说,我倾向于先广度、再深度、最后再广度。比如在学校时可以多学一点技术来扩展广度,工作后肯定要专注于深度,当对一门技术达到一定深度后,可能又需要加强下广度来扩展自己的思维方式。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。本书从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些知识点;第二,结合Android源代码和应用层开发过程,融会贯通,介绍一些比较深入的知识点;第三,介绍一些核心技术和Android的性能优化思想。 第1章 Activity的生命周期和启动模式 1 1.1 Activity的生命周期全面分析 1 1.1.1 典型情况下的生命周期分析 2 1.1.2 异常情况下的生命周期分析 8 1.2 Activity的启动模式 16 1.2.1 Activity的LaunchMode 16 1.2.2 Activity的Flags 27 1.3 IntentFilter的匹配规则 28 第2章 IPC机制 35 2.1 Android IPC简介 35 2.2 Android中的多进程模式 36 2.2.1 开启多进程模式 36 2.2.2 多进程模式的运行机制 39 2.3 IPC基础概念介绍 42 2.3.1 Serializable接口 42 2.3.2 Parcelable接口 45 2.3.3 Binder 47 2.4 Android中的IPC方式 61 2.4.1 使用Bundle 61 2.4.2 使用文件共享 62 2.4.3 使用Messenger 65 2.4.4 使用AIDL 71 2.4.5 使用ContentProvider 91 2.4.6 使用Socket 103 2.5 Binder连接池 112 2.6 选用合适的IPC方式 121 第3章 View的事件体系 122 3.1 View基础知识 122 3.1.1 什么是View 123 3.1.2 View的位置参数 123 3.1.3 MotionEvent和TouchSlop 125 3.1.4 VelocityTracker、GestureDetector和Scroller 126 3.2 View的滑动 129 3.2.1 使用scrollTo/scrollBy 129 3.2.2 使用动画 131 3.2.3 改变布局参数 133 3.2.4 各种滑动方式的对比 133 3.3 弹性滑动 135 3.3.1 使用Scroller 136 3.3.2 通过动画 138 3.3.3 使用延时策略 139 3.4 View的事件分发机制 140 3.4.1 点击事件的传递规则 140 3.4.2 事件分发的源码解析 144 3.5 View的滑动冲突 154 3.5.1 常见的滑动冲突场景 155 3.5.2 滑动冲突的处理规则 156 3.5.3 滑动冲突的解决方式 157 第4章 View的工作原理 174 4.1 初识ViewRoot和DecorView 174 4.2 理解MeasureSpec 177 4.2.1 MeasureSpec 177 4.2.2 MeasureSpec和LayoutParams的对应关系 178 4.3 View的工作流程 183 4.3.1 measure过程 183 4.3.2 layout过程 193 4.3.3 draw过程 197 4.4 自定义View 199 4.4.1 自定义View的分类 200 4.4.2 自定义View须知 201 4.4.3 自定义View示例 202 4.4.4 自定义View的思想 217 第5章 理解RemoteViews 218 5.1 RemoteViews的应用 218 5.1.1 RemoteViews在通知栏上的应用 219 5.1.2 RemoteViews在桌面小部件上的应用 221 5.1.3 PendingIntent概述 228 5.2 RemoteViews的内部机制 230 5.3 RemoteViews的意义 239 第6章 Android的Drawable 243 6.1 Drawable简介 243 6.2 Drawable的分类 244 6.2.1 BitmapDrawable 244 6.2.2 ShapeDrawable 247 6.2.3 LayerDrawable 251 6.2.4 StateListDrawable 253 6.2.5 LevelListDrawable 255 6.2.6 TransitionDrawable 256 6.2.7 Ins
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值