当前位置: 欣欣网 > 码农

大厂程序员提倡「防御性编程」:故意把代码写得很烂,万一自己被裁,要确保留下的代码不可维护!

2024-03-08码农

(给哪吒编程加星标,提高Java技能)

大家好,我是哪吒。

「码农们在工作中绝对不能按以前书上说的写优美清晰代码,要防御性编程,确保自己被裁,剩下的代码也是不可维护的」。

近日一则关于用「防御性编码」应对大厂裁员潮的消息冲上职场社交平台热搜。这一策略背后的逻辑是,通过晦涩难懂、难以维护的代码,确保自己一旦离职,留下的代码难以替代,从而在某种程度上提高自己的「不可替代」性。

但这种方式真的能成为程序员保住饭碗的「护城河」,还是仅仅是心理上的安慰?抑或只是一句释放压力的调侃?

大厂裁员风暴逼出「奇招」

说起贯穿2023年全球科技领域的关键词,「裁员」恐怕逃不出前三。

多家外媒和数据机构针对海外科技公司2023年裁员情况的盘点显示,截至2023年11月中旬,科技行业已经裁撤超过24万个工作岗位,同比增长50%。前7家裁员最多的科技公司中,Google、Amazon、Microsoft、Meta等大公司赫然在列。

再看国内的情况,据公开报道,腾讯阿里和快手三家公司,今年上半年合计减员超1.6万人。此外,包括哔哩哔哩、美团、百度、拼多多、京东等公司也进行了一定程度的裁员。

面对各个大厂「降本增效」、「开猿节流」的浪潮,不少程序员们感到前所未有的不安,剑走偏锋提出各种「奇招」保住饭碗。

「防御性编程」就是其中一个 究其背后的心理,可能有以下两点

一是行业竞争的激烈不免让程序员们担心 ,如果自己写出的代码清晰可读,可能很 容易就会被他人理解和取代 。将代码变得晦涩难懂,或许可以成为保住自己在团队中竞争优势的一个「捷径」。

二是通过「防御性编码」这种「自保」手段, 就算自己被裁,留下的代码也会成为企业无法维护的「定时炸弹」 ,有一种即使「鱼死」也要争个「网破」的报复感。

用「防御性代码」是自保,还是作死?

用「防御性代码」自保的策略一出,评论区可是炸开了锅,网友们众说纷纭。主要的意见大概分为三类:

一种表示支持,你不仁休怪我不义,主打一个互相伤害。


更有大厂员工直截了当给出了防御性编码的几条入门技巧:


第二种是明确反对的,认为裁员主要和工作能力、公司战略有关,此举很难保全自己,还容易被认为价值观有问题。

第三种认为这种情况在大厂基本上不会出现,因为有代码审核(code review)机制。

也有人仿佛看穿了这是老程序员在给新手菜鸟们挖坑,直言不讳地指出这种说法只是个玩笑,不必当真:「如果你信老程序员们调侃的‘防御性编程’,那你距离被淘汰也不远了」。


