易飞滔Todd | 次生进化

面向巧合编程

比起面向过程编程或者面向对象编程,其实很多程序员最常用的编程范式是面向巧合编程。当然我们可以站在高处批判这种作法,但是我想这里面的原因也值得追溯一下。

一个理想的程序员当然是热爱编程的人,所以它会对自己写的每行代码都较真,要去弄清背后的事情,但是更多的程序员只不过是打一份工而已,完成老板交待的任务就好了,然后打卡下班,所以软件工程才显得那么重要,一个函数可以写得很烂,但如果它通过了所有的测试,也就变得可以接受了。

有很多项目,不过是领导上拍脑袋想出来的,出生的一刻就注定了被丢弃的命运,虽然我们说不要写学生代码,但是毕业了不见得就不要写一次性的演示代码。工程师思维的特点之一是也解决问题为主要目标,至于为什么解决了问题,相对没有那么重要,所以你发现很多面向巧合编程的最终似乎也解决了问题,It just works。

面向巧合编程的巧合来自两个层面,一个是原理层面的,代码原理未彻底搞懂,但是实现了效果,这里面的主要风险在于测试不充分,真正运行起来面对复杂的应用方式总会有跪掉的一刻。其实还有另外一个层面的巧合,就是未彻底理解用户需求,按自己理解瞎搞了一番,结果用户接受了,原因可能是往往用户自己也不知道自己的需求是什么,所以现在都强调迭代开发,用户参与。

面向巧合编程无疑是相当危险的,它通过放弃深究原理来赢取时间,稍有不慎就更加浪费时间,作为一个有追求的程序员应该彻底摒弃这种范式,如果面对不得不写这种代码的窘境,最好的出路是换份工作,作为管理者,自然是优先去招有追求的程序员,把测试等外部监管手段作为最后的防御。毕竟,我们生活在一个现实的世界,追求有美感的东西可以帮助工程师更好的解决问题,但解决问题是最终目标。

这是一份草稿