亲爱的KV,
我希望通过学习更多知识来帮助我日常在系统集成商编写粘合和定制代码的工作。但是,显而易见的适用知识是特定于工具和软件包的,这些工具和软件包甚至在项目生命周期内都可能过时或停产,并且在某些情况下已经达到了这个地步。
Kode Vicious 的脾气显然因不得不收拾同行的烂摊子而变得暴躁。他希望他们现在学习什么,以便他可以期待优雅而温和的晚年?
渴望学习的人
亲爱的渴望学习的人,
虽然您对我晚年的关心令人感动,但我不得不说,我能看到自己晚年变得温和的唯一方法是借助处方药。我一直认为年龄会让我变得温和,但是,唉,正如 KV 的长期读者可以告诉您的那样,这种情况似乎并没有发生。
现在让我们回到您的问题,我将其总结为:“我如何避免被定型为软件开发者?” 大多数人从电视或电影的角度理解定型,在电视或电影中,演员经常扮演相同的角色,以至于那是演员唯一被提供的角色。克里斯托弗·李,在被选中出演《指环王》三部曲之前,他一直是我们现在认为的庸俗恐怖片中令人毛骨悚然和可怕的角色,几乎立刻浮现在脑海中。我相信您也能想到类似的演员和女演员。
当您不断接受相同的工作并做您一直做的事情时,就会发生被定型为开发者的情况。当然,很难找到一份您没有经验的工作,因为大多数雇主都要求您精通他们正在从事的特定领域。我当然不鼓励您撒谎或夸大您的简历。话虽如此,您仍然可以做一些事情,其中一些事情我以前提到过,但从未在单个回复中提到过。
我鼓励所有工程师做的最重要的事情是不断学习他们的技艺,这并不意味着跑到老板那里要求送您去参加一堆会议或课程。并不是说会议和课程没有用,但我见过太多人浪费时间和金钱去参加毫无价值的旅行。
您能做的最简单的事情是加入一个专业协会——比如 。不,我不是被要求这么说的。幸运的是,当我在写这些文章时,我的编辑们很少能亲自找到我。他们只是不喜欢我藏身的那种地方。KV 的另一个身份自大学时代以来一直是 、Usenix 和 IEEE 的会员。学生会员很便宜,因为这三个团体都学会了毒贩的信条,“第一次免费”。一旦你上瘾了,好吧,我们只能说很难戒掉。
我总是鼓励人们订阅一到两份期刊,并阅读他们感兴趣领域论文的摘要。不是全文,因为谁有时间?!如果您阅读了大多数摘要,您就会了解您所在领域正在发生的事情,并且您还会发现一些仅与此略有相关的东西,这些都是新的研究途径。
我认为您最想知道的,也是一个重要的好奇之处,是工具与技术的结合。工具是像特定语言或计算机程序之类的东西。技术更通用,可以应用于任何一组语言。例如,Python 是一种 OO(面向对象语言)——我碰巧很喜欢——但我更感兴趣的是如何在任何语言中应用 OO 技术,而不是只关注 Python。我经常发现很多人沉迷于一种语言,但语言只是一种应用技术的工具,所以尽可能学习技术。
对算法的兴趣也非常重要,因为这是计算机科学中所有技术的来源。现在大多数人都知道在访问共享数据之前要获取互斥锁,但他们知道为什么吗?他们是否知道互斥锁的工作原理,即使是在一般层面上?如果您理解互斥锁背后的技术,那么您就可以正确地应用它;如果您不理解,那么您只是在遵循食谱。厨师遵循食谱;大厨则采用食谱并将其变成自己的食谱。
或许在最高层面上,重要的是对事物的运作方式保持好奇心。将系统的太多部分视为黑匣子是让自己和您的工作沦为大型软件机器中的一个简单齿轮的好方法。拆开东西,阅读您不负责的代码,并主动帮助您不理解的项目。
过去我谈到过我的书单 (https://queue.org.cn/detail.cfm?id=1127862),以及阅读论文的重要性 (https://queue.org.cn/detail.cfm?id=1036484)。这两篇文章都是不错的起点。
KV
亲爱的KV,
我在构建安全软件时发现的一个问题是,在协作组件之间必须跨越和检查的边界数量。虽然计算机肯定变得更快了,但在我看来,这似乎并不是在代码中到处设置障碍并相信这种扩散会使代码更安全或更易于维护的理由。通常,这些障碍似乎只会造成延迟,而没有提供任何真正的价值。您如何看待这种类型的争论?
受边界束缚的人
亲爱的受束缚的人,
我如何看待?在我的医生办公室,唉,他在那里继续抱怨压力、酒精和深夜披萨的稳定饮食正在把我引向毁灭。我想他希望他可以在我的嘴上设置一个障碍,但是,那样的话,他就不会是唯一一个这样想的人了。所有边界都有成本,在现实世界和软件中都是如此。也许现在最容易想到的是现实世界中的障碍作为例子。
所有国家都在一定程度上维护其物理边界。他们试图创建狭窄的区域,所有人员和货物都必须通过这些区域,以便他们的公民——或统治集团,随便您选——可以免受可能危险或有害的产品或思想的侵害。大多数人在一生中的某个时候都跨越过国界,或者他们在电影中看到过有人这样做。这个过程很简单描述:一个人受雇守卫边境,另一个人希望越过边境,通常携带一些物品,例如额外的衣服、牙刷等。过境的人向警卫出示证件,警卫问几个问题,然后这个人通常可以自由进入该国。警卫有权检查此人的行李中是否藏有违禁品,但实际上很少进行这种检查,因为检查每个人的成本太高,因此人们会根据各种标准被挑出来检查,其中大多数标准是虚假的。
有了这个心智模型,我们现在可以回到软件世界。在我们的世界中,旅行者是程序的上下文——其执行指令——它希望访问系统中某个部分的服务。操作系统中最常见的例子是系统调用,它是内核和用户程序之间的障碍。我们有系统调用的原因是,一段代码(可能是恶意的,或者更可能是错误的)直接在操作系统内核中执行是危险的。如果它这样做,它将对系统有太多的访问权限,并可能导致系统故障或导致其他程序故障。
人们将这个简单的模型推向了各种极端。在某些系统中,代码永远不允许以任何方式跨越边界。这些是消息传递系统,组件之间相互发送消息以完成工作。消息传递系统的任何组件都不会因运行来自外部的代码而损坏,因为外部执行线程永远不会进入组件。每个组件从队列中读取消息,计算答案或采取其他操作,然后返回(有时)结果。
决定是否需要边界的方法是问自己两个简单且相关的问题
* 我试图用这个障碍保护什么?
* 如果障碍失效,后果是什么?
在操作系统的情况下,答案是众所周知的。我们正在保护一个公共资源,即可以访问物理硬件的资源,免受恶意或错误代码的侵害;而失败的后果是系统崩溃、数据丢失且无法使用。
边界,像任何其他软件结构一样,都是“恰到好处,但不要太多”的问题。加利福尼亚州与美国其他州之间的边界提供了另一个来自现实世界的例子。在美国,您很少看到边境哨所,除非是在与外国接壤的地方或在海港或机场。部分原因是为了方便。如果美国每辆运货卡车都必须在每个州停靠,这将增加卡车运输公司无法容忍的时间和成本。加利福尼亚州则不同。为了保护(注意这个词)其农业,它与其他州设立了边境,以便检查过境车辆。该州已决定,不保护其边境免受果蝇和其他农业害虫侵害的代价太高,不容忽视。
在一个复杂的软件系统中,可能只有少数组件需要这种额外的保护,而找到正确的位置并实施适当的保护措施是优秀工程师的工作。
KV
KODE VICIOUS,凡人称之为 George V. Neville-Neil,为了乐趣和利润从事网络和操作系统代码的工作。他还教授各种与编程相关的课程。他的兴趣领域是代码探险、操作系统和重写您的糟糕代码(好吧,也许不是最后一个)。他获得了马萨诸塞州波士顿东北大学的计算机科学学士学位,并且是 、Usenix 协会和 IEEE 的成员。他是一位狂热的自行车爱好者和旅行家,目前居住在纽约市。
© 2009 1542-7730 /09/0200 $5.00
最初发表于 Queue vol. 7, no. 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 - 用例至关重要
虽然软件行业是一个快节奏且令人兴奋的世界,其中不断开发新的工具、技术和技巧来服务于商业和社会,但它也很健忘。在它匆忙前进的过程中,它会受到时尚潮流的影响,并且会忘记或忽略一些它面临的永恒问题的成熟解决方案。用例于 1986 年首次引入,后来普及开来,就是这些成熟的解决方案之一。