这个问题的答案是,在很短的一段时期,编写高质量代码似乎会拖慢我们的进度。与按照头脑中首先闪现的念头编写代码相比,高质量的代码需要更多的思考和努力。但如果我们编写的不仅仅是运行一次就抛之脑后的小程序,而是更有实质性的软件系统,那么编写高质量的代码通常会在中长期加快开发进程。
想象一下,我们要在家里装一块搁板。有一种“恰当”的方法,也有一种快速的“变通”方法。
〓● “恰当”的方法——我们在墙体立柱或砖石等坚固的东西上钻孔、固定螺钉,将支架固定在墙上。然后,我们将搁板安装在这些支架上。花费时间:30min。
〓● “变通”方法——购买一些胶水,将搁板粘在墙上。花费时间:10min。
看起来,用“变通”方法装搁板可以节约20min,也不会用到手钻。我们选择了这种快速的方法。现在,我们来考虑接下来发生的事情。
我们将搁板粘在墙面上,但墙面材料最有可能是一层灰泥。灰泥并不坚固,很容易开裂并大块大块地剥落。一旦我们开始使用搁板,所放东西的重量很可能导致灰泥开裂,搁板将掉下来并带下来大块的灰泥。现在,不仅我们的搁板无法使用,而且需要重新粉刷墙面(这项工作即便不需要几天,至少也要几个小时)。即便奇迹出现,搁板没有掉下来,我们也因为采用了“变通”方法而给未来带来问题。想象如下两种场景。
〓● 我们发现搁板放得不够水平(缺陷)。
〓❏ 对于有支架的搁板,我们只需要在支架和搁板之间加入一个较小的垫片。花费时间:5min。
〓❏ 对于用胶水粘上的搁板,我们必须将它从墙上揭下来,这会带下来一大块灰泥。现在,我们必须重新粉刷墙面,再将搁板装回去。花费时间:几个小时,甚至几天。
〓● 我们决定重新装饰房间(新需求)。
〓❏ 我们可以卸下螺钉,将带支架的搁板拆下来。重新装饰房间以后,我们再将搁板放回去。与搁板相关的工作花费时间:15min。
〓❏ 对于用胶水粘上的搁板,我们要么不动搁板,那么它有滴上油漆、在我们必须油漆或者铺上墙纸的地方留下不干净边缘的风险。我们也可以将搁板揭下来,那么必须重新刷上灰泥。我们只能在低劣的重新装饰工作和花几小时(甚至几天)重新涂抹墙面之中选择一个。
你应该明白了吧。最初看起来,按照“恰当”的方法做,安装一个带支架的搁板似乎毫无意义地浪费了20min,但从长期看,它很有可能节省许多时间和减少麻烦。在将来的重新装饰计划中,我们还会看到,一开始采用快速的“变通”方法,以后将迫使我们走上一条采用更多权宜之计的道路,比如在搁板周围刷油漆或者贴墙纸,而不是在重新装饰时取下搁板。
编写代码与此很相似。根据我们脑海里浮现的第一个想法编程,而不考虑代码质量,很可能一开始会节省一些时间。但我们很可能得到一个脆弱、复杂的代码库,它将越来越难以理解或推测。添加新功能或修复缺陷将变得越来越难,因为我们不得不应付破坏的情况,并重新设计一切。
你以前一定听过“欲速则不达”这句话,这是通过对生活中许多事物的观察得出的经验,在没有考虑清楚正确的方法之前,过于匆忙的行动往往导致错误,从而降低总体的速度。这也很好地总结了编写高质量代码能加快开发速度的原因,不要为了速度而鲁莽行动。
以上回答摘自《好代码 ,坏代码》
本书的目标读者是那些已经具备基本编程技能,想继续提高编程技能的人。本书适合有0~3年软件工程师工作经验的人阅读。有丰富工作经验的工程师可能发现,本书中的许多内容他们都已经掌握,但我希望他们把这本书当作指导其他同行的有用资源。
本书分享了编写鲁棒、可靠且易于团队成员理解和适应的代码的实用技巧。内容涉及如何像高效的软件工程师一样思考代码,如何编写读起来像一个结构良好的句子的函数,如何确保代码可靠且无错误;如何进行有效的单元测试,如何识别可能导致问题的代码并对其进行改进,如何编写可重用并适应新需求的代码,如何提高读者的中长期生产力;同时还介绍了如何节省开发人员及团队的宝贵时间,等等。
本书文字简洁、论述精辟、层次清晰,适合零基础的开发人员阅读,对于高等院校计算机及相关专业的学生,也具有很高的参考价值。