iOS大牛分享经验

by admin on 2020年4月10日

近日,Github 推出了新的开源计划 —— 开源星期五(Open Source
Friday),顾名思义,就是鼓励个人和组织每周五抽出一部分时间为开源项目做贡献。

本期的开发者访谈嘉宾曾宪华,曾就职于广州多玩信息技术有限公司,也许你不知道的是,多玩是国内少有的拥有多个iOS开源项目的公司(Github主页),而曾宪华(Github
ID:xhzengAIB)是其中大部分项目的开发者和维护者。他在Github上面非常活跃,在过去的一年里有超过三分之二的时间每天都会提交代码。今天就让我们来和他聊一聊开源与个人和公司的故事。

过去三年,GitHub
鼓励员工每月至少有一个周五能花时间开展开源工作。现在“开源星期五”已经发展为一个任何人都可以参与的计划。用户可以先从公司的开源项目开始贡献。

受访人:曾宪华(Jack),前多玩科技iOS开发工程师

澳门新葡亰信誉平台游戏 1

Github 高级工程师 Mike McQuaid
对这一新举措做出了解释,他认为通过鼓励员工贡献开源项目,一方面能帮助员工提升开发技能,另一方面也能推动公司改善业务基础设施,以使工作更顺利进行。

CocoaChina:感谢您能和大家分享自己的宝贵经验。首先请您简单介绍一下自己,以及如何开始iOS开发的呢?

要实现可持续性,项目必需能够负担自身的各项成本。成本包括基础设施成本(如托管和配套服务),以及开发、更新和维护代码库的成本。成本还包含项目产生的治理成本、营销成本和沟通成本。

开源星期五并不局限于个人,整个公司的开发团队和部门都可以参与其中。你也可以选择与自己业务相关或者自己喜爱的项目进行贡献。

曾宪华:Hi 大家好!
我是曾宪华,90年,大家都叫我华仔,很高兴可以和大家分享我的经验,感谢Cocoachina给我这个机会。这次分享仅仅只代表我个人经验中的理解哟!

很多项目的初始成本是由上级机构、赞助商、投资商或者创始开发者的初始投资来支付的。

(文/开源中国)    

我个人的兴趣比较广泛,比如摄影、LOL、跑酷、琢磨产品等等啦!生活在广州这个“热闹”的城市里,脚步太快,很难寻找一个适度的平衡点,一个360度的后空翻来释放自己的压力是必须的,所有的烦恼都抛到脑后咯!(松)

但当这些钱和资源都用完了,会怎么样呢?

说到工作,在YY工作还是挺好的,我们的产品以简单、迅猛的方式去占领市场领域,作为员工能得到的好处是:自我修养的提高、明确的目标以及快速前进动力。(特斯拉等着你来拿)

初期资金作为一种可行的选择并不是无限期的。到了某个阶段,就必须要开源或者节流。一个可持续的开源项目,其收入或节约的成本必须超过持续支持和开发的成本。

在多玩LOL盒子项目组的日子,让我感觉到无比的欢乐,每位同事对我的栽培都很用心,快乐的时光总是过的很快,我离开了YY,开启另外一篇新章,如果日后能成功的话,希望还能再次给大家分享经验。(坏笑)

在软件开发方面的残酷现实,绝大多数项目不能实现可持续性。开源和闭源项目都是这样的。实际上,任何需要资金支持的活动都是如此。现实证明,绝大多数的创意都无法实现可持续性,而只有少数能够做到。

说到如何开始iOS开发,其实我是阴差阳错的走上这条道路的,我在大学读的并不是计算机专业,但是很仰慕乔布斯,购买了苹果产品,从大三就开始自学iOS编程,于是走上了这条不归路。我觉得做iOS开发者的一个好处就是,不仅可以为公司创造价值,同时也可以为自己创造价值。

