一些编程上的策略

标签: 心得体会 代码优化 | 发表时间:2013-07-02 00:21 | 作者:Aqee
出处:http://www.aqee.net
Datenmanagement_neu

这里将向大家分享的是一些我对编程的思考总结,这些经验在我毕生编程生涯中曾帮助我在无数的事情上作出正确的决定。这些编程策略有些是很显然的,但实际编程中往往被人们忽略。

下面的例子是用Python写的,但这些概念适用于任何编程语言。

2. 代码优化

找出程序的主执行路径——你的程序大部分时间都执行这些模块。首先优化这部分代码,但也不要在程序实现的第一次迭代中进行优化。那些处理边界情况或失败/异常处理的地方,这部分代码不需要优化,除非它们引起了值得注意的性能问题。 :) .

3. 代码行数

不要试图压缩代码行数,但你应该压缩每个任务的代码行数。写简单的函数/方法,每个函数/方法只完成一个任务,而不是多个,除非你有很好的理由。

人们通常喜欢为了减少代码行数而在一个代码片段里完成大量的工作,这会导致代码异常复杂,这种代码试图支持各种情况的处理,而大多时候只是其中的一种情况会发生。多余的情况处理会给执行造成成本。

4. 多学习操作系统和编译器知识

了解机器,理解机器内部里事情是如何工作的。这将会帮助理解各种不同瓶颈产生的原因。这能帮助你找到代码运行时为什么会发生奇怪的现象。

5. 运用管理技术

在编程中运用管理技术。针对不同目的使用正确的工具。我有自己的喜好,但我努力克服。

1. 异常处理和if-else语句的用法

编程的时候,有些边界情况我们需要确保能正确的处理。对这些情况我们通常的做法是使用 if语句来检查是否是这种情况。当程序运行时,这些检查动作每次都会执行,来验证是否是遇到了这些特殊场景。如果你使用的编程语言有异常处理系统——你可以利用它们来处理这些边界情况。

C语言里没有异常处理系统。它依赖于错误码来通知调用的函数发生了什么。返回0是成功,负数则表示失败。所以,调用者需要用 if-else来检查返回码。没有其它的方法。

但对于那些有异常处理系统的编程语言,我们可以很好的利用它们。但我们需要使用 if-else配合异常处理机制来处理这些边界情况或错误。

一个简单的例子 :-

想象有一个后台运行程序,它在启动和停止时都会检查一个pid文件。它会调用下面的函数来获取pid。主调函数使用异常捕获来确保程序逻辑不会出现意外。

下列情况时这个函数会被调用 -

  1. 这个后台程序启动时
  2. 这个后台程序停止时

每种情况时主函数要做的事 -

  • 启动时
    1. 如果pid文件存在,意味着后台程序中运行。这个程序自己会停止,会提示有另一个实例已经在运行。
    2. 读取这个文件时如果返回错误,这说明没有pid文件,说明这个程序没有运行(除非读取文件时发生意外)。这时就创建pid文件,启动程序。
  • 停止时
    1. 如果发现了pid文件,停止前删除这个文件。

    如果没有发现pid文件,那该怎么办?这说明后台程序根本没有运行。报告给用户。

下面就是我们上面提到的主程序会调用的获取pid的代码。注意我们使用异常捕获和 if-else语句来处理这些情况。

方法 1

# 这种使用异常的方式不好,属于被动防御式编程。
def read_pid_file():

    try:
        f = open('daemon.pid', 'r')

        pid = int(f.read())
        return pid

    # 没有发现文件,也可能是IO错误
    except IOError:
        raise "Faild to Read file"

    # 有人在文件里放的不是数字,这能怪谁?

    except ValueError:
        raise WrongPID

    # 捕获所有其它异常
    # 这个有点像

    # 过度使用异常处理
    except Exception:
        raise SomeUnKnownError

方法 2

# 使用   If/else方法。主调函数需要检查无返回值情况
# 异常情况

def read_pid_file():
    if os.path.exists('daemon.pid'):

        try:
            f = open('file.pid', 'r')

            # 对于支持异常处理机制的编程语言,
            # 如果有操作失败,抛出异常
            # 这里跟C语言有区别
            return int(f.read())

        except (ValueError, IOError):
            pass

方法 3

# 事实上,我们知道可能会发生什么,如果pid读文件

# 文件时有错误,主调函数会捕获它。
# 我们使用的编程语言有异常处理机制。
# 我们可以在这里利用上。

def read_pid_file():
    f = open('daemon.pid', 'r')

    return int(f.read())

我喜欢 方法 3,因为它在大多数情况下都可行。如果极少的情况下出现了错误,主调函数里的异常处理会捕获这种情况。 :) .

