大数跨境

写代码的人,最该“审”的是自己——批判性思维为什么是开发者的硬功夫

写代码的人,最该“审”的是自己——批判性思维为什么是开发者的硬功夫 软件工程之思
2026-11-10
6
导读:莫把批判当批评,向内审思见真形。文档代码测试事,先破己误方可行。

一提到“批判性思维”,很多人以为是“挑毛病”“跟人抬杠”。其实不是。批判性思维里的“批判”,是分析评断,不是批评;有人把它译成“明辨式思维”或“审辩式思维”,更贴切。它是“关于思考的思考”,目的是理清自己的思维,识别自己的错误和偏见,让理性最大化。它不是冥思苦想,也不是直接解决问题,而是向内的——比起发现别人的错误,更重要的是发现自己的错误。

对软件开发人员来说,这一点尤其重要。写文档、写代码、做测试,表面看都是向外产出,实际上质量高低,很大程度上取决于你能否审自己的假设、自己的逻辑、自己的盲区。

写技术文档:别把“我以为”写成“大家都懂”

技术文档最容易犯的错,是把作者脑子里的默认前提省略掉。接口文档写一句“超时后重试即可”,看似清楚,其实埋了坑:重试几次?间隔多久?接口是否幂等?失败后返回什么?写的人觉得“这还用说”,读的人却只能猜。批判性思维要求你在落笔后回头审:读者是谁?我交代了前提吗?有没有把假设写成事实?有没有反例会让这段描述失效?一份好文档,不是辞藻漂亮,而是逻辑清楚、边界明确、可被验证。先审自己的文档,比等别人来挑错强得多。

编码实现:先质疑自己的“理所当然”

编码时,开发者常常顺着直觉往下写:“这个参数不会为空”“这个循环不会太大”“这个接口不会超时”。这些“不会”就是思维里的隐藏假设。批判性思维不是让你怀疑一切,而是让你把这些假设摆到桌面上,问一句:如果它发生了呢?空数组、重复元素、超大输入、并发访问、异常返回,代码还成立吗?注释和实际逻辑一致吗?变量名有没有掩盖真实含义?很多缺陷不是不会写,而是写的时候没审自己。写完一段逻辑,先扮演自己的“反方”:什么输入能让它出错?哪条路径我没走到?先把己误找出来,代码质量就上了一个台阶。

单元/集成测试:不是证明“能跑”,而是试图“推翻”

测试最怕一种心态:跑通了,就认为没问题。单元测试只覆盖正常路径,断言只写“不抛异常”,集成测试只测联调成功,不测超时、错误码和重试——这都是在用“能跑”安慰自己。批判性思维要求测试者向内审:我的用例是不是只选了好走的路?断言够不够强?我是不是只找了支持“代码正确”的证据,忽略了可能推翻它的场景?集成测试还要审接口契约:我是不是假设对方一定按我想的返回?边界、异常、失败路径,才是测试真正该盯的地方。测试不是给代码发奖状,而是帮自己找反例。

先审自己,再谈质量

代码评审时,很多人习惯先看别人哪里不对。批判性思维提醒我们:更有价值的是先审自己。文档里的模糊表述、代码里的隐含假设、测试里的薄弱断言,都是自己思维偏见的投影。发现自己的错误,比发现别人的错误更能提升质量。GJB5000B强调验证与确认、质量保证,落到每个开发者身上,第一步不是应付检查,而是养成“关于思考的思考”的习惯:我为什么这么写?依据是什么?反例是什么?还有没有别的可能?

批判性思维不是让人变得挑剔,而是让人变得清醒。对软件开发人员来说,它是写文档时的边界感,是编码时的反例意识,是测试时的推翻冲动。先破己误,再谈交付。

最后用四句诗总结:

莫把批判当批评,
向内审思见真形。
文档代码测试事,
先破己误方可行。

参考书目:一读就上瘾的逻辑学,作者:阿健,出版社:天地出版社

作者简介:王小双,长期从事GJB5000推广、实施、评价、改进的工作,创建《软件工程之思》微信公众号,一直在《软件工程之思》分享GJB5000、CMMI、软件工程的知识和感悟。现致力于GJB5000培训、内外部评价以及软件过程改进、软件工程能力提升的研究工作。

【声明】内容源于网络
0
0
软件工程之思
软件工程之思,一个探讨软件工程的优秀实践的芳草之地,这里有前辈的成熟经验,也有晚辈的奇思妙想,无论哪种,都希望能给你带来一点启迪。软件工程之思,愿成为推进软件工程浪潮中的一朵浪花,营造软件工程燎原之势的星星之火。
内容 2705
粉丝 0
软件工程之思 软件工程之思,一个探讨软件工程的优秀实践的芳草之地,这里有前辈的成熟经验,也有晚辈的奇思妙想,无论哪种,都希望能给你带来一点启迪。软件工程之思,愿成为推进软件工程浪潮中的一朵浪花,营造软件工程燎原之势的星星之火。
总阅读29.0k
粉丝0
内容2.7k