如何逼死维护人员

whatdoyousay 2014-12-11 01:09:49
加精
编写无法维护代码的技巧的重中之重是变量和方法命名的艺术。如何命名是和编译器无关的。这就让你有巨大的自由度去利用它们迷惑维护代码的程序员。

妙用 宝宝起名大全
买本宝宝起名大全,你就永远不缺变量名了。比如 Fred 就是个好名字,而且键盘输入它也省事。如果你就想找一些容易输入的变量名,可以试试 adsf 或者 aoeu之类。

单字母变量名
如果你给变量起名为a,b,c,用简单的文本编辑器就没法搜索它们的引用。而且,没人能猜到它们的含义。

创造性的拼写错误
如果你必须使用描述性的变量和函数名,那就把它们都拼错。还可以把某些函数和变量名拼错,再把其他的拼对(例如 SetPintleOpening 和 SetPintalClosing) ,我们就能有效地将grep或IDE搜索技术玩弄于股掌之上。这招超级管用。还可以混淆不同语言(比如colour — 英国英语,和 color — 美国英语)。

抽象
在命名函数和变量的时候,充分利用抽象单词,例如 it, everything, data, handle, stuff, do, routine, perform 和数字,像这样命名的好例子有 routineX48, PerformDataFunction, DoIt, HandleStuff还有 do_args_method。

首字母大写的缩写
用首字母大写缩写(比如GNU 代表 GNU’s Not Unix) 使代码简洁难懂。真正的汉子(无论男女)从来不说明这种缩写的含义,他们生下来就懂。

辞典大轮换
为了打破沉闷的编程气氛,你可以用一本辞典来查找尽量多的同义词。例如 display, show, present。在注释里含糊其辞地暗示这些命名之间有细微的差别,其实根本没有。不过,如果有两个命名相似的函数真的有重大差别,那倒是一定要确保它们用相同的单词来命名(例如,对于 “写入文件”, “在纸上书写” 和 “屏幕显示” 都用 print 来命名)。 在任何情况下都不要屈服于编写明确的项目词汇表这种无理要求。你可以辩解说,这种要求是一种不专业的行为,它违反了结构化设计的信息隐藏原则。

首字母大写
随机地把单词中间某个音节的首字母大写。例如 ComputeReSult()。

重用命名
在语言规则允许的地方,尽量把类、构造器、方法、成员变量、参数和局部变量都命名成一样。更高级的技巧是在{}块中重用局部变量。这样做的目的是迫使维护代码的程序员认真检查每个实例的作用域。特别是在Java代码中,可以把普通方法伪装成构造器。

使用非英语字母
在命名中偷偷使用不易察觉的非英语字母,例如

typedef struct { int i; } ínt;

看上去没啥不对是吧?嘿嘿嘿…这里的第二个 ínt 的 í 实际上是东北欧字母,并不是英语中的 i 。在简单的文本编辑器里,想看出这一点点区别几乎是不可能的。

巧妙利用编译器对于命名长度的限制
如果编译器只区分命名的前几位,比如前8位,那么就把后面的字母写得不一样。比如,其实是同一个变量,有时候写成 var_unit_update() ,有时候又写成 var_unit_setup(),看起来是两个不同的函数调用。而在编译的时候,它们其实是同一个变量 var_unit。

下划线,真正的朋友
可以拿 _ 和 __ 作为标示符。

混合多语言
随机地混用两种语言(人类语言或计算机语言都行)。如果老板要求使用他指定的语言,你就告诉他你用自己的语言更有利于组织你的思路,万一这招不管用,就去控诉这是语言歧视,并威胁起诉老板要求巨额精神损失赔偿。

扩展 ASCII 字符
扩展 ASCII 字符用于变量命名是完全合法的,包括 ß, Ð, 和 ñ 等。在简单的文本编辑器里,除了拷贝/粘贴,基本上没法输入。

其他语言的命名
使用外语字典作为变量名的来源。例如,可以用德语单词 punkt 代替 point。除非维护代码的程序员也像你一样熟练掌握了德语. 不然他就只能尽情地在代码中享受异域风情了。

数学命名
用数学操作符的单词来命名变量。例如:

openParen = (slash + asterix) / equals;
(左圆括号 = (斜杠 + 星号)/等号;)

令人眩晕的命名
用带有完全不相关的感情色彩的单词来命名变量。例如:

marypoppins = (superman + starship) / god;

(欢乐满人间 = (超人 + 星河战队)/上帝;)这一招可以让阅读代码的人陷入迷惑之中,因为他们在试图想清楚这些命名的逻辑时,会不自觉地联系到不同的感情场景里而无法自拔。

何时使用 i
永远不要把 i 用作最内层的循环变量。 用什么命名都行,就是别用i。把 i 用在其他地方就随便了,用作非整数变量尤其好。

