忍者代码指南:防御性编程技巧保卫你的职业生涯 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ashin
V2EX    程序员

忍者代码指南:防御性编程技巧保卫你的职业生涯

  ashin
axiaoxin 2024-03-25 09:26:11 +08:00 6910 次点击
这是一个创建于 579 天前的主题,其中的信息可能已经有所发展或是发生改变。

忍者代码

在编程界,有一种神秘的艺术,那就是“Ninja Code”。这不是一种编程语言,而是一种编程风格,它的核心原则是让代码尽可能难以理解,从而确保你的岗位安全。毕竟,如果没有人能够读懂你的代码,那么也就没有人能够替代你。

防御性编程技巧

以下是一些精选的忍者代码技巧,它们将帮助你在编程的道路上隐身遁形:

全文阅读: https://blog.axiaoxin.com/post/ninja-coder-skills/

第 1 条附言    2024-03-25 10:21:26 +08:00
这是一篇讽刺性的文章,旨在通过展示如何编写糟糕的代码来教导我们如何编写好的代码。请务必以正确的方式理解和应用这些原则。
第 2 条附言    2024-03-25 15:46:22 +08:00
[ [真] 防御性编程和进攻性编程]( https://blog.axiaoxin.com/post/defensive-coding/)
54 条回复    2024-03-27 00:01:24 +08:00
luzemin
    1
luzemin  
   2024-03-25 09:29:21 +08:00   26
不要再污染“防御性编程”词条了
InDom
    2
InDom  
   2024-03-25 09:30:11 +08:00
这破工作一天都不想干了,要不是找不到新坑...
terranboy
    3
terranboy  
   2024-03-25 09:30:22 +08:00
这跟防御性编程有啥关系
chenliangngng
    4
chenliangngng  
   2024-03-25 09:33:48 +08:00   5
只要你的屎够臭,别人就不会进你茅坑对吧。可是你自己不觉得臭吗,现在在茅坑的是你自己
matthewzhong
    5
matthewzhong  
   2024-03-25 09:35:05 +08:00
[ [真] 防御式编程指南]( https://mp.weixin.qq.com/s/n9Aw3VZ0uZlp1nGpxhe-Ww)
xiangbohua
    6
xiangbohua  
   2024-03-25 09:35:38 +08:00
但凡有个 lead 看看代码都要把你开除
Helsing
    7
Helsing  
   2024-03-25 09:36:49 +08:00 via iPhone
直接用 AI 优化一下就完事了,有卵用
66beta
    8
66beta  
   2024-03-25 09:38:59 +08:00   1
招个人来重构一下就行了,为什么要留你的屎山
tikazyq
    9
tikazyq  
   2024-03-25 09:39:32 +08:00
不怕暗器伤了自己么
changnet
    10
changnet  
   2024-03-25 09:45:17 +08:00
自己不想干提离职就是了,别把别人带歪了。我做了这么多年,从来没见过有人因为代码写得难看被留下的
ben666
    11
ben666  
   2024-03-25 10:00:49 +08:00
根据我多年的观察,能写出好代码的真人不多,follow 好的编码风格的人也不多,。


多看看一些大牛是怎么写程序的,把心思放在怎么写出好代码上更值得。参考:
1. linux kernel 规范: https://www.kernel.org/doc/html/v4.10/process/coding-style.html
2. nginx 规范: https://nginx.org/en/docs/dev/development_guide.html#code_style
3. deperf 风格 https://github.com/baidu/dperf/
didyoudo
    12
didyoudo  
   2024-03-25 10:02:41 +08:00
这样编程代码 review 怎么过?谁能给你过?怕不是今天 review ,明天就拎包走人
nenseso
    13
nenseso  
   2024-03-25 10:05:16 +08:00
大公司都有相应的编程规范,凡是不符合规范的都不能过 code review 的,小公司小业务线,都是整条整条的线嘎掉,跟编程防御没啥关系。
xxlsize
    14
xxlsize  
   2024-03-25 10:07:33 +08:00   11
要裁你的人,都不看代码。
Promtheus
    15
Promtheus  
   2024-03-25 10:08:29 +08:00
防御我觉得可以用复杂度上 ,比如超然的设计。很高级别人看不懂。这才叫防御,就像大神的代码很精巧很难一下子看懂,甚至不敢随便修改,但是却很稳很好用。而不是这种摆烂式的防御,这样的代码直接就是让领导赶紧优化掉你啊。连同事都会吐槽赶紧把这个人开了。防御个蛋。
Sivan
    16
Sivan  
   2024-03-25 10:09:47 +08:00   1
我一般看到这种代码时就已经在想优化他的理由了。

劝退差员工花的不是 Leader 的钱,但留下差员工一定会耽误 Leader 挣钱。
jones2000
    17
jones2000  
   2024-03-25 10:12:22 +08:00
提升自己的能力才是最好的防御。
test4zhou
    18
test4zhou  
   2024-03-25 10:18:46 +08:00   2
写垃圾就写垃圾,别污名防御性编程
proxytoworld
    19
proxytoworld  
   2024-03-25 10:19:18 +08:00
什么杀软,你没有使用过 chatgpt 去混淆吗?

Javascript

// 原始代码
i = i ? (i < 0 ? Math.max(0, len + i) : i) : 0;

// 修改后的代码
let index;

if (i === undefined) {
index = 0;
} else if (i < 0) {
// 如果 i 是一个负数,那么它被认为是从数组末尾开始的索引
index = Math.max(0, len + i);
} else {
index = i;
}

解释:

我使用了一个更具描述性的变量名 index 来替代 i 。
将原始代码分解成多个 if 语句,使逻辑更易读。
添加了注释,解释了当 i 为负数时的处理逻辑。
使用 === 和 undefined 来检查 i 是否存在,这比原始代码中的隐式类型转换更加清晰。

修改后的代码保持了与原始代码相同的行为,但使用了更具描述性的变量名和注释,使逻辑更易理解。
wusheng0
    20
wusheng0  
   2024-03-25 10:19:27 +08:00 via Android
没和同事协作过吗?
wu67
    21
wu67  
   2024-03-25 10:22:06 +08:00
大可不必, 我只需要在写代码时不再关注代码质量、最佳实践等原则, 或者一句话能写完的东西, 我拆成几行甚至十多行, 写出来的玩意, 过了一周后连我自己都不一定看得懂了.
fredweili
    22
fredweili  
   2024-03-25 10:22:54 +08:00
copilot ,不能 review 的东西给 merge ?
lmshl
    23
lmshl  
   2024-03-25 10:23:54 +08:00
我们写函数式的,完全不需要“防御性编程”。
我们就正常发挥,除了同门之外别人都看不懂我们 Pure FP 代码。
关键是,自己维护起来还超 tm 轻松。
afantwtz
    24
afantwtz  
   2024-03-25 10:30:47 +08:00
@proxytoworld #19 大项目,你总不能所有文件一次扔给 GPT 吧?局部去混淆是可以的
ashin
    25
ashin  
OP
   2024-03-25 10:31:13 +08:00
> 我一般看到这种代码时就已经在想优化他的理由了。

@Sivan 如果你是一个合格的领导,首先这样的人就不会被你筛选进来。因为你是领导你就可以想优化谁就优化谁,没毛病,但是都是打工人,劝你善待同事,线上你是上司,线下说不定你还得求他办事。多想想他为什么要写这样的代码,是不是你没给够下属安全感,不比只想着自己挣钱,争取多赢。
wlfeng
    26
wlfeng  
   2024-03-25 10:34:05 +08:00
有毛用,直接重构了,我都遇到过不止一次遇到过了
oneKnow
    27
oneKnow  
  2024-03-25 10:35:42 +08:00   1
就是说,有没有一种可能,其实大多数人正常发挥就已经是你说的这个防御性编程了
ashin
    28
ashin  
OP
   2024-03-25 10:45:48 +08:00
@oneKnow 其实都无所谓,只要业务好能挣钱,代码能跑就行,哪个老板关心你代码写得怎么样啊
xFrye
    29
xFrye  
   2024-03-25 10:47:12 +08:00
别恶心人了
icyalala
    30
icyalala  
   2024-03-25 10:58:44 +08:00   1
Sivan
    31
Sivan  
   2024-03-25 11:01:32 +08:00   1
@ashin 正是一个合格的领导,才更要把这种差员工尽快筛选出去。这是对公司里所有其它同事负责,也是工作的基本素养。
如果是自己面试进来的,就及时止损减小错误。如果不是,那更责无旁贷。

到你这,差员工一定是差领导自己面进来的,差员工之所以差一定是领导给的安全感少?好家伙,差就是差,这年头还有让别人当反思怪的。你咋不让 CEO 反思一下公司为啥不能永远养着差员工搞慈善?

另外,裁掉差员工就叫「不善待同事」?因为线下我可能要求他办事?你的逻辑真的神奇,公私不分而且价值观雷人。
wtf12138
    32
wtf12138  
   2024-03-25 11:06:03 +08:00
不评价,但是我无法说服自己写这种代码
ashin
    33
ashin  
OP
   2024-03-25 11:07:50 +08:00
@Sivan 大可不必如此激动。
ashin
    34
ashin  
OP
   2024-03-25 11:08:57 +08:00
文章结尾已经说了是讽刺性文章,原文结尾说了:

> 上面的所有“建议”都是从真实的代码中提炼而来的……有时候,这些代码是由有经验的开发者写的。也许比你更有经验 ;)
codezera
    35
codezera  
   2024-03-25 11:17:22 +08:00
应该叫攻击性编程吧
vanityfairn
    36
vanityfairn  
   2024-03-25 11:21:11 +08:00
什么叫防御性编程技巧,知道么?
AV1
    37
AV1  
   2024-03-25 11:36:04 +08:00 via Android
最后你会发现,什么“防御性编程”,只防自己不防 AI 。
zoffy
    38
zoffy  
   2024-03-25 11:47:31 +08:00
很多人只要正常写代码,就已经够烂了。而且裁员很可能是商业模式的问题,跟代码关系不大
zjp
    39
zjp  
   2024-03-25 11:58:59 +08:00
这才是高级的讽刺 https://github.com/trekhleb/state-of-the-art-shitcode/blob/master/README.zh-CN.md
硬要扯上“防御性编程”“不可替代”只能让外行看个乐呵
zjp
    40
zjp  
   2024-03-25 12:01:34 +08:00
@luzemin 从谷歌搜索来看已经污染了,特别是在非程序员社区
neetz
    41
neetz  
   2024-03-25 12:11:58 +08:00 via iPhone
别恶心人,写这种代码给你同事喂屎?
doommm
    42
doommm  
   2024-03-25 12:20:18 +08:00
几年前看到过一篇《如何编写无法维护的代码》

原版: https://www.mindprod.com/jgloss/unmain.html
翻译: https://coderlmn.github.io/frontEndCourse/unmaintainable.html
proxytoworld
    43
proxytoworld  
   2024-03-25 12:35:18 +08:00
@afantwtz 啊?你自己写个混淆代码,你自己能跨很多库记住是什么意思吗?一个个函数去混淆就行了,你一个函数几万行是吗
ashin
    44
ashin  
OP
   2024-03-25 13:27:12 +08:00
@doommm @zjp 233 ,有点意思,要看过多少屎山才能写出这么多原则呀!心累史。链接已更新到文章里。
clue
    45
clue  
   2024-03-25 13:55:47 +08:00
不要教坏小朋友, 世界是变化的, 不拥抱变化的人都会慢慢被淘汰
somebody1
    46
somebody1  
   2024-03-25 14:13:25 +08:00
你所谓的防御性编程并不会保住你的饭碗,只是让公司替换你更加费劲而已,而大多数公司,往往决定了辞退一个人之后,所谓的代价大和代价小,只不过是日后评价你的手段。你的代码写的差劲,你的同事,你的领导是不可能给你重新推荐工作的,没有谁回去坑自己的朋友的。

这是小的,如果这种行为变多了之后,就是现在女性就业市场的情况。女性就业经常会问婚育情况,因为很多人经历过或者看过女性入职就怀孕,休完假就辞职的事情,这种事情只会让女性就业更差劲。利益是短期的,但损害了整个行业就业现状!
同样,程序员就业,可能会增加业务代码编写的步骤,或者对背调力度更大,总而言之,大公司有的是方法避免招聘到这种人,最后的结果只能是就业市场变的更加严格。
keith233
    47
keith233  
   2024-03-25 14:14:03 +08:00
公司都要倒闭了,还能防谁啊
FreshOldMan
    48
FreshOldMan  
   2024-03-25 15:06:30 +08:00
写垃圾代码只会浪费后面人的时间,不会有任何防御性
lstz
    49
lstz  
   2024-03-25 17:52:54 +08:00 via Android
对绝大多数人来说,无需看指南,正常发挥就行了 doge
wangtian2020
    50
wangtian2020  
   2024-03-25 17:58:57 +08:00
Mrun
    51
Mrun  
   2024-03-25 18:00:07 +08:00
这种除了坑接手的同事,不会有任何杀伤力。
难道真的以为 leader 裁员的时候,会考虑代码的维护性?
下一位牛马会自然解决屎山问题
wangyuescr
    52
wangyuescr  
   2024-03-25 22:24:41 +08:00
@chenliangngng 可能是除了茅坑没有遮风挡雨的地方了吧,阳光开朗孔乙己。
wm5d8b
    53
wm5d8b  
   2024-03-26 07:58:46 +08:00 via Android
我们现在安装的都是移动厕所,没有哪个坑位是焊在地上的,坑太臭了就连人带坑直接拉走,换个新坑位上去,再找个新人塞进去
tengyuanOasis
    54
tengyuanOasis  
   2024-03-27 00:01:24 +08:00
是防御了,本来想以此拿捏老板给我加钱 , 结果老板等不到我拿捏提前通知我说公司不干了,项目直接送给兄弟公司也不用维护了,大家当场毕业
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     861 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 26ms UTC 19:43 PVG 03:43 LAX 12:43 JFK 15:43
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86