因此,我们有必要探究为何项目没能实现可持续性。某些情况下,这是因为项目未能达到它所设定的目标。所以,人们便期望能够撤销项目。然而,令人担忧的是,很多项目就算达到了最初的目标,却仍然会无法延续。公共资金支持的项目尤其如此。这类失败通常是由规划不当引起的。也就是说,一开始人们并没有就项目初期资金用完时如何维持项目制定计划,因此也就没有为实现可持续性分配资源。

我个人的第一个代表作是:魔术App《Berglas
Magic》,虽然没有太多的收入,但是我并没有失去信心,因为我一直都把iOS开发当作兴趣来做。

所以,结论是显而易见的:要实现可持续性,项目的初始目标必须包括实施可持续性计划。其意味着,可持续性计划应该在项目周期的最开始阶段制定出来。而要制定这一计划,您必须了解自己有哪些选择。

我觉得编程是件非常有趣的事情,你可以为你家人设计有实用性的App,也为心仪的人设计浪漫App,再伟大一点,为社会设计有价值的App,这就是我坚持编程的动力。

这里无法列举所有可持续性选择,因为可用的模式和项目创意一样多。以下将简单介绍常见开源软件的可持续模型。

CocoaChina:从您的Github上可以看到,您参与开源非常积极,请问您参与开源的契机是什么?又是怎样坚持下来的呢?

注意,只有极少数项目可严格归为以下某种模型。大多数项目能够实现可持续性,是因为它们将各种模型的要素进行了不同方式的组合;同样,各种模型之间也有共通之处。以下部分仅为您开始制定可持续性计划时提供参考。这些信息使您能够接触到像
OSS Watch 这样了解您所面临的机遇的顾问。
产品开发

曾宪华:我参与开源的契机是由于Instagram的神话,我看中了一个来自San
Francisco, CA开发者rFlex的开源库SCRecorder,为了让自己能获取更多对Media
Layer的知识,所以先着手学习AV Foundation框架的知识,当然Media
Layer的知识不是仅此而已,AV Foundation只是冰山一角,略过…..(笑)

澳门新葡亰信誉平台游戏,一个从事开源产品业务的公司和其它公司并没有什么区别。就是说,它必须将一部分收入投入到产品研发中。四大类公司有能力从事商业性开源软件开发:

从我自己的体验来看,参与开源项目对于程序员来讲是一种高效、快速学习成长的方法,不仅如此,如果你是一个技术爱好者,参与开源项目你有可能找到自己的兴趣、自己的优势等等,进而从事自己喜欢的工作,那种感觉真的太爽了。

为最大限度扩大其付费产品市场而开源软件的服务公司,如支持、培训、定制、搜索引擎和电子商务公司等
想拓展潜在硬件市场的硬件公司,如打印机或手机制造商
使用开源组件的软件公司
采用双重授权模型,同时发行产品的专有版本和开源版本的软件公司

所以开源对我来讲是一项人生投资,看好未来的趋势,选择合适的、喜欢的、有兴趣的事情去分享,你可以从中获取无限的乐趣和价值。

一个公司的活动不仅限于以上某一种;同样,每个开源项目的商业化也可由多个公司参与完成。

世界那么大,不可能每个人都认同你的看法和想法,所以采用MVP方式去实现某些有用的交互,把值得去投资的开源项目都当作一个产品去看待,让其他开发者尽情地去使用,这样的过程会让我感受到一份成就感与喜悦感,所以我会坚持通过开源的方式去感受。

对于服务或硬件公司来说,主要营利方式不是出售软件本身。这样,这些公司就有可能发行受开源许可控制的软件,以便从第三方的贡献中受益。

CocoaChina:您在参与开源中有哪些收获?

对于服务型公司来说,开放软件源代码的动机是相同的。提供咨询和定制服务的公司希望尽可能扩大对其服务的需求,因此发布核心产品的开源版本是一种市场培育方法。此外,提供软件驱动的服务(如搜索引擎、Web
2.0服务或电商运营)的公司有充分的理由来开源他们的软件套件中不具竞争性的部分。这样就可以通过共享开发成本的形式,在初期开发、运营开发和持续维护中节约成本。例如,亚马逊、IBM、雅虎、易趣、Facebook和越来越多的公司在使用
Apache HTTPD Web服务器和GNU/Linux,并为它们作出贡献。

