zoukankan      html  css  js  c++  java
  • smartProgram学习笔记

    背景:转正前要完成这样一个编程课的学习。平时写代码只是完成基本的功能,没有养成良好的习惯,感觉这样的课程还是要好好学习下,要不真是不知道什么叫写代码。

    Week1

    为什么要写好代码?

    因为平时读:写代码的时间是10:1,所以写好代码很重要

    代码是债务而不是资产,你拥有的代码越多,添加新内容所要付出的成本就越高。

    使用接口的优势;

    1 可以方便的进行扩展

    2 保证调用接口的类主体不发生变化。

    编程价值观:

    代码是作品,是供读者心上的,呈现的是读者所需要的内容。

    源代码即设计

    源代码是对软件的唯一精确描述。

    如何编写整洁代码

    布局原则:

    1.凸显代码逻辑

    2 不增加不必要的维护成本。(优先考虑凸显代码逻辑)

    3 空行:分离相关逻辑

    4 换行:凸显逻辑

    5 换行:一行一条语句

    6 变量声明:使用时再定义

    注释原则:

    尽量用代码注释自己

    说明代码意图

    命名原则

    瞄准问题,命名要提供业务层面的含义

    避免无意义的编码

    避免类型编码

    整洁函数的原则:

    要短小

    单一职责(函数应仅有一个让他变化的原因)

    单一抽象层次(即一个函数的操作应该在一个抽象层次)

    创建函数原则

    降低复杂度

    提升可读性

    封装变化

    如果没有函数的抽象能力,我们的智力将无法管理复杂的程序。

    圈复杂度:用来度量函数的复杂度

    导致函数复杂的原因:

    超长函数是滋生代码异味的温床

    深层嵌套 (违反了单一抽象层次的原则)

    复杂表达式

    减少嵌套:

    重复检测条件

    利用break

    表驱动(通过下标直接访问要访问的元素)

    合理的参数:

    最理想的参数数量是零个,其次是一个,再次是两个,有足够的理由我们才使用三个以上

    DRY原则——Don't Repeat Youurself。

    当增加一个功能或者修复一个缺陷时,如果经过严密的逻辑分析需要修改N个地方,结果要修改多于N个地方才能完成,则说明存在重复。

    编程的好习惯:

    尽量编写和测试小块代码。写一小块,测一小块,在稳固的基础上增加代码。

    简单直接地表达代码意图,代码是写给别人看的,别人包括自己。

    代码看不顺眼,立即动手优化,记住Later=Never。

    写完代码立即进行自检,自检完进行交叉评审。

    解决错误是最最最要紧的事情。

    经常提交代码,代码一旦OK(不影响现在功能),立即提交。

    在找到正确的解法之前,不要一味地“试”,要花时间寻求正确的解。

    如果一种观点或习惯会阻碍你写出整洁代码就坚决摒弃它。

    代码性能

    响应时间+吞吐率

    性能既是设计出来的,也是编码出来的。设计决定性能的上限,编码决定性能的下限。

    影响软件性能的因素:

    1 硬件

    (寄存器,缓存,主存,磁盘;CPU系统)

    2 软件

    (编译器——源码到二进制)

    编译器的优化能力:

    1)优化计算

    常量计算优化;消除重复的复制或合并计算

    2)内存访问

    栈变量->寄存器,如循环中的递增变量

    全局变量——>局部变量——>寄存器

    3)指令流水线

    4)函数调用

    Inline函数;非递归函数;地址对齐(减少对内存的访问次数,节约内存空间);优化函数栈

    代码性能优化方法:

    数据结构定义注意点:

    联系紧密的字段集中定义

    减少指针引用字段

    考虑字节对齐

    合并字段

    变量定义:

    充分利用寄存器

    充分利用局部变量

    尽量使用字长变量

    少用static变量

    少用全局变量

    全局数据访问:

    全局转局部,多用局部指针和变量,减少重复访问。

    内存数据访问:

    更好的利用高速缓存

    消除不必要的存储器引用

    一致原则与清晰原则:

    一致原则:代码不是时装,不需要混搭

    清晰原则:清晰胜于技巧

    吝啬原则:除非别无它法,不要编写大函数

    透明原则:设计和实现都要可见

    简单的设计,简明的实现

    预先添加调试信息,而不是亡羊补牢

    缄默原则:只输出有用的信息

    精炼原则:输出的信息要言简意赅

    补救原则:临终遗言要干净而详细

    代码可维护性的评价标准:

    代码圈复杂度(Cycomatic Complexity)

    Depths:语句嵌套深度

    Fan-out:扇出数,即一个函数/方法对其它函数的调用次数综合

    代码重复度(code duplicate)

    MI(Maintainability Index):可维护性洗漱,综合均值CC,均值Depth,均值Fan-out

    典型的静态分析工具——

    PC-Lint

    SAM:按模块度量并通过网页展示

    Source Monitor

    Simian

  • 相关阅读:
    numpy中linspace用法 (等差数列创建函数)
    Ubuntu环境下 matplotlib 图例中文乱码
    转载: 广义逆矩阵
    matplotlib.pyplot中add_subplot方法参数111的含义
    转载:(论文) 二次指数平滑法中确定初始值的简便方法
    图像处理之 opencv 学习---opencv 中的常用算法
    图像处理之 opencv 学习---矩阵的操作
    编译异常之static和extern---more than one storage class specified
    格式转换至yuv422转 yuv420
    阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_6 自定义类型转换器代码编写
  • 原文地址:https://www.cnblogs.com/lixuwu/p/9844516.html
Copyright © 2011-2022 走看看