/**
* ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
* │Esc│ │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│ ┌┐ ┌┐ ┌┐
* └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ └┘ └┘ └┘
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
* │~ `│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ BacSp │ │Ins│Hom│PUp│ │N L│ / │ * │ - │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│ | \ │ │Del│End│PDn│ │ 7 │ 8 │ 9 │ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter │ │ 4 │ 5 │ 6 │ │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ ├───┼───┼───┼───┤
* │ Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │ │
* ├─────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E││
* │ Ctrl│ │Alt │ Space │ Alt│ │ │Ctrl│ │ ← │ ↓ │ → │ │ 0 │ . │←─┘│
* └─────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
*/
敏捷开发是当下软件开发的主流模式之一,为了摒弃以往瀑布式开发带来的弊端,敏捷开发推崇在团队中以个人为单位进行简单的模块化开发,它更注重的是团队间的沟通和模块间的衔接。
为了使代码层面上的沟通更便捷,一套套的编码规范和设计模式应运而生,毫无疑问,使用这些规范模式会使得我们的代码看起来更优雅,经验也证明这更有利于团队沟通。
对于经验丰富的程序员而言,针对某种功能使用合理的设计模式编写出规范的代码、并提供满足功能调用的接口,可能是易如反掌的事。但每个团队中都不可避免的会存在生涩的程序员,例如我。对我而言这种方式就并不完全是这么回事了。
即使我作为一个项目经验如何不足的程序员,独立开发一个简单功能模块的能力还是具备的。经常在编写代码之前,我脑中已有完整的思路,我可以很清晰地向别人陈述我的编程思想,我也很有信心可以把这些思想变成代码。但事实上这可能比我想象的要难得多。很多时候我发现我花费了比预期更多的时间,却无法写出一段可执行的代码。因为我在编码的时候,想得更多的不是如何去实现这个功能,而是如何让别人更舒服地看懂我的代码。
虽然很多开发团队都强调代码的优雅性,但这是以“可运行性”为前提的。这种过分放大观赏性代码的地位,本就是本末倒置的行为。优雅只是交流的辅助手段,但不是唯一的手段。
事实上,如果仅是实现需求的功能,而不去考虑任何外因,我确信我可以很快地写出一段可运行的“烂代码”。烂代码与优雅代码相比,最表面的区别可能仅是可读性差而已。而且团队开发很多时候并不需要关心别人开发的功能是如何实现的,这些优雅性的问题自然也不会被马上指出来了。
当然,我并不是倡导每个人都去写烂代码。烂代码只是一个过度的产物,考虑到以后代码的维护性和可扩展性,必须在烂代码保证功能需求后,对其进行重构。而往往优雅地重构自己既成的代码,很可能要比优雅地写出构思中的代码要容易得多。
摒弃优雅性的约束,烂代码使得开发过程更轻松、耗用资源更少、编程的目的性更强。其实这与敏捷开发的部分理念恰好是一致的:有目的指向的简单构建、有辅助指向的重构勇气。这正是烂代码的优雅之道。
/**
* 頂頂頂頂頂頂頂頂頂 頂頂頂頂頂頂頂頂頂
* 頂頂頂頂頂頂頂 頂頂
* 頂頂 頂頂頂頂頂頂頂頂頂頂頂
* 頂頂 頂頂頂頂頂頂頂頂頂頂頂
* 頂頂 頂頂 頂頂
* 頂頂 頂頂 頂頂頂 頂頂
* 頂頂 頂頂 頂頂頂 頂頂
* 頂頂 頂頂 頂頂頂 頂頂
* 頂頂 頂頂 頂頂頂 頂頂
* 頂頂 頂頂頂
* 頂頂 頂頂 頂頂 頂頂
* 頂頂頂頂 頂頂頂頂頂 頂頂頂頂頂
* 頂頂頂頂 頂頂頂頂 頂頂頂頂
*/