`
izuoyan
  • 浏览: 9405849 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

培养软件开发嗅觉

阅读更多

程序代码和鼻子的关系其实不大,之所以用嗅觉这个词是因为大家都这样用,本来应该用感觉这个词,毕竟程序设计需要调动人体的很多器官协同工作。

其实一直以来我都觉得嗅觉是不需要培养的,它应该是一种本能,就像我的小孩闻到酸的东西自然就会表现出奇怪的表情。当我看到不舒服的代码,自然而然就会难受、流汗、浑身不自在。那结果是你需不需要去洗澡的问题而不是你闻得到闻不到的问题了。如果能容忍汗流浃背的感受,大可以不去洗澡而让臭汗爬满背脊。看起来文章的标题应该换成“培养洗澡的习惯”。讨论软件开发嗅觉不是我发明的,已经有很多前辈谈过了。主要是这段时间维护一个系统的时候着实让我流了不少的汗。然而湖南这几天因为天气原因停水停电多日,我也没有洗澡有多日了。哎!

软件开发嗅觉是分层次的一个概念,对于恶臭可能大家都能闻得到,对于可能引发霉变的气味就不是人人都闻得到的了。所以,可以把软件开发嗅觉分为代码层次的、设计层次的、项目层次的,这两个东西没有严格的界限。代码层次的嗅觉主要关心代码的整体表观,不涉及到深层的逻辑结构上的关系。而设计嗅觉主要是架构或者逻辑方面的东西。项目层次的涉及到软件团队的管理、软件过程的设计、软件配置、质量管理等。所以,软件开发的嗅觉不只是代码,还有界面、配置、部署、过程等方面。如《GUI设计禁忌》一书实际上就是锻炼我们界面设计上的嗅觉。

代码嗅觉是最基本的能力,对于写代码的为主的程序员而言是一项基本功。美观的代码让人看着很舒服,觉得是一件艺术品。缩进和空行没有做好,看得人很容易找不着北,摸不清程序的流程结构。如果到处是常量和写死的文件路径等,可以想象这个软件有多糟糕,直接影响到的是软件的扩展性和可维护性。大段大段相似的代码,动辄上千行的函数和过程,对人脑而言是绝对挑战。要克服这些问题,一是要形成良好的代码格式化习惯,不要为一时之快偷懒。另外,要学会平衡软件的变与不变性,将变化的东西缩减和集中起来,把抽象做到一个灵活的平衡点上。在每次Ctrl + C/V的时候就思考一下,需不需要为此而进行一次抽象。说到底,代码嗅觉还是不需要培养,需要培养的是勤奋的工作态度。

设计层次的嗅觉是在一定的经验积累的基础上形成的,它是在长期的代码重构的过程中慢慢发展起来的一些逻辑体系的集合。所以,要培养设计层次的嗅觉,关键是形成良好的代码重构习惯,对于已有的系统和软件结构多做细考,看看能不能采用另外的方式以更加优雅的途径解决问题。具体实施代码重构的时候,一定要有一个明确的重构方向。而重构的手段和步骤就是需要自己解决的了。如果重构不是小范围的(如涉及到大的框架性的),则重构方法论上需要慢慢的体会,尽量将事情控制在人脑可以操作的范围内。

项目层次上的嗅觉就更不好说了,因为事情一旦上升到看不见摸不着的地步我们就似乎很难把握。而且,这方面的东西没有绝对的正确与否的评判标准,但时间总会给我们一个相对残酷的毫无情面的结论。但不管怎样,一些基本的东西还是可以很容易的嗅到。比如用到几乎淘汰的系统软件,或者依赖于特定的技术。还有像进度和质量方面没有安排,采用天马行空式的管理。或者集中开发阶段客户还在提出需求等,这些都反映出了项目层次上的味道。要清除这些异味,对于软件过程的规划需要有一定的计划性。不要因为麻烦或者着急就冒着危险急进。

说来说去,总之不要养成偷懒的习惯,今天勤快一点明天就能少做一点。

分享到:
评论

相关推荐

    工程师到技术管理者转型之路.pdf

    在探讨工程师到技术管理者的转型之路时,首先需要明确技术管理者的角色...在这个过程中,除了对专业技术的深入理解,还应注重沟通、协调、激励和团队建设等方面的综合能力的培养,确保能够有效地带领团队实现组织目标。

    华为的人力资源管理.ppt

    在软件工程实践中,华为推崇敏捷开发模式,强调快速迭代和客户需求的持续适应。通过跨职能团队的协作,实现高效、灵活的产品开发流程,以应对市场的快速变化。 七、技术研发投入 华为深知技术是企业的核心竞争力,...

    策划内容框架[归纳].pdf

    【策划内容框架】是软件开发领域中的一种方法论,它涵盖了多个方面,旨在帮助企业构建有效的市场营销策略并提高竞争力。以下是对各个部分的详细说明: 1. **实效营销诊断与市场调研**:这是策划过程的起点,通过对...

    英文版(重构改善既有代码的设计)

    - **代码嗅觉**(Code Smells):书中还介绍了如何识别和处理“代码嗅觉”,即代码中常见的问题模式,如冗余代码、重复代码、过长的方法等。 - **代码质量**:通过重构可以显著提升代码的整体质量,减少未来的维护...

    青少年人工智能创新挑战赛模拟题4.docx

    它由麻省理工学院媒体实验室的终身幼儿园团队开发,旨在帮助青少年通过简单有趣的编程活动来学习计算机编程的基础知识。Scratch不仅提供图形化编程界面,还拥有丰富的功能组件,包括形状、颜色、声音等,可让青少年...

    大学计算机Word作业.pdf

    编程语言、软件框架、开发工具和技术手段在不断更新换代,若不积极跟进,很容易被时代淘汰。因此,对于大学生来说,树立正确的理想和信念,将学习视为一种责任和挑战,是他们在计算机科学领域取得成就的重要前提。 ...

    关于马云的创业经历心得体会.doc

    从2003年的淘宝网,到2004年的支付宝,再到2007年的阿里软件和阿里妈妈,马云不断带领阿里巴巴在电商、金融、广告等领域进行创新和拓展,确保了公司在各业务板块的领先地位。 7. **品牌影响力与社会责任** 马云的...

Global site tag (gtag.js) - Google Analytics