mootools
by Preethi Kasireddy
通过Preethi Kasireddy
电线之间:MooTools贡献者访谈 (Between the Wires: An interview with MooTools contributors)
If you were doing web development in 2009, MooTools might very well not need an introduction! MooTools was a well-known JavaScript utility library for building “powerful and flexible code with its elegant, well documented, and coherent APIs”. Its core contributing team was made up of a brilliant set of developers, and we’re lucky today to be speaking with three of them:
如果您在2009年进行网络开发,那么MooTools可能不需要介绍! MooTools是一个著名JavaScript实用程序库,用于构建“强大,灵活的代码,其优雅,文档完善且连贯的API”。 它的核心贡献团队由一群出色的开发人员组成,今天我们很幸运能与其中三个人进行交谈:
Formerly core contributors to MooTools, Sebastian Markbåge, Tom Occhino and Christoph Pojer are active and vibrant contributors to the React community today.
MooTools, SebastianMarkbåge , Tom Occhino和Christoph Pojer的前核心贡献者是当今React社区的活跃而活跃的贡献者。
您能告诉我们一些关于自己以及你们每个人如何编程的知识吗? (Can you tell us a bit about yourselves and how you each got into programming?)
Sebastian: My dad used to code games for the Commodore 64, and I would watch him, and tweak them. I was only ten when I really got into programming. I started programming games and doing small lookup databases through Qbasic for MS-DOS.
塞巴斯蒂安:我父亲曾经为Commodore 64编写游戏代码,我会看着他并对其进行调整。 当我真正地编程时,我才十岁。 我开始通过Qbasic为MS-DOS编写游戏程序并进行小型查找数据库。
Tom: When I first got a computer I was running Windows 3.1, and then Windows 95. I became obsessed with re-skinning windows. I wanted my computer to look different, so I figured out how to resource hack, and change the images. I started with MS Paint and made the buttons different colors. Then, there was this program called WindowBlinds that got me into creating my own skins. Eventually, I discovered HTML. It was so much easier, and better.
汤姆:当我第一次拥有计算机时,我先运行Windows 3.1,然后运行Windows95。我迷上了重新设置外观的Windows。 我希望计算机看起来与众不同,因此我想出了如何进行资源破解和更改图像。 我从MS Paint开始,使按钮具有不同的颜色。 然后,有一个名为WindowBlinds的程序使我能够创建自己的皮肤。 最终,我发现了HTML。 这是如此容易和更好。
Christoph: So, I started programming when I was about 12 trying to learn how to make websites. And then, I think when I was 14 or so, when a friend in middle school was playing a game online and I bet him that I could make it, and make it better. After that, I spent basically every day for four weeks building an online game. It was motivating, building small games that a bunch of people played afterwards.
Christoph:所以,我12岁时就开始编程,试图学习如何制作网站。 然后,我想我14岁左右的时候,当一个中学时代的朋友在网上玩游戏时,我打赌他会做得更好 ,并且做得更好 。 在那之后,我基本上每天都花四个星期来制作网络游戏。 这很刺激,制作了很多人随后玩的小游戏。
有趣! 游戏似乎是这里的主题,特别是对于那些早日参与编程的人。 (Interesting! Games seem to be the theme here, especially for people who got into programming early.)
Tom: Yeah. You had to edit HTML in a Notepad and make a .html
file. There was no syntax highlighting or anything like that. I didn’t know what valid markup was until Netscape came out in the 1990s, like 1997.
汤姆:是的。 您必须在记事本中编辑HTML并制作一个.html
文件。 没有语法突出显示或类似的东西。 在Netscape于1990年代(如1997年)问世之前,我不知道什么是有效的标记。
Christoph: Exactly! I made websites and someone told me that a website I made didn’t work in Firefox. I didn’t even know what Firefox was. That was 2001.
克里斯托夫:是的 ! 我创建了网站,有人告诉我,我创建的网站在Firefox中不起作用。 我什至不知道Firefox是什么。 那是2001年。
Tom: I think it was probably ’98 for me if I had to guess because I was 13. It seems like it was earlier.
汤姆:我认为如果我13岁的时候我不得不猜测,那大概是98年。
Sebastian: Yeah, ’93 is when I started. I started withNetscape 2 I think. CSS didn’t exist at all. HTML existed, but JavaScript was not on the scene yet, so you couldn’t actually program much on the client. You had to do everything server-side. Everything was Perl and CGI.
塞巴斯蒂安:是的,'93是我刚开始的时候。 我以Netscape 2开始。 CSS根本不存在。 HTML存在,但是JavaScript还没有出现,因此您实际上不能在客户端上进行太多编程。 您必须在服务器端做所有事情。 一切都是Perl和CGI。
Tom: You’re a dinosaur. ?
汤姆:你是恐龙。 ?
回到起源,您知道Valerio为什么启动MooTools,以及它是如何启动的吗? (Going back to the origin, do you know why Valerio started MooTools, and how it got started?)
Tom: Valerio always gets frustrated when he sees something that can be done better. He was using Prototype, and more specifically, script.aculo.us. There was a common issue where if you created a click event handler to start an animation, and you clicked it twice, it would start the animation over — basically firing off new animations every time without the ability to choose to either resume, enqueue another, or replace.
汤姆:瓦雷里奥(Valerio)看到可以做得更好的事情时,总是感到沮丧。 他使用的是Prototype,更具体地说是script.aculo.us 。 常见的问题是,如果您创建了一个单击事件处理程序来启动动画,然后单击了两次,它将重新开始动画-基本上每次都触发新的动画,而无法选择继续播放,入队,或更换。
It actually wasn’t MooTools that he was creating at first. His whole premise for Moo.fx was just to be able to retain this instance, and be able to do something better than what Script.aculo.us was doing by default. Prototype was pretty big at the time, so he created prototype.lite.js
, which was basically just the class system plus a couple of utilities. Eventually, he built Moo.fx on top of that. It must still exist somewhere today, but that’s how it was born. From Moo.fx, there was a foundation for an alternative — Prototype plus Script.aculo.us — which became MooTools.
刚开始创建的实际上不是MooTools。 他对Moo.fx的整个前提只是能够保留该实例,并且能够做得比Script.aculo.us默认情况下要好。 当时Prototype很大,所以他创建了prototype.lite.js
,它基本上只是类系统和几个实用程序。 最终,他在此基础上构建了Moo.fx。 它今天仍然必须存在于某个地方,但这就是它的诞生方式。 从Moo.fx开始,就有了替代方案的基础-Prototype加上Script.aculo.us-成为MooTools 。
你们每个人如何开始为MooTools做贡献? (How did each of you start contributing to MooTools?)
Tom: I was creating a photo album app for a photography studio, and we needed a way to sort the photos. At the time, MySpace had a top eight grid. They implemented it as a one-off, and we wanted to build better support for that.
汤姆:我正在为一家摄影工作室创建一个相册应用程序,我们需要一种对照片进行排序的方法。 当时, MySpace排名前八。 他们将其作为一次性实施,我们希望为此提供更好的支持。
Script.aculo.us had something similar built in, but I basically expanded MooTools’ drag and drop library, and created Sortable.js. I showed it to Valerio, and he decided it should be in the core of MooTools.
Script.aculo.us具有类似的内置功能,但我基本上扩展了MooTools的拖放库,并创建了Sortable.js 。 我向Valerio展示了它,他决定将它放在MooTools的核心中。
Interviewer: How old were you? Since there was no Github back then, how did you even get to the repo?
访者:您几岁? 既然那时还没有Github,那么您是如何到达仓库的呢?
Christoph: We used Trac and Subversion.
Christoph:我们使用了Trac和Subversion 。
Tom: Gaining access to Trac and Subversion was a big deal. When Valerio asked me to contribute, there were no code reviews. You just checked it in.
汤姆:获得Trac和Subversion的权限很大。 当Valerio邀请我做出贡献时,没有代码审查。 您刚刚签入。
Christoph: I had a similar experience as Valerio. I didn’t like Prototype and script.aculo.us. I saw Moo.Fx and then MooTools come out. It was in September of 2006 — I was 16 or 17.
克里斯托夫:我和瓦雷里奥有相似的经历。 我不喜欢Prototype和script.aculo.us。 我看到了Moo.Fx,然后出现了MooTools。 那是2006年9月-我16岁或17岁。
I was in my prime teenage years and I was kind of a rebel. I wanted my code to be perfect, and MooTools was just written so perfectly. It was so small but did everything I ever wanted. I was very idealistic.
我那时正处于青春期,我有点反叛。 我希望我的代码是完美的,而MooTools编写得是如此完美。 它很小,但是可以做我想做的所有事情。 我非常理想。
Tom: Do you remember what your first contributions were? I don’t really remember.
汤姆:你还记得你的第一笔捐款吗? 我真的不记得了
Christoph: I started using it in early 2006 for games. I literally built a German version of Facebook for my friends, even though I didn’t know what Facebook or MySpace were. Then I built some other games with it. I wasn’t contributing much.
Christoph:我从2006年初开始在游戏中使用它。 即使我不知道Facebook或MySpace是什么,我还是为朋友们建立了德语版的Facebook 。 然后我用它制作了一些其他游戏。 我贡献不大。
I didn’t know English very well, but was trying to learn. I became a core contributor in 2009, almost at the exact time Tom was hired by Facebook. He basically told us to take over after that. That’s when I started contributing to the core, and then we started doing a hackathon in London, where we met up once a year. That was pretty cool.
我不太会英语,但正在尝试学习。 2009年,几乎在汤姆被Facebook聘用的那一刻,我成为了核心贡献者。 他基本上告诉我们在那之后接管。 从那时起,我开始为核心项目做贡献,然后我们开始在伦敦举行一次黑客马拉松,每年我们在这里聚会一次。 太酷了。
Sebastian: I came in around the same time as Christoph, but my experience was different. It happened during my second pass into JavaScript. I started with JavaScript in the late ’90s, when it was pretty much useless. Then it had a resurgence around 2005 and I started moving back to the client after having spent five years on the server only. I was looking at all the frameworks, and I needed more help. I wanted to understand more, and MooTools helped me learn how the language worked. It was written in a very clean way, you could study the codebase itself, but I was frustrated with some of the details. Unlike these guys, I was actually building pretty complex apps at the time. I was building this complex WYSIWYG editor.
塞巴斯蒂安(Sebastian):我和克里斯多夫(Christoph)大约在同一时间进来,但是我的经历却不同。 这是在我第二次进入JavaScript期间发生的。 我在90年代后期开始使用JavaScript,当时它几乎没有用。 然后在2005年左右重新兴起,在仅在服务器上使用了五年之后,我开始重新回到客户端。 我正在查看所有框架,需要更多帮助。 我想了解更多,MooTools帮助我学习了该语言的工作方式。 它是用非常干净的方式编写的,您可以研究代码库本身,但是我对某些细节感到沮丧。 与这些家伙不同,我当时实际上在构建非常复杂的应用程序。 我正在构建这个复杂的所见即所得编辑器。
Tom: I was building a CMS. It wasn’t that trivial, come on.
汤姆:我正在建立一个CMS。 并不是那么简单,来吧。
Sebastian: I made a rant on the public mailing list. There were two mailing lists — a private internal list, only for developers, and the public one. On the public list, there was the guy named Aaron Newton, and he was kind of the dad of MooTools. He was the adult because he was actually building startups at the time, and was trying to create a community because he understood the value in that. He spent a lot of time in the public forums helping newcomers, and bringing them into the inner circle. I made these long rants on the public mailing list, and he invited me into the closed circle.
塞巴斯蒂安:我在公开邮件清单上大声疾呼。 有两个邮件列表-一个仅供开发人员使用的私有内部列表,和一个供内部开发人员使用的公共列表。 在公开名单上,有一个叫Aaron Newton的人,他是MooTools的父亲。 他之所以成年,是因为他当时实际上在创办初创公司,并试图创建一个社区,因为他了解其中的价值。 他在公共论坛上花费了大量时间来帮助新移民,并使他们进入内部圈子。 我在公共邮件列表上做了这些长篇大论,他邀请我加入这个封闭的圈子。
Tom: I think we all started out on the forums. The first step was getting moderator rights on forums — to be able to close topics and answer questions authoritatively. We had little icons next to our names indicating we were moderators. My first contact with Valerio was when he reached out to thank me for helping out with the forums. From that point on, I started contributing to the code.
汤姆:我想我们都是从论坛开始的。 第一步是获得论坛主持人的权利-能够关闭主题并权威地回答问题。 我们的名字旁边有几个小图标,表示我们是主持人。 我与Valerio的第一次接触是他伸出手来感谢我为论坛提供的帮助。 从那时起,我开始为代码做贡献。
Christoph: That’s funny because I still have that email. My first interaction with Valerio was not actually about MooTools itself. He had built this bundler or compression thing that I really needed, and there wasn’t really anything else like it. We used to just ship like 30 JavaScript files, and this MooTools website had this bundler where you could concat your files together.
克里斯托夫:这很有趣,因为我仍然收到那封电子邮件。 我与Valerio的第一次互动实际上与MooTools本身无关。 他构建了我真正需要的捆绑程序或压缩程序,实际上没有其他类似的东西。 我们过去通常只发送30个JavaScript文件,而MooTools网站上有这个捆绑器,您可以在其中捆绑文件。
“The MooTools builder. So before its time.”
“ MooTools构建器。 所以在它的时间之前。”
Tom: So before its time, man, the MooTools builder. So before its time. You selected the things you wanted, and it created a customized script for you. You would just save the file and put it on your web server. It was amazing.
汤姆:所以在此之前,伙计,MooTools的构建者。 所以在它的时间之前。 您选择了想要的东西,它为您创建了一个自定义脚本。 您只需要保存文件并将其放在Web服务器上即可。 这是惊人的。
Sebastian: It was ingenious because there was no common JS.
Sebastian:之所以精巧是因为没有通用的JS。
Tom: There was no nothing. It was all globals.
汤姆:一无所有。 都是全球性的。
Sebastian: There was no way to tell from anyone’s codebase what modules were required, so you had to check it yourself, but because it was just a website, you could do that easily without trying to get a standard around it.
Sebastian:无法从任何人的代码库中得知需要什么模块,因此您必须自己检查它,但是由于它只是一个网站,因此您可以轻松地做到这一点而无需尝试制定一个标准。
MooTools周围拥有如此独特而令人难忘的品牌。 最初使它脱颖而出的一些核心价值观是什么?为什么您认为人们今天对它如此积极地记忆犹新? (MooTools has such a distinct and memorable brand around it. What were some of its core values that made it stand out initially, and why do you think people remember it so positively today?)
Sebastian: We valued the readability of the codebase a lot, because that’s how we learned.
Sebastian:我们非常重视代码库的可读性,因为这是我们学习的方法。
We saw jQuery as the opposite, where everything was inline. There were no reusable abstractions, and they tried to support every use case there was. Ultimately that made the code more difficult to understand and maintain. That’s why we chose not to support as many use cases.
我们认为jQuery相反,所有内容都是内联的。 没有可重用的抽象,并且他们尝试支持存在的每个用例。 最终,这使得代码更难以理解和维护。 这就是为什么我们选择不支持那么多用例。
Christoph: It was interesting because we were all very like-minded. We were building something great, but we didn’t do any outreach. We attended maybe 3–5 conferences over the course of seven years. We didn’t really build it for other people. We were trying to build the perfect framework, something that we could use. It might not be the best way to grow an open source project, but we were just our own little community trying to build something perfect.
Christoph:这很有趣,因为我们所有人的志趣相投。 我们正在建设一些很棒的东西,但是我们没有做任何推广。 在七年的时间里,我们参加了3-5次会议。 我们并没有真正为其他人构建它。 我们正在尝试构建一个可以使用的完美框架。 这可能不是发展开源项目的最佳方法,但是我们只是我们自己的一个小社区,试图构建一些完美的东西。
Sebastian: There was also the chaining. The chaining was very explicit, and everything was designed around readability and grammar — the chaining should mimic an English sentence.
塞巴斯蒂安:也有连锁店。 链接非常明确,所有内容都围绕可读性和语法设计的-链接应模仿英语句子。
Tom: We constantly iterated to refine and improve the API. One of the guiding principles was that code built on top of MooTools should be readable, easy to understand and easy to extend. We had a very strict style guide in our heads that we all followed. It was almost academic in a sense.
汤姆:我们不断地反复完善和改进API。 指导原则之一是,基于MooTools构建的代码应可读,易懂且易于扩展。 我们所有人都遵循了非常严格的风格指南。 从某种意义上说,这几乎是学术性的。
Christoph: I think academic is a really good description. We were so focused on the API design, rather than building something that people could actually use and adopt.
Christoph:我认为学术是一个很好的描述。 我们非常关注API设计,而不是构建人们可以实际使用和采用的东西。
您认为在使用MooTools时学到的最有影响力或最重要的东西是什么? (What do you think was the most impactful or important thing that you learned while working on MooTools?)
Sebastian: Collaboration, like we said, is really important to create a very tight team — one that shares the same values in terms of how you write code and what you should prioritize. That’s one thing we mastered that allowed us to move forward.
塞巴斯蒂安:正如我们所说,协作对于建立一个非常紧密的团队非常重要-在代码编写方式和优先次序方面,团队具有相同的价值观。 这是我们掌握的一件事,可以使我们向前迈进。
On the other hand, pragmatism is something we didn’t do well, but we’ve since learned.
另一方面,实用主义是我们做得不好的事情,但是我们从中学到了。
Christoph: For me, because it was the first open source project I worked on, I learned a lot about being involved in the community and working on open source. That experience can burn you out. People hate on you for making changes to the API that they don’t understand, or you have to deal with people questioning you all the time. But, getting to know the community, meeting people I worked with everyday, that was one of the best things for me.
Christoph:对我来说,因为这是我从事的第一个开源项目,所以我学到了很多有关社区参与和从事开源工作的知识。 那种经历会使你筋疲力尽。 人们讨厌您对他们不了解的API进行更改,或者您不得不一直与质疑您的人打交道。 但是,了解社区,结识我每天与之共事的人,对我而言,这是最好的事情之一。
Tom: For me, learning JavaScript was huge. There was a ton of experimentation, trying to solve problems in a cross-browser way, and I felt like I almost carried too much weight about cross-browser incompatibilities. I feel like I really learned JavaScript and functional programming concepts in a way that I couldn’t in school.
汤姆:对我来说,学习JavaScript非常重要。 有大量的实验,试图以跨浏览器的方式解决问题,我觉得我对跨浏览器的不兼容性几乎承担了太多的责任。 我觉得我真的以一种在学校无法学习的方式学习了JavaScript和函数式编程概念。
Sebastian: I think that’s a really underestimated point in the last decade. There was a growing community of kids like us with no prior experience, and we got hired because we could solve real business problems using JavaScript. JavaScript was looked down on in the beginning, and had stagnated, and had performance problems, but it let us build something productive.
塞巴斯蒂安:我认为这在过去十年中确实被低估了。 像我们这样的儿童社区正在不断壮大,他们之前没有任何经验,而我们之所以被录用,是因为我们可以使用JavaScript解决实际的业务问题。 JavaScript从一开始就被看不起,停滞不前,并存在性能问题,但它使我们能够提高生产力。
Meanwhile, there were a lot of academic projects — the common wisdom was that they were going to succeed. That these business tools backed by big enterprises were going to replace JavaScript. But that’s not quite what happened. It goes to show, you have to pay attention to what people are drawn to. They’re drawn to it for a reason.
同时,有许多学术项目–共同的想法是它们将成功。 大型企业支持的这些业务工具将取代JavaScript。 但这不是完全发生的事情。 它表明,您必须注意吸引人们的东西。 他们被吸引是有原因的。
MooTools可能也是您最早的大型开源贡献和项目之一。 您怎么说对您的职业有影响? (MooTools was probably one of your first large open source contributions and projects as well. How would you say it impacted your career?)
Tom: For me, it was pretty easy, actually. Somebody was organizing a conference in the Netherlands called Fronteers and they used and loved MooTools. So they reached out to Valerio to see if he would speak about MooTools and object-oriented JavaScript. Valerio referred them to me. I was pretty young, in my early 20s, and I had never spoken at a conference. I didn’t really know what I was talking about. I thank my lucky stars everyday that it wasn’t recorded because it was so embarrassing. As a result, though, a recruiter from Facebook contacted me, and said they were trying to do more with JavaScript and asked me to come in for an interview.
汤姆:对我来说,这很容易。 有人在荷兰组织了一个名为Fronteers的会议,他们使用并喜欢MooTools。 因此,他们联系了Valerio,看看他是否会谈论MooTools和面向对象JavaScript。 瓦莱里奥将他们介绍给我。 我在20多岁的时候还很年轻,而且从未在会议上发表过讲话。 我真的不知道我在说什么。 我每天都要感谢幸运星,因为它太尴尬了,所以没有录制。 结果,尽管如此,来自Facebook的一名招聘人员联系了我,并说他们正在尝试使用JavaScript进行更多工作,并请我参加面试。
Christoph: My story is pretty similar to Tom’s. I also did a public talk. It was really difficult because while I was used to public speaking, I was not used to public speaking in English in a foreign country. I was not as lucky as Tom, my talk is still online. I used to have a really heavy, Austrian, Arnold-Schwarzenegger-like accent.
克里斯多夫:我的故事和汤姆的故事很相似。 我也进行了公开演讲 。 这真的很困难,因为在我习惯于公开演讲的同时,我并不习惯在国外用英语公开演讲。 我没有汤姆那么幸运,我的演讲还在网上。 我曾经有一种非常沉重的奥地利式Arnold-Schwarzenegger风格的口音。
After the talk, a Facebook recruiter reached out, and I ended up doing an internship at Facebook. Tom was actually my intern manager, so that worked out pretty well. Then, I had to go back to University and finish my degree before I could join Facebook full-time. By the time I came back, there were all these MooTools people like Sebastian working full-time at Facebook.
谈话后,一名Facebook招聘人员伸出援手,我最终在Facebook实习。 汤姆实际上是我的实习经理,所以工作得很好。 然后,我必须回到大学并完成学位,然后才能全职加入Facebook。 到我回来的时候,像Sebastian这样的MooTools所有人都在Facebook专职工作。
Sebastian: I was working in Europe. Thomas Aylott was at Cloudera and then worked at Sencha in the Bay Area. He started talking to me about moving out here. At the time, I didn’t wanted to move to California, especially not the Bay Area. But, another MooTools guy referred me to Apple, so I interviewed there. I didn’t really like the attitude of the company. I honestly didn’t think I would move out here at all. Finally, though, Aylott left Sencha and started working for Facebook. After that, he referred me again, so I finally flew out, interviewed, and it had a different vibe. All my MooTools friends were there, so I decided to jump in.
塞巴斯蒂安:我在欧洲工作。 托马斯·艾洛特(Thomas Aylott)曾在Cloudera工作,然后在湾区的Sencha工作。 他开始跟我谈论搬到这里。 当时,我不想搬到加利福尼亚州,尤其是不要搬到湾区。 但是,另一个MooTools家伙把我引到了苹果公司,所以我在那里接受了采访。 我不太喜欢公司的态度。 老实说,我认为我根本不会搬出去。 最终,艾洛特(Aylott)离开了Sencha,开始为Facebook工作。 之后,他再次转介了我,所以我终于飞了出去,接受了采访,而且气氛有所不同。 我所有的MooTools朋友都在那里,所以我决定加入。
Tom: People didn’t understand why I would want to work at Facebook. I had to convince them that we were doing interesting stuff. After a while that was part of what fueled our resurgence into the front-end, open source world. We wanted to share some of the stuff that we were thinking about and working on. Even after 2011, we were still seen as a PHP company. Hack didn’t come around until 2013.
汤姆:人们不理解我为什么要在Facebook工作。 我必须说服他们我们正在做有趣的事情。 一段时间之后,这就是促使我们重新进入前端开放源代码世界的一部分。 我们想分享一些我们正在考虑和研究的东西。 即使在2011年之后,我们仍然被视为一家PHP公司。 哈克直到2013年才出现。
Christoph: People actually thought we didn’t know JavaScript.
Christoph:人们实际上认为我们不了解JavaScript。
Tom: It’s funny because all of the problems we were solving back then, became the top of our minds two, three years later. Systems like Bootloader and Primer. Primer was the precursor to progressive web apps, and Bootloader was a precursor to bundle splitting. People were solving very different problems than what we were solving at that time.
汤姆:很好笑,因为我们当时解决的所有问题在两年,三年后成为我们的首要考虑。 诸如Bootloader和Primer之类的系统。 Primer是渐进式Web应用程序的先驱,而Bootloader是捆绑包拆分的先驱。 人们解决的问题与我们当时解决的问题截然不同。
您能谈谈MooTools 2吗? (Can you talk about MooTools 2?)
Christoph: Oh, man.
克里斯托夫:哦,伙计。
Sebastian: MooTools 2 was a rewrite that was supposed to be even cleaner.
塞巴斯蒂安: MooTools 2是重写,本来应该更干净。
Sebastian: I think the problem it created was that it tried to be so clean that everything had an abstraction associated with it. I think that influenced my JSConf EU talk about avoiding abstraction. Eventually it reaches a point where nobody can understand it.
塞巴斯蒂安:我认为它造成的问题是它试图变得如此干净,以至于所有东西都与之相关。 我认为这影响了我的JSConf EU关于避免抽象的讨论 。 最终,它达到了没人能理解的地步。
Tom: In hindsight, it seems so not practical.
汤姆:事后看来,这似乎不切实际。
Christoph: It’s funny you refer to it as MooTools 2. That was actually something that was never attainable. It was always a hypothetical, aspirational goal — the actual, perfect, end-state of MooTools. MooTools 2 was basically shipped as 1.2, which broke everything.
Christoph:将其称为MooTools 2很有趣。这实际上是无法实现的。 这始终是一个假想的目标,即MooTools的实际,完美,最终状态。 MooTools 2基本上以1.2发行,这打破了一切。
Sebastian: That’s how we learned the importance of upgrade paths.
塞巴斯蒂安:这就是我们了解升级途径的重要性的方式。
“Incidentally, we were just idealists building a framework in a vacuum. We learned a lot from that, and we applied a lot of what we learned to React development.”
“顺便说一句,我们只是理想主义者,是在真空中构建框架。 我们从中学到了很多,我们将学到的很多知识应用到了React开发中。”
Tom: That’s actually why React today is so incremental, and why every single release provides steps detailing how you got from the last one to this one. Create React App has instructions for upgrading from a previous version, because we didn’t provide a set back then, and it was a nightmare for everyone that used the framework. Incidentally, we were just idealists building a framework in a vacuum. We learned a lot from that, and we applied a lot of what we learned to React development.
汤姆:这实际上就是为什么今天的React如此增量,以及为什么每个发行版都提供详细说明从上一个发行版到该发行版的步骤的原因。 Create React App包含从先前版本进行升级的说明,因为当时我们没有提供任何更新,这对于使用该框架的每个人来说都是一场噩梦。 顺便说一句,我们只是理想主义者,是在真空中构建框架。 我们从中学到了很多,我们将学到的很多知识应用到了React开发中。
Christoph: That’s maybe the takeaway. MooTools definitely taught us a ton of lessons that now help us with projects like React or whatever else we work on in open source.
克里斯托夫:也许就是外卖。 MooTools无疑给了我们很多教训,现在可以帮助我们完成诸如React之类的项目或我们在开源领域从事的其他任何项目。
您是否认为您从MooTools中学到的知识是开源在Facebook上如此成功的原因之一? (Do you think that your learnings from MooTools is one of the reasons why open source has been so successful at Facebook?)
Tom: Yeah, I started this project called Project Perception. I wanted to change the perception of Facebook in the front-end community, by talking more openly about what we were doing. James Pearce joined Facebook around that time, and started managing an open source team to work on it. We’ve been collaborating ever since.
汤姆:是的,我开始了这个名为Project Perception的项目。 我想通过更公开地谈论我们在做什么来改变前端社区中对Facebook的看法。 詹姆斯·皮尔斯(James Pearce)大约在那个时候加入了Facebook,并开始管理一个开源团队来进行工作。 从那时起我们一直在合作。
Then, Jordan Walke handed us React. It was the solution to our problem. It was a very different way of building web apps.
然后, 乔丹·沃克向我们递了React。 这是解决我们问题的方法。 这是构建Web应用程序的非常不同的方式。
Sebastian: Open source also helps you be intellectually honest with yourself. If you’re putting ideas out there, people will find flaws, they will have other ideas. You can’t just say there are better solutions internally. You can compare it to other solutions in the ecosystem. It forces you to be honest with yourself, and it helps the company as well.
塞巴斯蒂安:开源还可以帮助您在理智上诚实。 如果您将想法放在那里,人们会发现缺陷,他们会有其他想法。 您不能只是说内部有更好的解决方案。 您可以将其与生态系统中的其他解决方案进行比较。 它迫使您对自己诚实,对公司也有帮助。
Tom: There was actually a lot of push back against open sourcing React. Many could enumerate the costs, but they didn’t really understand the benefits. Even if we tried to sell recruiting as a benefit, it was always an intangible, immeasurable thing. I don’t think we took into account that we would have the ability to push the entire industry forward — to watch the ideas and concepts from React bleed into other frameworks.
汤姆:实际上有很多反对开源React的措施。 许多人可以列举成本,但是他们并不真正了解收益。 即使我们试图出售招聘以谋取利益,也始终是无形的,无法衡量的事情。 我认为我们没有考虑到我们有能力推动整个行业向前发展—观察从React渗入其他框架的想法和概念。
I don’t think React was directly competing with any other JavaScript library at the time. I think it was competing with a traditional way of building user interfaces. For some reason like twenty years ago games went one way with immediate mode rendering and functional programming, and apps went the other way with imperative, object oriented programming. Then we were starting to see, like with React, a shift back to the direction of declarative, asynchronous, functional programming, and now, every framework, every view system on every platform has taken these ideas into account. I think we’ll start to see that more and more, over time.
我不认为React在当时与任何其他JavaScript库直接竞争。 我认为它正在与构建用户界面的传统方式竞争。 由于某种原因,例如20年前,游戏采用即时模式渲染和功能编程的一种方式,而应用程序则采用命令式,面向对象的编程的方式。 然后我们开始像React一样开始转向声明性,异步,函数式编程的方向,现在,每个框架,每个平台上的每个视图系统都考虑了这些想法。 我认为随着时间的流逝,我们将开始越来越多地看到这一点。
Christoph: It’s also tied back to MooTools, it was something we learned the hard way. The downfall of MooTools if you want to call it that, was because we didn’t collaborate with many people outside of our team. In jQuery they adopted some of our animation code, and we were actually offended by it. Even though it was open source, we thought we knew how to build the perfect system by ourselves. I think the benefit of open sourcing a project, is that it starts with a level of competition, and eventually leads to collaboration.
Christoph:它也与MooTools息息相关,这是我们很难学到的东西。 如果您想这样称呼MooTools,那是因为我们没有与团队以外的许多人合作。 在jQuery中,他们采用了一些动画代码,而实际上我们对此感到恼火。 尽管它是开源的,但我们认为我们知道如何自己构建完美的系统。 我认为将项目开源的好处是,它从竞争的水平开始,最终导致协作。
与MooTools相比,或者与今天相比,您最初对开放源代码的体验发生了什么变化? (Compared to MooTools, or just your experience with open source initially compared to today, what’s changed?)
Sebastian: I’ve been on the outskirts of a couple of open source communities, and I think there’s a lot of varied management structures. With React, we foster certain people we can trust to stick around by working closely with them. It’s mainly driven by a core team rather than RFCs for example.
塞巴斯蒂安:我去过几个开源社区的郊区,我认为这里有很多不同的管理结构。 借助React,我们可以培养可以信任的某些人,他们可以与他们紧密合作。 例如,它主要由核心团队而非RFC推动。
But, it’s a process we’re constantly evaluating, like looking at how Ember does it with RFCs.
但是,这是我们不断评估的过程,就像查看Ember如何使用RFC一样 。
Tom: I think we all really like Ember’s RFC process. We talk about it internally all the time, and we’ve applied it to the GraphQL project and a few other projects.
汤姆:我认为我们所有人都非常喜欢Ember的RFC流程。 我们一直在内部谈论它,并将其应用于GraphQL项目和其他一些项目。
Christoph: Yarn as well.
克里斯多夫:纱线也一样。
Tom: Also, for MooTools, funding was handled on our own. With React it’s different because Facebook is relying heavily on React. We have something like 36,000 React components checked into our codebase, and we’re supporting dozens of existing app in production. We can’t just make huge, sweeping changes like MooTools 2. We have to think about things incrementally. We have to think about upgrade paths.
汤姆:另外,对于MooTools,资金是由我们自己处理的。 与React有所不同,因为Facebook高度依赖React。 我们已经在代码库中签入了大约36,000个React组件,并且我们正在支持数十个现有应用程序的生产。 我们不能像MooTools 2那样进行巨大的,彻底的更改。我们必须逐步考虑问题。 我们必须考虑升级路径。
You can be somewhat assured that if React continues to work well for us, it will continue to work well for you. We have to upgrade ourselves at the same time as you. If we stop using it, if we stop investing in it, you’re going to know early on, and we’re going to have to have a path forward. It’s a bit of a security blanket.
您可以放心,如果React继续为我们服务,那么它将继续为您服务。 我们必须与您同时升级自己。 如果我们停止使用它,如果我们停止对其进行投资,您将早日知道,并且我们将必须走一条路。 这有点安全毯。
Sebastian: With MooTools, a lot of big companies relied on it, but we weren’t working for them. People kept contributing to the older versions because they couldn’t upgrade — there was no sane upgrade path at the time. So I think now, we’re hesitant of being a fork in the ecosystem. We see it over and over in open source, everyone has to work together because otherwise you create a much smaller, bifurcating ecosystem.
塞巴斯蒂安:有了MooTools,许多大公司都依赖它,但我们并没有为此而努力。 人们一直在为旧版本做出贡献,因为它们无法升级-当时没有明智的升级途径。 所以我想现在,我们犹豫要不要成为生态系统中的一个分支。 我们在开源中一遍又一遍地看到它,每个人都必须一起工作,因为否则您将创建一个更小,分叉的生态系统。
从贡献者的角度来看呢? 您觉得这更容易或更困难吗? (What about from the contributor point of view? Do you feel it’s any easier or more difficult?)
Christoph: There is still, for every project, one person associated with it. The creator. On Twitter, they always refer to that one person. I feel like that’s what burns people out. The only reason these projects are so great is because there’s a whole team of people contributing to it, not just one person. As the one person though, there are still a lot of people who will attack you, or create issues that are difficult if not impossible to deal with. I feel like that hasn’t changed. I honestly also just wish people were nicer in general. That’s something that is difficult to deal with. Maybe that’s just me putting so much of my heart into this open source project.
Christoph:对于每个项目,仍然有一个人与之相关。 创作者。 在Twitter上,他们总是提到那个人。 我觉得那是让人们筋疲力尽的原因。 这些项目之所以如此出色,唯一的原因是因为有整个团队的人为之贡献,而不仅仅是一个人。 但是,作为一个人,仍然有很多人会攻击您,或者制造出难以解决甚至无法解决的问题。 我觉得那没有改变。 老实说,我也希望人们总体上变得更好。 那是很难处理的。 也许仅仅是我在这个开源项目中投入了很多心血。
“…you can’t take the emotion out of open source because open source, and this community, is driven by passion, it is a lot of emotion.”
“……您不能将情感从开源中带走,因为开源和这个社区是由激情驱动的,这是很多情感。”
Sebastian: I think Dan Abramov put it best when he said, you can’t take the emotion out of open source because open source, and this community, is driven by passion, it is a lot of emotion. My biggest recommendation to those just starting out in open source is to not be tricked by the founder status. Start out by making yourself replaceable. You’re building an ecosystem, it should be able to function without you, otherwise you’ll burn out. That’s one thing John Resig did really well. He was able to grow jQuery to the point where he wasn’t contributing much.
塞巴斯蒂安:我想丹·阿布拉莫夫(Dan Abramov)说得最好,因为开放源代码和这个社区是由激情驱动的,这是很多情感,所以你不能从开放源代码中摆脱情感。 对于刚开始使用开源软件的人,我最大的建议是不要被创始人的身份所欺骗。 首先,使自己变得可替换。 您正在建立一个生态系统,它应该能够在没有您的情况下发挥作用,否则您将筋疲力尽。 这是约翰·雷西格(John Resig)确实做得很好的一件事。 他能够将jQuery增长到自己贡献不大的地步。
Tom: jQuery, in my opinion, did significantly better than MooTools in this regard, and better than React is currently doing. There were so many core contributors to jQuery that all could have taken it in the right direction for the long haul. That’s why I think it’s still so prevalent. Most websites still have jQuery, and it’s still the go-to for all the cross-browser issues.
汤姆:在我看来,jQuery在这方面的表现明显优于MooTools,并且比React目前的表现还要好。 jQuery的核心贡献者如此之多,以至于所有人都能长期朝着正确的方向发展。 这就是为什么我认为它仍然如此普遍。 大多数网站仍然使用jQuery,它仍然是所有跨浏览器问题的首选。
As far as the emotional side, you have to be able to separate yourself. Separate yourself from the feedback, and from the community, so you can actually do the work. Dan Abramov does this the best. Any time there is any angst, or anger, or negativity, he just combats it with vicious niceness. He’s just so overwhelmingly nice that he wants to get to the root of why you feel a certain way. He has thicker skin than most, certainly thicker than mine.
就情感方面而言,您必须能够与众不同。 将您自己与反馈和社区分开,这样您就可以真正地完成工作。 丹·阿布拉莫夫(Dan Abramov)做到最好。 任何时候只要有焦虑,愤怒或消极情绪,他都会以恶毒的善良与之抗争。 他是如此的压倒性很好,以至于他想知道为什么你有某种感觉。 他的皮肤比大多数人都厚,当然比我的还要厚。
“Separate yourself from the feedback, and from the community, so you can actually do the work.”
“将自己与反馈以及社区分开,这样您就可以真正地完成工作。”
Christoph: This has totally turned into a group therapy session. Thank you for that.
克里斯托夫:这完全变成了集体疗法。 谢谢你
对于可能需要一年编程或两年编程而现在才刚刚进入开源的人,您会给他们什么建议? (For someone who is maybe a year into programming, or two years into programming, and they’re just getting into open source today, what is one piece of advice you’d give to them?)
Tom: Everyone feels intimidated when they first approach a project. They don’t know how they can help, but they want to be involved. All you need to do is ask how you can help, and find the project.
汤姆:每个人在初次接触项目时都会感到害怕。 他们不知道如何提供帮助,但他们希望参与其中。 您需要做的就是询问如何提供帮助并找到项目。
Find something that’s a burden for the maintainers. It can be something simple, like closing out duplicate issues, or responding to questions, or helping to prioritize items. Don’t show up wanting to rewrite everything. Just stay humble, and start small.
找到对维护者来说是负担的东西。 它可以很简单,例如解决重复的问题,回答问题或帮助确定项目的优先级。 不要露面想重写所有内容。 保持谦虚,从小做起。
Sebastian: Don’t get discouraged.
塞巴斯蒂安:不要气disc。
Tom: Yeah, don’t get discouraged.
汤姆:是的,不要气disc。
“Always know that maintainers and core teams see almost everything and will remember you. You’re not invisible, so the more you keep contributing, even if they never respond to your issue, they’ll know who you are.”
“永远都知道维护者和核心团队会看到几乎所有东西,并且会记住您。 您不是看不见的,所以您贡献越多,即使他们从不对您的问题做出回应,他们也会知道您是谁。”
Sebastian: Because there’s often a lot of context, especially on longer-living projects, and not everything is documented.
塞巴斯蒂安(Sebastian):因为通常有很多上下文,尤其是对于寿命较长的项目,并且没有记录所有内容。
There may also be very few maintainers to look at issues or port requests. That’s something we’re actively working on. We have metrics tracking that, and are trying to be better, but there are still issues. Always know that maintainers and core teams see almost everything and will remember you. You’re not invisible, so the more you keep contributing, even if they never respond to your issue, they’ll know who you are. When they do need your help, they’ll know what you’ve contributed on, and what context you have. Don’t get discouraged early on.
维护人员可能很少考虑问题或端口请求。 这是我们正在积极努力的事情。 我们有跟踪的指标,并且正在努力做得更好,但是仍然存在问题。 始终知道维护者和核心团队会看到几乎所有内容,并会记住您。 您不是看不见的,所以即使您从不回答您的问题,您仍会继续努力,他们也会知道您是谁。 当他们确实需要您的帮助时,他们会知道您的贡献以及所拥有的背景。 不要在早期就灰心。
Christoph: Yeah, I mean I guess people being intimidated goes back to the hero founder status that some people have or perceive. Often it helps to just meet people at conferences. You’ll realize they’re just real people, they’re not the smartest people in the world. They’re just normal people that happened to work on this project. You can start contributing, and get to that point as well.
克里斯托夫:是的,我的意思是说我被人吓倒了,可以追溯到某些人已经或意识到的英雄创始人地位。 通常,这有助于在会议上结识新朋友。 您会意识到他们只是真实的人,而不是世界上最聪明的人。 他们只是碰巧从事此项目的普通人。 您可以开始做出贡献,也可以做到这一点。
今天我们所有人都在这里,因为我们对网络非常热衷,因此我们很想知道是什么让您保持警惕,并为继续为改善网络做出贡献而感到兴奋? (All of us are here today because we’re very passionate about the web, so we’re curious to hear what keeps you on your toes and excited to keep contributing to making the web better?)
Tom: For me, I really want to make it easier to build software. I think it’s just extraordinarily difficult to build software in any capacity. I don’t think you should have to learn 3,000 different technologies in order to build a simple app. The web is how I got into software, and I think it’s ultimately how most people could and should get into software. The best thing about web technology is the very low barrier to entry. That feeling of high productivity and rapid iteration with all software development, whether you’re building an image decoder backend service, or you’re building a simple game or app, or a complex VR game. I think the complexities of a particular platform that you want to build for, should be disclosed over time as you encounter them.
汤姆:对我来说,我真的很想简化软件的构建。 我认为以任何能力构建软件都非常困难。 我认为您不必为了构建一个简单的应用程序而学习3,000种不同的技术。 网络是我进入软件的方式,我认为这最终是大多数人可以并且应该进入软件的方式。 Web技术的最好之处是进入门槛非常低。 无论是构建图像解码器后端服务,还是构建简单的游戏或应用程序,还是构建复杂的VR游戏,所有软件开发都具有高生产力和快速迭代的感觉。 我认为,您要构建的特定平台的复杂性应在遇到它们时随时间透露。
Christoph: Yeah, that’s why we are all here, right?
克里斯托夫:是的,这就是为什么我们都在这里,对吗?
Sebastian: I’d add that one of the reasons I’m excited about the web in general, is because there’s a tendency for our community to diverge when we have new ideas, but we have to unify at some point. We all know that with too much fragmentation, you can’t do anything, and eventually you end up joining back in. I hope that we’re able to join back in as quickly as possible. We don’t want to lose track of the next layer because technology is fundamentally about building layers, on top of layers, on top of layers of abstraction. We might be focused on the top layer, but someone’s building the next layer, and they can’t too that if our layer is too fragmented. We have to be able to unify, and collaborate.
塞巴斯蒂安:我想补充一点,我对整个网络感到兴奋的原因之一是,当我们有了新的想法时,我们的社区趋向于分歧,但是我们必须在某个时候统一。 我们都知道,碎片太多了,您无能为力,最终您最终加入了。我希望我们能够尽快加入。 我们不想失去对下一层的了解,因为技术从根本上讲就是在抽象的顶层,顶层之上构建层。 我们可能专注于顶层,但是有人在构建下一层,如果我们的层太零散,他们也不会这样做。 我们必须能够统一和协作。
Christoph: I guess one great thing is that all of this tooling is also written in JavaScript. So, while it’s great that we’re trying to make it easier to build software, the barrier to entry in general is much lower. Everything is written in JavaScript, so whatever you want to work on, you can go and work on that piece and improve it. The prospect that everything could be written in one language is actually really cool. Your React framework, your user code, your test framework, your JavaScript bundler, your package manager — they’re all written in the same language. So, if you have a problem with one, it’s pretty easy to solve. That’s what excites me.
Christoph:我想一件很棒的事情就是所有这些工具也是用JavaScript编写的。 因此,尽管我们试图使构建软件变得更容易是一件很不错的事,但进入的障碍通常要低得多。 一切都是用JavaScript编写的,因此无论您想从事什么工作,都可以着手进行改进。 一切都可以用一种语言编写的前景实际上是很酷的。 您的React框架,您的用户代码,您的测试框架,您JavaScript捆绑器,您的包管理器-它们都是用相同的语言编写的。 因此,如果您有一个问题,这很容易解决。 那就是让我兴奋的地方。
Donate to support this project: https://opencollective.com/betweenthewires
捐赠以支持该项目: https : //opencollective.com/betweenthewires
This project is made possible with sponsorship from frontendmasters.com, egghead.io and Microsoft Edge.
在frontendmasters.com , egghead.io和Microsoft Edge的赞助下,该项目成为可能。
To suggest a maker you’d like to hear from, please fill out this form.
要建议您想听听的制造商,请填写此表格 。
Send feedback to @betweenthewires on Twitter!
在Twitter上将反馈发送到@ betweenthewires !
mootools