当前位置: 首页 > 科技观察

为什么糟糕的科学代码胜过遵循“最佳实践”的代码

时间:2023-03-19 09:59:12 科技观察

我刚刚读到“科学代码的低质量”,它声称科学家编写的代码比“软件工程师”编写的代码更糟糕。我在一个工作环境中工作了十多年,这个工作环境主要由具有数学或物理背景的人主导,他们通常缺乏“软件工程师”的概念。最大的麻烦总是由大多数自称为程序员的人造成的。我愿意承认我至少制造了一堆我还没有清理掉的麻烦。还有其他大麻烦,幸运的是代码被浪费了,这意味着对我老板的损害仅限于浪费我自己的工资而不是对其他人的生产力产生负面影响。大多数情况下,我承认有些忏悔。我宁愿尝试让事情足够简单,我不认为我已经做到了,在过去的5-6年里,有些事情让很多人以滑稽的眼光看着我,他们已经度过了他们最好的部分在我的产品处理中有点聪明的一天。我认识一些没有明确表白的程序员。人们认为他们很有趣,他们认为他们是对的,而其他人都是疯子。此外,对于那些“不是”程序员,但更像是数学家、物理学家、算法设计师、科学家的人,您为他们列出了以下类型的犯罪:-globals/singleton,“GodObjects”等崩溃(空指针,边界错误),通过工具集/大规模测试大量减少对类似错误完全缺乏兴趣(几乎依赖工具减少)不适当地避免使用由编写的类库聪明的程序员有太多的操作符、模板和东西。看,我可以处理这种事情。我很少遇到问题,如果有人要我帮助调试代码以弄清楚这些人试图做什么。我的意思是在软件意义上。从算法上讲,也许我无能为力。但是我通常知道他们想要将什么变量传递给什么函数。并不是所有的软件工程师都是这样,他们的罪行可以完全归类如下:多重/虚拟/高破解继承主要由一些薄包装器和一些函数指针/虚函数组成,可能在中断处理程序内部或7到14个堆栈不在内部的框架文件分布在多个文件夹中使用来自地狱的动态结构来查找在运行时从各个部分拼凑而成的文件夹名称等动态加载和其他grep-defeating技术一大组难以辨认的名称,例如DriverController,ControllerManager、DriverManager、ManagerController、controlDriver无穷无尽——相互调用模板调用重载函数,具有声明的、预期的可见性,其中模板可以定义也可以不定义。装饰器、元类、代码生成等。结果是你不知道谁调用了什么或为什么调用,调试器充其量是可用的,IDE和grep正在缓慢地、可怕地死去,等等。你必须放弃试图弄清楚在眼泪不由自主地从你的眼睛里流出来之前把它拿出来。当然这是一个明显的夸张,并不是每个人都一直是罪犯,例如我原则上是“程序员”而不是“科学家”,我坚信毕竟我有积极的生产力,只是你产生那个想法。科学代码能否受益于更好的“软件工程师”?也许吧,但我不相信软件工程师会带来这些好处!简单的思考、无忧无虑的、几乎无能的人可能比铺设通往地狱的高速公路的稳健、良好的计划更好。计算机之外的“现实世界”充满了这样的例子。哦,恐怕一个真正残酷的观察是真实的,不容忽视:懒惰是很多麻烦的根源。科学家必须担心自己的纪律,因此他没有时间不必要地使代码复杂化。很多程序员在工作中并没有真正的实质内容——他们的工作是琐碎的——所以他们手上的时间太多,他们习惯于思考“API设计”,所以庞然大物出现了。(事实上??,当工作在技术上远非琐碎/或社交,并且程序员可怕的培训使他们的注意力从当前的职责上转移-该死的东西实际上是工作,易于使用,有效/廉价等?-相反,他们声称除了开始使用一个可怕的API之外什么都不负责,这个API复杂到无法信任。而且,在功能上,事情很少起作用。)英语:http://www.yosefk.com/blog/why-bad-scientific-code-beats-code-following-best-practices.html翻译:https://img.ydisp.cn/news/20220914/eb3am32cym4