点击上方“C语言与CPP编程”,选择“关注/置顶/星标公众号”1 Z6 o6 W# ^ i$ z" E# n
干货福利,第一时间送达!
8 H! I) m1 l( G/ w* T% }4 ?* y& N) Y1 b/ d
bpfpcswld50640106058051.png
a9 X4 j4 K5 f a8 w! J& b最近有小伙伴说没有收到当天的文章推送,这是因为微信改了推送机制,有一部分小伙伴刷不到当天的文章,一些比较实用的知识和信息,错过了就是错过了,建议大家加个星标??,就能第一时间收到推送。
2 }, p! D0 r* }
0kfgexapaie640106058152.png
& C) f$ U; F" L) D6 }
转自:51CTO技术栈 - 如烟
! s& T$ }+ f! w- L5 T0 j6 R“码农们在工作中绝对不能按以前书上说的写优美清晰代码,要防御性编程,确保自己被裁,剩下的代码也是不可维护的”。
6 f' j+ X) t3 t2 _- a( X; }) d近日一则关于用“防御性编码”应对大厂裁员潮的消息冲上职场社交平台热搜。这一策略背后的逻辑是,通过晦涩难懂、难以维护的代码,确保自己一旦离职,留下的代码难以替代,从而在某种程度上提高自己的“不可替代”性。 9 W; B; l) B8 e; V
xr0ybwhtyro640106058252.jpg
& u0 b, A o' H6 g! N% u9 m
* O4 K. l: w& g& ]: Z但这种方式真的能成为程序员保住饭碗的“护城河”,还是仅仅是心理上的安慰?抑或只是一句释放压力的调侃?大厂裁员风暴逼出“奇招”说起贯穿2023年全球科技领域的关键词,“裁员”恐怕逃不出前三。多家外媒和数据机构针对海外科技公司2023年裁员情况的盘点显示,截至2023年11月中旬,科技行业已经裁撤超过24万个工作岗位,同比增长50%。前7家裁员最多的科技公司中,Google、Amazon、Microsoft、Meta等大公司赫然在列。再看国内的情况,据公开报道,腾讯阿里和快手三家公司,今年上半年合计减员超1.6万人。此外,包括哔哩哔哩、美团、百度、拼多多、京东等公司也进行了一定程度的裁员。面对各个大厂“降本增效”、“开猿节流”的浪潮,不少程序员们感到前所未有的不安,剑走偏锋提出各种“奇招”保住饭碗。“防御性编程”就是其中一个。究其背后的心理,可能有以下两点:一是行业竞争的激烈不免让程序员们担心,如果自己写出的代码清晰可读,可能很容易就会被他人理解和取代。将代码变得晦涩难懂,或许可以成为保住自己在团队中竞争优势的一个“捷径”。 [0 ~. \; c; h7 t* Q5 m
yoiw25rxokm640106058352.png
7 e- i( y" o4 q4 t2 Y, E* W% X- e( u+ @
二是通过“防御性编码”这种“自保”手段,就算自己被裁,留下的代码也会成为企业无法维护的“定时炸弹”,有一种即使“鱼死”也要争个“网破”的报复感。
. x# K3 A* }. Q& N. n; [用“防御性代码”是自保,还是作死?用“防御性代码”自保的策略一出,评论区可是炸开了锅,网友们众说纷纭。主要的意见大概分为三类:一种表示支持,你不仁休怪我不义,主打一个互相伤害。# L/ P6 ^1 R3 [# C- l
1rs2u30hkgn640106058452.png
+ t, \6 r2 K; R* O$ q更有大厂员工直截了当给出了防御性编码的几条入门技巧:* Y2 B Q/ k' Y* ^3 x
hyn000y24nx640106058552.png
5 {( Y+ D5 X0 F! N, ?; ~& |' W% f
第二种是明确反对的,认为裁员主要和工作能力、公司战略有关,此举很难保全自己,还容易被认为价值观有问题。
/ I- E; A" O* d
k3txn0w3uzm640106058652.png
+ Q5 C. n7 v8 N9 L$ [& I1 x 第三种认为这种情况在大厂基本上不会出现,因为有代码审核(code review)机制。
4 E. P5 z# ]* }0 Q+ ~1 N; q% W0 \
bp3d0v0qicq640106058752.jpg
: G# b. G5 R/ I7 J: J& n8 p也有人仿佛看穿了这是老程序员在给新手菜鸟们挖坑,直言不讳地指出这种说法只是个玩笑,不必当真:“如果你信老程序员们调侃的‘防御性编程’,那你距离被淘汰也不远了”。
x- N. E2 e" O
2 R" m. n' ~* [6 n [
aoicabcco3f640106058852.png
8 h1 e, O, n1 v2 z; q9 a
9 }& f# n; c, Q
5wakspkqlss640106058952.png
. ]0 M1 Z4 N* ]) g/ i4 g
客观来讲,采用“防御性编程”,就意味着一旦这位程序员离职,团队将面临巨大的技术债务,其他团队成员要花费大量时间理解和重构这些代码。有从业人员明确表示,无论从哪个角度来讲,用“防御性代码”换取保住职位的安全感并不可取。首先,从个人能力提升的角度来看,故意写晦涩难懂的“烂”代码不利于提高自身的编程水平。 Z$ V$ Y* R$ ] |; I
其次,从团队协作方面来看,如果你写的代码过于复杂或者难以理解,会严重影响项目的推进效率;此外,现代的开发环境和公司文化通常都强调代码质量和团队合作,许多公司和团队都有 code review (代码审查)机制,以确保代码的质量和可维护性。, g9 |) [5 N1 s) ?# ]* w7 J( f
最后,故意写烂代码有极大可能会对个人职业发展产生负面影响。 “防御性编程”=屎山代码?别混淆概念讨论至此,大家有没有发现,以上提到的“防御性编程”指的就是“烂”代码,这不就是业内常提到的“屎山代码”吗?有明眼人在讨论伊始就发现了,所谓的用“防御性代码”自保,其实有些偷换概念了。
& E* s* @/ |9 Q* q4 t3 W, B4 O
rxankcqhjh3640106059052.png
5 H3 W+ l; v& y* J事实上,防御性编程本身确实是编程领域的一个专业术语,本意是一种细致、谨慎的编程方法。它要求程序员在编写代码时预见可能出现的问题,并提前采取措施来规避这些问题。这种编程习惯更多地强调错误的预防和控制,以减少未来可能出现的灾难性后果。
6 x- d' G; N2 @* ^值得注意的是,防御性编程有时也被计算机科学家称为安全编程(Secure programming),通常用于需要高可用性、安全性或安全性的地方。它是一种改进软件和源代码的方法,具体体现在:总体质量——减少软件错误和问题的数量。9 D) C0 u5 G$ b0 R% S5 S
使源代码易于理解——源代码应该可读且易于理解,以便在代码审计中获得批准。& j5 b$ }, l; J1 i7 T* [$ L/ P4 L) n
使软件以可预测的方式运行,尽管有意外的输入或用户操作。; L7 v" E+ T/ @. R( H' k' n
说直白一点就是力求“哪怕用户是个发狂的乱按键的猴子,也玩不坏我的系统”。所以此“防”(防止代码出错)非彼“防”(提防被裁员),只是在“开源节流”的浪潮下,防御性编程被赋予了新的含义。而防御性编程的真正价值在于能够帮助我们编写出更加健壮、可靠的代码,而不是成为一种职场生存的策略。 为自保的“防御性编程”违法吗?提到程序员为防止被裁员采用“防御性编程”(屎山代码),就不由得会联想到此前程序员为发泄不满,“删库跑路”而被判刑收监的案例。同样是程序员为了维护自己的利益而在计算机编程方面“动手脚”,那么故意写“屎山”代码违法吗?据了解,《刑法》中已明确破坏计算机信息系统罪。根据《刑法》第二百八十六条,凡是违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役,后果特别严重的,处五年以上有期徒刑。从劳动关系的角度来讲,如果程序员写的代码能跑通,不影响系统运行,也能确保功能的正常使用,那他就完成了对其工作职责的交付,似乎也无可厚非;如果通过“防御性编程”发泄情绪,因此给公司业务造成重大损失被追责,恐怕也很难逃脱法律的制裁。. n" y) r) H" m8 g. ^0 k Z
3tywar30mzb640106059152.jpg
' p& {# ~5 Z0 W6 N6 z7 M 要么不写,要么就写优雅的代码虽然能够理解程序员们迫于裁员压力提出自保策略的心情,但在编程的世界里,写出诗一样的代码,应该成为每个程序员追求的目标。写优雅代码的原因很明确,首先逻辑清晰,简单直观,这样你可以把更多精力花在功能开发上;其次清新的思维写出的代码能减少bug,也就减少了修复bug的时间;最后站在自己的角度想想,你的代码质量应该取决于你自己,而不是任何其他人或者组织,应该对自己负责,不应该让其他因素成为你降低要求的理由。在写优雅代码这件事上,计算机领域的大佬们也达成了共识:C++之父 Bjarne Stroustrup:我喜欢优雅和高效的代码,代码逻辑应该直接了当,叫缺陷难以隐蔽;尽量减少依赖关系,使之便于维护;依赖某种分层战略完善错误处理代码。性能调制最优,省得引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。wiki 发明者 Ward Cunningham:如果每个例程都让你感到深合已意,那就是整洁代码。如果代码让编程语言看起来像是专为解决那个问题而存在,就可以称之为漂亮的代码。世界级编程大师,设计模式和敏捷开发先驱 Robert C. Martin:在代码阅读中说脏话的频率,是衡量代码质量的唯一标准。除了国外的大佬,小米科技创始人雷军也非常提倡代码的简洁性和可读性。
6 c, J. O6 V5 E6 j" v3 l写在最后无论是一时不爽的发泄,还是认真想通过这种策略“自保”,都反应出当下环境中,程序员的忧虑和不安。就企业的角度而言,需要重视大厂程序员们面临的困境和压力,鼓励开放、协作的编程文化,让每个程序员都能在团队中发挥自己的最大价值,从而提高团队的整体效率。就程序员个人而言,对于公司遵守劳动法,依法依规,给足赔偿,没必要搞小动作,不然确实是双输的局面。如果公司不遵守劳动法,躲避赔偿,应该根据劳动法来维权,不要通过不正规的手段来维权。此外,在这个快速变化的行业中,程序员更应该注重提升自己的技能和知识,以适应新的技术和挑战,而不是依赖于编写晦涩难懂的代码来保住自己的工作。参考链接:4 c4 f' w& g# c- L
https://www.zhihu.com/question/633103265/answer/3315370701https://zhuanlan.zhihu.com/p/671314487https://www.51cto.com/article/710674.html——EOF——一个我十分佩服的朋友阿秀开发了一个互联网大厂面试真题记录网站,支持按照行业、公司、岗位、科目、考察时间等查看面试真题,有意者欢迎扫码下方二维码适用~
* ?! t4 _5 {; l5 ~& I1 h. _, p# o) q
cwnmw4kqrf5640106059253.png
+ V4 `( f9 q7 J( D
0 Z. L& `. `. ?* {' ]9 @5 E
你好,我是飞宇,本硕均于某中流985 CS就读,先后于百度搜索以及字节跳动电商等部门担任Linux C/C++后端研发工程师。! V ]- D, H* E6 I
同时,我也是知乎博主@韩飞宇,日常分享C/C++、计算机学习经验、工作体会,欢迎点击此处查看我以前的学习笔记&经验&分享的资源。
/ Y: T+ j0 }- V我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。9 l3 D6 R; ~8 J: e
bkn5cbgxzoh640106059353.png
% s( U7 M8 j& m! R: j; }
欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会。2 W. ?* }6 u% m) e( o5 n$ ]% c* F( J
1 F& b; H7 H7 g% P
4xtz3niilma640106059453.png
9 ]# g3 f6 C- h) d( {; F2 h
加个微信,打开另一扇窗. G+ ]# m$ \+ m) z
fim1xe0pqcz640106059553.gif
|