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

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

smartProgram学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. NFS配置与搭建

    参考: Linux下NFS服务器的搭建与配置 https://www.cnblogs.com/liuyisai/p/5992511.html http://blog.51cto.com/hongten ...

  2. ansible的playbook简单使用

    一.介绍 playbook就是一个用yaml语法把多个模块堆起来的一个文件 核心组件: Hosts:执行的远程主机列表Tasks:任务,由模块定义的操作的列表:Varniables:内置变量或自定义变 ...

  3. saltstack二

    配置管理 haproxy的安装部署 haproxy各版本安装包下载路径https://www.haproxy.org/download/1.6/src/,跳转地址为http,改为https即可 创建相 ...

  4. Delphi之TStrings和TStringLists类

    Delphi之TStrings和TStringLists类 有些类不是组件,但它们支持存在的组件.这些类是其他组件的典型属性,直接由TPersistent派生,如TStrings.TCanvas和TC ...

  5. SQL Server中获取指定时间段内的所有月份

    例如查询 2012-1-5 到 2012-11-3 之间所有的月份 declare @begin datetime,@end datetime set @begin='2012-1-5' set @e ...

  6. Linux 学习 (一) Linux简介

    Linux达人养成计划 I 学习笔记 Linux 内核官网:www.kernel.org 内核版本说明:主版本.次版本.末版本,如2.6.18 Linux 主要发行版本 RedHat: 服务器领域,部 ...

  7. HttpRequest,WebRequest,HttpWebRequest,WebClient,HttpClient 之间的区别

    HttpRequest,WebRequest,HttpWebRequest,WebClient,HttpClient 今天我们来聊一下他们之间的关系与区别. HttpRequest 类 .NET Fr ...

  8. 牛客网-2018年湘潭大学程序设计竞赛-F

    题目链接:https://www.nowcoder.com/acm/contest/105/F 解题思路:这道题第一眼直接思路就是搜索,但想了半天没想到有什么好办法搜,然后就转成最短路写了, 因为多入 ...

  9. HDU4341-Gold miner-分组DP

    模拟黄金矿工这个游戏,给出每一个金子的位置和所需时间,计算在给定时间内最大收益. 刚看这道题以为金子的位置没什么用,直接DP就行,WA了一发终于明白如果金子和人共线的话只能按顺序抓. 这就是需要考虑先 ...

  10. 数据库 -- mysql表操作

    一,存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 详见:https://www.cnblogs.com/peng104/p/9751738.html 二,表介绍 表相当 ...