算法第一周作业

一、《数学之美》读后感

读完这本书有一点强烈的感受:工具一定要先进。数学是强大的工具,计算机也是。这两种工具结合在一起,造就了强大的google、百度、亚马逊、阿里、京东、腾迅等公司。他们不是百年老店,但他们掌握了先进的工具。

掌握了先进的工具,必将获得竞争优势。如果你知道哪里有一群软件工程师,维护着更大的一群计算机,那么不要犹豫,想办法使用他们提供的服务,因为这会给你带来优势。所以我们使用Google的搜索和邮件,在亚马逊、京东和淘宝上购物,用QQ和微博联系朋友,使用银行卡和网上银行,利用交易终端在全球市场上进行各种交易……

人类历史就是一部工具的进化史。石器、青铜、铁器、火药、蒸汽机、内燃机、电报、电话、电视、计算机、卫星、互联网,工具的进步引领着文明的进步。新的工具不断淘汰老的工具,就像互联网视频点播正在淘汰电视、微博正在淘汰报纸、电子书正在淘汰纸质书那样。

但有一些古老的工具,今天仍有人在学习和使用,甚至在上面花费许多时间。毛笔就是这样一个例子。今天学习掌握毛笔这种“落后的”工具,还有什么意义?其实我们在使用一些“落后的”工具时,主要是在学习工具背后的思想。书法和绘画中蕴含的艺术审美的一般原则,经得起具体工具变迁的考验。甲骨文、金文、石鼓文所包含的对空间构图的理解,仍然值得现代人学习。思想工具是比实物工具更强大的工具。

二、编码规范

1.不要使用难懂的技巧性很高的语句,除非很有必要时

2.去掉没必要的公共变量

3.当向公共变量传递数据时,最好做数据合法性检查

4.构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的公共变量,防止多个不同模块或函数都可以修改、创建同一公共变量的现象

5.仔细设计结构中元素的布局与排列顺序, 使结构容易理解、 节省占用空间, 并减少引起误用现象

6.尽量减少没有必要的数据类型默认转换与强制转换

7.对所调用函数的错误返回码要仔细、全面地处理

8.防止将函数的参数作为工作变量

将函数的参数作为工作变量, 有可能错误地改变参数内容, 所以很危险。 对必须改变的参数,最好先用局部变量代之,最后再将该局部变量的内容赋给该参数。

9.一个函数仅完成一件功能。

10.避免设计多参数函数,不使用的参数从接口中去掉。

目的减少函数间接口的复杂度,参数多的话可以通过结构体实现

11.非调度函数应减少或防止控制参数,尽量只使用数据参数

避免函数功能不明确,给调试带来麻烦

12.检查函数所有参数输入的有效性

功能不明确较小的函数,特别是仅有一个上级函数调用它时, 应考虑把它合并到上级函数中, 而不必单独存在

13.设计高扇入、 合理扇出(小于7) 的函数。
函数较合理的扇出(调度函数除外) 通常是 3-5.较良好的软件结构通常是顶层函数的扇出较高, 中层函数的扇出较少, 而底层函数则扇入到公共模块中。还是强调函数的高复用性和可读性

14.避免使用BOOL参数
TURE/FALSE 的含义是非常模糊的,对于那些内存要求不是很苛刻的能不用就不用

15.对于提供了返回值的函数, 在引用时最好使用其返回值。

16.当一个变量名较长且有较多引用时(一般是结构的成员), 可以用一个意义相当的宏代替,也可以定义一个局部变量,在用之前对局部变量赋值

17.在同一项目组或产品组内, 调测打印出的信息串的格式要有统一的形式。 信息串中至少要有所在模块名(或源文件名) 及行号,行号和文件名可以用宏__LINE__和__FILE__实现

18.使用断言来发现软件问题, 提高代码可测性。
断言可以对在系统中隐藏很深, 用其它手段极难发现的问题进行定位

19.在编写代码之前, 应预先设计好程序调试与测试的方法和手段, 并设计好各种调测开关及相应测试代码如打印函数等

20.在保证软件系统的正确性、 稳定性、可读性及可测性的前提下, 提高代码效率。

21.避免循环体内含判断语句, 应将循环语句置于判断语句的代码块之中

22.尽量用乘法或其它方法代替除法,特别是浮点运算中的除法。
浮点运算除法要占用较多 CPU 资源。应为一般的cpu只有硬件乘法器

23.过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出之前要关闭。
分配的内存不释放以及文件句柄不关闭, 是较常见的错误, 而且稍不注意就有可能发生。这类错误往往会引起很严重后果,且难以定位

24.有可能的话, if语句尽量加上else分支, 对没有else分支的语句要小心对待; switch语句必须有default分支。

25.时刻注意表达式是否会上溢、 下溢

26.打开编译器的所有警告开关对程序进行编译

27.某些语句经编译后产生警告,但如果你认为它是正确的,那么应通过某种手段去掉告警信息

28.使用代码检查工具(如C语言用PC-Lint)对源程序检查。使用软件工具(如 LogiSCOPE)进行代码审查

29.不应通过“试” 来解决问题,应寻找问题的根本原因。

30.对自动消失的错误进行分析,搞清楚错误是如何消失的

posted @ 2021-09-14 23:02  刘瑾怡  阅读(20)  评论(0编辑  收藏  举报