开源雨林 | NPM型的生态就是热带雨林型的生态——WebCell前端框架作者水歌访谈实录
本期访谈嘉宾 水歌
freeCodeCamp成都社区负责人、WebCell前端框架作者
“开源雨林”计划是一次全新的尝试,由华为联合开放原子开源基金会、中国科学院软件研究所、中国信息通信研究院、中国软件行业协会共同合作,从开源通识、开源使用、开源贡献三大方面,将理论知识和案例总结为11门开源专业知识体系,帮助企业快速理解开源理念,掌握实战方法,让越来越多的企业更有效率的使用开源、贡献开源。
3月18日,开源雨林邀请到freeCodeCamp成都社区负责人水歌,与大家分享自己在开源路上的故事与见解。
最早知道开源的概念,是2005年堂哥介绍Ubuntu操作系统给我的时候。一直到2014年才真正开始写开源软件,在那之前只是一个普通的使用者。
入行后了解到中国开源年会,当时为了能够免票参加,申请做了志愿者。通过开源年会结识了庄表伟老师,之后加入了开源社,一直做基础设施方面的研发工作。
我个人非常认同开源的理念,所以在平时的工作以及业余做技术社区、技术社群的过程中,都有践行开源的理念,算是一个狂热的开源爱好者了。
Q:主要活跃于哪些社区,在哪些社区做贡献?目前主要在freeCodeCamp成都社区和开源社。
跟freeCodeCamp的故事是在工作后,因为要带新人,机缘巧合地认识并加入了这个全球最大的开源编程教育平台,并从2016年开始在成都社区做组织者的工作。
去年,借着中国开源年会成都场的机会,把我实践了三年的开源市集概念发扬光大了一下:我们在草坪上办了一个技术party,感染了一些成都当地的小伙伴,大家聚在一起做了开源市集的社群联盟,一起把开源、开放式协作的理念,用一种更轻松的方式去推广。
freeCodeCamp是目前GitHub上star前十的开源项目之一,全球网站排名位列前1000位,名列最大的商业编程平台优达学城之前,可以说是编程教育界的维基百科了。通过在线课程的方式,累计服务了全球300多万人免费学习编程,例如前端怎么做网页、网站,怎么用Python处理工作中的数据,如何做机器学习分析数据等。
freeCodeCamp的创始人是一位中国女婿(美国人)。2014年,他在天津一所民办高校工作,为了提高较为繁琐的工作的效率,自学了编程。通过学习实践,他觉得编程好有意思啊,希望能够将自己的实践成果推广给更多的人,便辞了职,在美国注册了一家符合美国国税法501.3(c)条款的慈善机构运作这个项目。
可能freeCodeCamp在国内不是特别知名,但很多技术文章的开始或结尾都有提到;在国外,它已经是编程基础教育的标配了,被领英默认为University类别的机构,在Youtube频道是编程类的第一大,Medium专栏第一大,在国外的影响力和认可度都是非常高的。如果你还没掌握这方面的基础知识,可以去freeCodeCamp补一下技术知识。
freeCodeCamp全球的城市社区都是志愿者业余兼职做的,和组织没有任何隶属关系,这一点和开源社没有本质的区别,是一个很amazing的项目。
Q:是什么促使你开发WebCell前端框架?它有哪些优势和特点?WebCell是基于Web国际标准的一个薄薄的封装。
Web原先是很简单的,比如说HTML、CSS,很多人大学的时候有学习过,利用HTML标签就可以做一个简单的个人主页,上手非常的简单。而现在的网页应用做的越来越复杂,但它原有的设计可能并不适合复杂的应用。它没办法模块化,将专门用途的某一个小功能、小界面,包装成可复用的像乐高一样的积木块,它缺乏这样的原生能力。于是,国际标准委员会就把社区的最佳实践,例如React、Vue、Angular这些框架的实践,通过讨论把它们提炼出来,整合到Web标准里面,出一个滚动发版的Living standard。所以,不需要厚重复杂的框架也能写复杂的应用。
我喜欢标准的东西,因为它放之四海而皆准。几年前,我刚从传统的切图仔变成一个能写点东西的前端工程师时,我就学不懂React、Vue、Angular,怎么办呢?我按照最新的标准,去写平替。写多了就会发现,其实很多东西的复用度也很高,之后归纳经验总结,就集合成了这样一个东西。它比React、Vue、Angular更简单、更原生,也更容易学习,但是功能一点不比这三大主流框架弱。
WebCell不用厚重框架去写复杂程序,这也是命名为WebCell的原因之一,给人一种模块化、原子化的轻量的感觉。
短时间内,WebCell可能没有太大的商业化前景,我也不指望指望它赚钱。所以,这样一个既能提高工作效率,又能分享给别人的东西为什么不开源呢?大家一块儿帮我反馈,协助我更好的改进优化,对我来说是一件极好的事情。
Q:WebCell将来的发展方向是什么?谈谈对前端未来发展趋势的看法做WebCell的初心是简洁、好用而强大就可以了,但在升级基础设施工具链的时候,我看了一个库的作者2016年写的一篇文章,讲的是改变React的状态管理方式。这个库叫MobX,是世界上很著名的状态管理库,借鉴了Vue响应式数据的一种方式,更简洁、更轻量。文章提出了可以让React不那么复杂的观点,在新语法之上写起来也非常简洁。哇,这也太适合Web组件标准做状态管理了!而非向React现在抛弃面向对象的Class写法,只用函数这种语法做Hooks。
但我其实一直很反对React,在是类函数式的编程风格还是面向对象的编程风格上,产生了分道扬镳的道路,后面也是下定决心跟React分离,用MobX彻底重构WebCell和Web标准组建的编程模式。试验版还不错,简洁、舒心了很多。
用我在一次演讲上的结束语谈谈对WebCell未来发展趋势的看法吧:Web本来很简单,Web后来变得很强大,但Web也变得很复杂。WebCell的目标就是“Make the Web easier again”。
开源社是Apache member作为核心成员,刚开始对阿帕奇基金借鉴较多,与国家政府各部委以及大厂之间的话语体系较为契合,这是开源社的风格;而freeCodeCamp属于GitHub的一代,核心成员来源几乎都是GitHub的成员,可能相对会比较散漫一点。两者在运作风格、方式,以及社区氛围上是有差别的。
开源社的目标是做社区的社区,它是一个复合式的组织,有做开源促进的综合性性质;freeCodeCamp则是专注于计算机编程教育。
很多时候,差异是由目标决定的,所以两者各自现在的运作方式就是最适合它目标的方式,各有所长。
Q:从运营前端编程公益型知识社区的历程,谈谈开源社区运营的核心价值观我有一个不同于大多数人的想法:对于开源社区,开放和封闭是表面的,不是最核心的,最核心的是如何让各方的参与者变得更加主动,从而实现真正的开放。
开放只是一种形式,比如我把代码放在网上,所有人都可以随便拿。但最早开源来源于开源作者想解决问题,把自己的解决方案放在网上,其他人通过开放的形式主动参与进来,与开源作者一起解决问题。为什么这些人会主动参与呢?因为他们也想解决现有开源软件中的Bug、性能问题等。这种形式会更利于协作。
比如说我用一个开源软件,用了之后会不会主动提Bug、修复Bug,会不会主动在社区里回答问题。这种主动性会让我区别于伸手党和开源社区的过客。无主动不开源,只有主动的人,才能成为开源社区的自己人。
freeCodeCamp 成都社区的一位核心成员,她在团队这一年里最大的转变是:开始逐渐尝试用开源的方式解决业务问题。最初她可能是我们常说的CV工程师(Ctrl+C和Ctrl+V的组合),我告诉她说:“但凡你想用Ctrl+C、Ctrl+V的时候,你就剁手。试着用一种抽象、解耦的方式解决问题。从解耦一些小的函数、小的类,到解耦一些模块和包。” 当她拿出来之后,我问她:“下一个项目也有类似需求的时候怎么办?仍然不允许复制粘贴。”
这个时候,她已经知道该怎么做了:去公开软件源发布自己的Package,下一个项目就可以直接Install这个包,作为一个自己开源软件的用户开启新项目。他很开心,因为他发现当他把这些封装、抽象了之后,后续写业务的效率提升了高达十倍!开源令工作更轻松,花同样的时间可以赚更多的钱,或赚同样的钱但有更多的时间去耍!既提升了效率,又获得了成就感。
对个人来说,加入并贡献开源社区对自身技术能力、沟通能力的提升有很好的促进作用,能提高我们的主观能动性。对于初入开源社区的开发者来说,丰富自己的简历,增加个人亮点,也是非常棒的。
对企业而言,不论是自己的开源软件被同行改进,还是用别人的开源软件快速搭建自己的业务,这种对于业务的促进是最短期的利益。一个好的开源生态,会使更多的开发者愿意加入这家公司,并且开源的这套模式方法论,在企业内部是一个内源,可以极大的激发企业内部创新,这是更长期的利益。
所以无论是个人还是企业,加入并贡献开源社区都是当下对自己非常有利的一件事情。
Q:谈谈对开源雨林的理解及建议通过对开源通识、开源文化的传播,为国内企业做开源科普,让开源在中国这样的沃土上生根发芽,我认为很有必要。国内非常缺乏企业级的开源实践,那么华为愿意把在开源领域长期积累的经验分享给伙伴,对于其他企业而言是非常有借鉴性的,我个人还是蛮期待的!
开源雨林的核心应该是贴近企业的,能够从服务对象的实体、问题出发,主动的参与到实践当中,真正的帮助企业解决问题。期待开源雨林带领中国传统企业完成开源的脱贫攻坚!