创造性编程思维
在这个简单的练习中要告诉你如何做到创造性是不可能的, 但是我会告诉你一些涉
及到任务风险和开放思维的创造力。 恐惧会快速地扼杀创造力, 所以我采用, 并且
许多程序员也采用的这种思维方式使我不会惧怕风险, 并且看上去像个傻瓜。
- 我不会犯错误。
- 人们所想的并不重要。
- 我脑子里面诞生的想法才是最好的。
我只是暂时接受了这种思维, 并且在应用中用了一些小技巧。 为了这样做我会提出
一些想法, 寻找创造性的解决方案, 开一些奇奇怪怪的脑洞, 并且不会害怕发明一
些古怪的东西。 在这种思维方式下, 我通常会编写出第一个版本的糟糕代码, 用于
将想法描述出来。
然而, 当我完成我的创造性原型时, 我会将它扔掉, 并且将它变得严谨和可考。 其
它人在这里常犯的一个错误就是将创造性思维引入它们的实现阶段。 这样会产生一
种非常不同的破坏性思维, 它是创造性思维的阴暗面:
- 编写完美的软件是可行的。
- 我的大脑告诉我了真相, 它不会发现任何错误, 所以我写了完美的软件。
- 我的代码就是我自己, 批判它的人也在批判我。
这些都是错误的。 你经常会碰到一些程序员, 它们对自己创造的软件具有强烈的荣
誉感。 这很正常, 但是这种荣誉感会成为客观上改进作品的阻力。 由于这种荣誉感
和它们对作品的依恋, 它们会一直相信它们编写的东西是完美的。 只要它们忽视其
它人的对这些代码的观点, 它们就可以保护它们的玻璃心, 并且永远不会改进。
同时具有创造性思维和编写可靠软件的技巧是, 采用防御性编程的思维。
防御性编程思维
在你做出创造性原型, 并且对你的想法感觉良好之后, 就应该切换到防御性思维
了。 防御性思维的程序员大致上会否定你的代码, 并且相信下面这些事情:
- 软件中存在错误。
- 你并不是你的软件, 但你需要为错误负责。
- 你永远不可能消除所有错误, 只能降低它们的可能性。
这种思维方式让你诚实地对待你的代码, 并且为改进批判地分析它。 注意上面并没
有说你充满了错误, 只是说你的代码充满错误。 这是一个需要理解的关键, 因为它
给了你编写下一个实现的客观力量。
就像创造性思维, 防御性编程思维也有阴暗面。 防御性程序员是一个惧怕任何事情
的偏执狂, 这种恐惧使他们远离可能的错误或避免犯错误。 当你尝试做到严格一致
或正确时这很好, 但是它是创造力和专注的杀手。
八个防御性编程策略
一旦你接受了这一思维, 你可以重新编写你的原型, 并且遵循下面的八个策略, 它
们被我用于尽可能把代码变得可靠。 当我编写代码的“实际”版本, 我会严格按照下
面的策略, 并且尝试消除尽可能多的错误, 以一些会破坏我软件的人的方式思考。
- 永远不要信任输入
永远不要提供的输入, 并总是校验它。 - 避免错误
如果错误可能发生, 不管可能性多低都要避免它。 - 过早暴露错误
过早暴露错误, 并且评估发生了什么、 在哪里发生以及如何修复。 - 记录假设
清楚地记录所有先决条件, 后置条件以及不变量。 - 防止过多的文档
不要在实现阶段就编写文档, 它们可以在代码完成时编写。 - 使一切自动化
使一切自动化, 尤其是测试。 - 简单化和清晰化
永远简化你的代码, 在没有牺牲安全性的同时变得最小和最整洁。 - 质疑权威
不要盲目遵循或拒绝