规范何用论

英文原文 [url]http://diveintomark.org/archives/2004/08/16/specs[/url]

大多数开发者是本蛋(morons),剩下的全是昆蛋(assholes)。我(Mark Pilgrim)不时的发现自己本人流于两个集团之一,所以不惭认定以下事实。


[b]昆蛋[/b]

昆蛋精心阅读各种规范,寻找纰漏,疏忽,甚至仅仅是错别字。他们会写出严格符合规范,但是根本没用的代码。如果有人碰巧指出他写了没用的软件,他就可以自鸣得意了,然后在博客上作无辜状哭诉,指出规范中清楚证明他的极端破败软件如何如何技术性正确的条文。

有些昆蛋会写测试用例。碰到这样的人,在规范编写过程中是有好处的,因为有时搞好了可以把这些人无穷无尽的时间和精力利用起来,在规范定稿之前找出更多纰漏。不幸的是,要利用昆蛋,需要的时间和技巧有过之而无不及。这就是为什么写出好规范要如此耗时:大多数的时间浪费在了昆蛋管理上面。


[b]本蛋[/b]

另一方面,除非被人吼了,本蛋从不主动读规范。他们做事就是淘荒几个示例程序,基于自己设想出来有限的几种情况写出看起来好用的代码。一旦交付,他们必然要被人吼,因为他们的产品很难找出哪怕一点能够符合别人用的规范。有人给他们指出规范里清楚说明他们软件破败如何严重的条文,他们于是加以修正。

本蛋一般没什么特别,但是其中有两种本蛋值得特别提及。第一种像所有本蛋一样改示例程序,交付,然后被吼,在被迫去读规范之后,他们会神奇般转变为昆蛋,辩驳说规范有歧义,或者某种程度上有误导,或者无从轻重,因为也没别人能实现,或者干脆就是错误的。这些人被称为“反社会者(sociopaths)”。不管规范定得多好,他们也不会去写与之相符的代码,所以对这些人不理也无妨。

第二种本蛋也是改示例程序,交付,然后被吼。但当他们开始习惯读规范之后,会神奇般的转变为拥护者,并且总结他们的失误写成教材。这些人被称为“专家(experts)”。几乎世上有用的教程都是由出身本蛋的专家写出来的。


[b]天使[/b]

有人会辩驳说并非所有开发者都一定是本蛋或者昆蛋,但他们想错了。例如,有人认为存在一类我(Mark Pilgrim)称之为“天使”的开发者。“天使”仔细阅读规范后写代码,并且交付他们的产品之前针对成套测试进行全面测试。不会有真正的天使存在,不过对规范撰写者来说,有这个念像能让他们自我感觉好一些。


[b]规范何用[/b]

如果你的规范不够好,本蛋就永远没有机会做出正确的东西。每有一个人抱怨他们的软件太破,就有两个昆蛋站出来说没有这回事。以仲裁本蛋与昆蛋之纷争为主要目的的规范,解决不了任何事情,争论还是会历年郁积。

如果你的规范够好,本蛋还有一线战机突破昆蛋的重围,知错能改而取得最终胜利。与此同时,除了挑规范毛病而无所事事的昆蛋们也就无的放矢,最后无趣而终,收手转去寻找其他人侵扰了。
基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法与Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模与线性化处理,从而提升纳米级定位系统的精度与动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计与优化,适用于高精度自动化控制场景。文中还展示了相关实验验证与仿真结果,证明了该方法的有效性和先进性。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模与线性化提供一种结合深度学习与现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模与模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
在 C 语言中,`*` 是一个非常重要的操作符,它的用途取决于上下文。主要有以下三种常见用法: --- ### 一、指针的声明(Pointer Declaration) 在声明指针变量时,`*` 表示该变量是一个指针类型。 #### 示例: ```c int *p; // p 是一个指向 int 类型的指针 char *ch; // ch 是一个指向 char 类型的指针 ``` #### 解释: - `int *p;` 并不是说 `*p` 是 int,而是说 `p` 是一个指向 int 的指针。 - `*` 在这里是类型修饰符,表示这是一个指针类型。 --- ### 二、解引用操作(Dereference Operator) 当指针已经指向某个内存地址后,使用 `*` 可以访问或修改该地址中存储的值。 #### 示例: ```c int a = 20; int *p = &a; printf("%d\n", *p); // 输出 20,访问的是 p 所指向的值 *p = 30; // 修改 a 的值为 30 printf("%d\n", a); // 输出 30 ``` #### 解释: - `*p` 表示访问指针 `p` 所指向的内存地址中的值。 - 这是间接访问变量的方法,常用于函数参数传递、动态内存操作等。 --- ### 三、乘法运算符(Multiplication Operator) 在非指针上下文中,`*` 表示乘法运算。 #### 示例: ```c int a = 5 * 3; // a = 15 int b = *p * 2; // 假设 *p 是 10,则 b = 20 ``` #### 解释: - 在表达式中如果 `*` 两侧是数值类型,则它表示乘法。 - 如果一侧是指针,另一侧是数值,编译器会报错。 --- ### 四、总结 `*` 的用途 | 使用场景 | 示例代码 | 含义说明 | |------------------|----------------------|----------------------------------------| | 指针声明 | `int *p;` | 声明一个指向 int 的指针 | | 解引用指针 | `*p = 10;` | 修改指针所指向的内存中的值 | | 乘法运算 | `int a = 5 * 3;` | 数值相乘 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值