技巧:如何用一年时间获得十年的经验
上QQ阅读APP看书,第一时间看更新

技术总监Sycx的故事

其实我在各种演讲里,线下吹牛里面无数次提及过他,讲过他的故事,但是没有任何一次认认真真地详细讲过,所以,今天就讲讲他的故事吧。

入职

2010年,我刚开始这一次创业的时候,投资刚刚拿到,办公室还没租,一切都在草创阶段,我收到了一封邮件。大意是,我叫Sycx,我从福建来,是Tiny4Cocoa论坛的用户(我的论坛OurCoders.com的前身),想在上海找一份iOS的工作,想听听我的意见。

这样的邮件当时我一年怎么也要收到几百封,我也见过很多年轻人,于是我就答应他了,约在世纪大道附近的一个星巴克。

第一眼见Sycx,我感觉他是一个很腼腆的年轻人,个子不高,穿一件宅T。

我问他为什么要来上海找工作。

他说,他是福建的,本来想找家附近的工作。但是整个福建好像都没有啥IT公司,找到的唯一有iOS工作机会的公司,还是一家做盗版的,所以,就想找外地的。想了几个大城市,北京感觉太冷,广州上海觉得都可以,不过查了下发现上海的漫展比较多,于是想来上海。

我心想这孩子要不要这么中二啊?

我就问他为啥学iOS开发。

他说,他本来买了一个挺贵的Nokia(诺基亚)手机想学塞班开发。然后,逛街的时候被小偷偷走了。

这时候,我已经快笑出声了,心想这什么笨孩子啊。我问,然后呢。

他说,之前买了一个iPod touch听歌用的,于是他就想干脆学iOS开发吧,把家里的电脑装成黑苹果,就开始自己学。

那你学了多久?

学了半年的样子。

我其实对用黑苹果学iOS开发的人有点儿成见,因为我在网上见得太多了,很多人费尽心力想省钱,安装一个黑苹果来学iOS开发,学来学去,学成了黑苹果专家,但是iOS开发呢?根本没有动手。

然后,我问他什么学历。

他说,他毕业于××职业技术学院,学的是网络游戏建模。

我问他为什么学这个专业,他说他的专业有两个专业方向,另外一个方向是网络游戏编程,但是老师说,其实学校没有老师可以教这个方向,所以,才学的建模。

我心说,这上的是什么垃圾学校啊。

然后,我问,大学毕业了你在做啥?

我留校当了半年的机房管理员。

我汗,然后呢?

然后,我去电脑城做技术员做了7天被解雇了。

汗,为啥?

本来是我同学介绍另外一个同学去,然后被他放了鸽子,就问我去不去。我想闲着也是闲着,就去了。

然后呢。

然后待了7天,老板说,你怎么连跟客户说话都不会,一台电脑也没卖出去。我才知道,原来是需要我卖电脑的。我还以为我是负责修电脑的。

然后他无辜一笑。

我快昏倒了,这是什么白痴孩子啊。然后呢?

然后,我在家里窝了半年,觉得要出去找工作,买了一个Nokia想学塞班开发,还丢了。

嗯,我基本上明白了这个孩子的故事了。

简单点儿说,这就是一个烂大专毕业的孩子,找了两个不怎么正经的工作,都没做好,运气和脑子还不好,生活做事情都吊儿郎当,自学塞班开发都能以丢手机告终。我估计这孩子iOS开发也学得不怎么样。

我开始在考虑该怎么安慰这个孩子,再劝勉一下,如果不努力一辈子就这样庸庸碌碌下去了。

然后,我问他,他自学了半年的iOS,有没有做过自己的App。

这时候他拿出他的iPod touch给我看一个听歌软件,界面居然很清爽。现在想想倒也没有什么特别出奇的部分,但是,清爽、干净、逻辑清晰,一点儿基础加自学半年可以到这个水平,确实有点儿惊到我。

但是,一个听歌软件在互联网时代没有自动下载歌词总是有点儿遗憾,我就问他为什么没有做。

他说,这是发布到App Store的版本,他最早做的版本是可以自动下载歌词的。但是提交到App Store的时候被拒绝,因为提供歌词会侵犯歌词作者的版权。所以,最后做了一个“阉割版”上了App Store。

这时候,我突然开始有点儿小激动。就问他,你英语好吗?怎么提交到App Store上去的呢?

