罗升阳(博客),1984年出生,2007年毕业于浙江大学计算机系,取得学士学位,2010年毕业于上海交通大学计算机系,取得硕士学位。毕业后一直从事于互联网软件开发,并且致力于移动平台的研究,特别是对Android平台有深入的理解和研究。在国内知名IT技术社区CSDN上发表了一百多篇高质量的Android系统原创性文章,并且开设博客专栏——《老罗的Android之旅》。积极与网友交流互动,深受大家喜爱,访问量一直居于前茅。同时,著有《Android系统源代码情景分析》一书。 CSDN:请和大家介绍下你和目前所从事的工作。 罗升阳:我现在正在做一款和手游相关的Android应用,玩家可以一边玩游戏一边录制以及直播。在中国,无论是传统的PC互联网,还是现在的移动互联网,游戏都是一个巨大的市场。在手游超越页游追赶端游的今天,手游录制和直播作为连接玩家和玩家、玩家和厂商之间的一个平台,近年来在国内外都得到了追棒。在国外,今年5月初的时候,手游录制及分享社区Kamcord获得了710万美元的A轮融资;到5月中的时候,又传来Google花10亿美元收购游戏直播公司Twitch的消息。在国内,爱拍和ShareSDK也发布了手游录制和分享相关的产品。 手游录制和直播产品吸引我的,除了它的巨大市场之外,还有它的技术含量。坦白说,在Android平台上,至今还没有一款用户体验好的手游录制应用。目前Android市场上的手游录制应用,不是性能问题,就是稳定性或者兼容性问题。包括在iOS平台上已经做得相当不错的Kamcord,在Android平台上也表现平平。究其原因有如下三点:
为了解决上述的技术难题,需要用到很底层的Android系统知识,例如Android系统的UI渲染机制和硬编码等知识。要利用这些知识,没有深厚的Android功底是很难办得到的。由于我对Android系统有比较深的研究,因此我觉得去做这样的一个产品是一个很有意思的挑战。 当然,目前除了做手游录制和直播应用之外,还在研究做一些基于Android系统的穿戴式设备,毕竟我的兴趣点在于Android系统,而且穿戴式设备也会是未来的方向之一。 CSDN:你是从什么时候接触到计算机的,是怎样走上编程这条道路的?又是在何时开始接触Android平台并进行如此深入研究的呢? 罗升阳:我接触计算机的时间是比较晚的,上大学之前,除了在网吧,基本上就没接触过电脑了。大学选择了计算机专业,才开始真正的接触电脑。而且我很清楚地刻,大一开学大概一个月的时候,学校要进行计算机文化基础上机考试,实际上就是考一下Word和Excel的操作。考试前有大概两周时间让你有空的时候去机房练习。对于一个以前没怎么接触过计算机、打字都还不利索的孩子来说,果不其然就考挂了。后来补考了一次才及格。 由于学的是计算机专业,大一的时候就要开始编程的了。一开始学的就是C语言,不像现在很多人一开始学的是都是C#、Java、PHP这些高级又相当易用的语言了。后来才逐渐学习了C++、Java和C#等这些高级语言。刚开始学C语言还是很痛苦的,龙其学到指针、链表这些知识的时候。记得大一上学期的国庆节,还专门花了几天的时候去啃了链表的实现原理。现在回想起来,一开始就选择学习C语言是对的。因为无论你现在工作用的是什么语言,如果想要把它背后依靠的平台吃透,都不可避免地需要了解它的底层实现,而这些底层实现基本上都是离不开C/C++。或者换句话说,语言只是一个工具,要理解你的软件实现原理,关键都是要理解软件背后的计算机系统,而C是最接近计算机系统的语言。因此,我是非常建议有志于从事软件开发的同学们,无论你现在、以后工作用的是什么语言,都一定要学好C/C++。 接触Android平台是研究生毕业后工作的事了。正式接触是2011年年初的时候,当时写了一个简单的五子棋游戏。不过在2010年下半年的时候,就开始计划要好好研究一下Android系统了。因为了解到Android系统是基于Linux内核实现的,所以2010年下半年的时候,主要就是去补Linux内核的基础知识。其实激发我要去深入研究Android系统而不是单单是Android应用的动机,是当时在公司做的一款软件的应用程序框架,是完全公司的一个团队自行开发的,没有采用在学校时接触的MFC等通用框架。那时候对这套自行开发的应用程序框架很感兴趣,但无奈我们只是业务团队,平时只是使用这套框架,而没有机会去深入研究。 2010年的时候,iOS已经很火了,Android也开始冒出尖尖头了。由于Android背后的靠山的Google,而且它的源码是开放的,因此,就准备去研究一下Android系统的应用程序框架是怎么实现的。这样一来能跟上移动潮流,一来也能满足自己的好奇心。从此就一发不可收拾,正式步入Android系统的世界了。 CSDN:你用两年的时间炼就了深厚的Android内功修养,请问期间的学习之路是怎样的?有什么学习的心得和体会可分享? 罗升阳:那两年基本是把所有的业余时间都花在了学习Android上,包括工作日的下班时间、周末、节假日等。由于是第一次接触这么系统又这么底层的知识,从一开始恶补Linux内核知识,到后来系统地学习Android系统的专用驱动、HAL层和应用程序架构层等知识期间,遇到的困难是可想而知的。以致于在花了两年的时间,完成Android系统研究的第一阶段任务之后,忍不住写了一篇文章《2012年的Android之旅:梦想、学习、坚持、自信、淡定》总结这段学习经历。就像文章所说的,那两年学习Android的心得和体会总结起来就是十个字:梦想、学习、坚持、自信、淡定。由于篇幅关系,这里就不一一展开来说了。不过,我最想分享还是关于坚持这一点。 坚持这两个字真的是说起来容易做起来难。哪怕是一件很简单的事情,要求日复一日地坚持去做,恐怕也是不少人做不到的。举个例子说,锻炼身体。我们不说每天,就说每一个星期拿出一个到一个半小时去锻炼,又有多少个人能坚持做到的呢?这还是花时间去做就能完成的,不会遇到诸如学习、工作、生活上的挑战。所以我们说坚持就是胜利,是很有道理的。只要制定好了目标,就一定要下定决心坚持去完成,无论中间遇到什么样的困难和挑战。当坚持变成一种习惯的时候,离目标的实现就不远了。换句话说,主要你肯坚持,你就会发现:1、你的目标实现了;2、你养成了一种良好的习惯。 经常听到有人说,太难了,看/学/做不下去了。其实,没有什么事情是与生俱来就会的。既然是不会的,学习的过程就肯定要付出代价。2010年下半年之前,我平时学习、工作、和娱乐基本上都是在Windows平台上,第一次学习Linux内核看的是《Linux内核源代码情景分析》 这本书。看过这本书的人都知道,那基本上就是一本天书。当时我对自己说,不紧要,看一遍不懂,我就再看第二遍、第三遍和第四遍。最后执行的过程是,看过第一遍后,心里只是大概有个谱。接着去找一些相关的经典书籍来继续看,例如《Linux内核设计与实现》。看完了《Linux内核设计与实现》,回过头来又接着第二遍看《Linux内核源代码情景分析》。这下就发现原来一些看不懂的地方现在懂了,但是还是有其它地方看不懂。于是,又继续看了《Linux设备驱动程序》和《深入理解Linux内核》等书。每次觉得有必要的时候,都又重新去看一遍《Linux内核源代码情景分析》。经过这样的三四遍折腾之后,最后终于可以很愉快地看懂《Linux内核源代码情景分析》了。 当然,除了有毅力去坚持之外,还要懂得坚持的方法。借用马丁·路德·金的一句话:
这句话我觉得重点就是最后三个单词“keep moving forward”。在坚持的过程中,你要让自己觉得自己一直在“keep moving forward”,这样才会有坚持下去的动力。换句话说,就是要让自己在坚持的过程中看得到事情又推进了一步,哪怕是一点点的进步。还是以看书为例子。只要你每天坚持平均看20页,一年就可以看7300页。打个8折,也有5840页,也相当于10本书了。10本书看下来,可以学到的东西是相当多的了。在这个过程中,每天看20页书这件事就是推你向前了一步。有人可能觉得每天看20页书还是太难了。是的,开始的时候可能是有点难。但是,当你坚持一段时间之后,就会发现了解的知识变多之后,看书的速度也跟着加快,到时候不要说一天20页,一天50页都不是问题。 CSDN:你是《Android系统源代码情景分析》(试读地址)一书的作者,这本书是怎样诞生的?这是你的第一本书,写书过程中经历了怎样的困难?随着Andriod的版本更迭,你会出第二版吗?还有其它著书计划吗? 罗升阳:一开始只是想通过博客记录自己学习Android系统的过程,并没有计划写书的。随着博客的人气上升,不断有出版社编辑发出出书的邀请。开始的时候,基本上还是拒绝的。再到后来,也有不少网友建议把博客整理一下成书出版。在出版社和网友的多次建议下,也考虑到有些读者可能更喜欢阅读纸质书,最终就决定把博客的文章整理成书出版了。 第一次写书,怀着的是诚惶诚恐的心情,担心能力有限,误人子弟。书与博客不一样,出书包含有出版社、渠道和销售等成本,因此读者是不可能免费得到的。既然读者要付出钱来购买你的书,那你写书的时候就得负起责任,例如要保证内容的系统性、完整性和正确性,还有文字表达的通顺性,甚至还不能出现错别字。这与在网上写博客有很大的区别。写博客可以比较随意一点,漏掉的内容可以以后再补,错误字也可以马上就修改过来。 基于面这些原因,写书过程经历的困难是可想而知的。决定写书之后,一开始并没有急着去写,而是将计划纲入书里面的内容都先发表到博客上,也就是我在2011年12月前发表的文章。主要是考虑到先将内容发表出来,让读者看到之后可以帮忙发现BUG以及提建议,这样可以帮助提高书的质量。整理博客不是简单的拷贝粘贴,比我想象中要困难多了。回过头来再看自己发表过的文字,百分之七八十都要重新表达。而且有些章节,要系统地描述清楚,单靠博客上的文章是远远不够的。例如,在写Binder那一章时,原以为在博客写的一系列文章已经够完备了,但是发现只是写了一半不到。然后就拼命地一边整理已有的内容,并且一边补新的内容。 在时间上,从开始整理到出版的半年时间里,除了工作基本就是扑在写书上了,而且利用的都是工作之余的时间。没有周末,没有节假日,工作日也是经常熬夜到两三四点。对程序员来说,写文字其实比写代码要累多了,这就是为什么程序员都不喜欢给自己的代码写文档写注释的原因。期间是想过要放弃的,但是已经跟出版社签定了合同,怎么都坚持下去啊。就这样一路走来,从博客文章整理得到初稿,又经过三遍逐行逐行的校对,终于完成了三大篇十六章830页近160万字的著作。说实话,当时要是再让我看第四遍的时候,感觉都要吐了。 Android版本更新的确是比较快,不过目前是没有出第二版的计划了。主要是因为我写的内容都是很基础的东西,例如HAL、Binder IPC、Ashmem、Logger,以及四大组件Activity、Service、Broadcast Receiver和Content Provider的实现原理,它们在后来的版本中仍然是保持性当初的设计思想和运行原理的。我更希望的是,读者看了我的书之后,能够自己去分析Android系统的源码,这样以后Android版本更新得再快也不怕了。 至于新书,以前是有计划的。完成了《Android系统源代码情景分析》一书之后,我又陆续在博客了发表了UI架构、UI渲染、窗口管理、Dalvik虚拟机、编译系统、SEAnroid安全机制等一系列的文章。这些内容加起来也可以有《Android系统源代码情景分析》这本书那么厚了。不过写书是费时费力的事情,而且产出投入比也不高,再加我也不是专职的图书作家,所以现在也不打算出新书了。但是博客是一定会坚持写下去的,希望读者可以持续关注,并且可以在博客上与我交流。 |