代码写好的前提是知道什么是好代码。代码可以正确执行是非常低的评价标准。
好代码的特点:
鲁棒(健壮)、高效、简洁、简短、可测试、共享、可移植、可观测、可运维、可扩展。
好代码怎么来的:
代码不只是“写”出来的,编码的时间一般只占一个项目所花时间的 10%,好的代码是多个工作环节的综合结果。
(1)在编码前,需要做好需求分析和系统设计。
(2)在编码时,需要编写代码和编写单元测试。
(3)在编码后,要做集成测试、上线,以及持续运营/迭代改进。
1. 几种常见的错误现象
(1)很多人错误地认为,写代码才是最重要的事情。
不少软件工程师如果一天没有写出几行代码,就会认为工作没有进展;很多管理者也会以代码的产出量作为衡量工作结果的主要标准,催促软件工程师尽早开始写代码。
(2)在没有搞清楚项目目标之前就已经开始编码了。
在很多时候,项目目标都是通过并不准确的口头沟通来确定的。例如:“需要做什么?”“就按照×××网站的做一个吧。”
(3)在代码编写基本完成后,才发现设计思路是有问题的。
在很多项目上花费很少(甚至没有花费)时间进行系统设计,对于在设计中所隐藏的问题并没有仔细思考和求证。基于这样的设计投入和设计质量,项目出现设计失误也是很难避免的。而面对一个已经完成了基本编码的项目,如果要“动大手术”来修改它,相信每个有过类似经历的人都一定深知那种感受——越改越乱,越改越着急。
2. 研发前期多投入,收益更大
从软件研发全生命周期的角度来考量软件研发的成本。除编码外,软件测试、上线、调试等都需要很高成本。如果我们把需求搞错了,那么与错误需求有关的设计、编码、测试、上线等成本就都浪费了;如果我们把设计搞错了,那么与错误设计相关的编码、测试、上线的成本也就浪费了。
如果仔细考量那些低效的项目,会发现有非常多的类似于上面提到的“浪费”的地方。软件工程师似乎都很忙,但是在错误方向上所做的所有努力并不会产生任何价值,而大部分的加班实际上是在做错误的事情,或者是为了补救错误而努力。在这种情况下,将更多的资源和注意力向研发前期倾斜会立刻收到良好的效果。
3.需求分析和系统设计之间的差别
(1)需求分析:定义系统/软件的黑盒的行为,它是从外部(External)看到的,在说明“是什么”(What)。
(2)系统设计:设计系统/软件的白盒的机制,它是从内部(Internal)看到的,要说明“怎么做”(How)和“为什么”(Why)。
--------------------
内容选自《代码的艺术:用工程思维驱动软件开发》