唐巧的博客

成长为 iOS 大 V 的秘密

字数统计: 6.5k阅读时长: 21 min
2016/07/20

前言

毫不谦虚地说,我是国内 iOS 开发的大 V。我从 2011 年底开始自学 iOS 开发,经过 3 年时间,到 2014 年底,我不但写作了上百篇 iOS 相关的原创博客文章,完成《iOS 开发进阶》,同时还成功运营了「iOS 开发」这个国内最多 iOS 开发者订阅的微信公众号,另外我的微博(@唐巧_boy)粉丝超过 4 万。我是如何做到的呢?

在武侠小说里面,武林高手通常生来就有慧根,是个学武奇才,就像周星驰《功夫》里面的星仔。另外,他们还通常会得到世外高人的指点,要么获得别人毕生修炼的真气(虚竹),要么获得绝世武功的秘笈(段誉)。

而我其实在这些方面都很弱。我在计算机编程方面并算不上聪明,我在北京师范大学读计算机专业,这是一个全国综合实力排在 100 名开外的院系,离清华北大差得不是一个级别。而我的语文高考成绩,刚刚及格。我的英语成绩也很一般。

更不凑巧的是,我当年学 iOS 的时候,国内资料很少,而且公司里面没人有时间指导我,我只能自学。很难想像,我这么差的背景的人,能够成为 iOS 大 V,能够写文章,甚至还出书。

那么,我成为 iOS 大 V 的秘密是什么呢?请听我慢慢道来。

大 V = 大牛 ?

首先我想讨论一个问题:「大 V = 大牛」吗?其实很多时候,这两者并不能直接划等号。

我见过很多大牛,他们水平很高,但是他们或者不善于表达,或者不善于写作,或者表达和写作都没问题,但是他们并不喜欢在网上高谈阔论,更喜欢把时间花在研究技术问题上。这些大牛,就像《天龙八部》里面的扫地僧一样,不曾被外界知晓,但是技术实力一流。

我也见过一些大 V,技术实力一般,但是喜欢分享自己的心得,喜欢翻译国外的博文。他们有一些人甚至不善于写作,写文章喜欢大段大段地贴代码。但是,随着他在这方面不断地锻炼,他们慢慢地写作得越来越好,讲解技术越来越通俗易懂。因为频繁地交流,他们的技术实习也在不停地进步。虽然这些大 V 的真实水平可能比不过一些从不分享的大牛,但是他们的能力至少是达标的。

所以,我对这个问题的答案是:大 V 不等于 大牛。但是,要成为一个大 V,至少应该具备以下条件:

  • 能力是达标的,不应该有明显的能力问题。
  • 喜欢交流,认识很多业界同行。
  • 喜欢表达,通过写作和线下分享来传播知识。

所以,我们不应该盲目崇拜大 V,他们只是喜欢分享而已。

那我算一个 iOS 的大牛吗?我不知道。有一些人认可我,也有一些人觉得我很一般。但是我的原创文章、我的书、我开源的代码、我做的每次分享都公开在网上。我仅仅用三年时间在 iOS 领域做到这些也是不容易的,所以希望大家继续看下去,看我是如何做到的。

奇材 + 秘笈?

在武侠小说里面,武林高手通常生来就有慧根,是个学武奇才,就像周星驰《功夫》里面的星仔。另外,他们还通常会得到世外高人的指点,要么像虚竹那样,获得别人毕生修炼的真气;要么像段誉那样,获得绝世武功的秘笈。

我是一个奇材吗?

我是一个奇材吗?显然不是。

我从小就喜欢计算机,从高中就开始接触计算机编程,我还记得那个时候学的是 PASCAL 语言,从那个时候起,我就展现出在计算机编程方面的愚钝。我还记得我和同班的小伙伴一起学习递归枚举,他大概只花了三天就看懂了相关的代码,而我花了整整一个月。

我的高考成绩其实也很一般,不过我运气比较好,当年全国试行自主招生,我靠着自主招生进入了北京师范大学,在北京师范大学读计算机专业。这是一个全国综合实力排在 100 名开外的院系,离清华北大差得不是一个级别。我靠着高中时积累的一点点编程知识混进了学校的 ACM 校队,之后一直比赛成绩一般,直到研一的时候才免强获得了亚洲区的区域赛金奖。

我的实习经历也非常不顺。我从大四就开始找实习,一直被拒,到研究生阶段还是找不到实习。最终还是靠刚刚说的区域赛金奖,获得了来自赞助商 IBM 的一次实习机会。

