她偏爱雏菊一样的淡黄色

by Filip Hracek

由Filip Hracek

为什么开源项目(非常)偏爱新用户,以及您可以采取什么措施 (Why open source projects (sadly) favor new users, and what you can do about it)

Every now and then, all developer products (SDKs, frameworks, APIs) will have to choose between favoring their existing users or new ones. Make the initial app “just work” for beginners with some default magic? You hurt the debuggability of large apps. Introduce a feature for your power-users? The newcomers will have to deal with a steeper learning curve.

时不时地,所有开发人员产品(SDK,框架,API)都必须在青睐现有用户或新用户之间做出选择。 使用一些默认的魔法使初学者的应用程序“适合工作”吗? 您损害了大型应用程序的可调试性。 为您的高级用户介绍一项功能? 新来者将不得不应对更陡峭的学习曲线。

In April, I wrote about the “Hello World” fallacy. This is the unconscious assumption that if it’s easier to get started with technology A than with technology B, then A is better than B.

4月,我写了关于“ Hello World”谬论的文章 。 这是一个无意识的假设,即如果开始使用技术A比开始使用技术B更容易,那么A比B更好。

This is bad, because most developers, most of the time, don’t write hello world apps. They fall in love with how easy it is to build a demo. Then, months later, they struggle while trying to build an actual product.

这很糟糕,因为大多数开发人员在大多数时候都不编写hello world应用程序。 他们爱上了构建演示的难易程度。 然后,几个月后,他们在尝试构建实际产品时遇到了困难。

But it gets worse.

但情况变得更糟。

It’s not just perception. Favoring the “Hello World” scenario actually pays off in the long run if you’re building an open source library or framework. Sadly, you’re better off sacrificing productivity of your long-term users to make things easier for your new users.

不只是感知。 从长远来看 ,支持“ Hello World”场景实际上是有回报的 如果您要构建一个开源库或框架。 可悲的是,您最好不牺牲长期用户的工作效率,从而使新用户更轻松地工作。

This is because of the dynamics of technology adoption:

这是由于技术采用的动态:

There is a reinforcing feedback loop here. The more people try the technology, the more buzz is generated around it, so more people try it, and so on.

这里有一个加强的反馈回路 。 尝试该技术的人越多,围绕它产生的嗡嗡声就越多,因此尝试它的人就越多,依此类推。

After some time, developers stop using the technology and move on to something else. This churn is proportionate to their dissatisfaction with the tech and with its age.

一段时间后,开发人员停止使用该技术,然后继续开发其他产品。 这种流失与他们对技术及其时代的不满成正比。

The problem is with delays. The reinforcing feedback loop from new users is almost immediate. The first blogposts start appearing after mere weeks. But the churn and the more informed articles appear much later, after many months. It takes time to build something real. You need to build something real before you can talk about the underlying technology in an informed way.

问题在于延误 。 来自新用户的强化反馈循环几乎是立即的。 短短几周后,第一批博客文章开始出现。 但是,经过数月之后,客户流失和更明智的文章出现了很多。 构建真实的东西需要时间。 您需要先构建真实的东西,然后才能以明智的方式谈论基础技术。

Let’s say technology A optimized for initial ease of use (“hello world” and small apps). Technology B optimized for long-term users (real apps). If technology A gets twice the initial buzz from new users than technology B, and technology B gets twice the informed buzz than technology A, then technology A still wins — by a large margin. That’s because, in our little model, the informed buzz trails the initial buzz by an average of 12 weeks. That’s all it takes. Technology A will attract new users at a much faster pace. It will also lose users more rapidly than technology B. But that churn happens much later and, in general, slower than in the adoption phase.

假设技术A已针对最初的易用性进行了优化(“ hello world”和小型应用程序)。 技术B针对长期用户(真实应用)进行了优化。 如果技术A从新用户那里获得的初始嗡嗡声是技术B的两倍,并且技术B得到的知觉嗡嗡声是技术A的两倍,那么技术A仍然会赢得胜利-很大。 这是因为,在我们的小模型中,明智的蜂鸣声比初始蜂鸣声平均落后12周。 这就是全部。 技术A将以更快的速度吸引新用户。 与技术B相比,它还会使用户流失更快。但是,这种流失发生的时间要晚得多,而且通常比采用阶段要慢。

