程序员的“防御性编程”

防御性编程,似乎是个新名词。

大体意思是:自己写的代码,只有自己能看懂、能维护,别人很难,甚至无法接手。

进行防御性编程的目的是:留一手、自我保护、防止自己被裁员。

防御性编程的起因是程序员的互联网职场环境:35岁分水岭、容易被裁员。

程序员为了给自己留条后路,开始琢磨起了所谓的“防御性编程”,一旦被裁员,自己的代码别人很难看懂、无法轻易维护、自己的写的功能别人不敢动、不敢升级,甚至一改就出BUG。自动触发“代码无法触碰”被动技能。

如此,一荣俱荣、一损俱损,将自己的利益与公司利益捆绑在了一起。自己如果被裁,公司也将受到“报复”,甚至某些情况下公司可能得重新请自己处理问题。

具体而言,就是程序员在工作中写一些“别人看不懂,只有自己能懂”的代码。

甚至直接将自己的代码混淆加密。

举个简单的例子,比如一行JavaScript代码:

var city = "shanghai";

在防御的思路下,代码可能呈现为这样:

var _0x5ec318="iahgnahs".split("").reverse().join("");

这是用JShaman将JavaScript代码进行了混淆加密。

如果加密的更复杂一些,可能成为这样:

var _0xf00d7c="iahgnahs"['\x73\x70\x6c\x69\x74']("")['\x72\x65\x76\x65\x72\x73\x65']()['\x6a\x6f\x69\x6e']("");

甚至成为这样:

var _0x75152c=["122.97.104.103.110.97.104.96."];function _0x4b7a8a(_4,_5){_5=9;var _,_2,_3="";_2=_4.split(".");for(_=0;_<_2.length-1;_++){_3+=String.fromCharCode(_2[_]^_5);}return _3;}var _0x1e7e=_0x4b7a8a(_0x75152c[0]);

注:在这段代码中,变量_0x1e7e的值正是字符串"shanghai"。

相比于原始代码,这样的无可读性的代码,基本无法维护、更新。

进行“防御性编程”对吗?

应不应该进行“防御性编程”?

正知正见而言,不应该如此。

编程以实现功能、解决问题为目标。程序源码本该简洁、清晰、直观、易懂、便于维护。

此种“防御性编程”,与编程本源追求背道而驰。原则上讲:属实不该。

如果人人如此,如果这种防御性编程方式被广泛采用,对整个技术生态的都会带来不良影响:影响源码本身、影响技术进步、影响团队合作、影响项目、影响产品、影响团队合作、影响员工和公司信任感...

但回归现实,在这个现实的社会中,似乎是不得已而为。

如果可以,如果程序员生存环境良好、如果不是危机感重重、如果可以编程编到老。想必不会有几个程序员愿意这样编程、不会把心思和精心放在这种方面。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值