知心提示:如何写出让同事无法维护的代码?

2021-09-17 16:07:33  晓掌柜  版权声明:本文为站长原创文章,转载请写明出处


一、前言

    顾名思义本文就是教你怎么写出让同事无法维护的代码。但是,Just For Fun罢了,你懂得。


二、友好的命名

    ① 容易输入,且简单高效的变量名 比如:asdf、qwer

    ② 单字母的变量名 ,比如:a,b,c, x,y,z(如果不够用,可以考虑a1,a2,a3,a4,….)

    ③ 有创意地拼写错误 ,比如:Srping,Wrok,让同事无法很好的使用搜索

    ④ 抽象命名 ,比如:ProcessData, TcEntity, GetData… 抽象到就跟什么都没说一样。

    ⑤ 自定义缩写 ,比如:WTF,RTFSC …… (使用拼音缩写也同样给力,比如:BT,TMD,TJJTDS)

    ⑤ 随机大写字母 ,比如:gEtnuMbER..

    ⑥ 重用命名 ,在内嵌的语句块中使用相同的变量名有奇效。

    ⑦ 使用重音字母 ,比如:int ínt(第二个 ínt不是int)

    ⑧ 使用下划线 ,比如:_, __, ___。

    ⑨ 使用不同的语言 ,比如混用英语,德语,或是中文拼音。

    ⑩ 使用字符命名 ,比如:slash, asterix, comma…


三、代码伪装

    ① 把代码和注释交织在一起


for(j=0; j<array_len; j+ =8)
{
total += array[j+0 ];
total += array[j+1 ];
total += array[j+2 ]; /* Main body of
total += array[j+3]; * loop is unrolled
total += array[j+4]; * for greater speed.
total += array[j+5]; */
total += array[j+6 ];
total += array[j+7 ];
}

    ② 前后端命名不一致:前端显示order,后端为bill

    ③ 隐藏全部变量:把使用的全局变量以函数参数的方式传递给函数,这样可以让人觉得那个变量不是全局变量。

    ④ 相似命名:如:单词相似,swimmer 和 swimner,字母相似:ilI1| 或 oO08。parselnt 和 parseInt, D0Calc 和 DOCalc。

        还有这一组:xy_Z, xy__z, _xy_z, _xyz, XY_Z, xY_z, Xy_z。

    ⑤ 重载函数:使用相同的函数名,但是其功能和具体实现完全没有关系。

    ⑥ 操作符重载 :重载操作符可以让你的代码变得诡异,感谢CCTV,感谢C++。这个东西是可以把混乱代码提高到一种艺术的形式。

        比如:重载一个类的 ! 操作符,但实际功能并不是取反,让其返回一个整数。于是,如果你使用 ! ! 操作符,那么,有意思的事就

        发生了—— 先是调用类的重载 ! 操作符,然后把其返回的整数给 ! 成了 布尔变量,如果是 !!! 呢?呵呵。


四、文档和注释

    ① 在注释中撒谎:或者说你不用真的去撒谎,只需在改代码的时候不要更新注释就可以了。

    ② 在注释中写废话: /* 这是一个使用于全人类的接口,功能进行中... */

    ③ 注释不说明原因: 这里的state要强制设置为1...这个汇率应取值为9999

    ④ 不要注释秘密: 产品经理说这里休眠1s,后期让客户掏钱优化

    ⑤ 在文档或注释中发泄不满: 乞丐VIP,穷逼用户,傻逼业务


五、程序设计

    ① Java Casts :Java的类型转型是天赐之物。每一次当你从Collection里取到一个object的时候,你都需要把其转回原来的类型。

        因些,这些转型操作会出现在N多的地方。如果你改变了类型,那么你不一定能改变所有的地方。而编译器可能能检查到,也可能

        检查不到。

    ② 利用Java的冗余 :比如:Bubblegum b = new Bubblegom(); 和 swimmer = swimner + 1; 注意变量间的细微差别。

    ③ 从不验证 :从不验证输入的数据,从不验证函数的返回值。这样做可以向大家展示你是多么的信任公司的设备和其它程序员

    ④ 不要封装 :调用者需要知道被调用的所有的细节。

    ⑤ 克隆和拷贝 :为了效率,你要学会使用copy + paste。你几乎都不用理解别人的代码,你就可以高效地编程了。

    ⑥ 包装,包装,再包装 :把你所有的API都包装上6到8遍,包装深度多达4层以上。然后包装出相似的功能。

    ⑦ 没有秘密 :把所有的成员都声明成public的。

    ⑧ 分解条件表达式 :如:把 a==100分解成,a>99 && a<101

    ⑨ 间接转型 :如:把double转string,写成new Double(d).toString() 而不是 Double.toString(d)

    ⑩ 循环 :千万不可用for(int i=0; i<n; i++)使用while代替for,交换n和i,把<改成<=,使用 i–调整步伐 。


六、测试

    ① 从不测试 :千万不要测试任何的出错处理,从来也不检测系统调用的返回值。

    ② 永远不做性能测试 :如果不够快就告诉用户换一个更快的机器。如果你一做测试,那么就可能会要改你的算法,甚至重设计

        ,重新架构。

    ③ 不要写测试案例 :不要做什么代码覆盖率测试,自动化测试。

    ④ 测试是懦夫行为 :一个勇敢的程序员是根本不需要这一步的。太多的程序太害怕他们的老板,害怕失去工作,害怕用户抱怨,

        甚至被起诉。这种担心害怕直接影响了生产力。如果你对你的代码有强大的信心,那还要什么测试呢?真正的程序员是不需要

        测试自己的代码的。


七、其他

    ① 颠覆Help Desk :你要确保你那满是bug的程序永远不要被维护团队知道。当用户打电话和写邮件给你的时候,你就不要理会,

        就算要理会,让用户重做系统或是告诉用户其帐号有问题,是标准的回答。

    ② 闭嘴 :对于一些像y2k这样的大bug,你要学会守口如瓶,不要告诉任何人,包括你的亲人好友以及公司的同事和管理层,这样

        当到那一天的时候,你就可以用这个bug挣钱了。

    ③ 忽悠 :你会学会忽悠,就算你的代码写得很烂,你也要为其挂上GoF设计模式的标签,就算你的项目做得再烂,你也要为其挂上

        敏捷的标签,让整个团队和公司,甚至整个业界都开始躁动,这样才能真正为难维护的代码铺平道路。




最新评论: