Q新闻|Web开发的未来:React、Falcor和ES6;开源成功十法则;Autodesk和SanDisk的开源战略总监谈开源
Widen是一家数字资产管理解决方案提供商。目前,其技术栈还非常传统,包括服务器端的Java、浏览器端的AngularJS、提供REST API支持的Jersey以及jQuery、 Underscore、lodash、jQuery UI和Bootstrap等各种库。近日,该公司的首席开发人员Ray Nicholus在一篇文章中提出了一个面向未来的Web开发技术栈,用于取代现有的工具。
虽然他们已经习惯并信任现有的技术栈,但为了实现以下几个目标,Ray希望引入一个全新的技术集合:
一种新的、闪亮的方法:作为一名开发人员,他希望通过采用一个全新的工具集获得全新的视角,并有所进步。
简洁:他不喜欢AngularJS 1.x陡峭的学习曲线,更令他失望的是,AngularJS v2的学习曲线更加陡峭。Java也有这样的特点。另外,他希望能够尽可能地避免样板代码,应用程序可以快速投入应用而又无损可扩展性,前端很容易描述为一组独立的专用组件的集合。他还希望用一种更好的方法取代难以维护和改进的传统REST API。
高效:他希望可以消除由传统REST API所导致的不必要的请求和响应开销。
优雅:他希望编写优雅、易读的代码。在用户界面上查找和修改数据要直观,最好是开发者只需要考虑自己的数据模型,而不用关心可用的API端点。
放弃现有的技术栈意味着开发人员要走出自己的舒适区,部分人可能会抵触,认为新选择不必要或过于复杂。Ray也有类似的想法,但当他对React、webpack、Falcor有了深入地了解之后,他改变了这种想法,认为这是一个面向未来的Web开发技术栈,Widen即将推出的部分软件产品将会使用下面讨论的所有技术:
React:Ray认为,React与Angular&Ember的不同之处在于其有限的应用范围和空间占用。Angular&Ember的定位是框架,而React主要是作为应用程序“视图”。React不包含依赖注入或“服务”支持,不需要“jq-lite”,也不依赖于jQuery。开发人员可以直接使用JSX编写标记,而无需Ember Handlebars。React会维护一个“虚拟DOM”,并通过它更新真正的DOM,避免了不必要的重排与重绘。总之,他非常喜欢React这种用途相对专一的特性。而且,React让他可以将复杂的应用程序切分成更小的组件。
Falcor:这是一个由Netflix开源的、非常新的库。不同于传统REST API,它只提供唯一的一个端点。有了它,开发者不再需要向不同的服务器端点请求不同的数据,而是向同一个端点请求不同的模型数据。服务器端可以识别请求参数,并由Falcor Router调用恰当的router函数。也就是说,Falcor提供了一个更加直观的API,就是开发者的数据模型。这可以确保服务器永远不会返回不必要的模型数据,节省了带宽。Falcor客户端还可以使用缓存数据为连续的请求提供服务,减少服务器响应时间。要了解更多关于Falcor的信息,可以查看Jafar Husain的视频。
webpack:作为一个模块绑定器,webpack可以为React组件模块化提供进一步的支持。它使开发者可以轻松压缩和连接CSS及JavaScript,并通过生成source map大大地简化调试工作。配置完成后,webpack会监控代码,每次代码发生变化,它就会生成新的bundles。客户端无需再导入大量的CSS或JS文件,而只需要导入bundles,减少了页面加载时的HTTP请求数。此外,webpack还提供了大量的插件,例如,使用jsx-loader可以将JSX转换成JavaScript,使用babel-loader可以将ES6代码转换成兼容ES5的代码。
ES6:即ECMAScript 2015,是JavaScript的最新规范,定义了若干重要的新特性,比如胖箭头函数、类、字符串插值、块作用域等。更多信息,请查看Mozilla Developer Network上的ECMAScript 6参考指南。
为了帮助读者更好地理解这些技术,Ray使用它们创建了一个单页应用程序,并详细解释了整个的创建过程及相关技术的工作原理。感兴趣的读者可以从GitHub上下载该应用程序的源码。
每个人都想要,不少人都在试,但是创造它的过程,说起来却都是泪。我说的是自由软件,又叫开源软件(译者注:本文重点不是辨析自由软件和开源软件的概念,作者如此说,姑且认为两者是一回事)。今天我要用十条行之有效的法则,来谈谈我三十年的写代码经验。
1.先有人,后有代码:这是一条黄金定律,Isabel Drost-Fromm教我的。致力于社区建设,而不是软件本身。没有社区,你的代码解决的可能是错误的问题。这些代码会被废弃、忽略,最终消亡。先吸引人才,再给他们协作的空间。给他们有挑战的工作。不要自己写代码。
2.采用强制开源的许可证:强制开源(share-alike)的许可证是开源软件的保险带。别夸口说你不需要,总有一天你会被打脸,遍体鳞伤。不要被打脸,使用强制开源的许可证。如果GPL/LGPL对你来说政治意味太浓,那么用MPLv2。
3.别指望达成共识:做决定前寻求共识,就好像指望能找到理想的人生伴侣一样。有点不切实际。Github抛弃了共识,他们设计了fork/pull-request流程,所以2015年你已经没什么借口了。你接受补丁就可以了,就像维基百科会接受增补。先合并代码,再修复问题,最后再讨论。把所有开发工作都放在主分支上。不要让用户等。这样做你才能得到事实上的共识。
4.先问题后方案:让你自己和你队友们关注问题,而不是功能。每个补丁都必须解决一个实在的问题。欢迎实验性代码,欢迎异想天开的创意。但不要让这些东西过度膨胀。收集好的方案,抛弃坏的。允许失败,各个层面上的失败。这是成长的必经之路。
5.先定义后实现:积极地为API和协议的定义写文档并进行测试。用持续集成来测试公开的API和协议。代码覆盖率不重要,代码文档也不重要。重要的是,定义好的东西代码要去实现,并且实现得要好。
6.内部挖潜:让贡献者(contributor)成为维护者(maintainer),让维护者成为负责人(owner)。平稳地、放松地做这件事,别害怕。保留权力把表现糟糕的人踢出去。鼓励人们创立他们自己的项目,尤其是基于已有的项目开发的新项目,或者与已有项目构成竞争关系的项目。日常表现不好的人,卸下他们的权力。
7.写下规则:你有了自己的规则,就要写下来,这样大家才能知道。实际上都不用写了,借用我们为ZeroMQ设计的C4.1规则就行,如果你愿意,也可以简化这些规则。
8.公平地执行规则:你的权力应该用来执行规则,而不是威逼别人认同项目的愿景。最重要的是,你自己要遵守规则。有这么一小撮维护者,会仅仅因为他们不喜欢一个补丁而枪毙它,而你如果自己不遵守规则,就会助长这类小团体,没什么比这更糟糕了。好吧,这么说有点夸张,更糟糕的事情多着呢。但是这类小团体会对项目造成危害。
9.细分项目:力争建立一群小型、独立、自组织、互相竞争的小项目。不要搞大项目。这里说的“大项目”是指,有两到三个核心开发者的项目。不要用submodules(译者注:git的命令,用于指定外部项目的依赖性)之类的来指定依赖性。让别人自己选择想要集成的项目。这是基本的法则。
10.保持快乐的氛围:也许你注意到,我并没有提及“创新”。如果要提,创新可能会排在11或12位。无论如何,你要为社区营造正向快乐的氛围。不要说某个问题愚蠢,不要说某个人愚蠢。社区总有一些人表现糟糕,即使规则很清楚也要违反。除了这些人,其他所有人都值得我们珍惜,我们应该像远道来访的客人一样对待他们。
本文是pieterh在其博客上发表的《Ten Rules for Open Source Success》一文的翻译,经作者许可分享至InfoQ中文站。
在All Things Open 2015上,Autodesk的开源战略总监Guy Martin(以下简写为GM)和SanDisk的开源战略总监Nithya Ruff(NR)给出题目为“Many ways to move the needle in open source”的报告。在此之前,OpenSource.com的Robin Muilwijk对二者进行了采访。GM和NR就采访中提到企业引入开源的挑战以及开源的好处等方面的问题一一进行了回答。
把“开源”带入到企业的挑战
GM表示,把开源带入到Autodesk等企业的最大挑战就在于如何让员工和企业领导认识到开源的重要性,并具有开源意识。GM在Autodesk开源方面的工作就是制定牢固的发展战略,使得企业可以充分利用开源所带来的好处。其工作的一部分就是培训员工的开源意识。
NR也表示,作为一个硬件公司,SanDisk引入开源的主要挑战在于如何让公司决策层认识到开源的好处,从而从公司内部产生对开源的需求。公司需要制定相应的策略,逐渐引入开源软件和工具。等员工对开源所有了解后,再通过外部雇佣、内部选拔等扩大开源团队,并逐渐和开源社区加强交流。
合作开发和开源带给Autodesk和SanDisk哪些好处
GM在Autodesk的另外一部分工作就是负责企业内部开源。他表示,对于一个拥有超过150个产品的公司,合作开发在产品研发的各个阶段都起着非常重要的作用。同时,随着Autodesk的很多产品开始与云相关。可重用组件对保证用户体验变得十分重要。内部开源很好的保证了这些组件的开发进度和质量。
NR认为,合作开发对于企业的重要性就如闪存对于云、大数据和数据中心的重要性一样。SanDisk通过合作开发解决了很多应用于硬盘的软件移植到闪存的问题。NR总结开源的好处为四个方面:减少研发花销、加快市场化进度、提高研发效率和加速软件创新。
开源是否应该放入小学的培养理念中
针对该问题,GM和NR表示一致认同。他们认为学校应该加入一些开源项目,来让学生进行合作和交流。这些项目可以让学生从小认识到合作的好处和重要性。NR甚至已经通过一个原来的IISME会员、现在的小学校长,把开源理念传输到了小学。
对于新人的建议
GM认为,新人应该谦虚、勇敢。一开始,人们都希望能够迅速证明自己的价值。但是,新人应该谦虚、多些耐心,等到积累一定程度再提贡献。此外,新人应该勇敢去提问和交流,并不惧怕失败。其实,开源社区的人都很友好。对于迫切希望学习和作出贡献的新手,人们总是乐于提供帮助。
NR则表示,新人可以多参加一些OSCON、LinuxCon和All Things Open等开源会议。通过会议,新人可以很快了解开源的含义,并与社区中的其他人多些交流。
最后,针对此次演讲,GM和NR希望ATO的听众能够从中更多的了解开源,也希望能够让听众加入开源社区时更加从容。
推荐:迷你书《开源启示录》
【目录】
开源资讯
Amazon EC2容器服务背后的技术
Readme.io创始人谈API文档的未来
开源软件
Log4j版本1生命周期终结
ACAT:来自英特尔的霍金专用语音系统
开源实践
Esty的开源项目运营经验
Facebook开源的真正原因
开源经验
开放源码在大型企业中的使用情况
开源领导者应该入乡随俗吗?
特别专题
内容为王,文档写作新理念
DevOps在撰写文档中的实践
文档,重中之重