购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅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 和我的前妻还有我自己,都是我写这本书的主要原因,我前妻初中没毕业,我的技术总监来自一个烂大学,我自己做的第一份工作的主要内容,是在办公室里,趴在地上帮同事把踢掉的网线接上。

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

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

点击中间区域
呼出菜单
上一章
目录
下一章
×