[转]培养软件开发嗅觉
程序代码和鼻子的关系其实不大,之所以用嗅觉这个词是因为大家都这样用,本来应该用感觉这个词,毕竟程序设计需要调动人体的很多器官协同工作。
其 实一直以来我都觉得嗅觉是不需要培养的,它应该是一种本能,就像我的小孩闻到酸的东西自然就会表现出奇怪的表情。当我看到不舒服的代码,自然而然就会难 受、流汗、浑身不自在。那结果是你需不需要去洗澡的问题而不是你闻得到闻不到的问题了。如果能容忍汗流浃背的感受,大可以不去洗澡而让臭汗爬满背脊。看起 来文章的标题应该换成“培养洗澡的习惯”。讨论软件开发嗅觉不是我发明的,已经有很多前辈谈过了。主要是这段时间维护一个系统的时候着实让我流了不少的 汗。然而湖南这几天因为天气原因停水停电多日,我也没有洗澡有多日了。哎!
软件开发嗅觉是分层次的一个概念,对于恶臭可能大家都能闻得到, 对于可能引发霉变的气味就不是人人都闻得到的了。所以,可以把软件开发嗅觉分为代码层次的、设计层次的、项目层次的,这两个东西没有严格的界限。代码层次 的嗅觉主要关心代码的整体表观,不涉及到深层的逻辑结构上的关系。而设计嗅觉主要是架构或者逻辑方面的东西。项目层次的涉及到软件团队的管理、软件过程的 设计、软件配置、质量管理等。所以,软件开发的嗅觉不只是代码,还有界面、配置、部署、过程等方面。如《GUI设计禁忌》一书实际上就是锻炼我们界面设计 上的嗅觉。
代码嗅觉是最基本的能力,对于写代码的为主的程序员而言是一项基本功。美观的代码让人看着很舒服,觉得是一件艺术品。缩进和空行 没有做好,看得人很容易找不着北,摸不清程序的流程结构。如果到处是常量和写死的文件路径等,可以想象这个软件有多糟糕,直接影响到的是软件的扩展性和可 维护性。大段大段相似的代码,动辄上千行的函数和过程,对人脑而言是绝对挑战。要克服这些问题,一是要形成良好的代码格式化习惯,不要为一时之快偷懒。另 外,要学会平衡软件的变与不变性,将变化的东西缩减和集中起来,把抽象做到一个灵活的平衡点上。在每次Ctrl + C/V的时候就思考一下,需不需要为此而进行一次抽象。说到底,代码嗅觉还是不需要培养,需要培养的是勤奋的工作态度。
设计层次的嗅觉是在 一定的经验积累的基础上形成的,它是在长期的代码重构的过程中慢慢发展起来的一些逻辑体系的集合。所以,要培养设计层次的嗅觉,关键是形成良好的代码重构 习惯,对于已有的系统和软件结构多做细考,看看能不能采用另外的方式以更加优雅的途径解决问题。具体实施代码重构的时候,一定要有一个明确的重构方向。而 重构的手段和步骤就是需要自己解决的了。如果重构不是小范围的(如涉及到大的框架性的),则重构方法论上需要慢慢的体会,尽量将事情控制在人脑可以操作的 范围内。
项目层次上的嗅觉就更不好说了,因为事情一旦上升到看不见摸不着的地步我们就似乎很难把握。而且,这方面的东西没有绝对的正确与否 的评判标准,但时间总会给我们一个相对残酷的毫无情面的结论。但不管怎样,一些基本的东西还是可以很容易的嗅到。比如用到几乎淘汰的系统软件,或者依赖于 特定的技术。还有像进度和质量方面没有安排,采用天马行空式的管理。或者集中开发阶段客户还在提出需求等,这些都反映出了项目层次上的味道。要清除这些异 味,对于软件过程的规划需要有一定的计划性。不要因为麻烦或者着急就冒着危险急进。
说来说去,总之不要养成偷懒的习惯,今天勤快一点明天就能少做一点。