古者富贵而名灭,不可胜记,唯倜傥非常之人称焉。故西伯拘而演《周易》,屈原放逐,乃赋《离骚》。文人雅士一次次的谱写着千古绝唱,而我亦不能免俗,也要附庸风雅,写一部前不见古人、后不见来者的经典之作。
于是,历时一年,呕心沥血,结合自身3年来从事App领域的一线实战经验,再辅之以从事软件行业十余载的奇技淫巧,写下这洋洋洒洒三百多页十几万字。初稿完成后,就如同和氏璧般,竟找不到出版社愿意出版,而我又不肯妥协,去写那些无关痛痒的语法介绍和UI布局等入门级章节。就在这时,杜勇帮我介绍了机械工业出版社的吴怡老师,促成了这本书的出版。
临近出版之际,约到了周鸿祎和刘江、屠毅敏等人的序言。刘江老师是带我进入图书出版的引路人,回想起来也是八年前的事了;而屠毅敏则是WaxPatch的发明者,全世界第一个解决了iOS热修复线上bug的人(JSPatch要晚好几年)。说起周鸿祎,那是我在某个微信群误打误撞认识的,他欣赏我一条路走到黑的研究精神,而我则欣赏他的个性张扬。现实中我们从未见过面,前几天我去360给他送样书,保安不让进,我也只好铩羽而归。
购书地址:http://item.jd.com/11791229.html
随书源码:http://www.cnblogs.com/Jax/p/4656789.html
最后,附上本书的前言,以飨读者:
皇皇三十载,书剑两无成
在你面前娓娓而谈的我,曾经是一位技术宅男。我写了6年的技术博客,500多篇技术文章。十年编程生涯,我学习了.NET的所有技术,但是从微软出来,踏上互联网这条路,却发现自己还是小学生水平,当时恰逢三十而立之年,感慨自己多年来一事无成,于是又开始了新一轮的学习。选择移动互联网这个方向,是因为这个领域所有人都是从零开始,大家都是摸索着做,初期没有高低上下之分。
在此期间,我做过Window Phone的App,学会了Android和iOS,慢慢由二把刀水平升级到如今的著书立说,本来我想写的是iOS框架设计,因为当时这方面的经验积累会更多一些,2013年的时候我在博客上写了一系列这方面的文章,可惜没有写完。如今这本书是以Android为主,但是框架设计的思想是和iOS一致的。
作为程序员,不写本书流传于世,貌似对不起这个职业。2008年的时候我就想写,可那时候积累不够,所知所会多是从书本上看到的,所以没敢动笔,而是选择翻译了一本书《MSIL权威指南》。翻译途中发现,我只能老老实实地按照原文翻译,而不能有所发挥。我渴望能有一个地方,天马行空地将自己的风格淋漓尽致地表现出来,在写这本书之前,只有我的技术博客。
终于给了自己一个交代,东隅已逝,桑榆非晚。
文章本天成,妙手偶得之
这是一本前后风格迥异的书,以至于完稿后,不知道该给本书起一个什么样的书名。只希望各位读者看过之后能得到一些启示,我就心满意足了。
下面介绍一下本书的章节概要。本书分为三个部分共计12章。
第1章讲重构。这是后续3章的基础。先别急着看其他章节,先看一下这一章介绍的内容,你的项目是否都做到了。
第2章讲网络底层封装。各个公司都对App的网络通信进行了封装,但都稍显臃肿。我介绍的这套网络框架比较灵巧,而且摆脱了AsyncTask的束缚,可以在底层或上层快速扩展新的功能。这样讲多少有些自卖自夸,好不好还是要听读者的反馈,建议在新的App上使用。
第3章讲App中一些经典的场景设计,比如说城市列表的增量更新、缓存的设计、App与HTML5的交互、全局变量的使用。对于这些场景,各位读者是否有似曾相识的感觉,是否能从我的解决方案中产生共鸣?
第4章介绍Android的命名规范和编码规范。网上的各种规范多如牛毛,但我们不能直接拿来就使用,要有批判地继承吸收,要总结出适合自己团队的规范。所以,即使是我这章内容,也请各位读者有选择地采纳。我写这一章的目的,就是要强调“无规矩不成方圆”,代码亦如是。
第5章和第6章组成了Android崩溃分析三部曲。写这本书用了一年,其中有半年多时间花在这两章上。一方面,要不断优化自己的算法,训练机器对崩溃进行分类;另一方面,则是对八十多种线上崩溃追根溯源,找到其真正的原因。
第7章讲Android中的代码混淆。本不该有这一章,只是在工作中发现网上关于ProGuard的介绍大都只言片语。官方倒是有一份白皮书,但是针对Android的介绍却不是很多,于是便写了这章,系统而全面地介绍了在Android中使用ProGuard的理论和实践。
第8章讲持续集成(CI)。十年传统软件的经验,使我在这方面得心应手。这一章所要解决的是,如何把传统软件的思想迁移到App上。
第9章讲App竞品分析,是研究了市场上几十款著名App并参阅了大量技术文章后写出的。之前积累了十年的软件研发经验,这时极大地帮助了我。
第10章讲项目管理,是为App量身打造的敏捷过程,是我在团队中一直坚持使用的开发模式。App一般2周发一次版本,迭代周期非常快,适合用敏捷开发模式。
第11章讲日常工作中的问题解决办法。那是在一段刀尖上舔血的日子中总结出的办法,那时每天都在战战兢兢中度过,有问题要在最短时间内查找到原因并尽可能修复;那也是个人能力提升最快的一段时光,每一次成功解决问题都伴随着个人的成长。
第12章讲App团队建设。我是一个孔雀型性格的老板,所以我的团队中多是外向型的人,或者说,把各种闷骚型技术宅男改造成明骚;我是从技术社区走出来的,所以我会推崇技术分享,关心每个人的成长;我有8年软件公司的工作经验,所以我擅长写文档、画流程图,以确保一切尽在掌握之中。有这样一位奇葩老板,对面的你,还不快到我的碗里来,我的邮箱是[email protected],我的团队,期待你的加入。
心如猛虎,细嗅蔷薇
话说,我也是无意间踏上编程这条道路的。如果不是在大三实在学不明白实变函数这门课的话,我现在也许是一个数学家,或者和我的那些同学一样做操盘手或是二级市场。
我真正的爱好是看书,最初是资治通鉴、二十四史,后来发现在饭桌上说这些会被师弟师妹们当做怪物,于是按照中文系同学的建议翻看张爱玲、王小波的小说,读梁实秋的随笔。在复旦的四年时光,熏出了一身的“臭毛病”,比如说看着夜空中的月亮会莫名其妙地流眼泪,会喜欢喝奶茶并且挑剔珍珠的口感。
不要以为程序员只会写代码。程序员做烘焙绝对是逆天的,因为这用到软件学中的设计模式,我也曾研发出失败的甜品,做饼干时把黄油错用成了淡奶油,然后把烤得硬邦邦的饼干第二天拿给同事们吃。
我涉及的领域还有很多,比如煮咖啡、唱K、看老电影,都是在编程技术到了一定瓶颈后学会的,每一类都有很深的学问。不要一门心思地看代码,生活能教会我们很多,然后反过来让我们对编程有更深刻的认识。
心若有桃园,何处不是水云间。
会当凌绝顶,一览众山小
如果后续还有第二卷,我希望是讲数据驱动产品。就在本书写作期间,我的思想发生了一次升华,那是在2015年初的一个雪夜,我完成了从纠结于写代码的方法到放眼于数据驱动产品的转变。这也是这本书前面代码很多,越到后面代码越少的原因。
数据驱动产品是未来十年的战略布局。之前,我们过多地关注于写代码的方法了,却始终搞不清用户是否愿意为我们辛辛苦苦做出来的产品买单,技术人员不知道,产品人员更不知道。产品人员需要技术人员提供工具来帮助他们进行分析,比如说ABTest,比如说精准推送平台,比如说用户画像,而我们检查自己的代码,却发现连PV和UV都不能确保准确。
这也是我接下来的研究和工作方向。