当前位置: 代码迷 >> .NET面试 >> 怎么逼死维护人员
  详细解决方案

怎么逼死维护人员

热度:24   发布时间:2016-05-02 01:11:10.0
如何逼死维护人员
编写无法维护代码的技巧的重中之重是变量和方法命名的艺术。如何命名是和编译器无关的。这就让你有巨大的自由度去利用它们迷惑维护代码的程序员。

妙用 宝宝起名大全
买本宝宝起名大全,你就永远不缺变量名了。比如 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/


------解决思路----------------------
学习
------解决思路----------------------
这样做真的好么
------解决思路----------------------

------解决思路----------------------
全部给老子重新写过 
------解决思路----------------------
\up,,,,
------解决思路----------------------
这个适合在大一的时候教教那些新手
------解决思路----------------------
嗯,这说明功力不够,需要继续努力,就可以用代码画画,进入艺术领域了。比如http://ioccc.org/2013/cable2/cable2.c就画的不错
------解决思路----------------------
需要继续努力
------解决思路----------------------
哈哈哈哈 真是笑死我  最适合就是在一些 领导分不清谁好谁坏 瞎评价人的单位
------解决思路----------------------
没文档,没注释,就够了
------解决思路----------------------

------解决思路----------------------
变态啊~…………………………
------解决思路----------------------
要这么狠吗??????????????
------解决思路----------------------
这真是醉了!!!
------解决思路----------------------
醉了…………
------解决思路----------------------
引用:
嗯,这说明功力不够,需要继续努力,就可以用代码画画,进入艺术领域了。比如http://ioccc.org/2013/cable2/cable2.c就画的不错

看到这样的代码,直接受不了了~
------解决思路----------------------

------解决思路----------------------
这是作孽呀。
------解决思路----------------------

------解决思路----------------------
万一以后自己想改改呢?
------解决思路----------------------
编写如何在加密是最大问题。。。
------解决思路----------------------
茅塞顿开啊
如此奇葩的办法,是谁整理总结出来的
------解决思路----------------------
已笑趴,应该还有更多的方法,大家还需努力啊
------解决思路----------------------

------解决思路----------------------

------解决思路----------------------

------解决思路----------------------
引用:
嗯,这说明功力不够,需要继续努力,就可以用代码画画,进入艺术领域了。比如http://ioccc.org/2013/cable2/cable2.c就画的不错

画的还是“The fast brown fox jumps over a lazy dog”
------解决思路----------------------
节操碎了一地!
------解决思路----------------------
绝招:
写完代码后,编译源码->混淆->反编译->替换掉原源码

然后可以交付了
------解决思路----------------------
  相关解决方案