两种错误处理方式都是我们保证程序无误的重要途径。

何时使用 if-else语句
  1. 当我们知道可能会有什么情况发生时。也许会分很多种情况。(C语言的错误码机制就是一个很好的例子)。
  2. 我们通常是基于输入值使用if-else来控制执行路径。
何时使用异常处理
  1. 你想捕获一个异常,或者捕获一些异常但自己不处理,交给系统去处理。支持异常机制的编程语言会在最顶层捕获这些异常,并报告给用户。

6. 忽略上面所有的策略 :) .

有时候事情就是这样!而且这样并不一定是坏事。我们编程时经常这样——当我们开发一个新原型,或针对一个特殊问题找一个解决方案,这时我们如何实现并不重要,重要的是在定型后我们如何完成它们。我想大多时候我们都是这样做的。谁都知道,先打草稿,后动真的。

请在评论里留下你对这些观点的想法。

:)


本文由 外刊IT评论网( www.aqee.net)原创发表,文章地址: 一些编程上的策略,[英文原文: Some Programming Strategies ]







相关 [编程 策略] 推荐:

一些编程上的策略

- - 外刊IT评论
这里将向大家分享的是一些我对编程的思考总结,这些经验在我毕生编程生涯中曾帮助我在无数的事情上作出正确的决定. 这些编程策略有些是很显然的,但实际编程中往往被人们忽略. 下面的例子是用Python写的,但这些概念适用于任何编程语言. 找出程序的主执行路径——你的程序大部分时间都执行这些模块. 首先优化这部分代码,但也不要在程序实现的第一次迭代中进行优化.

CDN缓存策略

- - 开心平淡对待每一天。热爱生活
   CDN这个东西,当然是个好东西. 所以看到有FAQ就理所当然的复制下来,其实,最近我突然想到一件事情,中国的地区域名还有一个很有意思的地域域名,那就是js.cn,所以,我悄悄的申请了两个域名,cache.js.cn和cdn.js.cn,就是想用来做这种CDN转发,当然,只是简单的. 我最初的想法是(有一小部分),如果我的服务器里有N多人装了DZ论坛,那么这些JS和CSS其实都是共用的.

MySQL安全策略

- - OurMySQL
   MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,如何保证MySQL的数据安全.    MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,如何保证MySQL的数据安全.    数据安全如果只靠MySQL应用层面显然是不够的,是需要在多个层面来保护的,包括网络、系统、逻辑应用层、数据库层等.

Cassandra 1.1的缓存策略

- - NoSQLFan
从0.5和0.6版本开始, Cassandra就提供了主键 缓存和行缓存. 在1.1 版本中,Cassandra的核心开发团队重新对缓存策略进行了设计和实现,以提供配置更简单但同时又更高效的缓存效果. 为什么要将缓存集成到数据库内部. 实际上,缓存既可以储存到数据库内部,也可以是外部的独立缓存层.

Git分支管理策略

- - 阮一峰的网络日志
如果你严肃对待编程,就必定会使用" 版本管理系统"(Version Control System). 眼下最流行的"版本管理系统",非 Git莫属. 相比同类软件,Git有很多优点. 其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便. 有些传统的版本管理软件,分支操作实际上会生成一份现有代码的物理拷贝,而Git只生成一个指向当前版本(又称"快照")的指针,因此非常快捷易用.

多分支开发策略

- - CSDN博客研发管理推荐文章
ü  功能开发 (开发人员). ü  bug修复,包括测试版本的bugfix和生产版本的hotfix (开发人员). ü  版本集成,包括发布测试版本和生产版本 (项目经理). ü  版本测试 (测试人员). ü  保证bug修复与功能开发并行,不会出现堵塞情形. ü  保证可以快速版本集成. 实现方式就是多分支 + 里程碑标记.

Java异常处理策略

- - 研发管理 - ITeye博客
任务与预先设定的规则不相符的情况都可以称之为异常. 但凡业务逻辑操作,都会划定一些边界或规则,但是往往事与愿违,总会有调皮鬼来挑战系统的健壮性. 用户并不都是知道潜规则的,比如用户的银行账户中只有100块钱,但是用户不查询就直接取200块. 码农有时候太过自信了,比如你在编写文件下载功能时忽略了文件有可能不存在这个分支流程.

ElasticSearch性能优化策略

- - 数据库 - ITeye博客
ElasticSearch性能优化主要分为4个方面的优化. 1、增加1-2台服务器,用于负载均衡节点. elasticSearch的配置文件中有2个参数:node.master和node.data. 数搭配使用时,能够帮助提供服务器性能.         该node服务器只作为一个数据节点,只用于存储索引数据.

组策略Software Restriction Policies (SRP)提权

- Alex - hUrR DuRr