`
yunzhu
  • 浏览: 1144304 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
B2b19957-cda7-3a9e-83a0-418743feb0ca
监控应用服务器
浏览量:109691
2e8be8be-e51f-346c-bcdd-12623c9aa820
Web前端开发
浏览量:119653
Bfa5df64-a623-34b9-85b8-ef3ce2aed758
经典异常的解决
浏览量:204453
社区版块
存档分类
最新评论
阅读更多

一、 重构,意识比技能更重要

如果问一个程序员:代码为什么会变烂?他可能会找出无数种理由:
1、代码本来就烂,我只是加了一点东西;
2、时间压得太紧,根本没有时间把代码优化,功能实现出来就不错了;
3、系统已经上线了,不敢随便去改以前的代码,不出问题还好,改出问题了谁负责;
……
但是,这都是从外部找原因推卸责任,程序员应该从自身寻找原因。其实,代码变烂,罪魁祸首就是程序员自己。
很多时候,代码一步步变烂,就是因为程序员自己没有良好的意识,没有及时地重构,刚开始的代码还是挺好的,后来需求一步步变更,就开始不断地往里面加分支,慢慢就变烂了。所以建立强烈的重构意识才是最重要的,头脑里要建立这样的意识:一旦代码变烂了,就去重构,要写出高质量同时又优美易读的代码。
重构的技能每个人都可以学得会,但建立首先这样的意识才是更重要的。
至于写出好代码却不被上级知道和认可,也有相应的措施:推行代码质量可视化。在公司或部门内部,通过sonar等系统实时地公布各项目组和成员的代码总体质量,使所有人都能看到,这样就能让领导看到代码的改善,也促使更多的人建立写出好的代码的意识。

 

二、要简洁短小职责要单一

不要在一个方法或一个类中堆砌太多的代码,不管是方法还是类,都应该短小。过长的类或方法都是坏味道,它们会导致以下种种不快:
1、 代码难以理解,难以维护。比如一个方法中包含10个逻辑,这时程序员要修改其中一个逻辑,那么他不得不把这10个逻辑全部理解了才能动手修改,而且一大堆无关代码堆砌在一起,导致程序员修改代码时很容易出错。而如果分成了10个小方法,那么程序员就可以直接聚焦于要修改的那1个小方法就行了,修改也很容易。
2、 代码难以重用,导致重复代码。一个大方法中有一部分代码,在另一个地方有同样的处理,但是由于这部分代码身处这个大方法的泥潭中,所以无法重用,那么就只能拷贝一份了,这样就导致了重复代码,而重复代码的危害是不言而喻的。
……
另外,不管是方法还是类,都应该遵循“单一职责原则”,否则不同的职责杂糅在一起,同样导致以上的种种不快。所以,这句话很重要:函数的第一原则是短小,第二原则是短小,第三原则还是短小。

三、代码是给人看的,应该写人易读懂的代码

代码是给机器去运行的,但更是给人看的,要写出机器能运行的代码很容易,但要写出人易读懂的代码则更重要。建立这样的意识之后,往往就能写出非常整洁优美的代码。
要怎样写出人易读懂的代码呢?
首先,还是上一条所说的,要简洁短小,职责要单一,逻辑要清晰的区分开。不要把一大堆代码堆砌在一起,更不要把不同职责的代码堆砌在一起,那样都必然导致可读性下降。
然后,不要写过于长的复杂表达式,那样非常难以理解。可以把表达式进行分解,可以用解释变量(只起到解释的作用,就是为了让代码更加易读)。
还有,比如一个方法中包含10个重要的步骤,人要读懂它很难。那么可以把这个10个步骤提取到10个小方法中,然后给每个小方法起一个有意义的名字,让人顾名思义一目了然,然后在原方法中依次调用这10个方法,程序员一看便知道这个方法干了什么。
提到有意义的名字,需要强调的是,在代码中,不管是类、方法还是变量,一个好的名字都非常重要,起一个有意义的名字,让人一看就知道它是干什么的,比多少注释都有效。
有时为了达到代码整洁的目的,甚至可以牺牲一点点“性能”。这一点尤其令我印象深刻,故单独列出来作为第四个方面。

 

四、别为了一丁点“性能”就牺牲掉整洁

这里加了引号,是因为这里所说的“性能“,其实只是程序员的臆测。而这种臆测经常经常发生。
比如一个循环当中干了两件完全不相关的事情,使得不同职责的代码杂糅在一起,影响了易读性又不利于重用。其实应该分两次做,即使做了两次循环也没有关系,除非有实际的测试数据证明,这样做确实影响了程序的性能。但是其实大部分情况下,这并不会对性能造成影响。
应该时刻记住大师们的教诲:

  • Ÿ 别为了一丁点"性能"就牺牲掉整洁
  • Ÿ "干净整洁的代码往往运行起来更快,即使不快,也很容易让他变快,让干净的程序变快,比让快速的程序变正确来得容易。"
  • Ÿ "过早的优化是一切罪恶的根源。"

由此可见,写出人易读懂的整洁的代码是多么重要。

以上几种意识的无论怎么强调都不为过的重要性,我也将牢固建立这些意识,写代码的时候时刻从这些意识出发,不断地持续地重构,只写干净整洁的代码。

分享到:
评论

相关推荐

    林锐软件工程思想以及十年感悟

    ### 林锐软件工程思想及十年感悟核心知识点解析 #### 一、背景介绍与作者简介 林锐是一位在软件行业有着深厚实践经验的技术专家,他于2000年出版了《软件工程思想》一书。该书不仅是他多年工作经验的总结,也是他对...

    从腾讯网站首页改版学到的几点体会心得

    腾讯首页近日改版了,现在将自己从其中学到和感悟到的几点总结出来分享: 1、宽屏设计:1)不管腾讯处于什么考虑,宽屏总是让人看的很舒服,而且页面整体缩短了近1半,这让浏览信息的用户会方便很多。2)同时大家...

    软件工程思想

    《软件工程思想》的核心理念是将软件开发视为一个系统工程,强调以下几点: 1. **软件工程的基本观念**:首先理解软件工程的基本原则,包括需求分析、设计、编码、测试和维护等阶段的重要性。 2. **角色认知**:...

    年计算机毕业生顶岗实习报告.docx

    总结这些知识点,我们可以得出以下几点: 1. **计算机实习的重要性**:实习提供了将理论知识应用于实际工作场景的机会,帮助学生提升技能,增强就业竞争力。 2. **自我学习与团队合作**:自我驱动的学习态度和团队...

    浅析在阅读教学中如何实施体验性教学.doc

    以下是几个关键点的详细说明: 1. **体验式阅读的定义与价值**:体验式阅读教学认为阅读不仅是认知过程,更是生命体验的过程。它强调学生与文本的深度交融,使学生不仅是理解者,更是文本意义的重构者和体验者。...

    看过的书籍

    从这个信息中,我们可以探讨几个相关的IT知识点: 1. **源码分析**:理解源码是提高编程技能的重要步骤,它能帮助开发者掌握软件设计模式、数据结构、算法和编程语言特性。例如,阅读Java虚拟机(JVM)源码可以增进...

    Java夜未眠.程序员的心声

    在Java编程领域,本书可能涉及以下几个重要知识点: 1. **基础语法**:Java语言的基础语法是任何Java程序员必须掌握的,包括数据类型、变量、运算符、流程控制语句(如if、for、while)等。 2. **面向对象编程**:...

    *软件工程思想*林锐的

    ### 林锐《软件工程思想》核心知识点解析 #### 一、引言 林锐的《软件工程思想》是一本独具特色的专业书籍,它不仅深入浅出地讲述了软件开发的基本原理,还融入了作者多年实战经验中的感悟。本书不同于传统的教科...

    《软件工程思想》《软件工程思想》

    ### 软件工程思想核心知识点解析 #### 一、软件工程思想的起源与意义 - **起源背景**:“软件工程思想”源自于上世纪60年代计算机技术的快速发展期。当时的程序设计工作由少数技术高手主导,他们编写的程序往往...

    员工试用期转正申请述职报告.docx

    ### 员工试用期转正申请述职报告知识点总结 #### 一、试用期转正的意义 - **重要性**: 转正是员工职业生涯中的一个重要里程碑,标志着员工正式成为公司的固定成员。 - **作用**: 通过转正申请述职报告,员工可以向...

    软件工程思想(林锐)

    下面将围绕该书的几个核心章节进行详细的知识点梳理。 #### 第一章:软件工程基本观念 - **软件工程定义**:软件工程是一种将系统化、规范化的工程方法应用于软件的开发、运行和维护过程。 - **软件危机**:早期...

    软件工程思想 --林锐

    ### 重要知识点解析 #### 1. 软件工程的起源与背景 林锐在书中回顾了软件工程这一学科的诞生历程。在计算机发展的初期,程序设计被视为一种高智力活动,程序员们可以随心所欲地编写代码,缺乏规范和标准,导致了...

    Labview课程设计_机器人手臂设计说明.doc

    针对该课程设计,具体的要求包括但不限于以下几点: - **自由伸缩**:机器人手臂应具备伸缩功能,以便能够适应不同的工作场景。 - **360度旋转**:为了提高灵活性,手臂需要能够在水平面内进行360度旋转。 - **具有...

    新课程理念下充满活力的历史课堂

    根据提供的文件信息,知识点可以从以下几个方面进行详细阐述: 1. 新课程理念的内涵与特点 新课程理念强调知识与技能、过程与方法、情感态度与价值观三维目标的整合,倡导学生主动学习、合作学习、探究学习。在历史...

Global site tag (gtag.js) - Google Analytics