如果你不是做这个专业的,你可能理解不了。那时候iOS开发刚刚兴起,大多数人能学会开发已经不错了,很多人学会了怎么做iOS开发以后,就是学不会怎么提交App Sotre。原因很简单,提交一个App,需要在苹果的纯英文网站上,做很多步的操作,还要填写英文的说明等等。像他这样提交以后被拒绝一次,又重新上传成功,则更复杂,往往需要用英文跟App Store的审核员对话。

他说,我英语不好,学iOS开发的时候文档看不懂就查字典,现在文档看得都差不多了,不需要查字典也可以看了。提交的时候,看到英文单词不会也是一个一个查字典搞定的。

到了这个时候,我已经基本上确定这个孩子我要定了。

从他的学历、他之前的经历来看,我相信大多数靠谱的公司不会要这么一个听起来这么不靠谱的孩子。但是,从他自学iOS半年的成果来看,我觉得他是一个很有潜力的孩子。

我认为可以自我学习、自我成长的人都是前途不可限量的。

于是,我就跟他说,我觉得按照你的简历和你刚才描述的你的从业经历来看,在上海你可能很难找到不错的工作。我的公司刚刚开始创业,急需用人,我从你的自学经历来看,觉得你是一个可造之才。如果你愿意来我的公司工作,我可以给你开税后××,虽然不多,但是应该是一个不错的开始。如果你能一直努力,我相信你可以有一个很好的前途。

他摆出一副“好在你要了我,否则我也不知道该怎么去忽悠别人”的表情,爽快地答应了。

于是,我的公司就有了第一个员工,Sycx老师。

成长

公司开张后,我开始给他安排工作,公司当时就我们两个iOS程序员。一开始,主力是我,我让他做一些辅助性的工作。做着做着,我发现他做得又快又好,我就开始给他分配更多的工作。然后,我发现他仍旧可以又快又好地做好的时候,我就开始慢慢调整,让他做项目的主力,我来做辅助性的工作。

又过了一段时间,我发现我连辅助性的工作都不需要做了,他完全变成了公司的主力,我把更多的时间和精力花在了服务器端的工作上。

我觉得他超越了我把他招进来时候的预期。其实我一直觉得自己是一个自学能力很强的人,我也有一些朋友是这样的人。但是,我不知道我自己开公司的时候能不能招到这样的人。发现他是这样的人以后,我就觉得我终于找到了我可以去管理的员工了。

我开始给他一些压力,一些他当下可能不能很好解决的问题,一点一点地加压,他一次次都在没有求助我的前提下把问题解决了。

LBS地图

有一段时间,我很看好LBS,很想做一个LBS的社交应用。我想把一个人的全部通讯录里面的地址信息,用Google map(谷歌地图)反查出经纬度,然后都显示在地图上。这个不是很靠谱的需求最早来自我的一个朋友的创意。我确实也有类似的想法,于是就让他去做。

他做了一天后,就给我做好一个Demo(演示)版本,基本上跟我预期的很像,但是,我的通讯录里面在上海的人很多,大家在地图上的图标都重合在一起,想点任何一个具体的人都点不到。

我说,你去找一个地图点聚合的算法,把这些具体特别近的人,聚合在一起显示成一个数字吧。

半天后,他给了我一个新的Demo,很漂亮,显示效果很好,在他的手机上也很流畅,但是在我的手机上卡得不行。因为我的通讯录里面大概有五六百人。我就跟他说,你要把这个算法优化下,我要的是同屏显示5000个人都不卡。你要理解,屏幕不显示的部分都不应该参与计算,等等。

过了一个晚上以后,他给了我一个新版本,做到了我的要求,同屏显示5000个人都不卡。

然后,这件事情,我就忘掉了。直到半年后,有一个技术会议,我是出品人,在寻找演讲者,实在凑不够数了,我也希望他锻炼锻炼表达能力。我就问他,我们最近做的项目,有没有技术上比较复杂、比较有意思可以讲讲的。

他摸了摸头说,都没啥可讲的。这孩子啥都好,就是表达能力很差,也没有同理心,在他看来我们做的项目都不是很难。实际上,这个地图同屏5000个点的聚合算法还是挺有技术含量的。但是他说不出来个所以然,于是我只好在黑板上列了个题目,然后一步一步地问他,之前的速度和后来的速度差了1000倍,是怎么一步一步优化的。他找来了代码,在我的追问下,一点点回忆。

原来包含了数字计算的精度降低,屏外剪枝,从排序选择最佳代表点改为随机选取代表点,动画提交合并,等等,大概七八项大的优化,这一切都是他一个晚上边分析边搞定的。

