iOS大牛分享经验
本期的开发者访谈嘉宾曾宪华,曾就职于广州多玩信息技术有限公司,也许你不知道的是,多玩是国内少有的拥有多个iOS开源项目的公司(Github主页),而曾宪华(Github ID:xhzengAIB)是其中大部分项目的开发者和维护者。他在Github上面非常活跃,在过去的一年里有超过三分之二的时间每天都会提交代码。今天就让我们来和他聊一聊开源与个人和公司的故事。
受访人:曾宪华(Jack),前多玩科技iOS开发工程师
CocoaChina:感谢您能和大家分享自己的宝贵经验。首先请您简单介绍一下自己,以及如何开始iOS开发的呢?
曾宪华:Hi 大家好! 我是曾宪华,90年,大家都叫我华仔,很高兴可以和大家分享我的经验,感谢Cocoachina给我这个机会。这次分享仅仅只代表我个人经验中的理解哟!
我个人的兴趣比较广泛,比如摄影、LOL、跑酷、琢磨产品等等啦!生活在广州这个“热闹”的城市里,脚步太快,很难寻找一个适度的平衡点,一个360度的后空翻来释放自己的压力是必须的,所有的烦恼都抛到脑后咯!(松)
说到工作,在YY工作还是挺好的,我们的产品以简单、迅猛的方式去占领市场领域,作为员工能得到的好处是:自我修养的提高、明确的目标以及快速前进动力。(特斯拉等着你来拿)
在多玩LOL盒子项目组的日子,让我感觉到无比的欢乐,每位同事对我的栽培都很用心,快乐的时光总是过的很快,我离开了YY,开启另外一篇新章,如果日后能成功的话,希望还能再次给大家分享经验。(坏笑)
说到如何开始iOS开发,其实我是阴差阳错的走上这条道路的,我在大学读的并不是计算机专业,但是很仰慕乔布斯,购买了苹果产品,从大三就开始自学iOS编程,于是走上了这条不归路。我觉得做iOS开发者的一个好处就是,不仅可以为公司创造价值,同时也可以为自己创造价值。
我个人的第一个代表作是:魔术App《Berglas Magic》,虽然没有太多的收入,但是我并没有失去信心,因为我一直都把iOS开发当作兴趣来做。
我觉得编程是件非常有趣的事情,你可以为你家人设计有实用性的App,也为心仪的人设计浪漫App,再伟大一点,为社会设计有价值的App,这就是我坚持编程的动力。
CocoaChina:从您的Github上可以看到,您参与开源非常积极,请问您参与开源的契机是什么?又是怎样坚持下来的呢?
曾宪华:我参与开源的契机是由于Instagram的神话,我看中了一个来自San Francisco, CA开发者rFlex的开源库SCRecorder,为了让自己能获取更多对Media Layer的知识,所以先着手学习AV Foundation框架的知识,当然Media Layer的知识不是仅此而已,AV Foundation只是冰山一角,略过.....(笑)
从我自己的体验来看,参与开源项目对于程序员来讲是一种高效、快速学习成长的方法,不仅如此,如果你是一个技术爱好者,参与开源项目你有可能找到自己的兴趣、自己的优势等等,进而从事自己喜欢的工作,那种感觉真的太爽了。
所以开源对我来讲是一项人生投资,看好未来的趋势,选择合适的、喜欢的、有兴趣的事情去分享,你可以从中获取无限的乐趣和价值。
世界那么大,不可能每个人都认同你的看法和想法,所以采用MVP方式去实现某些有用的交互,把值得去投资的开源项目都当作一个产品去看待,让其他开发者尽情地去使用,这样的过程会让我感受到一份成就感与喜悦感,所以我会坚持通过开源的方式去感受。
CocoaChina:您在参与开源中有哪些收获?
曾宪华:事实上开源已经逐渐成为评价程序员水平的标准之一,自Github流行以来,部分开发者能够凭借他们的开源工作得到一个好的offer,起码我就是其中一名获益者。
另外参与开源在提升团队协作能力上有着比较明显的作用,一个有用的Issue反馈、有效的交流以及热情的帮助都会让我们成长,从而运用到团队协作中去,那这个收获可见而知,不但让你在团队中突出,还能让你认识很多大神。
另外对于一些工作繁忙的程序员,平时忙于公司的项目,空余时间通过侧面的形式(参与开源),也是提升自己整体能力一个很不错的方式。
一部分开发者都比较不爱接触外界,起码以前的我是这样的,开源可以让我们认识业界里很多知名的大神,心里那个小激动啊?对话了耶!(笑)
参与开源让我认识到很多知识渊博的开发者,他们的思维方式与做事方式非常不一样,很值得我去学习。
总之开源提高了我的整体水平,我在参与开源中获得很多收获,实在一言难尽。
CocoaChina:您在参与开源过程中有什么印象比较深刻的事情能分享一下吗?
曾宪华:MessageDisplayKit是我2014年5月份所写的,由于当时IM产品非常火热,所以着手开始研究业界知名产品微信,用了10天左右的时间去模仿微信,发布后迅速的吸引大量的Star,并且连续一周在Github趋势的Objective-C语言分类排名第一,主要是针对国内产品的需求。这里需要说明的是,MessageDisplayKit主要思想来自JSQMessagesViewController,特别提出感谢。
参与开源的乐趣就是能把自己的优势或缺陷分享出去,并且会有人欣赏你、纠正你、谴责你。
在刚进入开源社区的初期,我也犯了不少错误,比如不是原创的开源项目并没有注明来源,我在此表示歉意,当然现在我已经改正了,也希望大家不要犯这样的错误。
之前业界里有些大神都在谴责我,说我无耻、说我抄袭,这个经历让我感受非常深刻,但是我并没有因为这些谴责而放弃开源之路,没有人天生就懂很多知识,模仿也是必经之路,我没有计算机基础,问人没人搭理,只得到一句话“去google吧!”,那我只有通过阅读别人的源码进行不眠不休的修炼了。
我这个人比较倔强,连续半年每天只休息3到4个小时,把应该补上的理论基础补上、把所谓的设计模式都琢磨过后,发现缺少Coding还是会有很大的问题,于是我改变了方式,又是连续半年每天只休息3到4个小时,开始把底层原理弄明白,再利用自己喜欢的语言(Objective-C)去实现一遍,咦!发现自己的水平提高了几个阶梯的幅度,希望之门再此打开,谢谢那些谴责我的人,因为你们提醒了我,让我知道自己缺少哪些层面上的知识,与其同时我发布了30多个有用没用的开源项目。
现在想起,还是挺恐怖的事情,后续已经有能力进行挑选一些有实用性的方向来参与开源项目,而不是从数量入手了,以后我会专心维护有价值的开源项目。
CocoaChina:您认为iOS开发方面有哪些适合开源的方向?
曾宪华:在不同的背景会有不同的看法,在我的经验里, 我觉得iOS开源项目有以下几个方向可以参考的:
1.业界上主流产品的需求。比如最近弹幕视频的技术实现。
2.自己喜欢又容易的交互。比如友好又生动的Loading页。为什么需要自己喜欢又容易的呢?没有人可以给你动力和支持,内心的痛苦与挣扎,只能自己给自己疗伤和鼓励,所以做自己喜欢而又不难的事情,能够增加自己的自信心,但是不要骄傲哦!(笑)
3.自我增值的知识层面。比如Media Layer下的框架,还有在直播中利用硬解码与硬编码提高直播流畅度等等。
4.帮助初学者。一些技术指导和分享,比如如何使用CocoaPods、如何打包静态库等等。
另外还需要找到之前没有人做过的东西,在我开发XHRefreshControl之前,Github上没有一个能高度定制、低耦合的下拉刷新和上拉加载更多的组件,在研究网易新闻客户端在数据处理方面的知识后,定制一个可预加载的、可定制下拉/上拉样式的、可定制自动加载和手动加载方式的、可考虑网络状态切换的刷新组件。
结果,大多数国内开发者给的反馈 :这个库比较全面、个性化定制比较完善等等的意见。
在YY开发新产品时会用到该组件之外,自己的个人项目也会用上,并且会用自己的项目提前进行做白老鼠,对于各种情况考虑的比较全面,是个值得去维护开源项目。
CocoaChina:您认为在开源自己的项目时候有哪些经验和注意事项?
曾宪华:从我自己的经验教训来看,开源自己的项目需要注意以下几点:
1.如果并非原创,请注明来源。(我已经有血一般的教训了)
2.你要有一个完整的使用文档。
3.你要有一个能全面诠释该项目所有功能的Demo。
4.许可证,在哪些协议下进行公开。
不要纠结于完美代码,没有谁可以编写一个框架适用于所有产品的,以iOS SDK快速的更新频率来看,我们不好做一个高度整合的开发框架,更适合做一些小控件,沉淀到自己的知识系统,因为很有可能Apple会在下一版本SDK为大家做了整合。
CocoaChina:请问多玩对于开源的态度是怎样的?对于公司商业项目和开源之间是如何处理的?
曾宪华:多玩对开源的态度还是比较友好的,为开源界出一份力气,只要不涉及到公司核心业务的情况下,会鼓励员工去开源一些控件参与到开源社区中去。
其实一个成功产品的核心竞争力不在于那几段代码,而是团队提供的资源、产品的方向、产品的创新才能成就一个成功的产品,但是法律上的矛盾还是避免为好。
开源项目和商业项目在很多情况下都会有矛盾的时候,我的一种避免方法是,比公司思考的更多,锻炼自己长远的眼光,预测到怎样的产品需求是将来所必需的或者所必要的,提前开源出来。
还记得我说开源是一项投资吗?你能预测到某个项目会在将来大量使用,那么基于你对开源的热情,提前去完成吧!或许会占用你工作之余的大部分时间,这还是很值得的,最起码能避开一大堆问题。
比如弹幕视频最近很流行,那么你如果在13年已经开源了该方面的技术,难道公司还会在15年追究你的责任吗?
更何况公司也是通过拥有资源、渠道、技术沉淀来成就一个成功产品,而不是仅限于这些开源项目。
当然这些都是我一面之词,因为暂时还没遇到商业纠纷上的事情,如果我说的有什么不对,还望各位大大指点和纠正。
CocoaChina:多玩在您去之前有过iOS相关的开源项目吗?能否和我们说一下多玩iOS开源具体是如何运作的?
曾宪华:在我加入多玩之前,已经有一些内部项目准备开源,不过当时仅在内部使用。
多玩很重视员工水平的提高,公司鼓励员工写技术博客,参与技术分享,另外参与开源也可以算是个人技术成长的一部分,因此在某一个季度中把开源项目列入KPI考核的一部分。
现在还有春哥、Pony都会不定时的提交代码,最近Pony分享了VIPER相关的知识,当然我也会继续多玩开源项目的维护工作。
多玩对于技术部门的管理是非常扁平化的,在部门里,不提倡区分谁是负责人,更提倡的是大家共同进步。对于开源项目,每个人会负责一部分,有人负责写wiki、有人负责提交代码、有人负责帮忙解答Issue等等流程,基本上每个人都会参与到其中,每一个环节涉及到的同事,都必须了解该项目的主要思想,达到共同提高水平的目的。大家遇到问题的时候会非常热情,我也会尽可能的帮他们解决问题。
CocoaChina:您对目前国内iOS开源环境有哪些看法?
曾宪华:目前国内的大多数开源项目基本上都是团队内部或者一个人在开发,很难得到PR,国内对开源社区的热情还不够,开发者太低调。
一个开源项目出来,如果大家使用时出现问题就会骂,关键是作者还不知道别人在责骂,也就导致项目无法改进,我觉得被骂本身不是坏事,说明用户还会去关注该项目,只是项目不够完善的原因。如果用户能够及时反馈在Issue上,项目能够持续完善,对于开发者和项目本身还是非常有利的。
其实这些情况也不能完全怪大家,国内和国外工作情况不一样,国外大部分人把编程当兴趣来做,工作量也没有国内那么大,所以会有更多时间投入到开源项目中去。国内经常加班,难免会出现工作压力大的情况,结果导致大家对开源的热情就大大降低了,更多的是把开源社区当作百宝库,遇到问题的时候,就去找现成的解决方法,而不是参与其中。如果不了解开源项目的情况下去使用,那么如果有一天出现bug了,有可能出现比较难定位的时候,导致项目拖延,那么就会开始责骂开源项目了,所以我还是希望大家能积极参与到开源中去。
此外,大家还会比较倾慕于国外的开源项目,原因很简单,国外的开源项目比较稳定,不会容易出现无人维护的情况,使用者能找到安全感。从这点来分析,少bug、多人维护的开源项目会收到欢迎,有更多的star。
另外,我们还可以通过上线的App去验证自己的开源项目是否稳定,只有自己把白老鼠做了,你才能去说服大家去使用嘛!
比如国内的PNChart的作者Kevin、猿题库YTKNetwork的唐巧通过自己上线的产品去验证开源库的稳定性和能承载多大的用户量等等。这些我都认为是非常好的。
一个成功的开源项目,仅有自己一个人往往是不够的,通过多人合作的模式,把各自优点发挥出来,共同去维护一个有价值的、可持续发展的开源项目,最后得到收获将远远大于付出。