古者富贵而名灭,不可胜记,唯倜傥非常之人称焉。故西伯拘而演《周易》,屈原放逐,乃赋《离骚》。文人雅士一次次的谱写着千古绝唱,而我亦不能免俗,也要附庸风雅,写一部前不见古人、后不见来者的经典之作。

  于是,历时一年,呕心沥血,结合自身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年软件公司的工作经验,所以我擅长写文档、画流程图,以确保一切尽在掌握之中。有这样一位奇葩老板,对面的你,还不快到我的碗里来,我的邮箱是16230091@qq.com,我的团队,期待你的加入。

心如猛虎,细嗅蔷薇

  话说,我也是无意间踏上编程这条道路的。如果不是在大三实在学不明白实变函数这门课的话,我现在也许是一个数学家,或者和我的那些同学一样做操盘手或是二级市场。

  我真正的爱好是看书,最初是资治通鉴、二十四史,后来发现在饭桌上说这些会被师弟师妹们当做怪物,于是按照中文系同学的建议翻看张爱玲、王小波的小说,读梁实秋的随笔。在复旦的四年时光,熏出了一身的“臭毛病”,比如说看着夜空中的月亮会莫名其妙地流眼泪,会喜欢喝奶茶并且挑剔珍珠的口感。

  不要以为程序员只会写代码。程序员做烘焙绝对是逆天的,因为这用到软件学中的设计模式,我也曾研发出失败的甜品,做饼干时把黄油错用成了淡奶油,然后把烤得硬邦邦的饼干第二天拿给同事们吃。

  我涉及的领域还有很多,比如煮咖啡、唱K、看老电影,都是在编程技术到了一定瓶颈后学会的,每一类都有很深的学问。不要一门心思地看代码,生活能教会我们很多,然后反过来让我们对编程有更深刻的认识。

  心若有桃园,何处不是水云间。

会当凌绝顶,一览众山小

  如果后续还有第二卷,我希望是讲数据驱动产品。就在本书写作期间,我的思想发生了一次升华,那是在2015年初的一个雪夜,我完成了从纠结于写代码的方法到放眼于数据驱动产品的转变。这也是这本书前面代码很多,越到后面代码越少的原因。

  数据驱动产品是未来十年的战略布局。之前,我们过多地关注于写代码的方法了,却始终搞不清用户是否愿意为我们辛辛苦苦做出来的产品买单,技术人员不知道,产品人员更不知道。产品人员需要技术人员提供工具来帮助他们进行分析,比如说ABTest,比如说精准推送平台,比如说用户画像,而我们检查自己的代码,却发现连PV和UV都不能确保准确。

  这也是我接下来的研究和工作方向。