大 V 需要擅长写作,而我的高考语文成绩,92 分(满分 150),刚刚及格。我的英语成绩也很一般。

所以,我就是一个天资普通得不能再普通的一个人。

我有高人指点吗?

那我有高人指点吗?很可惜,也没有。

我不但没有高人指点,而且我学习 iOS 开发的过程极其曲折。

没有资料

我是在 2011 年底开始学习 iOS 开发的。当时我厌倦了服务器端的开发,感觉移动互联网很火,于是想做 iOS 开发。但是,当时移动开发刚刚兴起,国内外甚至都没有一本像样的 iOS 图书。当时除了一本入门的基础书,教你使用各种 UI 控件外,就只剩下一本满是代码的书,教你各种小技巧(比如如何读文件,如果发个网络请求之类)。

没有人带

我当时在有道云笔记组,负责 iOS 开发的同学并不太擅长带人,所以我很遗憾基本上只能自己学习和研究 iOS 开发知识。

学习时间短

我以为公司会给我一些时间让我学习 iOS 开发,但是真实的情况是,我只有两周的时间学习!两周之后,我就需要帮忙修复线上的 iOS 代码,以及参与功能开发了。

我不知道大家是花多久学完 iOS 开发的。有一些同学报 iOS 培训班,在有老师讲的情况下,一学就学三个月。而我,只有两周的时间。

背景知识为零

我在学习 iOS 开发前,对客户端开发一无所知,我当时没有用过 Mac 机,没有 iPhone。一切东西对我来说都还非常神秘。

没有时间提高

我从 2011 年底开始学 iOS 开发,到 2012 年 5 月份就离职创业了。那个时候因为创业刚开始,我们进入了长期的 6 天,每天 11 小时的高强度工作方式。我想提高自己的 iOS 水平,但是每天工作下来都很晚了,而且写了一整天代码精疲力尽,实在没有时间提高。

我的成就

但是,在自身条件一般,环境恶劣的情况下,我还是做到了自我的快速成长,并且收获了很多成绩:

  • 我从开始学习 iOS 开发半年后,就开始独立负责 iOS 端的开发工作。
  • 我从 2013 年 1 月创建「iOS 开发」微信公众帐号,然后每周坚持更新,现在有超过 3 万 5 千的订阅量。
  • 我从 2013 年底开始撰写《iOS 开发进阶》,2014 年底完成。另外我还写了一年多 「iOS 开发周报」。
  • 我将公司的网络库,Key-Value 存储库开源,GitHub 上 Star 数上千。
  • 我坚持写 iOS 技术博客,现在完成了超过 100 篇原创文章,很多发表在 InfoQ 和 《程序员》杂志上。

我是如何做到的

那我是如何做到的呢?

解决入门的问题

学习 iOS 开发,没有相关硬件是不行的。但是苹果的硬件都很贵,很多人舍不得买,装黑苹果来解决,这种行为我简单尝试了一下就放弃了,因为黑苹果有着太多的兼容和性能问题,在这上面浪费时间非常不值得。于是,我还是自己掏钱买了 Mac 机和 iPad,为了省钱,我买的第一台 Macbook Pro 是从同学手中买的二手货,我买 iPad 而不是 iPhone,其实也是为了省钱,因为 iPad 不但相对来说更便宜,而且可以同时做 iPhone 和 iPad 的开发用。

国内没有学习资料怎么办呢?只有硬着头皮看国外的资料呗。其实当时国外的资料也不多。我是一个视觉型的学习者,所以我看的是斯坦福的iOS开发视频课程。前几节课看的是网易云课堂上的带中文字幕的版本,但是字幕只到第10课,后面的课程我就直接看的无字幕的原始视频。

两周的时间虽然比起外面的培训机构短很多。但是安排得好的话,每天还是可以学习很多。我大概一周就看完了视频课程,然后就是不停地写程序练习。虽然没有人带我,但是当时有道公司内部的所有 iOS 工程代码我其实也是可以用来学习的。所以我仔细阅读了有道词典和有道云笔记的代码。

于是,两周之后,我就开始参与工程Bug的修复工作了。差不多一个月左右,我就开始负责一部分开发工作了。

解决交流讨论的问题

虽然我很快完成了iOS的入门学习,但是感觉交流很少,很多问题没有人讨论,这对于自己提高开发能力是一个很大的障碍。于是,我开始组织各种分享交流会。

