The Kollected Kode Vicious

Kode Vicious - @kode_vicious

  下载本文的PDF版本 PDF

构建成功

软件结构的问题在于人们在真正需要它之前不会真正学习它。

亲爱的 KV,

这学期在教授算法课程时,我发现我的学生在如何将代码划分为函数方面接受的指导非常少。因此,我花了一个周末浏览各种编程手册,发现它们大多数都对此主题保持沉默。我最终编写了一本简易手册来帮助我的学生,但更让我震惊的是建议的缺失。我们根本没有给人们指导!

指路明灯

 

亲爱的 Guiding,

好吧,幸运的是,您从事指导工作!我阅读了这本手册,不仅我同意其中的观点,而且我认为我过去也在这些专栏中给出了类似的建议——尽管没有那么委婉。我还注意到您引用了我最喜欢的关于优秀软件工程的书籍之一,即 Brian Kernighan 和 Rob Pike 的The Practice of Programming,这是一本我 20 多年前出版时就读过的经典著作。

我想从另一个角度来看待这个问题,因为您已经如此出色和简洁地探讨了规范性建议。我没有上过您的课,甚至没有看过教学大纲,但正如您所说,这是一门算法课程,我想知道这是否是挑战的一部分。我发现人们只有在接触过编写良好的系统或被他们试图解决的问题迫使需要时,才会培养出对良好程序结构的品味——这正是您所主张的。如果您查阅的编程指南与我见过的类似,那么它们肯定具有 20 世纪 80 年代 BASIC 编程的思维模式,在这种模式中,目标不是理解程序,而是正确地将其输入到您的个人计算机中,以便您可以玩他们向您展示的游戏。

在现代世界中,这种类型的编程已经延续到类似 Maker 的教程中,例如那些闪烁灯光或用 Arduino 和一些绳子制作艺术项目的教程。并不是说这些项目不好(尽管当您与他人共享创客空间时,带有声音的项目最终会令人讨厌),而是它们的目的不是教授良好的软件工程。而且问题不仅限于业余爱好者领域。虽然许多算法可以分解为组成部分,但教科书通常不以这种方式对待它们,而是倾向于在一个大的伪代码块中传达整个概念。良好的软件结构很难以线性形式(如书的章节)展示;最好是直接体验。

为此,我强烈建议您的第一个项目应该是需要一定程度软件结构的项目,这可以通过几种方式完成。最残酷的方法,当然是给学生布置一个极其复杂的作业,解决它的唯一方法是通过正确的结构,而不是通过单个函数的算法设计的聪明程度。算法本身可能很简单,但是获取、处理和存储数据的要求,以及一些棘手的报告要求,肯定会让您的学生更清楚地意识到为什么他们可能想要构建他们的代码。与底层系统交互以获取输入、存储输出和生成报告是确保学生想要拥有结构的一种直接方法。

另一种可能性,也是一种可能不那么残酷的可能性,是在已经具有结构的另一个系统中引用该算法。与其编写一个仅接受输入字符串并生成排序字符串的排序算法(就像我读本科时所做的那样),不如让学生在现有系统中替换一个算法——例如,处理加密的算法——在那里可以选择算法,但框架不受他们的控制。现代开源软件世界应该可以帮助您。您可以使用许多不同的软件(诚然质量参差不齐)作为此类作业的框架。

软件结构的问题在于人们在真正需要它之前不会真正学习它,而您的家庭作业必须迫使他们仔细研究他们解决问题的方式,不仅通过算法,还通过结构。

KV

 

George V. Neville-Neil 为乐趣和利润从事网络和操作系统代码工作。他还教授与编程相关的各种主题的课程。他的兴趣领域是计算机安全、操作系统、网络、时间协议以及大型代码库的维护和管理。他是The Kollected Kode Vicious的作者,并与 Marshall Kirk McKusick 和 Robert N. M. Watson 合著了The Design and Implementation of the FreeBSD Operating System。近 20 年来,他一直是专栏作家,更广为人知的名字是 Kode Vicious。自 2014 年以来,他一直是剑桥大学的工业访问学者,在那里他参与了几个与计算机安全相关的项目。他在马萨诸塞州波士顿的东北大学获得计算机科学学士学位,并且是 、Usenix 协会和 IEEE 的成员。他的软件不仅在地球上运行,而且还作为 VxWorks 的一部分部署在 NASA 的火星任务中。他是一位狂热的自行车爱好者和旅行者,目前居住在纽约市。

版权 © 2024 由所有者/作者持有。出版权已授权给 。

 

acmqueue

最初发表于 Queue 第 22 卷,第 2 期
数字图书馆中评论本文





更多相关文章

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 - 用例至关重要
虽然软件行业是一个快节奏且令人兴奋的世界,其中新的工具、技术和技巧不断被开发出来以服务于商业和社会,但它也很健忘。在追求快速前进的过程中,它容易受到时尚的 whims 的影响,并且可能会忘记或忽略针对它所面临的一些永恒问题的已被证明有效的解决方案。用例,最初于 1986 年提出,后来被推广,是那些已被证明有效的解决方案之一。





© 保留所有权利。

© . All rights reserved.