文:Gracia
导语:本期采访对象唐巧@唐巧_boy,猿题库iOS高级研发工程师。2011年从Java转向iOS开发,3年时间已成为iOS开发圈颇有名气的技术高手。他的影响力,很大程度上来自于他运营的微信公众账号iOSDevTips,这个面向中高级iOS开发者的公众账号已有超过5000粉丝,在iOS开发这个小众领域,绝对算得上是大号。
这影响力的发端,却是起源于微末。三年前开始的技术博客写作,为其后建立的QQ群和公众账号埋下了种子。目前QQ群已覆盖了国内大、中型互联网公司、创业公司、自由职业者及海外的iOS开发者,并和公众账号之间建立起了良性的互动,通过高质量的内容吸引更多牛人的加入,继而产生更好的内容,形成了一个闭环的生态系统。
唐巧的采访安排在一个周末的晚上,出于对程序员职业发展的兴趣,攻略君准备了长长的问题列表,深入探讨了诸如:程序员需要影响力吗?程序员的影响力对他的职业生涯发展究竟有多重要?程序员如何提高影响力?等问题,四个多小时聊下来,直到咖啡厅关门谢客还意犹未尽。程序员写博客、参与开源社区、参与技术分享的重要性,早已得到许多技术大牛的一致认可,从国外的Jeff Atwood,到国内的刘未鹏等,都明确撰文推荐过。然而落实到操作上,工作忙、压力大、不喜欢交流、害怕写的东西太幼稚,这些都是让人放弃的足够理由。在日复一日的忙碌中,成为“勤奋的懒人”,努力完成当下工作,但仅限于快速能见到效果的事情。这也许就是人性的弱点。
对于任何人来说,分享都是一件需要花费大量时间和精力的事情,对唐巧也不例外。白天要面对创业公司高强度的工作压力,晚上和周末才能挤出时间。在难以看到短期成效的情况下,投入精力去做一件付出巨大,“利他”大于“利己”的事情,无疑是一场考验。这个过程中的咬牙坚持,辗转反复,和运动极限遇到的挑战类似。但那些最终战胜自己,顺利通过这场考验的人,将有机会见到更多的风光,遇到更好的自己。
- 技术人攻略:你从什么时候开始做iOS开发?为什么会进入这个领域?
2010年我研究生毕业加入有道,先后做了网易邮箱底层的API开发,和网易微博上的实时搜索系统。由于微博没做起来,加上我看好移动互联网的发展,就申请转到有道云笔记组做iOS开发。我之前对Java很熟,但没有iOS开发的背景。有道的技术氛围很好,允许员工转向新的领域。公司的技术评级制度就鼓励员工精通两门以上的语言,达不到就无法涨级别。
当时是11年5月左右,公司给了我一个月时间学习iOS开发。于是那一个月几乎没干活,天天看斯坦福的视频和代码,一个月之后就能上手了。接下来用了三个月时间,从无到有开发了有道云笔记的iPad版。做完iPad版,又给iPhone版增加了手写、涂鸦、密码保护等新功能。
- 技术人攻略:为什么选择离开有道去创业?
刚加入有道的时候,很喜欢它的工作环境,牛人很多,很适合技术人成长。但待了一年之后,发现公司的技术氛围开始变化。有道的领导基本都是技术精英,缺乏懂营销、推广和管理的人才,很多产品做的很好,但是都没成,加上搜索没做起来,离职同事越来越多。资金投入的减少导致新人的质量下降,原来良好的技术交流氛围也消失了。部分新人对技术没有热情、公司内iOS的技术交流搞不起来、技术上没有机会做更深入的东西,这几个原因直接导致了我想离开有道。
本来计划等合同期满了之后再换公司,而且我有网易的股票,9月份可以兑现。但去年5月份的时候,遇到了现在这个机会。我当时想的是,即使创业不成功,我也会经历一个iOS产品从无到有的过程,这对我来说是一个很好的机会。并且团队的同事都曾经合作过,大家都特别喜欢技术,和一群兴趣相投的人一起工作会很开心。于是放弃了手上的股票,加入这家创业公司。
- 技术人攻略:你经营的关于iOS开发的微信公众账号听说已经超过了5000粉丝,当初为什么想要做这样一个公众账号?是怎么做到的?
微信公众账号的诞生和前期的积累息息相关,这还得先从写博客说起。在做iOS开发之前,我就已经开始写技术博客,当时还没有开个人博客。iOS开发是个新生事物,三年前会的人很少。我发现没人谈这个,而这又是个快速发展的领域。写博客一来可以树立个人品牌,提高自身的影响力,二来能给整个社区贡献内容。Java开发的任何内容都已经有人写过了,网上一搜一大堆。而因为没人谈iOS开发,原创的博客资料就越发珍贵。写了几篇之后,就干脆独立开了一个博客。
这样写了一年博客。加入创业公司之后,由于做iOS开发的只有我一个,所以当时很恐惧,害怕失去和大家交流的机会,于是建了一个QQ群。首先把我以前的同事都加进来,然后通过同事的人脉圈子,想办法把其他公司做iOS开发的人都加进来,拉拢了大概20个人。这20个种子用户中,其中有几个的水平特别高,也很喜欢分享和讨论,所以每天都会有一些讨论出来。我感觉讨论的内容实在太好了,如果不分享给大家有点说不过去。正好去年春节的时候微信推出了公共帐号功能,就建了一个。
于是每天下班之后,我会把群里讨论的内容做一些梳理,通过公众账号发出去。不夸张的说,我是第一个在公众账号中起iOS开发这个名字的,所以那段时间涨粉涨得特别快,很快关注的人数到了1000人。公众账号运营三个月之后,冯大辉和池建强分别推荐了一下,又迅速增加了1000粉丝。
这些优秀的内容吸引了很多牛人申请加入QQ群,当群人数加到30人的时候,我开始有意识地做一些控制。例如让申请人提供真实姓名、APP作品、Github帐号、博客地址,我会看他的博客和Github,并且找认识的人核实他的基本情况。就这样QQ群慢慢加到了50人,成员覆盖了从大型互联网公司、中型互联网公司、创业公司、自由职业及海外iOS开发人群。这个群已经产生出一种生态效果,对于任何的行业问题,都已经足够自行讨论出一个明确的、有结果的、正确的答案了。
微信公众账号的粉丝也超过了5000人。估计国内有10万的iOS开发者,当然活跃的人可能到不了这么多。我希望能将公众账号粉丝发展到2万,覆盖差不多20%-30%的iOS开发人群,按现在的增长速度还需要一两年才行。
- 技术人攻略:能有这么多粉丝和你坚持写了两年技术博客关系很大。你写博客的动力是什么?每次更新需要花多长时间?
坚持写博客可能和我原来的经历有关系,我曾利用暑假去福建支过教,教小孩计算机。我觉得把知识传达给别人是一个很舒服的过程,某种意义上来说,你的思维延续到他们身上,感觉像是你的生命延续到他们身上了。支教的时候这种感觉特别强烈,我对计算机的热爱传递到学生身上,是一种特别有成就感的事情。
写博客还有一个原因,感觉技术男很容易不善沟通,我想通过写博客,锻炼自己沟通、语言组织方面的能力,这也是自我完善的一个过程。我平均一个月发两篇博客,每写一篇要四个小时。一般是周末下午开始写,写到吃晚饭。吃完晚饭之后,修改一下发布出去。
最近刚和出版社签约,打算写一本iOS开发的书。国内iOS提高类的书比较少,翻译的质量也不高。这本书预计要写一年,明年年底交稿。虽然投入跟产出根本不成正比,但还是愿意凭兴趣做事。整个中文世界的技术资料跟英语世界是没法比的,基本上现在iOS开发的资料还得通过Google查找。国内真正愿意写文章的人太少了,我觉得有两方面原因,第一是有的从业者对技术并不是真正感兴趣,另外是中国的教育过程不强调个人的写作和表达,很多牛人做得很好,也很喜欢自己做的事,但不喜欢写,不喜欢分享。这就造成国内的技术资料非常少,交流圈子小。
- 技术人攻略:程序员应该提升自身在技术圈的影响力吗?个人的影响力究竟有多重要?
非常重要,但是很多人没有意识到。阿里非常强调技术人员在社区的影响力,在评级的时候会把这个因素考虑进去,这是第一个把影响力作为评级标准的大公司。当你有了一定的影响力之后,有可能推动一项技术的发展,或者改变大家对某个技术观念的看法,不仅可以推动公司的项目,甚至还有可能改变整个技术生态的走向。
程序员个人塑造自我影响力能得到很多好处,首先是可以提升自我的表达能力,这对自我是很好的成长;其次是可以结识很多同行,而且是兴趣相通的同行,你的人脉关系和交流圈子将得到扩大;第三是当你有想法推动一些事情的时候,影响力或许可以帮助你完成这件事。
我私下里问过几个技术水平很高的同事,为什么不写点博客、去参加一些技术分享。他们感觉表达是一件很困难的事情。其实我之前的表达能力也比较差,高考语文150分才考了90,但是我一直坚持写东西。当然我更多是把分享技术当兴趣来做,因为从开始分享到得到好处,这个过程见效非常慢,如果真是要功利地在利益驱动下做,还真挺难坚持的。
- 技术人攻略:作为iOS开发高手,能不能介绍一下这门技术有什么样的特点?菜鸟要如何才能成长为开发高手呢?
iOS开发属于入门比较快,但是精通比较慢的技术。一个月入门,三个月熟练,但有很多深入的技能需要一段时间的积累,这个积累我个人认为需要三到五年,我自己现在也没有达到。
客户端开发最重要的是保证流畅的交互和合理的UI设计,用户用起来不会卡,并且感觉很舒服。程序员需要跨界地了解一些UI用户体验方面的东西,并在有限的内存和CPU的限制下,把这些效果实现。同样的效果在iOS设备上实现的很好,在Android上可能就很难做。每个设备都有自己的特点,开发受限于操作系统,所以过往的经验很难去复制,需要掌握特有领域的一些知识。
新入行的人如果有钻研精神的话,可以通过工作中遇到的问题慢慢积累。思维习惯会决定这个人能走多远,例如网上搜到一段解决问题的代码,有些人会去研究,为什么这段代码能工作,背后的原理是什么,不满足于简单地解决问题,而是通过深入思考来积累知识。这可能暂时对工作没有直接的帮助,但是长远来说这两种思维方式会造成巨大的差距。为什么大部分人总是提出那些很初级的问题,因为他从来不去思考。
另外,我还是个传统的博客阅读者,会订阅很多国外的博客,通过阅读博客积累一些东西。我觉得这也是一个很好的学习方式。
- 技术人攻略:你未来一到两年的目标是什么?
我想成为iOS方面的专家,刚才说这个过程需要3-5年的积累,我感觉自己掌握得还不够深。通过写书,持续发博客和微信公众帐号,作为我的驱动力,让自己可以持续提高。我其实还想了解Android开发,但希望iOS开发达到一定高度的时候再去做。我想研究跨平台的解决方案,移动开发最终很有可能形成一个大统一的开发的模式,通过一套方案来同时解决iOS和Android开发。要解决跨平台的问题,必须精通代码在各个平台下运行的差异性,能做这件事的人,一定需要同时精通Android和iOS开发。
- 技术人攻略:现在有这方面的解决方案了吗?iOS开发还有哪些新趋势?
跨平台目前还没有很成熟的方案,大家都在尝试。豆瓣刚出的豆瓣音乐人,用了PhoneGap框架,可以直接编译成iPhone、Android和Windows Phone的代码,能极大地提升开发效率。HTML5有这么高的关注度,就是因为它能解决跨平台开发的问题,现在HTML5在手机上的体验还不是很好,苹果比较强调用户体验,它更倾向于你用原生的代码来实现,实现交互的效果会好很多。
还有一个趋势就是远程动态更新客户端的代码。APP Store的审核期限从一天到十天不等,增加一个功能,或修复一个Bug,需要提前一两周。通过新的技术手段,让APP具备自我升级功能,能够自动去更新内部的逻辑代码。这个技术目前也有一些不太成熟的实现方案,PhoneGap框架在一定程度上可以做到,通过HTML5重新下载一个新的网页,就可以改编之前的内容。还有通过Lua实现的,或通过一个类似于HTML5和CSS配置来动态改变APP的内容。目前这些技术方案都还不是很成熟,没法做到通用性,也没法保证很好的性能、开发质量和速度。
- 技术人攻略:谈谈你现在的情况吧,创业一年多了,这个过程中有什么收获?
这次创业我不是合伙人,我的目标更多是通过这个创业项目来锻炼自己。通过参与一家公司的创建和发展,在这个过程中学习公司如何运转、如何做决策、会经历哪些困难,为下一份真正的创业积攒经验。加入这家公司之前,我很担心创业公司的管理是混乱的,没有章法,什么都做,什么都不精,天天累得要死。加入之后才发现,其实很多创业公司是小而美的,同一段时间在创业公司收获的成长和回报,会远远高于大公司。如果不是出来创业,我不可能在技术上获得那么多收获成长,也很可能不会那么积极地跟他人交流和维护公众账号。选择离开网易,虽然损失了一些工资和股票,但是和回报比起来不值得一提。我挺鼓励有志向的人创业,特别是趁着年轻的时候。
从最开始的教育社区粉笔网,到现在的猿题库,公司在发展过程中也遇到一些坎坷,但我们及时调整了产品方向。整个技术团队也是小而美的,保持着非常高效的工作效率,我们合作得非常开心。公司的社保和公积金都按最高比例缴纳,去年末还发iPad Mini,既有大公司的福利,但同时又保持小公司的创业气氛。
- 技术人攻略:你在大公司和创业团队都工作过,它们最大的区别在哪?
最大的区别是创业公司的工作更加高效。首先事情变得更多,如果想要不加班,就需要想办法尽量高效地去做事情。我们会用敏捷Scrum的方式来安排未来的工作计划,做粉笔网的时候,完全按照预期的三个月交付。我觉得敏捷方法要成功实施,关键还是看团队文化和团队成员的向心力。有人说过,只要团队牛,不管用什么管理方法都能成功,因为团队成员会自发做一些高效的沟通,管理只是辅助手段。
举例来说,为了防止对他人工作的打断,我们还采用了Wiki来记录重要的事情,基本上默认任何事都能在Wiki上找到解答。比如说服务端做了一个接口,肯定会写在Wiki上,等开发完了需要调试时候,其它同事可以去Wiki上看这个接口,按接口去调试。对程序员来说,一次打断就是很大的时间消耗,要接上上一次的思路至少要十分钟。如果可以拥有整段不受打断的工作时间,效率会有极大的提高。
大公司开会太多,同事间沟通常用QQ,工作状态经常会被是分成小段时间,常常是下班了才有时间写代码。大公司的大部分时间都是消耗在沟通上了,你会觉得生命被浪费。但在小公司,工作效率的提高会带来个人很大的成就感,你会发现一天干的活可能比大公司三天或五天还多,你的成长也会非常快,就会觉得很舒服、很满足。
大公司有太多的体制和制度来局限一个人的发展,KPI制度、晋级制度、沟通成本等,很多人觉得这就是一份工作,或者即使有热情投入进去,努力也很难得到反馈。创业公司的利益驱动更强,你的付出直接跟回报关联,并且因为生存压力,会更注重减少沟通成本,提升工作效率,保证开发速度和质量的平衡,一切目的都是快速把产品完成。创业是条不归路,接触过大量以前接触不到的东西,眼界开阔很多之后,就再也难回到大公司做螺丝钉的角色了。
- 技术人攻略:如果不创业,换一种生活方式,你打算做什么?
虽然公司业务发展不错,但这次创业远远没到成功那一步。创业公司最怕就是“活死人”,即能挣到钱,但是企业的规模一直无法增长,这就陷入一个两难的境地,是继续投入、继续运营,还是放弃,“活死人”是创业公司最难受的状态。如果这次创业成不了,我可能会尝试另外的生活方式,可能会去做老师,专门教iOS开发。现在培训行业很少有像我这样,有大公司工作经验,又有创业经验,而且自己又专心在研究iOS技术的人加入。我觉得我当老师应该挺好的,我挺享受教书的状态。如果一个月只收几个学生,带着他们做项目,针对他们的特点教学,他们的收获肯定比在大班里面学到的多。
另一个想尝试的就是做独立的技术咨询,帮公司提供iOS解决方案。调研不同公司的需求之后,找出可复用的部分,做成通用的解决方案。第三个想法是做自由职业者,通过自己写APP或者接活产生收入,并去不同的城市体验生活。
- 技术人攻略:你平时有什么兴趣爱好?
我骨子里是比较内向的人,特别宅,就喜欢计算机相关的东西,平时有时间基本上就是研究一下新技术,写写博客。我还对做饭感兴趣,能做一手好菜,一辈子对自己的胃好点,是一件很幸福的事。
- 技术人攻略:这么喜欢计算机,很早就接触编程了吧,做过什么有趣的事情吗?
我比较喜欢用编程做一些好玩的事情。以前春节回家玩QQ上的找茬游戏,玩了一会儿就觉得没意思,于是写了一个自动找茬的程序,把胜率做到了99%,之所以不是100%,是因为我为了把程序做得象真人,把找茬点击的速度降下来了,遇到别人也是机器人的时候,就挂了。
类似的事情还有就是我自己做过QQ象棋的外挂程序,也是非常牛逼。基本上输的时候对方一看就是机器人。因为象棋的机器人有一个特点,它的算法是基于搜索和剪枝的,一般情况下,进入比赛盘中的时候,搜索的深度都差不多,于是你就会发现,对方的机器人每次行动的时间都几乎一模一样。看两边机器人下棋还挺有意思的,你说呢?
唐巧的技术博客:http://blog.devtang.com/
唐巧的微信公众账号:iOSDevTips
技术人攻略访谈是关于技术人生活和成长的系列访问,欢迎和我们有共同价值观的你关注“技术人攻略”,邮箱 devlevelup@gmail.com,新浪微博 @devlevelup,希望能成为技术人成长的精神家园。
欢迎通过微信公众账号关注技术人攻略
感谢SegmentFault提供博客专栏及推广支持。
感谢迅达云成提供云主机及技术支持。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。