刚开始我尝试在公司内部做这种交流工作,发现推进得非常困难,主要是喜欢分享的人还是比较少。有道的技术牛人其实是不少的,但是就像我刚刚说的那样,大牛不等于大V,大牛也不代表着乐于并且擅长分享。所以,经过了快两个月的推进,技术交流会还是非常少。大家都会说没有时间准备,而我又没有任何权力在强行要求同事做分享。

我苦恼了很久,最终到创业的时候,才发现我之前眼光太浅,世界那么大,我为什么要把交流的圈子定在公司内部呢?在创业的时候,我开始从全国范围内主动寻找和结识乐于分享的 iOS 开发者。我会从微博,博客,技术分享会,前同事等各种渠道去寻找这样的朋友。其实,对于乐于分享的人来说,你要做的事情就只是把他们聚到一起就行了,他们自己就会开始不停地交流、讨论、分享。

解决提高的问题

大部分 iOS 开发者在入门一段时间后,就会苦于不知道如何提高。其实,提高的方式有很多,只要舍得花时间。我在提升个人技能方面,主要做了这些事情:

  • 看 WWDC 的视频。因为由苹果官方提供,并且每年更新,所以 WWDC 是学习 iOS 开发新知识最好的渠道。我利用我每天上下班坐地铁的时间来学习,遇到一些关键的知识在地铁上不好做笔记,我会直接用截屏的方式把这些知识截下来,然后晚上在家里再把内容整理下来。下图是我在 Evernote 中记录的 WWDC 笔记,大家可以看到,一共有 70 多篇。
  • 看 iOS 的博客。我用 RSS 聚合阅读器定阅了大量国外 iOS 的博客,然后利用碎片时间阅读。我的 Evernote 上收藏了上百篇的精选文章。我的碎片时间大多是上厕所和睡觉前。那个时候智能手机刚刚兴起,还没有微信,我感觉现在很难做到在手机上安静地做阅读了。

  • 写作。对于我个人来说,我会坚持用写作的方式来学习。因为我觉得写作是知识理解的最高层次。美国教育心理学家 Bloom 将知识认知历程维度分为 6 个层次,分别为:记忆、理解、应用、分析、评鉴、创造。如下图所示,层次越高,表示对知识的掌握程度越深。我每次觉得我理解了一个知识后,就会用写作的方式把它写下来,通常情况下,在写作的过程中我都会发现自己的一些认知不足,从而通过二次学习来完善。

我的心得

在这个过程中,我也发现了一些以前认识上的误区。

时间是最大的借口

有一些朋友评价我:「迷之高产」,他们不理解我是如何有那么多时间搞定各种事情。

在我看来,当你做不好某一件事情时,时间通常是最大的借口。

时间是可以寻找的

我学习 iOS 开发半年后,我就从网易离职参与创业了。当时我们需要工作 6 天,每天 11 个小时。但是,这仍然没有影响我学习、交流、甚至写作。其实你仔细记录自己的时间之后,就会发现有很多时间可以利用。

比如我在那段紧张的创业期间,就利用每天上下班的时间,在地铁上看 WWDC 视频。

我自认为最夸张的事情是利用陪老婆逛街的时候写博客文章。当时我老婆和岳母在商场里面逛,我就在手机上写文章。其实试过之后发现,在手机上写文章的速度也算不上慢。

现在,我有了小孩,周末常常要陪伴她。我就会特别珍惜晚上 8 点后她睡着后那段时间,我可以利用那段时间做一些学习和写作的事情。

时间是可以挤的

如果我们提高工作的效率,那么做同样的事情,你就会比别人花费更少的时间。这样我们就可以挤出时间做别的事情。

程序员这个工作特点是需要集中精力,所以应该尽量避免被别人打断。推荐大家使用番茄工作法,让自己能够在短时间内集中精力做一件事情。久而久之,你就可以快速进入编程状态。

另外,写代码之前,先在纸上把逻辑写清楚,这样会使得自己 Coding 的过程非常顺利。有一些人喜欢边写边想,这样如果遇上一些没想清楚的情况,就可能白写一部分代码。在纸上把逻辑先写清楚后,Coding 的节奏会非常轻松,因为你的脑海里已经有整个架构的蓝图了,即使中间暂停休息一下,也不会有很大的影响。

平衡好时间和代码质量

有一些人写代码,完全是堆功能,不考虑可维护性,你如果批评他,他就会义正言辞地说:时间不够!

