蚊章汇 - Matt Hicks
type: channel
link: https://linuxcn.bwsl.wang/author/592/
description: Matt Hicks
items: 技术如何改变敏捷的规则
items: 六个开源软件开发的“潜规则”

技术如何改变敏捷的规则
type: item
date: 2019-09-26T19:39:40+08:00
description: 当我们开始推行敏捷时，还没有容器和 Kubernetes。但是它们改变了过去最困难的部分：将敏捷性从小团队应用到整个组织。越来越多的企业正因为一个非常明显的原因开始尝试敏捷和 DevOps: 企业需要通过更快的速度和更多的实验为创新和竞争性提供优势。而 DevOps 将帮助我们得到所需的创新速度。但是，在小团队或初创企业中实践 DevOps 与进行大规模实践完全是两码事。我们都明白这样的一个事实，那就是在十个人的跨职能团队中能够很好地解决问题的方案，当将相同的模式应用到一百个人的团队中时就可能无法奏效。这条道路是如此艰难，以至于 IT 领导者最简单的应对就是将敏捷方法的推行再推迟一年。但那样的时代已经结束了。如果你已经尝试过，但是没有成功，那么现在是时候重新开始了。到目前为止，DevOps 需要为许多组织提供个性化的解决方案，因此往往需要进行大量的调整以及付出额外的工作。但在今天，Linux 容器和 Kubernetes 正在推动 DevOps 工具和过程的标准化。而这样的标准化将会加速整个软件开发过程。因此，我们用来实践 DevOps 工作方式的技术最终能够满足我们加快软件开发速度的愿望。Linux 容器和 Kubernetes 正在改变团队交互的方式。此外，你可以在 Kubernetes 平台上运行任何能够在 Linux 运行的应用程序。这意味着什么呢？你可以运行大量的企业及应用程序（甚至可以解决以前令人烦恼的 Windows 和 Linux 之间的协调问题）。最后，容器和 Kubernetes 能够满足你未来将要运行的几乎所有工作。它们正在经受着未来的考验，以应对机器学习、人工智能和分析工作等下一代解决问题工具。让我们以机器学习为例来思考一下。今天，人们可以在大量的企业数据中找到一些模式。当机器发现这些模式时（想想机器学习），你的员工就能更快地采取行动。随着人工智能的加入，机器不仅可以发现模式，还可以对模式进行操作。如今，一个积极的软件开发冲刺周期也就是三个星期而已。有了人工智能，机器每秒可以多次修改代码。创业公司会利用这种能力来“打扰你”。考虑一下你需要多快才能参与到竞争当中。如果你对于无法对于 DevOps 和每周一个迭代周期充满信心，那么考虑一下当那个创业公司将 AI 驱动的过程指向你时会发生什么？现在是时候转向 DevOps 的工作方式了，否则就会像你的竞争对手一样被甩在后面。容器技术如何改变团队的工作？DevOps 使得许多试图将这种工作方式扩展到更大范围的团队感到沮丧。即使许多 IT（和业务）人员之前都听说过敏捷相关的语言、框架、模型（如 DevOps），而这些都有望彻底应用程序开发和 IT 流程，但他们还是对此持怀疑态度。向你的受众“推销”快速开发冲刺也不是一件容易的事情。想象一下，如果你以这种方式买了一栋房子 —— 你将不再需要向开发商支付固定的金额，而是会得到这样的信息：“我们将在 4 周内浇筑完地基，其成本是 X，之后再搭建房屋框架和铺设电路，但是我们现在只能够知道地基完成的时间表。”人们已经习惯了买房子的时候有一个预先的价格和交付时间表。挑战在于构建软件与构建房屋不同。同一个建筑商往往建造了成千上万个完全相同的房子，而软件项目从来都各不相同。这是你要克服的第一个障碍。开发和运维团队的工作方式确实不同，我之所以知道这一点是因为我曾经从事过这两方面的工作。企业往往会用不同的方式来激励他们，开发人员会因为更改和创建而获得奖励，而运维专家则会因降低成本和确保安全性而获得奖励。我们会把他们分成不同的小组，并且尽量减少互动。而这些角色通常会吸引那些思维方式完全不同的技术人员。但是这样的解决方案注定会失败，你必须打破横亘在开发和运维之间的藩篱。想想传统情况下会发生什么。业务会把需求扔过墙，这是因为他们在“买房”模式下运作，并且说上一句“我们 9 个月后见。”开发人员根据这些需求进行开发，并根据技术约束的需要进行更改。然后，他们把它扔过墙传递给运维人员，并说一句“搞清楚如何运行这个软件”。然后，运维人员勤就会勤奋地进行大量更改，使软件与基础设施保持一致。然而，最终的结果是什么呢？通常情况下，当业务人员看到需求实现的最终结果时甚至根本辨认不出。在过去 20 年的大部分时间里，我们一次又一次地目睹了这种模式在软件行业中上演。而现在，是时候改变了。Linux 容器能够真正地解决这样的问题，这是因为容器弥合开发和运维之间的鸿沟。容器技术允许两个团队共同理解和设计所有的关键需求，但仍然独立地履行各自团队的职责。基本上，我们去掉了开发人员和运维人员之间的电话游戏。有了容器技术，我们可以使得运维团队的规模更小，但依旧能够承担起数百万应用程序的运维工作，并且能够使得开发团队可以更加快速地根据需要更改软件。(在较大的组织中，所需的速…

六个开源软件开发的“潜规则”
type: item
date: 2017-05-16T18:38:00+08:00
description: 你想成为开源项目中得意满满、功成名就的那个人吗，那就要遵守下面的“潜规则”。正如体育界不成文的规定一样，这些规则基本上不会出现在官方文档和正式记录上。比如说，在棒球运动中，从比分领先时不要盗垒，到跑垒员跑了第一时也不要放弃四坏球保送。对于圈外人来讲，这些东西很难懂，甚至觉得没什么意义。但是对于那些想成为 MVP 的队员来说，这些都是理所当然的。软件开发，特别是开源软件开发中，也有一套不成文的规定。和其它的团队运动一样，这些规定很大程度上决定了开源社区如何看待一名开发者，特别是新加入社区的开发者。按部就班，循序渐进在参与社区之前，比如开放源代码或者其它什么的，你需要做一些基本工作。对于有眼界的开源贡献者，这意味这你需要理解社区的目标，并学习应该从哪里起步。人人都想贡献源代码，但是只有少量的人做过准备，并且乐意、同时也有能力完成这项艰苦卓绝的工作：测试补丁、复审代码、撰写文档、修正错误。所有的这些不受待见的任务在一个健康的社区中都是必要的。为什么要在优雅地写代码前做这些呢？这是一种信任，更重要的是，不要只关注自己开发的功能，而是要关注整个社区的动向。博闻强识，敦善不怠当你在某个社区中建立起自己的声望，那么很有必要全面了解该项目和代码。不要停留于任务状态上，而是要去钻研项目本身，理解那些超出你擅长范围之外的知识。不要只把自己的理解局限于开发者，这样会让你着眼于让你的代码有更大的影响，而不只是你那一亩三分地。打个比方，你已经完成了一个网络模块的测试版本。你测试了一下，觉得不错。然后你把它开放到社区，想要更多的人测试。结果发现，当它以特定的方式部署时，有可能会破坏安全设置，还可能导致主存储泄露。如果你将代码视为一个整体时问题就可以迎刃而解，而不是孤立地看待问题。这表明，你要对项目各个部分如何与其他人协作交互有比较深入的理解。让你的补丁填坑而不是挖坑。这样你朝成为社区精英的目标上又前进了一大步。粗枝大叶，自寻烦恼代码提交完毕后你的工作还没结束。如果代码被接受，还会有一些关于这些更改的讨论和常见的问答，还要做测试。你要确保你可以准时提交，努力去理解如何在不影响社区其他成员的情况下，改进代码和补丁。和谐相处，助人助己开源社区不是自相残杀的丛林世界，我们更看重项目的价值而非个体的贡献和成功。如果你想给自己加分，让自己成为更重要的社区成员、让社区接纳你的代码，那就努力帮助别人。如果你熟悉网络部分，那就去复审网络部分，用你的专业技能让整个代码更加优雅。道理很简单，顶级的审查者经常和顶级的贡献者打交道。你帮助的人越多，你就越有价值。八面玲珑，面面俱到作为一个开发者，你很可能希望为开源项目解决一个特定的痛点。或许你想要运行在一个目前还不支持的系统上，抑或你很希望改革社区目前使用的安全技术。想要引进新技术，特别是比较有争议的技术，最好的办法就是让人无法拒绝它。你需要透彻地了解底层代码，考虑每个极端情况。在不影响已实现功能的前提下增加新功能。不仅仅是完成就行，还要在特性的完善上下功夫。糜不有初，鲜克有终开源社区也有许多玩玩就算的人，但是承诺了就不要轻易失信。不要就因为提交被拒就离开社区。找出原因，修正错误，然后再试一试。当你开发时候，要和整个代码库保持一致，确保即使项目发生变化而你的补丁仍然可用。不要把你的代码留给别人修复，要自己修复。这样可以在社区形成良好的风气，每个人都自己改。这些“潜规则”看上去很简单，但是还是有许多开源项目的贡献者并没有遵守。这样做的开发者不仅可以为成功地推动他们自己的项目，而且也有助于开源社区。作者简介：Matt Hicks 是 Red Hat 软件工程的副主席，也是 Red Hat 开源合作团队的奠基成员之一。他历时十五年，在软件工程中担任多种职务：开发，运行，架构，管理。via: http://www.infoworld.com/article/3156776/open-source-tools/the-6-unwritten-rules-of-open-source-development.html作者：Matt Hicks 译者：Taylor1024 校对：wxy，martin2011qi 本文由 LCTT 原创编译，Linux中国 荣誉推出