“码农们在工作中绝对不能按以前书上说的写优美清晰代码,要防御性编程,确保自己被裁,剩下的代码也是不可维护的”。
近日一则关于用“防御性编码”应对大厂裁员潮的消息冲上职场社交平台热搜。这一策略背后的逻辑是,通过晦涩难懂、难以维护的代码,确保自己一旦离职,留下的代码难以替代,从而在某种程度上提高自己的“不可替代”性。 但这种方式真的能成为程序员保住饭碗的“护城河”,还是仅仅是心理上的安慰?抑或只是一句释放压力的调侃?说起贯穿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/3315370701https://zhuanlan.zhihu.com/p/671314487https://www.51cto.com/article/710674.html推荐阅读一篇经典文章:
《老码农冒死揭开行业黑幕:如何编写无法维护的代码》