失败

第 15 卷,第 1 期 – 2017 年 1 月至 2 月

Failure

用数学赚钱
现代应用程序越来越多地使用概率性机器学习模型。

人类编写的代码和学习模型之间的一个主要区别在于,后者通常不是用文本表示的,因此人类开发人员无法理解或使用现有工具进行操作。其结果是,传统的软件工程技术对于传统程序(如代码审查、源代码控制和调试)不再适用。由于不可理解性并非学习代码所独有,因此这些方面在此不作考虑。

作者:Erik Meijer

有人听你的吗?
你如何从一个普通的贡献者转变为真正的变革者?

一个想法本身并不值钱。仅仅因为你认为你知道做某事的更好方法,即使你是对的,也没有人有义务关心。在工作中成就伟大的事情不仅仅是聪明才智。好的想法成功或失败取决于你将它们正确地传达给有权实现它们的人的能力。当你在组织中周旋时,了解该与谁交谈以及如何联系他们是有益的。这是一份简单的指南,指导你如何将你的想法向上层传达并使其真正落实。这需要三个要素:正确的人、正确的时间和正确的方式。

作者:Kate Matsudaira

MongoDB 的 JavaScript Fuzzer
模糊测试器用于检测你的测试未捕获的那些边缘情况。

随着 MongoDB 变得功能更丰富且随着时间推移变得更复杂,开发更复杂的方法来查找 bug 的需求也在增长。三年前,MongoDB 将自研的 JavaScript 模糊测试器添加到其工具包中,现在它已成为我们最有效的 bug 查找工具,负责在两个发布周期内检测到近 200 个 bug。这些 bug 涵盖了从分片到存储引擎的各种 MongoDB 组件,症状范围从死锁到数据不一致。模糊测试器作为 CI(持续集成)系统的一部分运行,它经常在新提交的代码中捕获 bug。

作者:Robert Guo

调试心态
理解学习策略的心理学有助于培养有效的解决问题能力。

软件开发人员花费 35-50% 的时间来验证和调试软件。据估计,调试、测试和验证的成本占软件开发项目总预算的 50-75%,每年超过 1000 亿美元。虽然工具、语言和环境减少了花在单个调试任务上的时间,但它们并没有显着减少调试的总时间,也没有减少这样做的成本。因此,在开发过程中过度关注消除 bug 是适得其反的;程序员应该将调试视为一种解决问题的练习。

作者:Devon H. O'Dell

实践研究:分布式系统跟踪和调试;示例编程
专家策划的 CS 研究精华指南

本期“实践研究”涵盖了分布式系统和编程方法论中两个令人兴奋的主题。首先,Peter Alvaro 将带我们了解最新的调试技术,这些技术用于调试世界上一些最大、最复杂的系统:现代分布式系统和面向服务的架构。Peter 调查的技术可以阐明分布式调用图的混乱中的秩序。其次,Sumit Gulwani 说明了如何在不显式编写程序的情况下进行编程,而是从示例中合成程序!Sumit 提出的技术允许系统从说明性示例中“学习”程序表示,从而允许非程序员用户创建越来越复杂的函数,例如电子表格宏。这两个选择都非常符合 RfP 的可访问、实用研究的目标;事实上,两位贡献者都已成功地将他们在每个领域的研究成果转化为生产,在 Netflix 和作为 Microsoft Excel 的一部分。读者也可能会找到用例!

作者:Peter Alvaro, Sumit Galwani

大到不能失败
拥抱失败,以免失败拥抱你。

Web 规模的基础设施意味着大量的服务器协同工作,通常是成千上万甚至数十万台服务器都朝着同一个目标努力。如何管理这些环境的复杂性?如何引入共性和简洁性?

作者:Pat Helland, Simon Weaver, Ed Harris

强制异常处理
你永远不能忽视编程中的人为因素。

是的,KV 也阅读“The Morning Paper”,尽管他不得不承认他并没有阅读收件箱中来自该列表的所有内容。当然,你提到的论文引起了我的兴趣,而你没有指出的一点是,它实际上是对分布式系统故障的研究。现在,我们如何使编程更难?我知道了!让我们把一个单系统上的问题分布式化。总有一天我想看到一篇论文告诉我们,分布式系统中的问题是否随着节点数量或互连数量的增加而增加。作为一个乐观主义者,我只能想象它是 N(N + 1) / 2,或者更糟。

作者:George Neville-Neil

© . All rights reserved.