《App研发录》面世的更多相关文章

  1. 《Android插件化开发指南》面世

    本书在京东购买地址:https://item.jd.com/31178047689.html 本书Q群:389329264 (一)这是一本什么书 如果只把本书当作纯粹介绍Android插件化技术的书籍 ...

  2. 《Android插件化开发指南》勘误

    一些常识: 1)全书70个代码例子中,涉及到插件的例子,请先assemble插件的项目,这会在HostApp项目中生成assets目录,并在该目录下plugin1.apk.这样,HostApp才能正常 ...

  3. Android 插件化开发(四):插件化实现方案

    在经过上面铺垫后,我们可以尝试整体实现一下插件化了.这里我们先介绍一下最简单的实现插件化的方案. 一.最简单的插件化实现方案 最简单的插件化实现方案,对四大组件都是适用的,技术面涉及如下: 1). 合 ...

  4. Android 插件化开发(一):Java 反射技术介绍

    写在前面:学习插件化开发推荐书籍<Android 插件化开发指南>,本系列博客所整理知识部分内容出自此书. 在之前的项目架构的博文中,我们提到了项目插件化架构,提到插件化架构不得不提的到J ...

  5. Android插件化开发

    客户端开发给人的印象往往是小巧,快速奔跑.但随着产品的发展,目前产生了大量的门户型客户端.功能模块持续集成,开发人员迅速增长.不同的开发小组开发不同的功能模块,甚至还有其他客户端集成进入.能做到功能模 ...

  6. Android插件化开发---执行未安装apk中的Service

    欢迎各位增加我的Android开发群[257053751​] 假设你还不知道什么叫插件化开发.那么你应该先读一读之前写的这篇博客:Android插件化开发,初入殿堂 上一篇博客主要从总体角度分析了一下 ...

  7. Android插件化开发之解决OpenAtlas组件在宿主的注冊问题

    OpenAtlas有一个问题,就是四大组件必须在Manifest文件里进行注冊,那么就必定带来一个问题,插件中的组件都要反复在宿主中注冊.像Service,ContentProvider等组件眼下没有 ...

  8. 【我的Android进阶之旅】Android插件化开发学习资料

    1.目前开源的插件开发框架大致有哪些? 1. 任玉刚 的 dynamic-load-apk Github 地址:https://github.com/singwhatiwanna/dynamic-lo ...

  9. Android插件化开发,初入殿堂

    好久没有写博客了,这次准备写写我这几天的研究成果--Android插件化开发框架CJFrameForAndroid. 好久没有写博客了,这次准备写写我这几天的研究成果--Android插件化开发框架C ...

  10. 详解Android插件化开发-资源访问

    动态加载技术(也叫插件化技术),当项目越来越庞大的时候,我们通过插件化开发不仅可以减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块.     通常我们把安卓资源文件制 ...

随机推荐

  1. 标准io与文件io

    A: 代码重复: 语句块1: while(判断) { 语句块2: 语句块1: } 上面可以改写为: while(1) { 语句块1: if(判断) break: 语句块2: } B: 标准IO和文件I ...

  2. JavaScript isNaN() 函数

    定义与用法: isNaN() 函数用于检查其参数是否是非数字值. 语法: isNaN(x) 描述:     x是要检测的值. 返回值: 如果 x 是特殊的非数字值 NaN(或者能被转换为这样的值),返 ...

  3. Mysql数据库的使用总结之Innodb简介

     最近在对开发的软件的服务器部分制作安装包,但服务器部分需要有mysql数据库的支持.因此,采用免安装版的mysql策略:将mysql数据库需要的文件在安装程序中进行设置和打包即可.但也遇到了很多问题 ...

  4. IDE-Sublime【3】-配置Node.js开发环境

    一.下载Nodejs插件,下载地址为https://github.com/tanepiper/SublimeText-Nodejs,解压到当前文件夹,改名为Nodejs 二.打开Sublime Tex ...

  5. [资料分享]尚硅谷JavaWeb

    下载链接: 链接:https://pan.baidu.com/s/1pKMclsv 密码:8fbh

  6. Codeforces CF#628 Education 8 F. Bear and Fair Set

    F. Bear and Fair Set time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  7. 线段树 - ZYB's Premutation

    ZYB has a premutation P,but he only remeber the reverse log of each prefix of the premutation,now he ...

  8. bootstrap内置网格式布局系统:

    bootstrap分为12栏,若想要一个元素占用一定的栏数的宽度,可以在这个元素上用一个特定的类,就比如说span1.span2....类. 定义的布局: 定义page-header类,在这个类当中为 ...

  9. c#文本转语音以及语音阅读小实例

    c#实现语音阅读以及文本转语音文件是基于c#的一个类库(SpeechSynthesizer )实现的,使用该类必须要添加引用using System.Speech.Synthesis;直接是无法添加引 ...

  10. Smack4.1注册新用户

    更新了smack4.1后,发现之前的注册表单不能使用了,很多属性都不能使用. 发现4.1把帐号的出来都集中到 org.jivesoftware.smackx.iqregister.AccountMan ...