曾宪华:事实上开源已经逐渐成为评价程序员水平的标准之一,自Github流行以来,部分开发者能够凭借他们的开源工作得到一个好的offer,起码我就是其中一名获益者。

至于硬件公司,开源的动力可能来自于拓展硬件市场或降低产品开发成本。例如,打印机制造商可能会开源驱动程序,允许驱动程序被定制到不同的平台,以便扩大其硬件市场。又如,手机制造商可能将开源软件作为核心操作系统,以便与其它制造商共享公共功能的开发成本。

另外参与开源在提升团队协作能力上有着比较明显的作用,一个有用的Issue反馈、有效的交流以及热情的帮助都会让我们成长,从而运用到团队协作中去,那这个收获可见而知,不但让你在团队中突出,还能让你认识很多大神。

通过销售软件营利的软件公司有两种可用模型。但每种模型只在特定的开源许可下有效。希望在专有产品中嵌入开源软件的公司可使用所谓“宽松”开源许可(一般称为BSD许可)来实现这一点。与此相反,其它公司对其软件产品采用双重许可授权模式,即采用所谓“公共”许可(如GPL),同时在专有许可方式下销售软件。
非营利性开放开发

另外对于一些工作繁忙的程序员,平时忙于公司的项目,空余时间通过侧面的形式(参与开源),也是提升自己整体能力一个很不错的方式。

很多时候,由某一组织开发的软件其本身并不创造收益。在这种情况下,该组织可通过开放源代码来降低开发成本。此时,可以考虑成立非营利性组织来管理软件的开发。这样做有两种作用:首先,基础设施成本和管理成本的很大一部分可被此非营利组织吸收。这些成本由使用非营利性组织管理的产品的公司出资维持。其次,这将鼓励更多的组织参与到项目中来,因为他们相信,他们始终可以使用项目产品,并以符合所有贡献者利益的方式管理项目产品。就是说,不存在与项目战略相“冲突”的商业利益,也没有被“买断”的席位能够掌控开发。

一部分开发者都比较不爱接触外界,起码以前的我是这样的,开源可以让我们认识业界里很多知名的大神,心里那个小激动啊?对话了耶!(笑)

此类组织的最好例证可能就是 Apache 软件基金会 (ASF),一个领导着如Apache
Web服务器 (HTTPD) 和许多基于 XML 和 Java 的项目的非营利性组织。ASF
由来自公司和个人的慈善资金支持,为 Apache
项目开发人员提供工作所需的基础设施。ASF
的工作由个人来完成,这些人通常是使用 Apache
代码作为内部开发代码或销售定制版本的公司的雇员。

参与开源让我认识到很多知识渊博的开发者,他们的思维方式与做事方式非常不一样,很值得我去学习。

例如,Apache Rave 门户框架最初是由学术界和商业伙伴作为 Apache
孵化器的一个项目提出的,后续又成功吸引了大量开发者,并于 2012 年晋级为
ASF 顶级项目。

总之开源提高了我的整体水平,我在参与开源中获得很多收获,实在一言难尽。

非营利基金会的其它例子还包括:

CocoaChina:您在参与开源过程中有什么印象比较深刻的事情能分享一下吗?

自由软件基金会
Eclipse 基金会(注意,该组织最初是一个联合会,见下文)
Gnome 基金会
Mozilla 基金会
Python 基金会

曾宪华:MessageDisplayKit是我2014年5月份所写的,由于当时IM产品非常火热,所以着手开始研究业界知名产品微信,用了10天左右的时间去模仿微信,发布后迅速的吸引大量的Star,并且连续一周在Github趋势的Objective-C语言分类排名第一,主要是针对国内产品的需求。这里需要说明的是,MessageDisplayKit主要思想来自JSQMessagesViewController,特别提出感谢。

联盟