LBS口袋妖怪

有一段时间,我曾经想尝试做游戏,当然后来发现由于团队基因的问题,我们可以写一个游戏出来,但是美术、策划、运营方面的事情我们搞不定,所以就放弃了。

我当时设计的游戏是在手机上玩基于地理位置的口袋妖怪。因为我们缺乏设计方面的人才,我让他去把口袋妖怪的图片资源和数值扒过来,在开发阶段直接用,等到我们有了自己的设计、策划力量以后再替换过来。

他研究了半天告诉我,网上有口袋妖怪的wiki站点,里面几乎包括了我们需要的全部数据,我说那太好了,直接用吧。

大概一个星期不到,在iPhone上的口袋妖怪战斗场面,他就实现出来了。

这个项目最终还是放弃了。不过我还经常在饭局里面把我们做的半成品给朋友看。有一次,我和Sycx还有我的好朋友莫老师吃饭,莫老师问起我们在做什么。我想让Sycx同学锻炼下,让他来介绍,他又开始扭扭捏捏半天,啥也没说出来。

我就开始讲,我们做了一个游戏,准备用口袋妖怪的数据,幸亏网上有个口袋妖怪wiki,有全部口袋妖怪的数据的数据库,我们把这个数据库……

这时候,他打断了我,说没有数据库。

我说,没有数据库,你怎么导入的?

他说,只有一个wiki,我自己写了一个爬虫,把wiki的页面全部爬了下来,然后生成了一个数据库。

莫老师说不错啊,做iOS的小伙子还会做爬虫。

他说,为了这个项目现学的,很好玩。

我在旁边倒了一杯冰啤酒,抿了一口,心说,我手下的人靠谱吧,连我都不知道他还做了这么多额外的事情,悄无声息的。

排版项目

公司后期其实有点儿混乱,因为我一开始瞄准要做的App推荐网站,我们没有做好。而我们做的其他App大多数也都不卖座,偶尔有几个反响还不错的,下载量购买量都微不足道。有一段时间,我很沉沦,不知道该怎么突破。

后来,我在想不管公司如何,我们做点儿纯技术的东西,说不定可以拯救公司。那时候,我很看好苹果做的iBooks author,用它可以轻松做出来在iPad上可以使用的图文并茂、有多媒体的交互电子书。但是,这个软件生成的问题是和苹果的iBooks store绑在一起的,但是因为政策和法律的原因,苹果的iBooks store根本没有进入中国。

于是我想了一个办法,我们能不能自己做一个兼容iBooks author格式的阅读器,这样苹果的iBooks author就等于成了我们的编辑器。

我花了一天的时间去分析iBooks author的文件格式,弄明白了以后,我把Sycx找来,跟他说了我的想法。

嗯,他也不是万能的。他觉得我犯病了,他说,这东西苹果不知道用了多少工程师做,咱们肯定做不出来,你最近是不是没吃药啊?

我当时没有理他,第二天我去深圳做关于盗版的演讲,在深圳的日子里,我不停地在写代码,回到上海我也在写。三天后,我给他看了我做的一个Demo,把一个iBooks author做的文件解析出来,把一个章节的标题和正文都显示出来,当然版式格式都是错的。但是怎么获得版式、格式的信息我都获取到了。

给他看了Demo,他受到了某种震撼,然后我给他讲了一遍格式和我的思路。我问他懂了吗,他说懂了。我说,你需要多久看代码?他说半天吧。

第二天,我问他看懂与否,他说看懂了。我说这个项目你来领导吧,需要我做哪个模块,你来安排。他说,算了,你代码太烂了,我自己来写吧。

从那以后,我们公司的主力代码里面,我就几乎没有参与过了。他确实对得起这句狂话,后来没让我麻烦过。

这个项目,我们做得很酷,包括他在内,还有三个程序员一起在做,他领导。我制订的计划是完全敏捷和迭代的。项目伊始,这个App就可以执行,一个迭代周期一个迭代周期地增加新的功能。项目开始一个月后,我就用它挣了10多万。而这个项目真正做完第一期是一年后,可见我们的迭代做得多好。

他做了这个项目的主力和负责人后,彻底解放了我,我在一年多的时间里,就是用这个半成品去挣钱,去融资,去跟全上海的出版社推销我们的产品。

裁员