By the time technology A loses its advantage, it’s all over. Both technologies are on their slow way out. Technology A had been used by almost twice as many developers at that point. Despite being worse for building real apps.

当技术A失去优势时,一切都结束了。 两种技术都在缓慢发展中。 那时,技术A的使用量几乎是开发人员的两倍。 尽管构建真正的应用程序更糟

Say technology B goes all the way. It optimizes the hell out of the long-term user experience, and completely de-prioritizes the “hello world” scenario. The result is even sadder:

说技术B一路走来。 它从长期的用户体验中优化了地狱,并完全取消了“ hello world”方案的优先级。 结果更令人难过:

No matter how you fiddle with the numbers, technology B always loses. The reinforcing feedback loop and the delay in churn will always be there.

无论您如何摆弄数字,技术B总是会失败。 不断增强的反馈回路和搅动延迟将始终存在。

Let’s look at exactly what I mean by “optimizing for new users” versus “optimizing for long-term users.”

让我们看看“优化新用户”与“优化长期用户”到底是什么意思。

对于新用户(头几周或几个月)重要的是: (What’s important for new users (first few weeks or months):)

  • Length and ease of first-time setup首次安装的时间和简便性
  • Defaults & automagic (ability to “just work” for the most prevalent initial scenarios)默认值和自动值(在最普遍的初始方案中“正常工作”的能力)
  • Size of small apps小型应用程式的大小
  • Performance of small apps小型应用的性能
  • Freedom (“use whatever you’re used to”)自由(“使用您习惯的方式”)

对于长期用户来说重要的是(一旦他们构建了一个大型应用程序): (What’s important for long-term users (once they’ve built a large app):)

  • Ease of refactoring易于重构
  • Explicitness (the “do not surprise the programmer” principle)显式(“不要让程序员感到惊讶”的原则)
  • Customizability可定制性
  • Size of big apps大应用程式的大小
  • Performance of big apps大应用程序的性能
  • Standardization标准化

为什么这是开源问题? (Why is this an open source problem?)

One great thing about open source is that it’s free. In this case, that’s also part of the problem.

开源的一大优点是它是免费的。 在这种情况下,这也是问题的一部分。

Paid SDKs and frameworks will never see the rate of adoption that open source does. But they’re also someone’s business. Businesses tend to prefer ongoing, long-term customers over uncertain new leads. If technology A was a company, it would not fare well.

付费的SDK和框架永远不会看到开源的采用率。 但是他们也是某人的事。 与不确定的新潜在客户相比,企业往往更喜欢长期的长期客户。 如果技术A是一家公司,那将不会很好。

Please note: I am not saying we should all start paying for frameworks now. I’m just explaining why open source is particularly vulnerable to this problem.

请注意:我并不是说我们现在都应该开始为框架付费。 我只是在解释为什么开源特别容易受到这个问题的影响。

I believe this is one of the reasons for the “JavaScript fatigue” in the web world, by the way. That ecosystem naturally selects technologies that are easy to start with. This creates an arms race: new generations of libraries and frameworks are ever more easy on the newcomer, but harder to scale.

顺便说一下,我相信这是网络世界中“ JavaScript疲劳 ”的原因之一。 该生态系统自然会选择易于入门的技术。 这将引发一场军备竞赛:新一代的库和框架在新用户面前更加容易,但扩展规模却更大。

Technologies that don’t optimize for the “hello world” are doomed to obscurity. You end up with a rapid succession of technologies that are innovative but not great for building large software projects.

无法针对“ hello world”进行优化的技术注定会变得晦涩难懂。 您最终将获得一系列快速创新的技术,但这些技术对于构建大型软件项目并不理想。

It’s not only the JavaScript ecosystem, of course. The whole world of developer products is seeing faster turnarounds. The .NET Framework is 15 years old this year, and it’s still in use. That’s a remnant of an old era. Today, even outside the web ecosystem, we see frameworks that ‘rule’ for 18 months and then die.

当然,不仅是JavaScript生态系统。 整个开发人员产品世界的周转速度更快。 .NET Framework今年已有15年历史,并且仍在使用中。 那是一个旧时代的残余。 今天,即使在网络生态系统之外,我们也看到了“统治”了18个月然后消失的框架。

我们对于它可以做些什么呢? (What can we do about it?)