参与开源的乐趣就是能把自己的优势或缺陷分享出去,并且会有人欣赏你、纠正你、谴责你。

当组织的核心团队就某一项目合作时,可能形成软件维护联合会。这与创建非营利性组织类似(见上文)。联合会与非营利性组织的主要区别是,联合会成员比非营利性组织发起者对项目拥有更多的控制权。非营利性组织会以有利于所有人的方式管理软件,而联合会则以对其成员(和共同利益者)有利的方式管理软件。

在刚进入开源社区的初期,我也犯了不少错误,比如不是原创的开源项目并没有注明来源,我在此表示歉意,当然现在我已经改正了,也希望大家不要犯这样的错误。

联合会模式的一个优势在于,联合会能够通过决定如何使用资源(时间和金钱)来更密切地控制项目。然而,这一事实将减弱项目对非核心团队成员的吸引力。考虑到今日的用户会成为明日的开发者,因而应鼓励用户早期参与,这一点就显得尤为重要。遗憾的是,联合会模式往往使用户感到被排除在外,因为他们不是项目成员。

之前业界里有些大神都在谴责我,说我无耻、说我抄袭,这个经历让我感受非常深刻,但是我并没有因为这些谴责而放弃开源之路,没有人天生就懂很多知识,模仿也是必经之路,我没有计算机基础,问人没人搭理,只得到一句话“去google吧!”,那我只有通过阅读别人的源码进行不眠不休的修炼了。

有意思的是,许多以种子资金创立的项目常常以贤明君主模式(benevolent
dictatorship)或联合会模式启动,而当种子资金用完时不得不转变为其它模式。这种转型非常难于控制。

我这个人比较倔强,连续半年每天只休息3到4个小时,把应该补上的理论基础补上、把所谓的设计模式都琢磨过后,发现缺少Coding还是会有很大的问题,于是我改变了方式,又是连续半年每天只休息3到4个小时,开始把底层原理弄明白,再利用自己喜欢的语言(Objective-C)去实现一遍,咦!发现自己的水平提高了几个阶梯的幅度,希望之门再此打开,谢谢那些谴责我的人,因为你们提醒了我,让我知道自己缺少哪些层面上的知识,与其同时我发布了30多个有用没用的开源项目。

DSpace
项目是教育系统中一个成功的联合会项目的例子。联合会模式的其它例子还包括
Apereo 基金会和Kuali 基金会。而 DSpace 和 Apereo
都在转向更开放的模式。
对降低成本的贡献

现在想起,还是挺恐怖的事情,后续已经有能力进行挑选一些有实用性的方向来参与开源项目,而不是从数量入手了,以后我会专心维护有价值的开源项目。

一个组织选择开源软件产品可能出于多方面的原因。某些情况下,他们这样做是为了实施新流程、提高现有流程效率或者降低软件许可费用。已经采用了开源软件产品的组织可能也会选择向开源项目贡献代码,以获得更多的收益。例如,加入新功能以进一步简化内部流程,或者修复
bug 以提高员工的使用效率。

CocoaChina:您认为iOS开发方面有哪些适合开源的方向?

在这种情况下,回馈项目的主要动机有两点。首先,通过回馈项目,该组织可确保所依赖的软件保持活跃。其次,通过回馈项目,该组织可确保未来的升级尽可能顺利,即升级后不必重复进行本地修改。

曾宪华:在不同的背景会有不同的看法,在我的经验里,
我觉得iOS开源项目有以下几个方向可以参考的:

例如,APLAWS
开源内容管理系统就是为帮助英国地方政府提供在线服务而开发的。
教育和研究资金

1.业界上主流产品的需求。比如最近弹幕视频的技术实现。

英国以及世界许多其他地方鼓励教育机构在开源许可下开发软件。大专院校的开源项目资金可能来自投资机构或学校自身。只要机构可以获得直接利益,投资,即便不是全额,也很可能会一直持续下去。