客观来讲,采用「防御性编程」,就意味着一旦这位程序员离职,团队将面临巨大的技术债务,其他团队成员要花费大量时间理解和重构这些代码。有从业人员明确表示,无论从哪个角度来讲,用「防御性代码」换取保住职位的安全感并不可取。

  • 首先,从个人能力提升的角度来看,故意写晦涩难懂的「烂」代码不利于提高自身的编程水平。

  • 其次,从团队协作方面来看,如果你写的代码过于复杂或者难以理解,会严重影响项目的推进效率;此外,现代的开发环境和公司文化通常都强调代码质量和团队合作,许多公司和团队都有 code review (代码审查)机制,以确保代码的质量和可维护性。

  • 最后,故意写烂代码有极大可能会对个人职业发展产生负面影响。

  • 「防御性编程」=屎山代码?别混淆概念

    讨论至此,大家有没有发现,以上提到的「防御性编程」指的就是「烂」代码,这不就是业内常提到的「屎山代码」吗?

    有明眼人在讨论伊始就发现了,所谓的用「防御性代码」自保,其实有些偷换概念了。

    事实上, 防御性编程本身确实是编程领域的一个专业术语 ,本意是一种细致、谨慎的编程方法。它要求程序员在编写代码时预见可能出现的问题,并提前采取措施来规避这些问题。这种编程习惯更多地强调错误的预防和控制,以减少未来可能出现的灾难性后果。

    值得注意的是, 防御性编程有时也被计算机科学家称为安全编程(Secure programming) ,通常用于需要高可用性、安全性或安全性的地方。它是一种改进软件和源代码的方法,具体体现在:

  • 总体质量——减少软件错误和问题的数量。

  • 使源代码易于理解——源代码应该可读且易于理解,以便在代码审计中获得批准。

  • 使软件以可预测的方式运行,尽管有意外的输入或用户操作。

  • 说直白一点就是力求「哪怕用户是个发狂的乱按键的猴子,也玩不坏我的系统」。

    所以 此「防」(防止代码出错)非彼「防」(提防被裁员) ,只是在「开源节流」的浪潮下,防御性编程被赋予了新的含义。而 防御性编程的真正价值在于能够帮助我们编写出更加健壮、可靠的代码,而不是成为一种职场生存的策略

    为自保的「防御性编程」违法吗?

    提到程序员为防止被裁员采用「防御性编程」(屎山代码),就不由得会联想到此前程序员为发泄不满,「删库跑路」而被判刑收监的案例。

    同样是程序员为了维护自己的利益而在计算机编程方面「动手脚」,那么故意写「屎山」代码违法吗?

    据了解,【刑法】中已明确破坏计算机信息系统罪。根据【刑法】第二百八十六条,凡是违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役,后果特别严重的,处五年以上有期徒刑。

    从劳动关系的角度来讲,如果程序员写的代码能跑通,不影响系统运行,也能确保功能的正常使用,那他就完成了对其工作职责的交付,似乎也无可厚非;如果通过「防御性编程」发泄情绪,因此给公司业务造成重大损失被追责,恐怕也很难逃脱法律的制裁。

    要么不写,要么就写优雅的代码

    虽然能够理解程序员们迫于裁员压力提出自保策略的心情,但在编程的世界里,写出诗一样的代码,应该成为每个程序员追求的目标。

    写优雅代码的原因很明确,首先逻辑清晰,简单直观,这样你可以把更多精力花在功能开发上;其次清新的思维写出的代码能减少bug,也就减少了修复bug的时间;最后站在自己的角度想想,你的代码质量应该取决于你自己,而不是任何其他人或者组织,应该对自己负责,不应该让其他因素成为你降低要求的理由。

    在写优雅代码这件事上,计算机领域的大佬们也达成了共识:

    C++之父 Bjarne Stroustrup :我喜欢优雅和高效的代码,代码逻辑应该直接了当,叫缺陷难以隐蔽;尽量减少依赖关系,使之便于维护;依赖某种分层战略完善错误处理代码。性能调制最优,省得引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。

    wiki 发明者 Ward Cunningham :如果每个例程都让你感到深合已意,那就是整洁代码。如果代码让编程语言看起来像是专为解决那个问题而存在,就可以称之为漂亮的代码。

    世界级编程大师,设计模式和敏捷开发先驱 Robert C. Martin :在代码阅读中说脏话的频率,是衡量代码质量的唯一标准。

    写在最后

    无论是一时不爽的发泄,还是认真想通过这种策略「自保」,都反应出当下环境中,程序员的忧虑和不安。

    就企业的角度而言,需要重视大厂程序员们面临的困境和压力,鼓励开放、协作的编程文化,让每个程序员都能在团队中发挥自己的最大价值,从而提高团队的整体效率。

    就程序员个人而言,对于公司遵守劳动法,依法依规,给足赔偿,没必要搞小动作,不然确实是双输的局面。如果公司不遵守劳动法,躲避赔偿,应该根据劳动法来维权,不要通过不正规的手段来维权。

    此外,在这个快速变化的行业中,程序员更应该注重提升自己的技能和知识,以适应新的技术和挑战,而不是依赖于编写晦涩难懂的代码来保住自己的工作。

    参考链接:

    https://www.zhihu.com/question/633103265/answer/3315370701

    https://zhuanlan.zhihu.com/p/671314487

    https://www.51cto.com/article/710674.html

    - EOF -

    推荐阅读 点击标题可跳转

    2、

    4、 !

    5、

    ·················END·················

    看完本文有收获?请转发分享给更多人

    关注「哪吒编程」,提升Java技能

    点赞和在看就是最大的支持 ❤️