茱莉亚•埃文斯

开发人员可以从中学到在电话吗?吗?

我们经常谈论在电话是一件坏事。例如,nightbefore我写这个电话把我吵醒了半夜becausesomething电脑出错的原因。这是不好玩!我是脾气暴躁。

在这篇文章中,不过,我们要谈论你可以学习从beingon调用以及它如何可以让你成为一个更好的软件工程师!。和学习frombeing你不一定需要电话吵醒的晚上。通过“在所谓的“,在这里,我的意思是“负责代码时优惠”。这可能意味着意识到问题发生在一夜之间andneeding解决他们在你的工作日!!

在这里的一切都是合成从惊人的Twitter线程通过慈善专业,她问道:“如何在电话让你更好的工程师吗?”:https://twitter.com/mipsytipsy/status/847508734188191745

学习什么样的生产问题很常见,少见

当你设计一个系统,你需要设计误差的情况下!当我刚开始作为一名工程师,我发现了错误情况下reallyhard。任何事情都有可能出错!但重要的是要有一个更好的模型ofsystem失败比”任何事情都有可能出错,防止一切!”因为通常你必须优先考虑在哪里花费你的时间,和你shouldspend时间担心边界情况,实际上是可能发生的。

在调用可以教你快速什么样的系统边界情况runsinto频繁!!

例如,在看到一些软件失败,我知道DNS查询可能会失败。对DNS查询进行错误处理很有用(网络请求是原创的),即使你认为你说的大多是可靠的服务器!!

我也知道,原则上RAM可以错误的(当你在内存中设置一个值,它可以设置为别的东西!),但这不是发生在我身上的东西在实践中(呢!)所以我担心更少。(这可能是因为服务器使用ECC内存吗?这篇文章)利用DRAM rowhammer bug来获得内核特权是一个很好的例子关于如何使用内存错误的利用。

学会建立监测和早期诊断

没有什么像一个系统破坏,负责解决,也没有办法说服你看到什么错误的buildingmonitoring和日志记录到您的应用程序的价值。

因为很快就会教你什么类型你需要的诊断todebug您的应用程序。如果你得到分页,因为您的应用程序正在anabnormally长时间进行数据库查询,你可以开始监视howlong你的数据库查询!然后下次会更容易对人打电话,看看这就是问题所在。

这样做的好处是,这些教训最后甚至超出你currenton-call旋转——你可以通知”嘿,每次我写一个程序结束uplogging其数据库查询需要多长时间,我就把它放在这次开始!””

理解系统的部分,不是你的

很容易想到的那部分系统你不拥有作为一个黑盒。”Ijust使数据库查询和他们的工作,它很好,数据库团队的数据库”。

但实际上非常有用的局限性工作系统有基本了解和你一起工作!如果你工作后端论坛上的web应用程序,你想知道有多少可以使yourdatabase查询,大约有多少网络带宽,有多少可以写入磁盘,和更多。

如果你得到分页,因为应用程序使太多的数据库查询,这是一个很棒的机会,了解更多的局限性thedatabase你使用!然后(你能看到一个模式吗?下次你被东西很多数据库查询,你可以预先检查确保没关系。

获得信心在你的判断

几大引用这个线程:

它帮助我获得信心在我自己的判断。你必须做出大的电话,采取恐怖行动,经历可怕的决定。

我自己停止第二猜测。如果我得到分页,拉屎下来——没有时间去猜第二次自己破碎的苛刻。

了解需要紧急关注

现在有些问题需要解决,还有其他问题……真的没有。以前有些工程师怎么能告诉你呢?是的,这不是一件大事”和. .正确的呢?吗?

这种直觉是非常重要的建立(否则你会恐慌每个timethere的一个错误,你永远不会得到任何事!)。当你在调用论坛系统,你看到紧急问题发生时,你理解whatcauses他们。所以你慢慢获得直觉”哦,好吧,当X发生itoften导致一个严重的问题,但当Y发生这没什么大不了的”。

这也让你主动预防即将到来的问题——如果你seesomething令人担忧的情况,你可以修复它之前任何人在你的团队在半夜醒来。

学会设计可靠的系统

有一条共同的主线通过所有这一切。很大一部分工作assoftware工程师是设计系统继续工作yourcustomers甚至当事情没有发生那么你的预期。失败是一个很好的方法学习如何设计要求您的软件。

Kamal向我指出,很容易有一个系统的代码很好(没有太多的错误,等),但由于一些基本设计选择不运行在生产。例如,你可以设计一个系统whichneeds让许多数据库查询每次用户发出请求。Sohaving很好地理解生产的影响不同的designchoices将帮助你更好地设计系统!!

学习如何使最低有效改变

当有一个事件,之前你想要负债系统解决问题的根源(好吧,这个服务器是着火了,我们可以把交通离开之前弄清楚为什么?)!这是很有用的技能,当你被分页,而且当你有一个系统thatneeds帮助但不一定有时间/资源培育珍珠现在完全修复。

了解分布式系统& &竞态条件的一致性

在电话告诉我关于种族的条件

最近我得到了一个警告,我写是没有工作。我看着它论坛,然后我意识到“哦,这一切都因为S3列表operationsare最终一致”——我的代码清单在S3中一个前缀,结果它不是最新的。(和“最终一致”herereally意味着“最终“——显然,有时你会添加/删除一个objectfrom S3 bucket,它不会出现在列表操作几分钟)

这就是S3应该去上班,但我真的没有想到则成语我写代码。可以说我应该更仔细地阅读文档,但是看到这样的问题在实践中帮助我明白”eventuallyconsistent”系统看起来像当他们失败,记得写受够我的代码下次记住。

其他的报价我喜欢

我有团队,随叫随到非常严重:每个问题,综述了pagedus在每周的会议上,和任务分配给解决

给我的教训是,过程很重要,和工作towardscontinuous改善是值得的。

在电话意味着我不能选择喜欢的舒适subjectsavoiding硬/不开心的。我被迫拉伸和学习。

能够放下一个人的骄傲和说“我需要帮助thiseven尽管我吵醒别人帮助我。””

它让我更好的在搞清楚如何complexfailure条件分解成小块,更容易调试……

负责项目的操作使我更好的开发人员

我从来没有真正在世界上我写的软件和扔在墙是由另一个团队。但我觉得写作软件然后看到它没在实践中都是很好的经历!我feellike这是一个莫大的荣幸能够编写软件,看看itholds实际上在个月/年。

说——我从来没有在一个特别艰苦rotationpersonally随叫随到,最我可能过分页就像. .每月的2至3倍,每隔4周。但是我觉得我学到了很多从仍然!!

我可能遗漏了很多重要的东西,但我写的这两个月agoand这是已经出版的远比我平时晚”写这andpublish 4小时内”。