又到了岁尾年初;年的氛围愈发浓了,家的感觉愈加近了。能够看到这篇文章的,想必大都是离家在外打拼的游子,一年下来,大家辛苦了,赶紧抢张火车票,过年回去看看爸妈吧!
一直以来,自己都有记录生活的习惯——用相机照下来,用纸笔写下来,用电脑打出来——回顾过去,是为了更好地展望未来;从自己和别人(尤其是别人)犯过的错误中吸取教训,是我向来推崇的高效成长方式。那么2015这一年,我又吸取到了什么教训,取得了什么样的成长呢?且听我慢慢道来。
2015年初,是《iOS应用逆向工程(第2版)》即将出版的日子。因为这本书在国内外iOS底层圈子里产生的影响较大,不少我曾经的“老师”都开始学习这本书,所以对待这样的工程,当然不能有半点马虎。我一直都是一个自我要求严格到苛刻的人,为了让这本书几乎挑不出毛病,我将 所有 的休息时间都投入到了这本书结构的梳理和细节的完善上,终于完成了在第一版里没有做好的几点:
-
全书结构由表及里,由易到难,章节难度循序渐进,逻辑性大幅增强。我在书的骨架搭建上投入了与细节完善相同的时间精力,把原本零散的知识点梳理成了一条完整的学习路线,做到了我心中的最高标准。
-
吃透了第一版中所有含混不清的概念,把稍难理解的概念全都转化成通俗易懂的例子,配合代码予以讲解,力求让最初级的iOS工程师也能上手逆向工程,降低了这个行业的准入门槛,切实地推动了这个行业的发展。
基于以上两点,我认为这本书的标准已经达到了国际级,因此毛遂自荐地跟机械工业出版社的杨老师说,请她介绍国外的出版社给我认识。果不其然,CRC出版社看中了这本书,并跟我们签订合同,想要在美国出版发行这本书的英文版。
既然要走出国门,就更不能马虎了,英文版的质量也必须按照最高标准来。好么,又是几个月的不眠不休——
先发微博,组织一支高质量翻译团队
接着由我挨个“面试”申请人,考察他们的技术实力、英语水平,以及责任心
从十数名申请人中,我最后敲定了一个5人翻译团队,他们分别是:
- 当时的上海交大在读硕士,参加过WWDC,在欧洲留过学的Ziqi Wu;
- 在海南大学读书,拿到巴黎某大学offer的0xBBC;
- 曾在趋势科技工作,有底层安全工作经验的tianqing;
- 以及在国防科技大学攻读硕士研究生,以嵌入式为研究方向的Fei Cheng;
- 和一名毕业于亚特兰大某大学,在美国微软做研发leader的哥们,姑且称之为X。
同时,我还邀请了学习逆向工程过程中认识的一帮良师益友,作为英文版的审稿人,从技术和语言两个角度帮我把关,力求打造一本高质量的教程书籍。他们分别是:
- 来自美国的Saurik IT前美女经理britta;
- 来自美国的tweak开发者Codyd51;
- 我的老朋友DHowett;
- 来自美国的tweak开发者Haifisch;
- 来自丹麦的iOS研究人员Tyilo;
- 来自阿根廷的iOS研究人员uroboro;
- 和来自加拿大的iOS研究人员yrp。
为什么要选择这些人作为审稿人呢?除了因为他们在iOS领域的深厚功底外,还因为英文版的书籍面向的是全球的iOS开发者,所以我的标准是,不求使用最纯正的美式/英式英语,但求所有能读懂英文文献的读者可以看懂这本书想表达的意思。加上小弟在内,本书的审稿人来自北美、南美、欧洲和亚洲,几乎涵盖了全球主流地区,如果我们一致通过审核,这本书就可以达到国际标准。
把人找齐之后,翻译工作就可以正式启动了。我们是这样操作的:
-
先抽出一个月的时间,以周为单位划分成4周;每周翻译团队里的每人都要翻译同一段话,在截止日期前把各自的翻译提交给我;我把每个人的翻译整理成类似的格式,然后转发给Codyd51,他帮我们修正一些明显的语法错误,并敲定翻译风格以谁为基准;然后我们在QQ语音里,由我主持,逐字逐句过每个人的翻译,目的是在纠正语法错误的同时,参考Codyd51的意见,以Ziqi Wu的翻译为基准,尽量统一大家的行文风格。
因为翻译团队的所有人都有自己的学习工作规划,所以也只能牺牲休息时间参与进来,经常就是周一到周四下班后抽时间翻译,周五开一晚上会讨论,周六消化吸收后继续开工,强度非常大。值得一提的是,因为时差的关系,美国微软的哥们无法参与我们的语音讨论,为后面的一次 掉链子 事件,埋下了隐患。 -
经过一个月的磨合,大家的英语功底得到了临阵磨枪的强化翻译风格也逐渐统一了起来。我把全书划分成了5个部分,每个部分约25k字,然后根据大家第一阶段的速度,制定了一个很短的翻译周期,只有一个月。
在这一个月里,每个人不但需要翻译自己的25k字,还需要精审另一个人的25k字,再粗审另一个人的25k字——即保证每个人起码有2次可以看到别人的翻译,从而要么指出对方的错误,要么调整自己的文字,通过这种交叉核验的方式,保证翻译的高质量和风格的高统一。 -
每人的25k字,又被划分成了10k、10k、5k这三个子部分,每完成一个子部分,大家就停下来互相检查一次。在这个时候,一个严重的问题出现了。
美国微软哥们的翻译是由Ziqi Wu精审的,他向我反馈,这哥们的翻译错误太多,完全改不动。我拿到他的翻译一看,低级错误百出,几乎等同于机器翻译水平。这大大出乎了我的意料——在美国读书和工作,何况是技术leader,直接领导美国人,英语再差,应该也比团队其他成员强吧?为什么出现了与我预期完全相反的极端情况呢?
在我的追问下,这个哥们承认,因为工作太忙,所以直接采用了Google翻译来交差。我草,当时我就震惊了;我至今也没想明白,明明是你主动请缨,又是代表中国形象,需要精益求精的事,如果hold不住,早点跟我说,换人不就好了么?为什么占着茅坑不拉屎,还要拿这么low的作品来糊弄人呢?
在翻译已经开启的节点换人,我不知道该去哪里找替代者,英语水平一般的我只好迎头顶上,然后拉着英语水平很好的Ziqi,跟我一起完成这个X哥们未竟的任务;还好Ziqi足够给力,顶住了这个哥们留下的大坑,在此向他表示特别的感谢。
这件事给我的教训是,纵使技术再好,人品不行,必须一票否决;技术好,人品棒,才是成为大牛的基本条件——因此,我一直都把“做一个好人”作为自己事业道路上的重要指标,不会因为一点眼前小利,而丢掉那份纯真;回过头来看,我的选择是正确的。
经过2个月的高强度翻译过程,整本书的翻译质量比较令人满意,老外审核员们可以比较流畅地看懂书中的内容。但此时,CRC出版社的贺老师又告知我,他们需要近半年的时间来出版这本书,这直接增加了我的顾虑。
我的顾虑是什么呢?因为本书的第一版在编写时,针对的是iOS 6系统;而经过半年的出版周期,书在上市时,iOS 7就已经出来了。由此导致的后果是,很多购买了第一版书的朋友,在边看边练时,发现书上内容跟实际操作对不上号——当然了,iOS 6到iOS 7的底层变化那么大,能对上号才怪了!由于这本书面向的是iOS逆向工程领域的初学者,他们中的绝大部分在这个领域还不具备举一反三的能力,只能先照猫画虎,先行了解一下。而因为第一版尴尬的上市时间,照猫画虎的目的都没有达到,所以收到了不少负面评论。
如果CRC出版社在半年后出版这本书的英文版,那么同样的问题就会再次发生,而这次受影响的读者变成了老外。出版英文书的初衷本来是“提升中国iOS开发者在国际上的地位”,我不想因为某些原因,好心办了坏事,那就得不偿失了。我又在贺老师的帮助下,联系了nostarch和O’Reilly出版社,但得到的都是类似的回答——时间上来不及。因此,我在征得机械工业出版社和CRC出版社的同意后,撤销了合同,改把英文版的电子书放在了lulu平台上售卖
没想到,电子书发布后,马上就有人在twitter上私信我,想要在韩国出版这本书
后来得知,此人是韩国Acorn出版社的主编Heejeong Kim(金熙真)女士;从其官网可以看出,这个出版社的书整体质量是很高的。但是,他们也需要半年的时间来出版这本书的韩文版,在经过一番详细沟通后,我还是善意地拒绝了Acorn的约稿。即便最后没有能够合作,但得到了他们的认可,我作为土生土长的中国作者,是很自豪的。
英文书稿在lulu上挂了一阵子之后,因为缺乏有效的宣传和营销,书的销量一直不高,只以每天1~3本的速度增长。眼看着iOS 9就要来了,书中内容会从某种程度上过期,我心想与其让这些宝贵的知识烂在肚子里,而仅仅是换个烟钱,还不如分享出去让大家都有所收获。因此,我在GitHub上开源了这本书,在国际iOS逆向工程社区引起了不小的震动——大家都开始谈论这本书,谈论这个论坛。rpetrich给我留言说
有美国网友把电子版全都打印了出来,开始学习
也有逆向工程界的大牛帮我宣传
我也作为WWJC上的首位中国演讲人,在2015年的会议上做了个远程演讲。
至此,《iOS应用逆向工程》的使命已经达成,我投入的大量心血没有白费,这本书确实得到了全球的认可,达到了“提升中国iOS开发者在国际上的地位”的目标。这是2015年上半年我完成的一件大事,兑现了我在2014年许下的承诺。牛比!
此时的我,感觉已基本吃透了iOS用户层的逆向工程,由此延伸出去,不用花费太多精力,就可以掌握这个层面的几乎所有技术,竟也有了高处不胜寒的错觉此时的我,面临2个方向的选择:
-
继续深入研究iOS内核层,这条路的尽头,站着Redsn0w、Greenpois0n、evad3rs、盘古和太极等行业公认的顶级高手;
-
换换脑子,把自己变得一专多能。去接触接触业务,学习学习商业,为自己的事业道路拓宽视野,全方面提高自己的能力,做一些对社会有直接帮助的事。
因为已经意识到,自己纯钻技术的时间确实比较久了,在自己的专业方向比较专精了,但其他的方向还存在较大短板:与人打交道的能力,全盘思考问题的能力,组织能力,领导能力等等,几乎都停留在及格线以下;而这些能力是成就一番事业的必备能力,是不能忽视的。因此,我原本的打算是去一家纯正的互联网企业呆上2年,学习一下互联网的整套玩法,强化自己除技术以外的方方面面,谁知道一个突然的电话,打乱了我原本的安排,让我走上了创业这条雄关漫道。
一直以来,我对创业都抱持着开放态度,觉得这比在大公司当螺丝钉,每天把自己一滩事干好就可以高枕无忧要有吸引力的多。对于创业方向的选择,我也有自己的判断。我 不想 从事的方向,主要有这3个特点:
-
所谓“风口”。
我们程序员这个群体,每天对着电脑,说实话,相对于每天混社会的人来说,市面见得太少了,眼界狭隘太多了。如果一个行业对于程序员来说是风口,那么几乎所有人都会认识到这是个风口。而绝大多数行业,技术并不占主导地位,那么问题就来了,这种情况下,我们程序员的竞争优势在哪里呢?
所以,当曾经在风口上的那些方向(比如互联网金融、医疗、电商、打的士、送盒饭等)找到我的时候,我都没有加入——同质化太严重了,虽然一开始很容易拿到钱,但后续能活下去的不多。 -
不作恶。
我是一个老实人,是一个单纯的人,我不希望自己被当今这个浮躁社会上的一些虽然已被大家默认,但实际不符合我价值观的东西同化,例如及时行乐,作风开放,以及崇洋媚外。基于这些准则,有一些行业我是不做的:
手游。国内游戏的面向群体主要是青少年,还没有达到欧美日的水平以吸引成年人玩。既然面向的是年轻群体,那么游戏的门槛就必须低,让傻瓜都可以上手玩;同时,游戏要牢牢黏住玩家,才有钱赚。但是如果你站在一个家长的角度想想,你会让你的孩子玩这样一款游戏么?钱大把大把的赚,但是毁掉了一些年轻人的前途,跟贩毒的本质差不多;这个价值观,恕我不能苟同。
带约X性质的各种社交。还是换个角度,假设你有个女儿,你让不让她用这种App?如果你的答案也是不让,那就不要做。
一些打着硅谷旗号的假洋鬼子公司。一些国内水平还不错的工程师,内心里认为,给假洋鬼子打工,就要比跟中国人当兄弟强,感觉粘上点洋气,自己的鼻梁也瞬间高了起来。做出来的产品跟自己八竿子打不着,却死心塌地给假洋鬼子卖命;祖国已经站起来了,有些人却还跪着,这样的人我连看都看不起,别说一起合作了。 -
要接地气,不要伪文青。
伪文青玩的那套虚无缥缈的东西,卖卖情怀可以,不能当饭吃。创业不是过家家,不是在办公室养个猫就可以体现出多么人文的一面。多数的伪文青公司只是因为“创业”是当下的一件比较流行的事,才选择了创业;一如他们选择“文青”这个身份一样。
而我 想要 从事的方向,主要有这3个特点:
-
要冷门。
如果你看过我的书,可能还记得这句话——“如果我从事Windows相关的工作,起步会很顺利,但后续难保不被淹没在人海里;如果另寻他路,入门会很辛苦,但坚持下去或能独辟蹊径。”——我选择创业方向的思路,和我当时选择iOS的思路,是一脉相承的。 -
要给社会产生价值。
我不知道手游、约X这类东西,除了给国家贡献点税收和一堆扶不上墙的青少年之外,还有什么拿得出手的东西。我们应该以Uber、SpaceX、苹果这种真真儿推动人类发展的企业为榜样,而不是满足于在网上送个盒饭,发个自拍。 -
跟成熟的人合作。
我这就快三十而立的人了,跟满嘴跑火车的不靠谱的人,越来越没有共同语言了。跟成熟的人,跟靠谱的人,跟真正知道自己在干嘛的人合作,即使辛苦,也不会感觉那么辛苦。
而我现在所从事的方向,满足了我的3要3不要:
-
创始人是82年的,比我大5岁,成熟男人;有家有口,创业前在大摩工作。能在大摩工作的,都是精英;精英放弃优渥的工作待遇,苦哈哈地从头创业,一定有他的原因。成熟的人做出一个重大的决定,背后一定有一个更大的计划;我详细询问、仔细思考了这个计划,也觉得非常靠谱;
-
这个方向是2B(to business)的业务,跟已是一片红海的2C业务玩法非常不同。因为2B的业务门槛较高,需要业内人士主导方可顺利推进,外行根本不懂我们在做什么,因此比较冷门。但是也只有冷门才能做大——因为竞争对手少嘛!热门的东西大家都在做,你有什么资本保证可以比别人做得更好?我相信大多数人其实是没有答案的。
-
为这个行业带来了价值。我们想用科技的手段提高这个行业的效率,制定一套更规范的标准,而不是投入大量资金搅乱现有的市场。这个价值观我非常认同,而我也认为只有拥有相同的价值观,才有可能一直走下去。
你来或者不来,大公司一直都在那里,安静地做一个美男纸,只要能力好,什么时候都可以进去;可好的项目却不常有,错过了就错过了。于是我调整了自己的计划,取消了自己去互联网公司锻炼2年的安排,直接加入华寓中国,开始了新一轮的战斗。迄今,我们已战斗一年有余,其中的酸甜苦辣不计其数,浓缩成一句话,就是:“创业是我到目前为止做过最难的一件事。”截取几个片段分享一下
-
因为巨大的压力,我的皮肤出现了大面积过敏,随便一抓,就会起一片红斑。在北京融资期间,CEO和我为了节省开支,住在廉价的旅馆里,我们回顾白天的pitch,总结可以改进的地方,然后更新到pitch里,经常一讨论就到了深夜。而我因为皮肤过敏的瘙痒,经常彻夜难眠,第二天还要强打起精神,以一个干劲十足的形象出现在团队其他成员面前,给他们打气;
-
1.0产品的策略出现偏差,目标用户群体不太买账,用户数量增长十分缓慢。iOS工程师和后端工程师觉得没有前途,选择了退出;虽然他们已经离开,但仍然感谢他们为华寓中国做出的不可替代的贡献。产品的迭代没有人来落实,我们陷入了非常被动的局面。我停掉了坚持4年的夜跑,放下了手中的吉他,顶着“如果找不到人,这项目就黄了”的巨大压力,充分利用一切时间来寻找新的团队成员,经常在夜里3、4点给潜在合作对象打电话,当然,失望远多于希望
-
投资人看不懂这个方向,从外行的角度百般质疑。不得不说,“土豪”这个词的出现,是有一定道理的。我们做的是2B的方向,冷门的方向,绝大多数投资人看不懂;他们更看得懂游戏,约X,送盒饭这种“刚需”,却对某个成熟行业里存在了几十年的现象视而不见,认为这是伪需求。到最后,我们甚至自己都开始质疑自己,是否选错了方向。
如果你认为我们就此消沉,一蹶不振,那你就错了。我们就像打不死的小强,奇迹般地存活了下来——
我们通过找外包,找朋友帮忙等各种方式,生生扛出了2.0产品。
2.0比1.0生动了许多,并且在原有产品种类基础上作出进一步扩充,丰富了自己的产品线,得到了一些业内人士的认可,在业内打开了口碑。
更多业内人开始找到我们,想跟我们聊聊;我发在V2EX,OSChina上的几个招聘帖,也都取得了不错的反响,开始有一些工程师主动找到我们,了解我们;也有投资机构开始找上门来,约谈项目。
就像大家愿意看到的那样,我们取得了阶段性胜利。我们组建了一支还不错的团队,并顺利拿到了天使轮融资。
我们生扛过了创业最最黑暗的时期,迎来了黎明前的一丝曙光。我想,下面这组照片,或许可以说明很多问题了:
第一个办公室,只有4个工位;没有钱租更大的地方,大家挤一挤,更暖和
第二个办公室,搬到了一个民宅里,商住两用图中,我们正在学习WeWork的产品
第三个办公室,搬到了一个民宅改成的办公室里,仍然商住两用
拿到了天使融资,我们搬到了第四个办公室,一个真正的办公室
或许只有真正的实干家,才能真切体会到这个变迁的来之不易。我身上的过敏已经消退得差不多了,我也终于可以长出一口气了——
然后继续鼓足干劲,投入新一轮的战斗
这就是我2015一整年的收获,如果用一个词概括,就是“精彩”。这一年里,时常有人问我,凭你的实力,完全可以去BAT斩获一份不错的工作,然后每天投入2~3个小时,就可以轻松完成任务了啊?为什么要苦哈哈地折磨自己呢?
我总是一笑而过,安静不语。“黑咖啡那么浓,没有喝过的人不会懂”;“我们用多一点点的辛苦,来交换多一点点的幸福”,如果你可以理解这2句歌词的含义,也许你就能够读懂我的沉默
2016年期待:
- 在这个我非常看好的项目上投入绝大部分精力,做到这个方向上的全国第一;
- 希望缘分可以让我碰到一个好女孩;
- 多参加线下活动,跟开发者同行及各行各业的精英多打交道。
最后,还是以我喜爱的那首诗作为结尾吧。每当我因与众不同,而怀疑自己的决定时,我都会朗读这首诗,它让我平静,给予我力量。
未选之路
黄色的树林里分出两条路,
可惜我不能同时去涉足,
我在那路口久久伫立,
我向着一条路极目望去,
直到它消失在丛林深处。
但我却选了另外一条路,
它荒草萋萋,十分幽寂;
显得更诱人、更美丽,
虽然在这两条小路上,
都很少留下旅人的足迹。
虽然那天清晨落叶满地,
两条路都未见脚印痕迹。
呵,留下一条路等改日再见!
但我知道路径延绵无尽头,
恐怕我难以再回返。
也许多少年后在某个地方,
我将轻声叹息把往事回顾:
一片树林里分出两条路,
而我选了人迹更少的一条,
从此决定了我一生的道路。
谢谢大家!(全文完)
我们还在持续寻找优秀的人才加入我们。这里有一份我们的详细介绍,我们的联系方式也附在了末尾,如果你感兴趣,请给那个地址发邮件。谢谢!