惯例 — 明修栈道,暗度陈仓
忽视 Java 编码惯例,Sun 自己就是这样做的。幸运的是,你违反了它编译器也不会打小报告。这一招的目的是搞出一些在某些特殊情况下有细微差别的名字来。如果你被强迫遵循驼峰法命名,你还是可以在某些模棱两可的情况下颠覆它。例如,inputFilename 和 inputfileName 两个命名都可以合法使用。在此基础上自己发明一套复杂到变态的命名惯例,然后就可以痛扁其他人,说他们违反了惯例。

小写的 l 看上去很像数字 1
用小写字母 l 标识 long 常数。例如 10l 更容易被误认为是 101 而不是 10L 。 禁用所有能让人准确区分 uvw wW gq9 2z 5s il17|!j oO08 `’” ;,. m nn rn {[()]} 的字体。要做个有创造力的人。
把全局命名重用为私有
在A 模块里声明一个全局数组,然后在B 模块的头文件里再声明一个同名的私有数组,这样看起来你在B 模块里引用的是那个全局数组,其实却不是。不要在注释里提到这个重复的情况。
误导性的命名
让每个方法都和它的名字蕴含的功能有一些差异。例如,一个叫 isValid(x)的方法在判断完参数x的合法性之后,还顺带着把它转换成二进制并保存到数据库里。

…………………………
最后问一句,这真的是黑幕么,国内有没有这样的情况

高能引用链接:http://blog.jobbole.com/80241/

...全文
13007 160 打赏 收藏 转发到动态 举报
写回复
用AI写文章
160 条回复
切换为时间正序
请发表友善的回复…
发表回复
夜之羽 2016-01-28
  • 打赏
  • 举报
回复
醉了,,,,,,
xxurong 2016-01-26
  • 打赏
  • 举报
回复
这样好吗
dongmusic 2016-01-25
  • 打赏
  • 举报
回复
哈哈,这篇文章不错,写的很有意思。
zilin110 2015-09-29
  • 打赏
  • 举报
回复
第一个就给跪了.
「已注销」 2015-03-20
  • 打赏
  • 举报
回复
能写出这样的代码的才叫高手呢。
BrightFireOfCy 2015-02-26
  • 打赏
  • 举报
回复
引用 31 楼 phommy 的回复:
绝招: 写完代码后,编译源码->混淆->反编译->替换掉原源码 然后可以交付了
这个牛叉!
kiba518 2015-02-10
  • 打赏
  • 举报
回复
我现在就在维护这样的代码。。然后想改还不行,因为写这些代码的人一部分离职 一部分已经是高管了,你总不能天天骂你的领导是SB把
於黾 2015-02-05
  • 打赏
  • 举报
回复
话说,其中一条 想办法让客户的不同电脑运行在不同的版本上 这是很有技术含量的活
Eiceblue 2015-02-05
  • 打赏
  • 举报
回复
维护人员拿刀逼你解释
lxllb8 2015-02-04
  • 打赏
  • 举报
回复
太狠了吧,会出人命的!
  • 打赏
  • 举报
回复
引用 129 楼 flyingsilverfox 的回复:
I believe what the post says is a joke, he describes what you should not do. You just need to do the opposite what he said, then you are a good programmer.
By the way,this is a Chinese forum,you can go to the English forum "forums.asp.net" to talk.
  • 打赏
  • 举报
回复
引用 129 楼 flyingsilverfox 的回复:
I believe what the post says is a joke, he describes what you should not do. You just need to do the opposite what he said, then you are a good programmer.
是的,我们都知道这个道理。这个帖子只是在“非技术区”的,所以我们也只是简单的讨论而已,不会真的这么做的
slain 2015-02-04
  • 打赏
  • 举报
回复
是正话反说吧
lanlan_860701 2015-01-22
  • 打赏
  • 举报
回复
嘻嘻我们要做能让维护看的清清楚楚的程序猿,不过我感觉还是写代码规范点,这样交的别人手里不会被骂
就是那个党伟 2015-01-22
  • 打赏
  • 举报
回复
想想也是醉了
kis龍 2015-01-21
  • 打赏
  • 举报
回复
引用 8 楼 github_22161131 的回复:
嗯,这说明功力不够,需要继续努力,就可以用代码画画,进入艺术领域了。比如http://ioccc.org/2013/cable2/cable2.c就画的不错
厉害
qq_19605961 2015-01-20
  • 打赏
  • 举报
回复
中国最爱干的事,害人害己!
二巯丙醇 2015-01-17
  • 打赏
  • 举报
回复
qq525093551_ 2015-01-17
  • 打赏
  • 举报
回复
不错 很好 学xi了
hellohellott 2015-01-16
  • 打赏
  • 举报
回复
高端黑
加载更多回复(131)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