2.自己喜欢又容易的交互。比如友好又生动的Loading页。为什么需要自己喜欢又容易的呢?没有人可以给你动力和支持,内心的痛苦与挣扎,只能自己给自己疗伤和鼓励,所以做自己喜欢而又不难的事情,能够增加自己的自信心,但是不要骄傲哦!(笑)

机构可以多方面受益。最大的好处可能就是,内部成本的降低和在为更广泛的教育界做出贡献方面提升声誉。此类项目的一个例子是剑桥大学的
Exim 项目。菲利普•黑兹尔自 1995 年 Exim
项目开创起即负责此项目,在剑桥大学计算机系任职期间他持续服务此项目,直到
2007 年退休。这类项目的另一个例子是南安普敦大学的 MailScanner
项目,大学雇员朱利安•菲尔德是该项目的“贤明君主”。

3.自我增值的知识层面。比如Media
Layer下的框架,还有在直播中利用硬解码与硬编码提高直播流畅度等等。

开放开发已证明是具有不同利益和专长的各方的有效合作方式,尤其适合于开源软件开发。在商业领域,我们看到人们对“开放式创新”这一理念具有广泛兴趣,认为这是开发新产品和现有产品的有效方法。通过精心规划和管理,开放式创新提供了一种可控、可管理的流程,鼓励商业开发和社会推广,而项目学术研发团队只需专注于局部问题,而非商业计划。例如,Apache
Wookie 由博尔顿大学开发,却吸引了大量其它学术外领域的开发者,并于 2012
年成为 Apache 顶级项目。
慈善家和其他基金组织

4.帮助初学者。一些技术指导和分享,比如如何使用CocoaPods、如何打包静态库等等。

多个慈善组织是开源项目的重要投资者。这些组织包括:

另外还需要找到之前没有人做过的东西,在我开发XHRefreshControl之前,Github上没有一个能高度定制、低耦合的下拉刷新和上拉加载更多的组件,在研究网易新闻客户端在数据处理方面的知识后,定制一个可预加载的、可定制下拉/上拉样式的、可定制自动加载和手动加载方式的、可考虑网络状态切换的刷新组件。

梅隆基金会 – 主要资助图书馆领域的重要工作
Google Summer of Code – 由 Google 运作的项目,用于资助学生参与开源项目
自由软件协会 – 为免费和开源软件项目募集资金的慈善机构

结果,大多数国内开发者给的反馈
:这个库比较全面、个性化定制比较完善等等的意见。

志愿者

在YY开发新产品时会用到该组件之外,自己的个人项目也会用上,并且会用自己的项目提前进行做白老鼠,对于各种情况考虑的比较全面,是个值得去维护开源项目。

参与开源软件项目很有教育意义,更不必说其乐趣了。因此,在业余时间为开源作贡献的人并不少见。除以上模式之外,志愿者的工作也是很重要的,大多数开源项目都有志愿者参与。

CocoaChina:您认为在开源自己的项目时候有哪些经验和注意事项?

目前,项目可通过多种方式使用免费基础设施获得托管和相关功能(如问题跟踪和社区参与),此类资源有
SourceForge 和
GitHub。这意味着,只要项目能得到来自可靠社区的开发和发布支持,便可以零成本可持续发展。

曾宪华:从我自己的经验教训来看,开源自己的项目需要注意以下几点:

(志愿者)用户对于开源项目同样很重要,因为用户会提出需求并进行测试。只要您能够管理用户对特定版本的期望,就能发行开源软件试用版或早期采用者版本用于测试,这便可以大大降低稳定版本发行前的成本。

1.如果并非原创,请注明来源。(我已经有血一般的教训了)

OSS Watch
文档如何建立开源社区切实地介绍了如何实际创建一个包容、多元的开源社区。

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的唐巧通过自己上线的产品去验证开源库的稳定性和能承载多大的用户量等等。这些我都认为是非常好的。

一个成功的开源项目,仅有自己一个人往往是不够的,通过多人合作的模式,把各自优点发挥出来,共同去维护一个有价值的、可持续发展的开源项目,最后得到收获将远远大于付出。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图