然而,虽然我很卖力气地去谈投资,找客户,公司最终还是遭遇了很大的危机,钱花得差不多了。投资没有找到,手头的几个客户也不足以支撑公司继续运营。我可以选择再强撑两个月关门,不过我的投资人建议我裁员到最小规模强撑一下。于是我仔细算了算成本,选择了一个最小的团队,就是我加上Sycx老师和我们的行政,当时剩下的钱还可以继续撑不到一年的样子。

于是公司就在我们三个人的情况下,继续支撑下去,继续做产品,直到几个月后,找到一个新的客户,找到了新的收入来源,才免于倒闭。到现在我们又开始慢速扩展,又招了些人回来。

iOS转Android(安卓)项目

去年的时候,客户需要我们提供一个Android版本。怎么做呢?我们现有产品非常复杂,重新写一个Android版本出来可能耗时太长。而且,我们的产品非常复杂,仍旧在不断地迭代和改进之中,真的写了一个Android版以后,我们就需要同时维护两个不断迭代和改进的代码了,我觉得项目管理难度非常大。

于是我大概自己想了一两个星期,有一天我就跟他商量。我说,重新做一个Android版本不难,以我们团队的学习能力,几天就可以学会Android开发,开发一个Android版本。因为我们之前的经验积累,也不会太慢,也许3~4个月就可以搞定。但是,问题是我们要同时维护两个不断迭代和改进的代码,我觉得太难了。

他觉得也是。

我说,所以我想到的方案是我们把苹果的开发环境,Xcode、LLVM、CocoTouch全部都移植到Android上去。这样的话,我们实际上在业务逻辑上还是一份代码。虽然也是两个项目,但是这两个项目完全垂直,互相不干扰,管理起来就简单多了。

目前客户只需要Android版本,可是如果有了这么一套把苹果开发环境移植到Android的经验,假设客户未来需要WP平台,我们也可以迅速搭建出来一套系统。

他表示认同。

我说我们现在最重要的就是弄清楚大概的逻辑和时间计划,我初步估计你可以在三个月内,完成底层的移植,这些部分很困难,但是工作量不会很大,大量的事情是反复地调试和解决部署问题。但是这个部分是Block(障碍)型的任务,这部分完成不了,后面的部分根本谈不上怎么解决。

如果这个阶段搞定了,后面有大量的库需要我们自己去实现,但是是在Objective-C的基础上去实现,技术上难度并不高,我们可以很轻松地搞定。

他也表示认同。

然后,我大概介绍了下我的前期调研,有哪些开源库跟我们要做的事情比较接近。给了他三天的时间,让他去调查分析,了解下我们需要做的这么一个大工程里面,哪些东西是已经有开源库可以实现的,哪些东西是我们自己必须实现的。

三天后,他给我讲解了最流行的三个类似的开源库。我们仔细讨论了下,然后项目就正式开始了。

他开始了三个月的、移植一个没有UI的iOS程序到Android的历程。

在此之前,他没有玩过Android开发,对Linux底层开发也不是很了解,甚至不了解Makefile这些东西。但是这三个月过后,他已经是跨平台编译专家了,对LLVM、GDB等等都烂熟于胸。大概就在三个月整的时候,我们内部做了一个演示,他已经可以做到在Xcode下打开一个完全没有UI的iOS代码,用Xcode把它编译到Android上去,并且用Android内建的GDB看到这个程序的输出信息。

然后我们就开始移植Cocoa touch库,大概就在整一年的时候,我们基本完成了设计目标。

结论

Sycx进入我的公司的时候,我就知道他可以成长为一个非常优秀的程序员。但是几年下来,他达到的高度还是让我很惊讶。

我很喜欢这个孩子,因为我从他身上可以看到我年轻时候的影子。唯一的区别是,我年轻的时候,没有遇到像我自己这么厉害的领导。我愿意全力去指导和教育他的样子,也是从我自身的经历出发,我知道一个有想法肯努力的年轻人,在合适的教导下,可以释放出什么样的能力。

Sycx和我的前妻还有我自己,都是我写这本书的主要原因,我前妻初中没毕业,我的技术总监来自一个烂大学,我自己做的第一份工作的主要内容,是在办公室里,趴在地上帮同事把踢掉的网线接上。

我们三个人的共同点都是我们做自己喜欢的事情、有激情的事情的时候,不需要别人监督,不需要别人指导,乐于自我学习,自我成长。我们虽然不是传统成功学意义上的成功,但是都做出了一些自己和外人不敢想象的伟业。这就是我认为的成功。

我觉得大多数人的条件跟我们其实差异不大,都有机会获得自己的成功,问题是能不能走上一条自我学习和成长的路。