Kode Vicious 饿了。他的养分来自软件开发前线的各位提出的问题(以及大量的啤酒)。没有你们每月寄来的信件,KV 就如同离水的鱼,又或是没有问题可解的科学家。所以,请尽你的一份力量,让他保持理智(或至少不发作精神错乱),保持忙碌和有用。将你的编码难题和其他问题发送至 [email protected],如果我们刊登了你的来信,我们将赠送你一个漂亮的橙色马克杯和一个非常明亮的 LED 手电筒钥匙扣。
亲爱的 KV,
我遇到的最大的问题之一就是记忆力。不是我电脑里的 RAM,而是我脑袋里湿乎乎的东西。似乎无论我在我的隔间周围贴多少标语,也无论我多久关闭一次我工作需要使用的所有烦人的即时通讯客户端,我都无法工作超过 15 分钟而不被人打断,然后我就失去了思路。如果这发生在我阅读电子邮件时,那不是问题,但是当处理代码时——特别是当调试代码中的难题时——这使我的生活非常困难。有没有什么技巧可以让我保持思路不断,而无需爬山?
调试时被打断
亲爱的 Bugged,
我真的应该学会在早餐时不读邮件,因为我对你脑袋里湿乎乎的东西想得越少,我就能越久地保持我的啤酒和玉米片不吐出来,而且我们都知道早餐是一天中最重要的一餐!
记忆力是一件有趣的事情。嗯,有些记忆是,而另一些则更属于恐怖类型,实际上最好把它们留在你忘记它们的地方。我惊讶于你的同事、爱人和孩子对你的专注状态可以如此迟钝。我尝试过标语、耳机、背对所有人、关上我的办公室门(当我幸运地拥有办公室时),有一次我还尝试过照明弹。所有这些都无济于事。人们总是无视标语(他们不可能是指他们自己——他们的问题很重要!)并敲门。照明弹的问题是双重的。一是消防法规,二是它们会烧尽,必须更换。我放弃了在办公室环境中保持不被打断的尝试。
你真正想要的是一种记住你在做什么的方法,而调试就是这方面最好的例子之一。没有什么比回到你正在处理的问题却不记得你已经尝试过什么更令人恼火的了。不得不重新进行你的实验和测量是一种令人抓狂的体验,这就是我多年前开始剃光头的原因——这比把头发拔光容易得多。重要的是要意识到你正在做实验和进行测量,这将引导你找到答案。
真正的科学家,而不是那些自称是科学家的蹩脚黑客,都知道如何提出想法——称为假设——并检验它们。他们写下每个假设,然后描述实验和结果。他们将所有这些数据保存在日志或笔记本中。计算机科学家以这种方式使用日志的最早例子之一是格蕾丝·穆雷·霍珀记录的第一个 bug,一只飞蛾,是在哈佛 Mark I 计算机的继电器中发现的,记录在机器房中与计算机一起保存的日志中。从继电器中拉出一只飞蛾来调试程序的日子已经一去不复返了,好吧,谢天谢地——我的意思是,真恶心!但这仍然是当试图解决复杂问题时应该如何进行的绝佳例子。
说到例子,我将向你展示我最近被困——呃,我是说参与——的一个内核调试会话中的一个例子。
图 1 显示了我的调试笔记本中的几页,其中删除了一些不必要的细节。虽然细节并不重要——除非你也在为新的 IPsec 协议栈添加 IPv6 支持,但我敢打赌你没有——关于我记录的内容有几点需要注意。
首先,我包含了我运行的所有命令的输出——实际上,比本例中显示的要多得多。保留输出以供稍后重新阅读就像确保你将所有标本都放在标本罐中一样。我们都知道,在给定的软件上重新运行相同的测试并不总是给出相同的结果,而且由于墨菲定律,你越需要测试具有可重复性,它就越不可能具有可重复性。保存你的输出。
要考虑的第二点是,我记录并保留了所有假设,包括不正确的假设。试图在没有使用精神药物的情况下重现你之前的调试会话时的精神状态,甚至比重新运行测试代码并获得相同的结果还要困难。当你猜错一个有根据的猜测时,没什么好尴尬的;这就是科学的运作方式。你根据你当时知道或认为你知道的东西做出猜测,然后你测试它。保留你所有的假设。
最后,我解释了我修复了什么。仅仅因为你的测试通过或你的代码没有崩溃并不意味着你已经完成了调试。可能是你的修复隐藏了问题,直到其他问题导致该 bug 再次出现。如果你不记得你做了什么来修复问题,那么当你再次看到相同的问题时,你就不会记得你是如何修复它的,那将是糟糕的。记录治疗方法,以及疾病。
还有很多其他东西可以放入调试日志中,它们不必以电子形式保存。KV 实际上有一个喜欢用羽毛笔做笔记的朋友,羽毛笔是他自己制作的。KV 似乎有很多像这样的古怪朋友,但不知道为什么。
重要的与其说是你如何保存日志,不如说是你保存了足够的相关数据,以便调试日志在长期内对你有用。磁盘很便宜,嗯,这恰好对你有利。
KV
KODE VICIOUS,凡人称之为 George V. Neville-Neil,为乐趣和利润从事网络和操作系统代码工作。他还教授有关编程各个主题的课程。他的兴趣领域是代码探险、操作系统和重写你的糟糕代码(好吧,也许不是最后一个)。他获得了马萨诸塞州波士顿东北大学计算机科学学士学位,并且是 、Usenix 协会和 IEEE 的成员。他是一位狂热的自行车爱好者和旅行家,自 1990 年以来一直以旧金山为家。
最初发表于 Queue 第 5 卷,第 5 期—
在 数字图书馆 中评论这篇文章
Catherine Hayes, David Malone - 质疑评估非加密哈希函数的标准
虽然加密和非加密哈希函数无处不在,但在它们的设计方式上似乎存在差距。加密哈希有许多由各种安全要求驱动的标准,但在非加密方面,存在一定程度的民间传说,尽管哈希函数历史悠久,但尚未得到充分探索。虽然针对真实世界数据集的均匀分布很有意义,但当面对具有特定模式的数据集时,这可能是一个挑战。
Nicole Forsgren, Eirini Kalliamvakou, Abi Noda, Michaela Greiler, Brian Houck, Margaret-Anne Storey - DevEx 在行动
随着领导者寻求在财政紧缩和人工智能等变革性技术的背景下优化软件交付,DevEx(开发者体验)在许多软件组织中越来越受到关注。技术领导者凭直觉接受良好的开发者体验能够实现更有效的软件交付和开发者幸福感。然而,在许多组织中,旨在改善 DevEx 的拟议计划和投资难以获得支持,因为业务利益相关者质疑改进的价值主张。
João Varajão, António Trigo, Miguel Almeida - 低代码开发生产力
本文旨在通过展示使用基于代码、低代码和极限低代码技术进行的实验室实验结果来研究生产力差异,从而提供有关该主题的新见解。低代码技术已清楚地显示出更高的生产力水平,为低代码在短期/中期内主导软件开发主流提供了强有力的论据。本文报告了程序和协议、结果、局限性和未来研究的机会。
Ivar Jacobson, Alistair Cockburn - 用例至关重要
虽然软件行业是一个快节奏且令人兴奋的世界,新的工具、技术和技巧不断被开发出来以服务于商业和社会,但它也很健忘。在其快速前进的匆忙中,它容易受到时尚潮流的影响,并且可能会忘记或忽略针对其面临的一些永恒问题的成熟解决方案。用例,最早于 1986 年引入,并在后来普及,就是这些成熟的解决方案之一。