
流行的开源库的创建者的生活是什么? 当然,当您的工作成果能帮助世界各地的许多人时,这是很好的。 但是,您是否发现自己不满足于甚至不是主要工作的任务? 怎么处理呢? 一个授权可以多么大胆?
Michelle Weststrate非常清楚这一切:他的
MobX库在github上
拥有超过17,000个星星,其贡献者的数量长期以来已超过100。 不久后,米歇尔(Michelle)会来俄罗斯在HolyJS上发言,因此会议程序委员会的成员(德米特里·德米特里·
马赫涅夫 ·
马克纳夫 (Dmitry
DmitryMakhnev Makhnev)和叶夫根尼·
邦诺普斯·科特(Evgeny
bunopus Kot))向他详细询问了:有关开放源的一般信息,特别是有关MobX的信息,以及有关会议的信息。
尤金:对于那些不认识你的人,你能先介绍一下自己吗?“是的,当然。” 我叫Michelle Weststrate(对大多数人来说很难发音),我来自荷兰。 大多数时候,他们是从我在MobX或沉浸式游戏中了解我的。 我为Mendix工作。 我们生产制造软件的软件:许多咨询公司使用的应用程序开发平台。 我们使大量银行保险公司和类似系统实现自动化。 我在技术方面-即我喜欢什么。 大约两年前,我参与了开源世界,从那时起,我就活跃于React社区和整个JS社区。
尤金:您在门迪克斯(Mendix)到底从事什么工作,您有技术顾问吗?-是的 我在那里有几个不同的角色,主要是Tehlid。 本质上,这意味着我有责任为我们的一个
“部落”选择技术解决方案。 因此,我正在开发一种用于移动应用程序的环境的产品。 我们与四个团队合作,主要是我做出正确的架构和技术决策。 另外,我还在编程。 这是我工作的一部分。
另一个是参与开源社区。 这是“双向”活动。 一方面,我们正在做一些很酷的技术性事情,我想在会议上分享,我自己发言或鼓励同事发言。 另一方面,经常访问会议的好处恰恰相反:您发现对我们有用的东西,然后我们对其进行研究并将其包含在我们的堆栈中。
尤金:您的Twitter描述中提到了OSS福音。 这是什么,为什么对您很重要?-这很重要的第一个原因:我发现,如果您将开发成果转换为开放源代码,它根本不会节省您的时间,但是它在测试方面有很大帮助,并提高了质量。 因为像MobX这样的库在非常不同的条件下使用。 而且我认为从这个意义上讲,开源具有这样的优势,即很难以其他方式获得。
第二点:我相信我们的“低级”发展并不能定义公司,所以为什么不分享它们。 我的意思是,基于技术而非自身的技术制造的产品或多或少使公司具有竞争力。 每个人都可以从协作中受益,这可以使整个开发加速。
尤金:有时他们说“非现金”开源实际上是一种非常昂贵的享受。 像Linux这样的项目需要来自甲骨文和微软等巨头的大量资金。 是这样吗 没有大厂商和大笔资金,开源社区是否可以存在?-我认为这取决于具体情况。 可能存在像这样的小型库。 但是上面提到的像Linux内核或React Native这样的项目是如此复杂,并且有很多人依赖它们,因此他们需要可靠的财务模型。 在这种情况下,没有大的赞助商将非常困难。 但是我不认为这是一个问题。 我认为,公司要学会承担责任比我们要学会在没有责任的情况下承担责任更为重要。
尤金(Eugene):例如,如果Facebook出现在您面前并说“让我们购买MobX或赞助它,以使开发扎根于我们的品牌下”?-嗯,实际上,他们已经赞助了! 这很有趣,但是Facebook是MobX
在Open Collective的赞助商之一。 因此某种程度上已经发生了。 在我看来,Open Collective是我们如何改善开源财务状况的一个很好的例子。 它允许公司以适合自己的方式赞助开发,因为存在财务上严肃的方法,包括发票等。
在Mendix上,我从事MobX的工作基本上花了很多钱,所以我对完全切换到Facebook并不感兴趣。 我了解这可能会使其他人感兴趣,但是我认为没有问题。 我认为,如果许可证仍然是开源的,那么该产品属于主要赞助商的品牌就没有错。 就像在电视上看足球一样:如果每个人都可以看比赛,那么T恤上的徽标并没有太大区别。
尤金(Eugene):如果一家大公司赞助图书馆,难道不能说“既然我们付了那么多钱,那么请在里面给我们这样做”?“至少我没有遇到过,所以这成为一个问题。” 如果我没记错的话,webpack会使用这样的模型,可以在那里购买功能。 因此存在一定风险,但我认为维护人员有责任确保该项目忠于其理念。 但是在这种理念下,可能会有很大的回旋余地。 此外,在开放源代码中,如果突然出现完全错误的情况,至少存在分叉的可能性。
尤金(Eugene):开源软件的开发就像一条曲线:首先,您创建了一个其他人都不需要的库,然后人们开始使用它,然后它在github上赢得了数千颗星,依此类推。 当开源项目变得流行时,它可能会花费大量时间。 您在MobX上花费了多少?-最近不是很多。 MobX现在非常稳定。 当然,过去花了很多钱。 这是非常不同的。 我认为在最初的几年中,这是一周的几个晚上,还有很多其他的片刻时间,您只需在Twitter上回答一些小问题或问题即可。 这些小事情并没有被认为是对时间的重大投资,但我认为它们总的来说会大大增加时间。 但是,这很难测量。 这是检查工作邮件的方法-检查问题并快速发送回复。
Eugene:在您是开发人员,创建了图书馆,它变得流行并且需要越来越多时间的情况下,如何提高工作效率? 您很幸运,您有机会在上班时间去做。 但是,如果您已经有了工作和爱好,并且该项目变得越来越受欢迎?-嗯,当我开始使用MobX时,也是在我的业余时间,当项目获得普及时,才添加了正在工作的人。 但是我有一些提示。 我注意到有一些规则对我有所帮助。
首先:跟踪文档的相关性。 如果您收到三至四次相同的问题,请务必将答案记录在文档中。 因为它最终可以节省您的时间。
第二:对您接受的问题非常挑剔。 在开始时,一收到错误通知,您就试图根据可用的描述重现该问题。 在某些情况下,您发现这是不可能的,并且已经花费了时间。 因此,现在我需要可以直接从该问题运行的内容,无论是沙箱中的代码还是带有单元测试的请求请求。 可以让我确定问题所在的位置-在库中还是在用户端。 这非常重要,因为它可以节省时间,并确保问题作者可以投入时间。 有人说:“我没有时间来帮助重现该错误,”然后我感到,“那么,我就没有时间来帮助解决您的问题。” 毕竟,一个人可能会因为使用我的图书馆的工作而获得报酬-为什么我应该将空闲时间用于解决他的问题? 通常,这种选择性有所帮助,尽管它使您感到不那么负责任,因为您想帮助所有人。 但是我发现“帮助所有人”根本不现实。
但是,由于我使用多个库,所以我不能立即响应所有问题,而是从一个库“跳”到另一个库:我一次要处理几天,然后再转到下一个库。 如果您写了我现在正在做的事情,那么我可以在几分钟内回答您,但是如果轮到您了,我将在几天之内无法回答。 这帮助我减少了切换上下文的频率。
当您的图书馆开始流行时,所有这些技巧都将提供帮助。
尤金:当受欢迎的图书馆的创建者回答“我无法复制,编写单元测试”时,这是否会使人们感到“他很自大,不想帮助”?-我遇到过这种效果,但很少见。 我认为通常用户会理解维护人员很忙,而问题的可能性很大。 我认为如果您使用Lodash过滤器时遇到问题,就会有一种非自愿的感觉,“我可能有问题,因为每个人都使用Lodash。” 因此,大多数人都知道,在事情上应该谨慎。
尤金(Eugene):当图书馆变得流行并且需要更多时间时,值得分享您作为贡献者的角色,并赋予其他社区成员权利吗?-这是一个好主意,通常我会在看到一个人的几个好拉请求(或者很大的情况下甚至一个拉请求)后立即授予贡献者的权利。 我认为这很好。 例如,在MobX状态树中,大多数工作现在是由其他人而不是我完成的。 在代码库的其他部分,人们比我更了解我,这一切很棒。 对于“核心” MobX,这不是必需的,因为一切都已经解决了,算法在过去几年中没有改变,因此支持工作量很小。 但是在MobX状态树的情况下,我特意选择了那些创建许多用户库并赋予他们维护者权利的人。 毕竟,如果您在日常工作中积极使用该库,则会遇到我遗漏的模式或常见问题。 而且,我认为,这也给开发人员以动力和可靠性感-因为他们可以帮助图书馆解决他们面临的问题。
尤金(Eugene):同时,没有感觉到像小孩子一样被图书馆殴打吗? 也许您不同意其他人的发展方式?-有时会发生一点。 但是我认为这很正常。 您已经对孩子进行了类比:随着时间的流逝,他们长大,成为18岁,然后您就应该放手让他们走,因为现在是他们寻找自己的道路的时候了。 我认为在某种程度上,开源库也是如此。 如果他们成功了,那么您将开始面临更加困难的情况。 您开始处理我通常不想处理的案件。 该代码将不再是我最初想要的美观,简洁和简约的代码。 这是不可避免的。
MobX有一个很好的例子:我最初是为TypeScript编写的,装饰器非常简单,然后人们开始在Babel中使用它,那里有一个完全不同的实现。 最后,代码库的某些部分非常难看,因为它们试图确定您使用的是TypeScript还是Babel。 听起来糟透了,看起来糟透了。 但这是工作的一部分。 没有必要去爱它,但是有必要确保在所有地方一切正常。 从这个意义上讲,您的孩子可以朝着您未曾想到的方向前进,但这是正常的,因为从根本上来说,人们能够成功使用该项目很重要。
尤金(Eugene):发展在变化,比10到20年前要容易得多。 您如何看待与这些变化相关的开源现状,您对未来有何期待? 大公司会刺激所有人吗?-这是一个难题。 不确定会有很大的变化。 而且,两个方向都同时发生变化。 Facebook和Microsoft给我特别深刻的印象-他们现在开放了多少,以及它们在多大程度上允许第三方开发人员做出贡献。 React Native是一个特别引人注目的示例,其中很大一部分工作不是来自Facebook。 另一方面,对于独来独往的人来说,参加开源项目或创建自己的项目可能从来没有像现在这样容易。 这些工具越来越标准化,我们拥有出色的在线IDE,例如
CodeSandbox和
Gitpod 。 最近几周,我一直在与Gitpod合作,这很棒:我什至无需在本地进行任何操作就可以检查请求请求。 您可以在浏览器中的Docker中运行并在那里进行开发。 所以我不知道会有什么变化。
Eugene:八年前,当我是C ++开发人员时,没有像现在这样的开源社区。 现在,在Web和JavaScript的世界中,我看到开源的发展越来越快。 这种增长会继续吗?-我认为运动会继续。 我认为原因之一是:公司和开发人员都越来越了解开放源代码不仅对开发或使用开放源代码的人有用,而且还有助于找到员工。 观察一个人是否参与开放源代码,您可以比整天采访他更多地了解他。 他回答问题或启动问题的方式显示了很多。 我认为开发人员和公司越来越意识到这一点的重要性。
尤金(Eugene):您认为开发开源库可以帮助进行采访吗?没错 如果您是一家公司,并且您的库没有与API紧密关联,那么这很好,因为人们会参与其中的,而且最终可能正是您需要的。 而且,如果您雇用一名供款人,则加入他们的工作将更容易,并且您将更好地了解期望的结果。 我认为,仅出于这个原因,就打开了许多有趣的东西。
德米特里(Dmitry):我们通常谈论开源,让我们继续讲MobX。 您最初是如何以及为什么开始这样做的?-好问题。 我们Mendix长期以来一直使用C#编写Windows应用程序。 几年前,我们决定将其移植到Web上,并开始弄清楚要使用哪个堆栈。 React才刚刚开始,Angular已经存在了一段时间,Ember非常受欢迎。 很快,由于它的组件模型和提议的抽象层,我们爱上了React。
但是随后我们发现我们遇到了一个性能问题,事实证明,即使在React的情况下,完全更新DOM也非常昂贵。 在C#中,我们不断更新模型并重绘整个画布,没有人优化任何东西,因为无论如何一切都非常快,因此不必“以一种智能的方式处理渲染”。 但是在这里我们发现,对于DOM,您不能仅每秒重绘60次。 因此,我们考虑了如何有效地做到这一点。 我们考虑了不可变的方法,但由于种种原因,它并不适合。 其中之一是我们处理的数据以及如何呈现它们。 在各个地方都提供了相同的信息。 我们的数据很难归一化。 其次,似乎您仍然不得不处理太多细节。 例如,您必须为要呈现的数据编写选择器。
但是,如果您想编写与我们的C#代码相同的简单代码,在此之前“渲染一些东西”,又不想为将来的变化而烦恼,该怎么办? 如果您不想对组件说:“那么,从这里获取数据的这一部分,但从那里获取数据,然后您可以渲染某些东西”? 我们开始研究当前可用的技术,并迅速得出在淘汰赛,流星以及(至少在概念上)甚至在Angular中使用的范例。 在这里您既不是数据依赖关系和组件之间的关系,也不是什么时候应该呈现的内容。
我开始理解为什么人们经常讨厌这种方法,尤其是在应用程序增长时。 事实证明,人们常常担心缺乏可预测性和“调试”,某件事可能做得太频繁,太少或顺序错误。 我决定我们可以做得更好。 我们可以为实现相同的目标而奋斗,但是要有一个更明智的实施方法。 这样就出现了MobX。 它不仅捕获了观察者和可观察对象之间的关系,而且构建了整个依赖关系图,因此您可以确保所有观察者都以最有效的顺序执行。 在反应式编程中,存在“毛刺”的概念-因此,在这里不会发生这种情况。 通常,这里采用了现有的方法,但是试图使其更具可预测性。
德米特里:就是说,如果我喜欢某种方法,但是现有的库还不够好,您可以接受并做得更好,这会变得流行吗?-是的! 因此,我最初出于内部目的编写了它,然后去了ReactEurope。 似乎是2015年,关于通量模式的讨论很多。 然后,通量战争激化了。 我感到人们为解决我们已经解决的问题投入了大量精力。
然后我想:“我需要开放。”而且有效。可能是因为它不是“另一个Flux实现”,而是完全不同的东西。它对许多人都有帮助。Eugene:MobX的最初想法很简单,但是现在有很多代码和功能。是否有一切都太复杂的感觉?-起来!我总是有一种“我想制作MobX Lite”的感觉。实际上,您可以制作MobX的类似物,将代码保持在200行之内。我什至有一份报告在哪里进行。主要的反应式算法在此实现。然后,您可以再添加几百行来适当地优化所有内容,并在各种情况下使项目更快。这就是整个MobX核心。但是我认为,四分之三的代码已经属于API级别,例如装饰器的实现。有一个主要的想法,但是围绕它的一切都是为了使该API尽可能的好。例如,在MobX 5中,与MobX 4相比,与Proxy相关的事情已经改变。德米特里:关于代理问题。到目前为止,大多数开发人员仅在某些开发工具和您的生产中使用它们。不是没有细微差别?-有时要成为第一个使用它们的项目并不容易,但是Proxy很久以前就出现了,稳定的实现大约是在四年前就出现了。仅仅一年前,它们已在所有浏览器中实现。基本的实现方式出现在Chrome 8中,但更早的使用意味着大量的开销,但现在已经发生了变化。尤金:让我们谈谈这种情况。我们记得jQuery曾经是Web开发之王的日子,然后我们没有谈论客户端的状态,而是将其存储在全局对象或其他对象中。现在,如果没有像Redux或MobX这样的有状态库,就无法创建应用程序。有什么变化?“我认为有两个答案。”一是在使用jQuery应用程序时,我们通常在客户端上没有很多地位。我的意思是,当所有状态都存储在服务器上时,jQuery通常用于添加交互性。现在,由于微服务的激增,这不是一个好习惯。但是,从jQuery迁移到基于组件的模型(例如React)的更重要原因是,它使您可以考虑独立的,独立的组件,这对于增加代码库更好。这使得创建更复杂的应用程序变得更加容易。例如,在我们的例子中,我们在前端和后端使用相同的状态定义。而且我认为状态管理为状态所做的就像React对UI所做的那样。状态管理使您可以将状态划分为更一致的模式。您可以使用独立的数据集和逻辑,在没有UI的情况下对它们进行单元测试,并更好地控制它们。尤金:您如何看待国家管理的未来?我们已经到了无可奈何的地步了吗?“我认为我们还没有联系到她。”尤其是在状态管理上关注不变的价值时。我认为“沉浸式”之所以在今年如此流行的原因之一是因为它使更新不可变状态成为JS固有的。但是我认为状态管理还有很多事情可以做。例如,大多数人使用选择器或镜头,但是在我看来,这不是很方便。我认为正在出现越来越多的方法,例如,提到GraphQL非常有趣,尽管当您需要使用本地状态时它并不十分方便。因此,我们仍有增长的空间。Eugene:您能命名一个或两个要添加到MobX的功能吗?-我想做一件事,但恐怕并不是每个人都需要它。我想使数据转换更具响应性。我的意思是:假设您有一个简单的待办事项列表,并且对其进行了过滤。例如,您的过滤器应显示所有未完成的待办事项。问题是,如果某些内容已更改,则过滤器应遍历列表中的所有待办事项元素,而只能处理已更改的元素。现在没有方便的表达方式。但是原则上,可以使数据转换比现在更具反应性。德米特里(Dmitry):欢迎流行图书馆的作者在会议上讲话和进行培训。我想问一下培训。在俄罗斯,他们不喜欢它们,为初学者考虑了一些东西。您的态度如何,在欧洲面临什么?-我真的很喜欢这些培训,我认为它们是学习的好方法。我个人喜欢通过以下两种方式之一学习:要么我坐下来阅读本书,要么参加培训。视频不适合我,它们总是太慢或太快。尽管我自己创建了一些视频课程,但我不喜欢它。当我开始习惯Docker时,我去了培训。并且由于这是一门非常实用的课程,您会立即感觉到一切工作原理,外观和应用方式。对我而言,培训不是针对“初级”的。我认为,其中最主要的是,这是掌握您尚未特别熟悉的新技术的最快方法。我认为这是主要的价值,您不会从书中得到。一本书更多地是关于全局的,您可以从中了解与您之间的关联性。但是,如果您真的想开始使用某些东西,或者正在认真考虑此选项,则培训将是最快的。在休息期间,人们会提出有关所遇到的特定困难的特定问题,或者询问在特定情况下所学知识的应用。这是培训的优势:您可以与某人交谈,提出与您的情况有关的问题。我真的相信这种掌握新技术的形式。我真的相信这种掌握新技术的形式。我真的相信这种掌握新技术的形式。: ( , ) , , Medium YouTube. ?-我认为,与培训不同,会议的主要目标不是培训。无论如何,我个人的看法是。参加会议的主要原因是获得启发。行业中正在发生的事情,人们在做什么。想要学习。网络随之而来。当您与同事开会时,请尽量不要与他们交谈太多。您已经知道了。您知道他们解决了什么问题。与随机的人交谈更有趣,例如,排队等候食物。您可以看到他们的工作,解决的问题以及他们在图书馆工作的经验,早上有人在这里谈论了这一话题。如果您有疑问,请找发言人。许多人害怕与演讲者接触,但是对于我来说,我是演讲者(而且,我认为,对于大多数其他演讲者而言)与听众进行交流只是会议的有趣部分。好吧,最好不要在上台前五分钟与我联系,但在其余时间,我会尽量保持联系。所以不要不好意思和联系。尤金:很好的建议。您将首次来到俄罗斯-您对莫斯科和会议有什么期待?-我绝对想看看莫斯科,我一定会对它感到震惊。我还注意到俄罗斯有很多MobX用户。我在跟踪器和提交中看到了这一点。因此,我希望在会议上与许多MobX用户会面。您可以在11月24日至25日于莫斯科举行的HolyJS 2018莫斯科见Michelle并向他提问。在那里,他将更多地谈论国家管理。在其网站上查看会议报告的描述。