另外有一些人,追求代码质量,宁愿项目长时间延期,也不愿意写出看起来脏的代码。遇到需求变更,总是要进行大幅度的重构,以保证新的架构是最优雅的。

我有很长一段时间都是后者,但是我现在觉得,我们不应该走极端,我们应该平衡好时间花费和代码质量。

从商业上来说,按时交付产品比什么都重要,一家创业公司,如果不能按时交付产品,可能它就会面临资金不够的问题而倒闭,也可能被竞争对手抢先推出类似产品,在竞争上失去时间上的优势。

所以一个好的程序员,更应该有「大局观」,在保证代码质量的同时,也能明白,良好的代码质量其实是为了长期的可持续地按时响应需求变更、人员变更,以达到「按时交付产品」。

运用心智

什么是心智

关于什么是心智,我来讲一个故事吧。

我老婆是学幼儿教育的,她给我讲过一个故事,幼儿教育学家为了研究小孩的自控能力,会做一个叫做 延迟满足 的实验。这个实验(相关视频)是这样的:

在一个屋子里面,让小孩坐在一个书桌前,然后给小孩一个糖果,告诉他:「我 15 分钟后回来,如果你在我回来之前都不吃这个糖果,等我回来后就再奖励你一个糖果」。

通常情况下,很多小孩都无法抵抗糖果的诱惑而很快将它吃掉。而研究发现,那些坚持到最后的小孩,自控能力更强,在随后的跟踪研究发现,这些小孩能够在学校取得更好的学习成绩。

研究人员对这些表现出优秀控制力的小孩很好奇,想进一步分析出他们有什么特点。研究人员甚至用功能磁共振成像仪为他们的脑部进行扫描,希望通过对比扫描图,找出大脑对 “延迟满足” 能力起作用的特定区域。此外,研究人员还进行了不同的基因测试,以研究是否存在控制 “延迟满足” 能力的遗传因素。

最后,研究人员发现,这些小孩都会非常简单的一招:转移注意力。具体来说,他们会在特别想吃糖果的时候,选择做别的事情来让自己大脑暂时不那么关注糖果。比如他们可能会唱歌,在桌子上写字,将头转向窗外。

这个故事就是关于心智最好的解释,小朋友教会我们不要抵抗人性,要利用人性。他们知道自己喜欢吃糖果,但是他并不是强制让自己不喜欢吃糖果了,而是用别的办法来达到目的。

如果你合理利用人智,那么就会收获巨大的威力。

培养习惯

培养习惯应该是最简单的心智利用手段。人们对做一件事情会有惰性,但是一旦培养成习惯之后,不做这件事情反倒不习惯了。所以那些值得做的事情,大家都应该在开始的一段时间内,强行让自己在固定时间点做这些事情,久而久之,就会形成习惯,让它成为你受益终身的习惯。

不止是个人,组织的协作也应该培养习惯。我们在用 Scrum 用项目推进时,会固定每天和每周的开会时间,以及产品的上线时间,这些都会让组织减小对于协作的管理成本。比如每周一晚上需要完成 App 的测试,大家就会自发地紧张起来,将遗留的 Bug 一一修复。

设立目标

很多事情,当我们没有目标的时候,执行的动力就会差很多。所以,我在学习 iOS 开发的时候,会不断地给自己设立一些目标,通过不断强化这个目标,这样使得我在学习的时候意愿变得更强了。当目标达成之后,成就感和自信心就由此产生,从而激励我们更加努力,由此产生出良性的循环。

具体来说,我在学习初期不断要求自己将学习内容整理成博客文章,我要求自己每个月至少写一篇。我的第一篇 iOS 文章是从 2011 年 8 月开始写的,那个时候我才刚刚开始学习 iOS,当时看苹果的内存管理的官方文档,有一些心得,就写了下来。然后关于写博客这件事情我就一直没有间断,一直写到现在。

在文章积累到一定程度之后,我给自己设立的第二个目标是完成一本书。我希望借此机会,将自己没有系统整理的知识再梳理一次。这个目标对我其实挑战很大,最终我从中学会了将图书的撰写拆分成很多小的目标,然后一步一步达成。

把大目标拆分成小的阶段性目标这一点很重要,它使得整体的时间安排是适当的,不会刚开始过紧或过松。另一方面,很一次完成小任务的满足感,可以适当让我们的大脑产生喜悦,最终使得任务更容易被搞定。

寻找成就感