I hope I’ve shown that this is not about framework and library owners being dishonest, nearsighted, or stupid. The problem is inherent to the ecosystem. It stems from feedback delays — something nobody can really do anything about (unless they possess a time machine).

我希望我已经证明这不是关于框架和库所有者是不诚实,近视或愚蠢的。 这个问题是生态系统固有的。 它源于反馈延迟-没人真正能做任何事情(除非他们拥有时间机器)。

As a library owner, if you “choose not to play,” you will significantly harm your project’s chances for success. You will become technology B.

作为图书馆的所有者,如果您“选择不参加比赛”,将大大损害您项目的成功机会。 您将成为技术B。

That being said, framework owners can be conscious about this. They can educate about software scalability. They can seek out their largest “customers” and work closely with them. They can consciously and transparently emphasize large apps over tech demos. My hope is that the industry starts doing it as a whole. It’s in everyone’s interest.

话虽如此,框架所有者可以意识到这一点。 他们可以教育软件可伸缩性。 他们可以寻找最大的“客户”并与他们紧密合作。 他们可以有意识地透明地强调大型应用程序,而不是技术演示。 我的希望是整个行业都开始这样做。 这符合所有人的利益。

For consumers of these frameworks (and SDKs, libraries, APIs), the advice is quite simple:

对于这些框架(以及SDK,库,API)的使用者,建议非常简单:

Never listen to anyone who hasn’t built a very large* app with the technology they’re talking about.

永远不要听任何没有使用他们正在谈论的技术构建大型应用程序的人。

(* The size of the app depends on what you want to build.)

(*应用程序的大小取决于要构建的内容。)

The problem with this piece of advice is probably clear. If you live by it, you’ll miss every cool new technology that is out there. By the time someone builds something big enough, and is therefore competent to speak, you might very well be too late to the party.

这条建议的问题可能很明显。 如果您靠它生活,您将错过那里提供的每项炫酷新技术。 到有人建立足够大的东西并因此有发言权的时候,您可能对党来说已经太迟了。

So I have some less glorious but more practical advice for you:

因此,我为您提供了一些不太光荣但更实用的建议:

  • Take note of the people on the project and their track record. Past behavior is the best predictor of future behavior.

    注意项目上的人员及其往绩。 过去的行为是未来行为的最好预测。

  • Ignore the “hello world” experience. Know that 99.99% of your time with the technology will not be “hello world.”

    忽略“ hello world”的体验。 知道使用这项技术的99.99%的时间不会是“ hello world”。

  • Be wary of implicit “magic.” That almost never mixes well with real apps.

    警惕隐含的“魔术”。 这几乎无法与真实应用完美融合。

  • Discount recommendations by people who only build small apps or proof-of-concepts.

    仅构建小型应用程序或概念证明的人的折扣建议。

  • If you want to get fancy, build “app generators” that automatically produce very large codebases in the technologies you are evaluating. With this, you can produce an approximation of a huge 100KLOC app in a single afternoon. See how the generated large app performs and how the tooling keeps up at this scale. (This is what the AngularDart team at Google does to gauge its own framework’s standing among others.)

    如果您想花哨的话,请构建“应用程序生成器”,以使用您正在评估的技术自动生成非常大的代码库。 有了这个,您可以在一个下午内近似生成一个巨大的100KLOC应用程序。 查看生成的大型应用程序如何执行以及工具如何保持这种规模。 (这是Google的AngularDart团队用来衡量自己的框架在其他领域的地位的做法。)

If you have other ideas, please share them in the comments. I’ll happily add the best ones above.

如果您还有其他想法,请在评论中分享。 我会很高兴在上面添加最好的。

翻译自: https://www.freecodecamp.org/news/why-open-source-projects-sadly-favor-new-users-and-what-you-can-do-about-it-ba586038949e/

她偏爱雏菊一样的淡黄色

