技术总监Sycx的故事
其实我在各种演讲里,线下吹牛里面无数次提及过他,讲过他的故事,但是总还是没有任何一次认认真真的详细讲过,所以,今天就讲讲他的故事吧。
Sycx是福建漳州人,我经常开玩笑说,你生于一个著名的骗子之乡,为啥没有成为一个亿万富翁呢?也许他是一个异数,我们对福建了解最多的也许是偷渡客,也许是莆田帮,也许是著名的盗版网站91,等等。
入职
2010年,我刚开始这一次创业的时候,投资刚刚拿到,办公室还没租,一切都在草创之时,我收到了一封邮件。大意是,我叫sycx我从福建来,是Tiny4Cocoa论坛的用户(我的论坛OurCoders.com的前身),想在上海找一份iOS的工作,想听听我的意见。
这样的邮件当时我一年怎么也要收到几百封,我也见过很多年轻人,于是我就答应他了,约在世纪大道附近的一个星巴克。
第一眼见Sycx,我感觉他是一个很腼腆的年轻人,个子不高,穿一件宅T。
我问他为什么要来上海找工作。
他说,他是福建的,本来想找家附近的工作。但是整个福建好像都没有啥IT公司,找到的唯一有iOS工作机会的公司是91。但是他很反感这些做盗版的,所以,就想找外地的。想了几个大城市,北京感觉太冷,广州上海觉得都可以,不过查了下发现上海的漫展比较多,于是想来上海。
我心想这孩子要不要这么中二啊?
我就问他为啥学iOS开发。
他说,他本来买了一个挺贵的Nokia手机想学塞班开发。然后,逛街的时候被小偷偷走了。
这时候,我已经快笑出声了,心想这什么笨孩子啊。我问,然后呢。
他说,之前买了一个iPod touch听歌用的,于是他就想干脆学iOS开发吧,把家里的电脑装成黑苹果,就开始自己学。
那你学了多久?
学了半年的样子。
我其实对用黑苹果学iOS开发的人有点成见,因为我在网上见得太多了,很多人费尽心力想省钱,安装一个黑苹果来学iOS开发,学来学去,学成了黑苹果专家,但是iOS开发呢?根本没有动手。
然后,我问他什么学历。
他说,他毕业于xx职业技术学院,学的是网络游戏建模。
我问他为什么学这个专业,他说他的专业有两个专业方向,另外一个方向是网络游戏编程,但是老师说,其实学校没有老师可以教这个方向,所以,才学的建模。
我心说,这上的这是什么垃圾学校啊。
然后,我问,大学毕业了你在做啥?
我留校当了半年的机房管理员。
我汗,然后呢?
然后,我去电脑城做技术员做了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半年的成果来看,我觉得他是一个很有潜力的孩子。
我认为可以自我学习,自我成长的人都是前途不可限量的。
于是,我就跟他说,我觉得按照你的简历和你刚才描述的你的从业经历来看,在上海你可能很难找到不错的工作。我的公司刚刚开始创业,急需用人,我从你的自学经历来看,觉得你是一个可造之才。如果你愿意来我的公司工作,我可以给你开税后xx,虽然不多,但是应该是一个不错的开始。如果你能一直努力,我相信你可以有一个很好的前途。
他摆出一副好在你要了我,否则我也不知道该怎么去忽悠别人的表情,爽快的答应了。
于是,我的公司就有了第一个员工,Sycx老师。
成长
公司开张后,我开始给他安排工作,公司当时就我们两个iOS程序员。一开始,主力是我的,我让他做一些辅助性的工作。做着做着,我发现他做的又快又好,我就开始给他分配更多的工作。然后,我发现他仍旧可以又快又好的做好的时候,我就开始慢慢调整,让他做项目的主力,我来做辅助性的工作。
又过了一段时间,我发现我连辅助性的工作都不需要做了,他完全变成了公司的主力,我把更多的时间和精力花在了服务器端的工作上。
我觉得他超越了我把他招进来的时候的预期。其实我一直觉得自己是一个自学能力很强的人,我也有一些朋友是这样的人。但是,我不知道我自己开公司的时候能不能招到这样的人。发现他是这样的人以后,我就觉得我终于找到了,我可以去管理的员工了。
我开始给他一些压力,一些他当下可能不能很好解决的问题,一点一点的加压,他一次次都在没有求助我的前提下把问题解决了。
LBS地图
有一段时间,我很看好LBS,很想做一个LBS的社交应用。我想把一个人的全部通讯录里面的地址信息,用Google map反查出经纬度,然后都显示在地图上。这个不是很靠谱的需求最早来自我的一个朋友的创意。我确实也有类似的想法。于是就让他去做。
他做了一天后,就给我做好一个Demo版本,基本上跟我预期的很像,但是,我的通讯录里面在上海的人很多,大家的在地图上的图标都重合在一起,想点任何一个具体的人都点不到。
我说,你去找一个地图点聚合的算法,把这些具体特别近的人,聚合在一起显示成一个数字吧。
半天后,他给了我一个新的Demo,很漂亮,显示效果很好,在他的手机上也很流畅,但是在我的手机上卡的不行。因为我的通讯录里面大概有500、600人。我就跟他说,你要把这个算法优化下,我要的是同屏显示5000个人都不卡。你要理解,屏幕不显示的部分都不应该参与计算,等等。
过了一个晚上以后,他给了我一个新版本,做到了我的要求,同屏显示5000个人都不卡。
然后,这件事情,我就忘掉了。直到半年后,有一个技术会议,我是出品人,在寻找演讲者,实在凑不够数了,我也希望他锻炼锻炼表达能力。我就问他,我们最近做的项目,有没有技术上比较复杂比较有意思可以讲讲的。
他摸了摸头说,都没啥可讲的。这孩子啥都好,就是表达能力很差,也没有同理心,在他看来我们做的项目都不是很难。实际上,这个地图同屏5000个点的聚合算法还是挺有技术含量的。但是他说不出来个所以然,于是我只好在黑板上列了个题目,然后一步一步的问他,之前的速度和后来的速度差了1000倍,是怎么一步一步优化的。他找来了代码在我的追问下,一点点回忆。
原来包含了数字计算的精度降低、屏外剪枝、从排序选择最佳代表点改为随机选取代表点,动画提交合并,等等,大概7-8项大的优化,这一切都是他一个晚上边分析边搞定的。
LBS口袋妖怪
有一段时间,我曾经想尝试做游戏,当然后来发现团队基因的问题,我们可以写一个游戏出来,但是美术、策划、运营方面的事情我们搞不定,所以就放弃了。
我当时设计的游戏是在手机上玩基于地理位置的口袋妖怪。因为我们缺乏设计方面的人才,我让他去把口袋妖怪的图片资源和数值扒过来,在开发阶段直接用,等到我们有了自己的设计、策划力量以后再替换过来。
他研究了半天告诉我,网上有口袋妖怪的wiki站点,里面几乎包括了我们需要的全部数据,我说那太好了,直接用吧。
大概一个星期不到,在iPhone上的口袋妖怪战斗场面,他就实现出来了。
这个项目最终还是放弃了。不过我还经常在饭局里面把我们做的半成品给朋友看。有一次,我和Sycx还有我的好朋友莫老师吃饭,莫老师问起我们在做什么。我想让Sycx同学锻炼下,让他来介绍,他又开始扭扭捏捏半天,啥也没说出来。
我就开始布拉布拉,我们做了一个游戏,准备用口袋妖怪的数据,幸亏网上有个口袋妖怪wiki,有全部口袋妖怪的数据的数据库,我们把这个数据库…
这时候,他打断了我,没有数据库。
我说,没有数据库,你怎么导入的。
他说,只有一个wiki,我自己写了一个爬虫,把wiki的页面全部爬了下来,然后生成了一个数据库。
莫老师,说不错啊,做iOS的小伙子还会做爬虫。
他说,为了这个项目现学的,很好玩。
我在旁边倒了一杯冰啤酒,抿了一口,心说,我手下的人靠谱吧,连我都不知道他还做了这么多额外的事情,悄无声息的。
排版项目
公司后期其实有点混乱,因为我一开始瞄准要做的App推荐网站,我们没有做好。而我们做的其他App大多数也都不卖座,偶尔有几个反响还不错的,下载量购买量都微不足道。有一段时间,我很沉沦,不知道该怎么突破。
后来,我在想不管公司如何,我们做点纯技术的东西,说不定可以拯救公司。那时候,我很看好苹果做的iBook author,用它可以轻松做出来在iPad上可以使用的图文并茂,有多媒体的交互电子书。但是,这个软件生成的问题是和苹果的iBook store绑在一起的,但是因为政策和法律的原因,苹果的iBook store根本没有进中国。
于是我想了一个办法,我们能不能自己做一个兼容iBook author格式的阅读器,这样苹果的iBook author就等于成了我们的编辑器。
我花了1天的时候去分析iBook author的文件格式,弄明白了以后,我把Sycx找来,我跟他说了我的想法。
嗯,他也不是万能的。他觉得我犯病了,他说,这东西苹果不知道用了多少工程师做,咱们肯定做不出来,你最近是不是没吃药啊?
我当时没有理他,第二天我去深圳做关于盗版的演讲,在深圳的日子里,我不停的在写代码,回到上海我也在写。三天后,我给他看了我做的一个Demo,把一个iBook author做的文件解析出来,把一个章节的标题和正文都显示出来,当然版式格式都是错的。但是怎么获得版式、格式的信息我都获取到了。
给他看了Demo,他得到了某种震撼,然后我给他讲了一遍格式和我的思路。我问他懂了么。他说懂了。我说,你需要多久看代码。他说半天吧。
第二天,我问他看懂与否,他说看懂了。我说这个项目你来领导吧,需要我做哪个模块,你来安排吧。他说,算了,你代码太烂了,我自己来写吧。
从那以后,我们公司的主力代码里面,我就几乎没有参与过了。他确实对得起这句狂话,后来没让我麻烦过。
这个项目,我们做的很酷,他在内,还有三个程序员一起在做,他领导。我制定的计划是完全敏捷和迭代的。项目伊始,这个App就可以执行,一个迭代周期一个迭代周期的增加新的功能。项目开始的一个月后,我就用它挣了10多万。而这个项目真正做完第一期是1年后,可见我们的迭代做的多好。
他做了这个项目的主力和负责人后,彻底解放了我,我在1年多的时间里,就是用这个半成品去挣钱,去融资,去跟全上海的出版社聊推销我们的产品。
裁员
然而,虽然我很卖力气的去谈投资,找客户,公司最终还是遭遇了很大的危机,钱花的差不多了。投资没有找到,手头的几个客户也不足以支撑公司继续运营。我可以选择再强撑两个月关门,不过我的投资人建议我裁员到最小规模强撑一下。于是我仔细算了算成本,选择了一个最小团队,就是我加上Sycx老师和我们的行政,当时剩下的钱还可以继续撑不到1年的样子。
于是公司就在我们三个人的情况下,继续支撑下去,继续做产品,直到几个月后,找到一个新的客户,找到了新的收入来源,才免于倒闭。到现在我们又开始慢速扩展,又招了些人回来。
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库,大概就在整1年的时候,我们基本完成了设计目标。
结论
Sycx进入我的公司的时候,我就知道他可以成长为一个非常优秀的程序员。但是几年下来,他达到的高度还是让我很惊讶。
我很喜欢这个孩子,因为我从他身上可以看到我年轻的时候的影子。唯一的区别是,我年轻的时候,没有遇到像我自己这么厉害的领导。我愿意全力去指导和教育他的样子,也是从我自身的经历出发,我知道一个有想法肯努力的年轻人,在合适的教导下,可以释放出什么样的能力。
Sycx和我的前妻和我自己都是我来写这个鸡汤号的主要原因,我前妻初中没毕业,我的技术总监来自于一个烂大学,我自己上班的第一份工作主要内容是在办公室里,趴在地上,帮同事把踢掉的网线的接上。
我们三个人的共同点都是我们做自己喜欢的事情,有激情的事情的时候,不需要别人监督,不需要别人指导,乐于自我学习,自我成长。我们虽然不是传统成功学意义上的成功,但是都做出了一些自己和外人不敢想象的伟业。这就是我认为的成功。
我觉得大多数人的条件跟我们其实差异不大,都有机会获得自己的成功,问题是能不能走上一条,自我学习和成长的路上。
如果您阅读过此文章有所收获,请为我顶一个,如果文章中有错误的地方,欢迎指出。
相互学习,共同进步!
技术总监Sycx的故事的更多相关文章
- 技术总监的故事告诉大家,要学会say【NO!】
今天就给大家分享一个发生在我自己身上的事情吧. 1 2015年的时候,我和我的领导A,还有几个小伙伴正在做一个"紧急定制",这个任务是公司老大CEO和重要客户定下来的一个项目,背后 ...
- 盛大游戏技术总监徐峥:Unity引擎使用的三种方式
在5月13日Unite 2017 案例分享专场上,盛大游戏技术总监徐峥分享了使用Unity引擎的三种方式,以下为详细内容: 大家好,我先简单介绍一下我自己,我是盛大游戏的技术总监徐峥.我今天想分享的主 ...
- Atitit.cto 与技术总监的区别
Atitit.cto 与技术总监的区别 1. 核心区别1 2. Cto主要职责1 3. 如何提升到cto1 4. CTO五种基本的必备素质:2 5. 2 1. 核心区别 技术总监(Chief Tech ...
- IT软件技术人员的职位路线(从程序员到技术总监) - 部门管理经验谈
以前写过一个文(IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章),主要介绍笔者的职业发展之路,不过该文需要后续了,因为笔者现在从事的是“产品经理”一职.从笔者的导航文([置顶]博文快 ...
- [转]CTO、技术总监、首席架构师的区别
经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项 ...
- CTO、技术总监、首席架构师的区别
2016年11月30日13:22:26[转] CTO.技术总监.首席架构师的区别 提升自已的能力,比如专业技术,行业发展趋势,技术发展趋势,协调能力,组织能力,管理能力等[技术总监] 需要从技术总监和 ...
- 【转】】CTO、技术总监、首席架构师的区别
经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项 ...
- 技术总监和CTO的区别 浅谈CTO的作用----软件公司如何开源节流(一)[转]
我一直在思考软件公司如何开源节流.当然,老板也在思考开源节流.当然,老板思考的开源节流在公司运营层面上,而我作为CTO,我考虑的则是在产品运营角度上来思考这个问题.否则,一个软件公司,它的生存与发展就 ...
- 【腾讯Bugly干货分享】总结一个技术总监的教训和经验
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/Ry-G0Nikh6m-h3ZVC2cLyQ 导语 20 ...
随机推荐
- 跨平台移动开发_PhoneGap API Camera 使用摄像头采集照片.
camera对象提供对设备默认摄像头应用程序的访问. 程序运行效果 相关代码 <!DOCTYPE html> <html> <head> <title> ...
- nodejs实现静态托管
const express = require("express"); const app = express(); /* 语法1: app.use(express.static( ...
- Java final static关键字
Java中的final关键字 使用 final 关键字做标识有 “最终的” 含义. final 可以修饰 类.方法.属性.变量 final 修饰类: 则该类不允许被继承 final 修饰方法:则该方法 ...
- Eclipse常用插件安装_PropertiesEditor
properties文件在项目中多用做i18n国际化支持的配置文件,在properties文件中出现的中文信息都要转换为Unicode文本,一般的做法都是使用JDK自带的native2ascii工具进 ...
- Mybatis映射配置文件Mapper.xml详解
1.概述: MyBatis 的真正强大在于它的映射语句,也是它的魔力所在. 2.常用的属性 常用的几个属性: select元素:代表查询,类似的还有update.insert.delete id:这个 ...
- Lucene简单介绍
[2016.6.11]以前写的笔记,拿出来放到博客里面~ 相关软件: Solr, IK Analyzer, Luke, Nutch;Tomcat; 1.是什么: Lucene是apache软件基金会j ...
- QT XML文档的解析 QXmlStreamReader, DOM,SAX 三种解析方法 简单示例
0. xml文档如下 <?xml version="1.0"?> <bookindex> <entry term="sidebearings ...
- Hibernate 关于实体映射常用注解
注解 类注解(写在类上面的) @Entity 标明实体类 @Table(name="数据库标明") 生成数据库时的表名由这个决定 @DynamicInsert ...
- Codeforces Round #273 (Div. 2) D. Red-Green Towers 背包dp
D. Red-Green Towers time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 03_01_基本操作_增(insert)
1. 1.1.创建表 create table employee( id number primary key, name varchar2(64) not null, email varchar2( ...