人是需要激励的,《异类》一书中讲到,那些刚开始只有一点点天赋的人,因为不断被人夸奖,从而使得他们更加强化自己擅长的事情,从而获得成功。

所以,我们应该学会给自己做的事情寻找成就感。除了通过完成目标来获得成就感以外,我们还可以有更多的成就感来源。对于我来说:

  • 我会从写文章分享知识这个过程中寻找成就感,因为这帮助了其他人学习 iOS 知识。
  • 我会从给 InfoQ 和《程序员》杂志的投稿中寻找成就感,因为它让我感觉到了知识被认可。
  • 我还会从粉丝的转发和评论中寻找成就感,它让我小小的内心充满了被认可的感觉。
  • 我还会从文章的打赏中寻找成就感,毕竟金钱打赏是对文章质量最直接的肯定。

这些成就感,驱使着我,让我更加努力学习,停不下来。

适度坚持

总会有一些事情,你不那么容易找到目标和成就感。

我在 2013 年开始做「iOS 开发」微信公众号的时候,就有这种感觉。每周都要坚持推送消息很辛苦,而且刚开始的时候,粉丝很少,没有人看。我有无数个理由停止做这件事情。但是,我有一个习惯,就是决定做一件事情之后,先做一段时间再说。

当时我给自己设立的目标是,先做半年再说。于是,我就继续更新。机会总是给有准备的人,做着做着,我发现关注数慢慢上升了,我就给自己打气说,慢慢会好起来,于是又继续坚持。终于坚持到 2015 年,我的关注数超过 2 万,也开始有了广告收入。

还是《异类》那本书里面提到了 10000 小时定理,这个观点其实给我很大的鼓舞,它让我们所有人意识到,不论你是否聪明,你都可以用简单地坚持,来成为某个领域的专家。我之前做 iOS 开发时就想,我平时上班一天 8 小时,一年 260 天工作,这样一年是 2000 小时,我大概需要 5 年才能成为 iOS 专家。但是如果我每天工作 10 小时,每周末多拿一天学习 iOS 开发知识,那么我一年可以花在 iOS 上的时间是 10(小时) * 310(天)= 3100 小时,这样我只需要 3 年多一点,就可以成为 iOS 专家了。

我不但是这么 YY 的,我也是这么做的,是的,我就是希望我用三年的时间,达到别人五年的工作经验。事实上,我确实做到了,我相信所有其他人也都可以做到。

营销

虽然和个人成长没关系,但是成为大 V 确实需要一些个人的营销。我在这方面其实做得不多,细数下来,我做过下面这些营销的事情:

  • 「iOS 开发」公众号坚持三个月后,请冯大辉帮忙推荐过一次,请池建强推荐过一次。
  • 我的微博坚持只发 iOS 开发的消息,刚开始的时候没有粉丝,我请池建强帮我转过几次文章。
  • 图书出版后,和出版社合作搞过几次转发送书活动。
  • 和荔枝软件搞过几次 Mac 正版软件特惠活动。

我在营销上其实做得不算好,我在成为大 V 这条路上真正的成功秘诀,还是不断坚持。

总结

总结一下本文的观点:

  • 大 V 不等于 大牛,不要盲目崇拜。
  • 时间是最大的借口。
  • 合理运用心智(培养习惯、设立目标、寻找成就感)。
  • 适度坚持。
CATALOG
  1. 1. 前言
  2. 2. 大 V = 大牛 ?
  3. 3. 奇材 + 秘笈?
    1. 3.1. 我是一个奇材吗?
    2. 3.2. 我有高人指点吗?
      1. 3.2.1. 没有资料
      2. 3.2.2. 没有人带
      3. 3.2.3. 学习时间短
      4. 3.2.4. 背景知识为零
      5. 3.2.5. 没有时间提高
    3. 3.3. 我的成就
  4. 4. 我是如何做到的
    1. 4.1. 解决入门的问题
    2. 4.2. 解决交流讨论的问题
    3. 4.3. 解决提高的问题
  5. 5. 我的心得
    1. 5.1. 时间是最大的借口
      1. 5.1.1. 时间是可以寻找的
      2. 5.1.2. 时间是可以挤的
      3. 5.1.3. 平衡好时间和代码质量
    2. 5.2. 运用心智
      1. 5.2.1. 什么是心智
      2. 5.2.2. 培养习惯
      3. 5.2.3. 设立目标
      4. 5.2.4. 寻找成就感
      5. 5.2.5. 适度坚持
  6. 6. 营销
  7. 7. 总结