她偏爱雏菊一样的淡黄色_为什么开源项目(非常)偏爱新用户,以及您可以采取什么措施...相关推荐

  1. keras faster物体检测_【开源项目】特斯拉+树莓派实现车牌识别检测系统

    怎样在不换车的前提下打造一个智能车系统呢?一段时间以来,本文作者 Robert Lucian Chiriac 一直在思考让车拥有探测和识别物体的能力. 本文来源:机器视觉 怎样在不换车的前提下打造一个 ...

  2. java 博客系统_讲解开源项目:5分钟搭建私人Java博客系统

    本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和运行 Tale 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出的< ...

  3. java 项目做多级缓存_【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)...

    一.缓存 当系统的并发量上来了,如果我们频繁地去访问数据库,那么会使数据库的压力不断增大,在高峰时甚至可以出现数据库崩溃的现象.所以一般我们会使用缓存来解决这个数据库并发访问问题,用户访问进来,会先从 ...

  4. 著名开源项目_著名开源项目案例研究

    著名开源项目 维基百科 (Wikipedia) Wikipedia is no less than an encyclopedia available free of cost to the publ ...

  5. python3语音识别模块_『开源项目』基于STM32的智能垃圾桶之语音识别

    大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了『开源项目』基于STM32的智能垃圾桶之成员简介,相信有很多小伙伴都已经忍不住跃跃欲试了,别着急,从这一篇开始,笔者将会带领大家一 ...

  6. 通过ssh方式clone项目_参与开源项目流程

    简单记录下最近参与开源项目的流程. 参与项目开源 创建github账户. 前往你打算参与开源项目的主页. Fork该项目到你的账户下. 前往你自己的Fork库,clone到本地(前提配置好git.ss ...

  7. 开源的商业意义_为开源项目提供资金具有良好的商业意义

    开源的商业意义 在商业中,投资期望回报. 那么,开源软件的投资回报率是多少? 人们并不总是很清楚,为什么像Divio这样的公司(需要获利的企业)会愿意捐赠给开源社区和项目. 捐钱并不是人们对商业计划的 ...

  8. flv 开源 修复_解决开源项目错误和修复的5个步骤

    flv 开源 修复 我在开源上做了很多工作,但是我最有价值的贡献不是代码. 编写补丁是开源最简单的部分. 剩下的全部才是真正困难的东西:错误跟踪器,邮件列表,文档和其他管理任务. 这是我在学习过程中学 ...

  9. github使用指南_所有开源项目免费使用,GitHub 内置 CI/CD 终于来了

    2019 年 8 月 8 日,GitHub 官方博客发文称,程序员期待已久的功能来了,Github Actions 终于支持内置 CI/CD 了,并对所有开源项目免费!目前该功能可以在 Beta 版本 ...

最新文章

  1. 10件5G能实现但4G不能做的事情
  2. vue点击图片后复制图片url_简单漂亮的(图床工具)开源图片上传工具——PicGo...
  3. NYOJ 562 盒子游戏
  4. java 自动装载_springboot自动装载
  5. hive 语句总结_Hive常用命令总结
  6. OpenCV:H1.type() == H2.type() H1.depth() == CV_32F
  7. 树视图的代码 TreeView
  8. web.config配置Access数据库 (C#) ASP.NET+ACCESS
  9. C# Process.Kill() 拒绝访问(Access Denied) 的解决方案
  10. python自动化办公excel-自动化办公:python 操作Excel
  11. linux调度器(六)——应用层理解CFS及组调度
  12. 前端性能优化(慕课网笔记)-2-渲染优化(浏览器)
  13. gerber文件如何转为PCB文件
  14. python blp模型 估计_python实践——时间序列分析建模理论及代码实现
  15. 打包后的APK文件,微信发送给别人后面出现.apk.1无法安装
  16. Test meeting 11.23
  17. c语言学习格式化输出
  18. 《软件设计与实现》 --- 读书笔记
  19. Linux学习16 软件包和启动项管理
  20. 赛尔号7月17日服务器维护,赛尔号07月17日更新攻略汇总 环城之光圣芒降临

热门文章

  1. mysql error -1_【Mysql】SQLException: Got error -1 from storage engine 问题解决!
  2. Xcode:Foundation框架找不到,或者是自动提示出现问题
  3. Axios的Vue插件(添加全局请求/响应拦截器)
  4. 深入学习Oracle分区表及分区索引
  5. 感染EXE文件代码(C++)
  6. FocusBI:租房分析可视化(PowerBI网址体验)
  7. 「前端」History API与浏览器历史堆栈管理
  8. 深入浅出分布式文件系统MogileFS集群
  9. kerberos 主从安装
  10. JDBC连接本地sqlserver2005的方法