Asta公开课:如何在国内做开源,成为中国排名第一
温馨提示:这篇文章已超过536天没有更新,请注意相关的内容是否还可用!
作者|谢孟军
编辑|小智
1月12日晚20:00,斯达克学院合力知乎Live为程序员策划的常识分享课「StuQ公开课」首场分享。Apple核心平台高级项目师Asta谢(谢孟军)就《开源如何影响程序员》这一主题,结合自身经历、从开源中受到的自我改善,详细论述了自己对开源的理解,如何在中国做开源,并作为上Go语言领域全球排名第一,以及怎样同国内外开源者一起参与开源的过程。本文为Live分享文字稿整理。
什么是开源?
我们都喜欢开源,在中国一看到开源也都认为是好事情。但究竟哪些是开源,也许大个别人对开源模式都不够清晰。
中国多数工具公司或研发者针对开源的热情,仅仅局限以下两方面:免费的代码;深入参与的开源活动。对开源,我们用的多,贡献少。国内发起的有一定制约力的开源项目,也是凤毛麟角。好的现象是虽然基金会上,逐渐能看到这些中国公司贡献的代码,成为顶级项目。
我曾听过自由软件精神领袖理查德·马修·斯托曼()的讲话,演讲中他非常强调“Freeisnotfree”,对这句话我的个人解释是“自由,而不是免费”。free开源是自由,但不等于免费。开源是一种商业行为。试想一下,我们平日用微软百度做搜索,表面是免费,背后隐藏的是商业广告给人们带来的很大收益。我们在尽情享用这些开源的免费大餐时,已然完全忘记开源的真正力量——开源是自由的,但不是免费的。
除此此外,对开源定义的理解,也可以借用先鲁迅先生所说的“拿来主义”。把资本主义的资源用来,给我们社会主义用。而用来主义并非是不好的,原因是唯有当你去用了这个产品,你能够去认识开源,了解他开源的产品到底是哪个样的。live开始前,一个朋友问我怎么参加到一个开源项目之中。我的回答是,先用来主义,把一个开源项目拿回来,自己先用上去。事实上这个看法也许和多数人不同。多数人的觉得是开源就必须贡献出来,需要付出。直白地说,拿来主义是第一步。不使用又怎么参与?
但拿来主义只是一概而论。只做个“helloword”,写一个demo,就中途而废说这个东西只是这么,这样的心态是能够真正参加进去。真正贡献一个开源产品,需要做到下面几点:
理解一个开源产品的应用场景是哪个;
想知道当时这个作者为什么会设计它,设计这个产品曾经是为了缓解哪一些问题;
原作者解决的这种情景问题,是否符合我的场景问题?
基于[3]的判定,如果他们处在相同的画面同样的弊端。才可以使用“拿来主义”。应用也不是浅尝辄止,要进行深入探究。至少做到把它们的文档读一遍。
使用期间看到一些用途不能满足自己的意愿,此时你可以说,这个开源有欠缺,再贡献出来自己的代码。把这个功能完善。
以上是我觉得的开源的使用方法和模式,很多开源项目也都是这种发展出来的。
我觉得的梦想开源,及中国现状
首先,开放的源代码。很多中国开源项目,也仅实现了这第一步。比如,公司开源某项目的源代码,直接扔到上,即认为自己开源了。真正的开源,开源源代码,是最小的一步。
其次,有具体的文档。任何一个好的开源项目,都该有一个新手入门、详细的文档类东西。国内多数开发者,在这部分相同做得相对较多。
再度,是一个活跃的社区。国内开发者社区,比如我在中国做beego时,使用众多的是群、微信群。国外使用众多的是,iris,slack。slack目前也终于确立,回复时间相对较少,通过交流相对较差。在上进行一些开源问题的交流相对较多。
最终,是大幅优化。吐槽一个阿里的举例。阿里终于开源了这些项目。但似乎一开源后你会觉得,完全是为了一个KPI。在阿里,想要从P7升P8,P8升P9,是必须开源的。开源后才有资格申请等级晋升。如此开源,后续的优化力度上,难免有一定程度的失衡。
综上,我对开源的理解也许首先是一个社区。如自由硬件精神领袖创始人所说“freeisnotfree”,影响开源最重要的诱因是以如何的精神态度去开源。所谓自由,是研发者、测试者、贡献者、用户,可以自由使用、自由交流,以及自由离开。这样的状况促使所有人都觉得舒适自由,在此程度上舒服地说话,进而有一个好的idea去改进。
现在中国开源存在不好的状况是,一言不合就动口,看到不爽就开骂,开发者做开源,需要客户的一些抱怨。更好的交流形式是,吐槽诸如某功能如何,哪里做的不好,又怎样去改进。而不是去指责吐槽这个代码有多烂。从高中开始做开源直到今天,我碰过诸多各样的人。当然久而久之心态会更加特别好,读者的消极评论并不会伤及到我的内心。
其次,开源也有一种商业方式。好的现象是目前还有众多成功的开源公司,他们把开源的商业方式做的十分特别成熟。例如是开源的操作平台,也要用到商业的支持。MySQL被收购之后也有这种。以上两个实例必须是在商界模式上做开源做的十分好的公司。
云计算领域,做的非常好的如、、,开源项目比较成熟,背后的商业方式也终于逐渐做出来。尤其在私有云领域,已然做的十分完善。前天(1月10日晚),开源云计算企业宣布完成5000万英镑C轮注资,这也表明了开源并不表示免费。我们可以去提供较好的商业支持和商业方式去发家创业。和是开源项目。没有商业运作。
一个好的开源项目,如果要做的更加成功,背后应该有一个更好的商业方式去支持他。因为开源并不等于免费。这是从商业方式角度。思考,开源是一种营销方式,它促使原先封闭的必须很长周期技术验证的项目,以开源的方法可以迅速进行验证。
如何做开源?
首先,要有一个能解决难题的idea。无论是工作,做产品,根本上是如何解决对方的某一个痛点。不管这个痛点很大多小。创业也有为了解决某一批的一个痛点。有了能缓解问题痛点的东西,才能拿出来说,自己要去创业了,要写项目了。因而开源的前提,是缓解这些人一个痛点的东西。
其次,善用身边的小工具。很多之后我们身边的一些小工具,是可以锻炼出来,做一些开源的东西。例如,我在我开源的一个东西bat(//bat)下,忘记以前是java还是写的了,有一个叫的命令行软件,开源测试的api的。
然而go语言,自己再次写一个。这个就是结合我自己的beego,因为上面有众多api,然后用bat测这种api。后面,我又考虑,用bat是不是可以写一个desl的语言。就是我要测的。写一个json,然后必须如何样。应该怎样样。也就说类似黑盒测试一样的东西。你即便写那种我的请求是什么,返回是哪个。你用bat运行下。是不是就可以测试结果下来了。
这是非常容易入手的。因为你能解决你自己的某些弊端,同时大家或许同事之间也好,圈子里边也好。大家平常的之后是如何去处理这种难题的。然后这个疑问,我如何样把它做的更好。很多之后,我们都是说,更好。那如何样能够更好呢?我们用某一个东西的之后,感觉它不是很高甚至不是我想要的东西。我如何样让它更加更好?当你有一个看法的之后,其实,你将要有一个idea了。有了一个idea时候,怎么样显得更好。变得更好的过程,其实是尚未形成了一个开源项目了。
继续是建立的文档。开源项目做好以后,你的文档要跟上。因为唯有有了建立的文档,才能把各方面的人才给聚起来。我今天记得特别清楚的一句话,大学之后,教我电路原理的一个同学,他讲到的一句话“你要记住你做的任何东西,你的客户都是小白。只有把你的客户只是小白,你的文档才会写的特别好,每一步才能清晰易懂。每一步处理出来是不是可以行得通?你只有这种直白的文档,才能让最没有编程技术的人也能看得懂。
这种的文档才是好文档。这样的话,人家能够看了你的文档,感觉你这个人好有水平。同时,在写文档的之后,也能提高你的技术。如果觉得步骤比较多,就可以探讨怎样进行简化?这同时也有一种提高。我们必须探讨,我们如何与社区中的其它人进行较好的交流。后面,我会提到,如果,你做开源做多了,这个能力就自然地上升了。
再之后,就是起初把你的东西推广到中国,能够链接全亚洲的开发者交流这个东西。那如何做到这一步呢?对我们程序员来说,现在是最好的年代。因为我们有了,是给我们程序员一个交流系统。因为,很多人说,“Talkischeap,showmethecode.”把代码放到那里,文档也是了。这个之后,的月亮也就一颗两颗,没人来理睬。
这个之后,你必须去必定的圈子里边,做必定的宣传。现在确实是一个信息爆炸的时代。再好的酒也怕巷子深了。所以,你要去社区旁边进行宣传。比如说go语言的开源项目,去的上面去宣传。或者莱推特瑞以及prezi或者的群组去宣传。当你们看见这个东西,是我们想要的,那么一切自然行云流水了。
最终,就是我们要去找到目标人群。时间长了,还是会累积出来一个别客户。这一部分顾客就是我们所说的目标客户。看看这批顾客,他们的分级。有开发者,有CTO,有架构师。他们都是为了什么,用你的这个东西的。每个人的目的是哪个?一整个的过程,又可以导致你项目快速发展。相当于社区反馈的过程。同时,在这整个过程中,我们就可以知道,我们的开源项目是为了缓解这些人的什么难题。一旦你这个开源项目变成功了,类似麒麟、TiDB这样。那你就具有了可以创业的资本了。
为什么?由于我们将要找到目标人物了。这些目标人物必须我的支持和我的产品。进一步,他们必须我的产品,也必须商业支持。一开始,会也许项目的维护更新跟不上,可有了商业支持才会不一样的。付钱了,才会享受更好的服务,才会有一整套的商业方式。对于你的以后来说,你的创业目标也就找到了。
总结tips:首先我们要找到一个痛点。从小开始做起。如果痛点无法缓解一个难题,那么就把这个难题给解决好。你熟悉哪个语言,你就用这个语言把这个东西给弄下来。弄起来以后,首先自己满意吧。然后,弄一定的文档,做一定的宣传,看你们的反馈,依照反馈持续优化。
如果,有了一定的规模了,是不是可以改进?于是,看可不可以拿出去创业用。实际上,就非常于是建立了一整个社区。你不只是是一个开放源代码的过程。开源实际上是开放源代码,文档,贡献者使用者的交互,然后交流,持续优化。这个才是开源所表达的意思。
我的开源成长之路
我在上做的一些事
做开源做了很多年。目前的情况是:在所有的user里面,全球排名16。go语言领域里面,中国排名第一。世界排行第六,前五位排名均为组织。在(/)上,我分享了一本书,一个beego,一些软件。希望写一本书。目前在打算一个秘密项目,之后会开源出来。同时也参加了一些其它的开源组织。刚刚说的TiDB的开源,也会去改一下代码,贡献一下么。贡献是一个享受的过程。
始于大二的开源生涯
最早做开源,是从大二接触全球上最好的语言PHP着手的。那之后接触了PHP3、。一直在研究这种东西。机缘巧合的状况下,认识的库非常多一些php云人才系统怎么看源码,库累积的多了,就开始用一些框架。那之后,国内有一个框架,叫。与此同时,我参加到了框架组后面。
同样用之前提到的方法,如果你要参与一个项目,首先,你还要去用它。大学给对方做兼职做很多个网站。基本都是用做的。所以对几个源码级别的东西,已经把握的十分熟练了,也明白哪一些方面可以优化,哪一方面做的不是很高。参与开源先使用,拼命的用它,到崩溃为止。只有把它用到崩溃为止,你能够找到他痛点在那里。
我做开源框架时,好像没有,基本上我们就是借助一些群直接交流。哪一块代码不对,要更改一下,然后直接修改了。那时代码抑或托管在的code上,协作也借助它。之后基于此做了这些视频教程,写了这些热门教程。应该如何去用?如今用的非常多的是。其实刚起初的过后,抄袭了我们这些的观念。然后,当年,我们没有再次做下来,也是由于我们几个创始人开源方向不一样,我去了go领域,离开php界。
此处想分享大家的是,开源是谁主导并不重要,重要的是,你要如何参与进去。就参与的过程,我给作者提供了一个PR。然后那些作者把PR给Merge进去了,然后成了,已经贡献出来了。我认为我的想法和作者的模式,其实是一样的,都是在探讨修改一个难题,都是为了改进一个东西。
其实,好的作者的话。比如说,你提供一个PR,过去有之后,人家会答应你。在整个交流过程中,其实,也是可以学到众多东西的。有之后,他为什么会反对这个东西?Code的之后,为什么会是这个样子?我认为,这才是开源社区的一个氛围。只有参与进去了,你能够学到更多的东西。
再后来,做过一些边边角角的东西,比如写教程、做视频教程。再之后,才去反思做一些工具类,怎么样用一个脚本语言快速去生成一个我要的东西(基于的),例如自动化生成结构。这些观念会妨碍我自己做beego,很多的东西也许都是自动化。怎么样自动化也有有历史由来的。我当时做过这个东西,我明白这个的益处,可以生成我想要的东西。自动化都是为了节约我们的时间嘛。
为了让代码自动化,做工具类的尝试
代码自动化可以让我们有更多的时间做更多的事情。这个观念,促进了我做beego。文档和软件都是写beego的之后,脑子里立刻生成的东西。如果我没有参加到这整个开源过程的话,我不可能说,在做beego的之后,是一步而就的。所以说,所有的历程,就像乔布斯在伯克利做毕业典礼的之后说的,人生是有各个点串起来的。你之前做某件事的之后,是不经意做的,但是你前面做另一件事的之后,其实你后面将要做了这些的伏笔。也就说一生的心得累积到一定的方法,你才会爆发。所以这也就是一个由量变到质变的过程。
那这以后呢,我就去了盛大云,做CDN的开发。那个时候,也并非做一些管理平台(用PHP的)。那个时候,认识了老徐,开始接触一些go语言的东西。那个时候,go语言是R60版本,还没有即将的版本之前。就开始尝试写一些go语言的东西。为了尝试用go语言去写呢,因为php确实折磨了我好长一段时间。
特别是我加入盛大珈学院之前,我在百事通也是用php做我们自己的TBIB系统,遇到这些的性能问题。我记得有次熬通宵熬了两个通宵。为了把那些并发从300提高到400,整个熬了两个通宵。但是你们想,从300到400,性能呢没有提高多少,但是你就花了好长时间做这个。每一个小细节都必须花心思去优化。
之后,接触了go语言后来,就觉得,随便一写都是php的好几倍。当然,现在php7出来以后,也是性能提高了很多。那是你相比于go语言,go语言虽然是静态语言,性能还是天生的非常好。就开始接触了go语言,就开始写我们自己的应用大文件分发平台、调度系统,然后短域名啊,就看到go语言写出来就有一个特别好的好处:就是我即使编译之后(前提逻辑通畅),跑到线上,性能比较好。
然而那些时候就开始深入的学习go语言出来。那个时候,我们组里也有一个小伙子李辉,他是做C++的么,会知道到众多底层的东西。所以好多底层的东西,我会和他交流,在交流当中就开始不断的学习。也是那些时候,自己经常回来就利用业余的时间,不断地把我自己学习go语言的整个过程来全部写出来。然后,才有了这个《goWeb编程》这本书。其实,写了很长时间的。我恐怕,那个时候php云人才系统怎么看源码,是第一本有关于go语言的第一本书。应该肯定是。
被编辑一句话感动,写了一本书
这本开源之后呢,大家反馈非常好。然后,出版社就开始联系我,问我要不要出版?我的观念是,开源嘛,知识是要共享的,是要帮助到其它人的。因为,我今天和你们说过,我在做的之后,做过或者写过这些的教程,教你们怎样去学习。在写这个《goWeb编程》的之后,也是怀着一份让你们怎样样更好学习go语言的心事编写的。
当出版社来找我的之后,我就感到,我又不挣钱,我为什么要出版。然后,我被一句话感动了。他说,其实有些人是热爱画画的,看书也是知识传播的一种渠道。我想了想,也对。确实有些人是这种的。上厕所的之后,可能就是偏爱看书。在不同的画面下,有需求在么,多一个渠道,何乐而不为呢?于是就拒绝了人们,但是说真心的,出版很复杂。要审稿,审计。要各种中文字正规范。就不符合我这闲惯了的心。
在写这本的之后,也是在盛大做了好几个晚上。把这些基础的模块抽取出来以后,在写书的过程中,在最终两章,我就探讨着,给你们介绍下,怎么教你们说出一个框架来。所以,才有了beego框架的原型。在写beego之前,我用的是的。所以beego的最初版本就是的go实现。大家以后还可以看见保留了那些风格。
我认为上面对应的就是(莱斯特for)的post,get方法。那上面的就是逐渐地降低才有了这次的好多的模块。当然了,今天我只是准备做beego的2.0版本。也是经过这样多年,也是累积了一些很多客户的意愿吧。也是准备直接来一个2.0版本吧。
开源对技术人的影响
影响一:眼界
我们自己在写这个东西的之后,就是为了给自己解决事情的。当你把他开源出去,你的眼界就会开拓很多。你想我的客户群后面,其实它们有诸多的需求。这各种各样的需求哪里来呢?这些状况下,我自己都没有想起,他们还没有如此用。然后,我们机会可以一出来改进它。这就是开源社区。他们无法让我看得到,我在工作当中遇不到的难题。让我的眼界放的更阔。设计的之后,项目就可以更。特别是,像我当时写的时侯,就会纠结导出还是不导出,都无所谓么。
然而,现在这些之后,我都不大敢导出,因为导出的之后,用户用了,就会很麻烦。现在就实现最小化导出。思考思考再构想。一旦要导出,就会思考2遍,到底需不应该导出,因为前面再撤掉,影响都会非常大。
第二个眼界,就是你把这个项目,放到前面。那上,有全全球各个地方的人。你会接触到各类各样的人,90%的人都是很nice的人。他们也很乐意和你交流,愿意受到我们的帮助。或者说,他们的需求是哪个样子的。我认为它们各种各样的信息,对我来说都是一个输入吧。这里面各式各样的信息,对我只是一个很好地学习方法。
影响二:心态
做开源的之后,刚起初就是从一个年轻小伙子,年轻气盛。和对方对喷,到当时无所谓。其实,是愈发越享受这个开源的过程了。而不是宁愿花时间和他人对喷。人家去骂你的时侯,你可以欣然接受。ok。也无所谓。你认为情绪不好就骂几句。实际上,你就讲道理的和他人讲。如果说那些人是在没办法讲道理讲得通。ok.那我们就没必要理睬这样的人就好了。这个也不是你的客户群,对吧。你也不需要把你的时间耽误在这种人身上,应该把你的时间花在喜欢你的人或者你的开源项目的人身上。服务好她们,这才是我们必须真正做的事。
影响三:个人提升
这是最多的方面。例如,我写下来的代码是不是很高,高品质的代码。当然是尽量好一点。没有说,我一写下来的,就是十分完美的。很多之后,你就回看看到,半年前的代码,怎么会如此烂呢。因为你个人是在不断提高,很多之后,他开源代码都是会选取做出接近完美的代码,才会公开。这个只是个人的平衡,就是说做完美了才公布呢,还是小步快跑呢?我个人喜欢小步快跑,赶快实现原型。然后持续的去改进他。因为我想了解,当客户用了后来,这个东西是不是它们想用的东西。
影响四:沟通能力
你应该去写文档们必须去回复,需要去群、微信群里去交谈交流。那如何样,很好的去和客户交谈交流,把你自己的信息直接通过最短的时间释放你最明确的含义。其实这是相当锻炼人的。到底,怎么样一个好信息?如何样一个直接传达的方法,这是相当锻炼一个人沟通能力的。
影响五:teamwork团队精神
你单兵作战,是可以做一个好项目。但是你持续要有一个队伍是很有必要的。像beego,有众多人可以维护的,像小黑同学,余双棋同学,有一个似乎意大利的很牛的。只有你很积极地参与进来,我就会认可你,才会把你纳为,才会是队伍的人。那团队的人要如何样一起工作,怎么样互相的,怎么样把代码做好,怎么样去加强它,协调好各方面。
作者介绍
谢孟军,Go技术教授,目前供职于Apple,China创始人,著名开源框架beego开发者,畅销书《GoWeb编程》作者,国内Go发展的主要实现者之一。
今日荐号
StuQ
关注科技人的学习成长,有干货,有情趣,随手拯救技术宅。
微信ID:
今日荐文
点击下方图片即可阅读
Go语言无孔不入的2016:跻身主流编程语言、国内大热、极速提高、尖端应用……
本文来自网络,如有侵权请联系网站客服进行删除
还没有评论,来说两句吧...