代码可读性

不少程序员信奉代码可读性教条, 认为, 代码会被很多人读, 只是偶尔执行.

我的观念恰好相反. 代码会被执行很多遍, 不然, 就不必要写. 被执行很多遍的代码, 需要优化, 极尽能事地优化. 代码量大了时, 要将代码分块:

块间接口要清晰, 块内实现要高效.

被优化的代码, 可能你自己也将看不懂. 那没关系, 你只要能弄明白每一块代码的意图, 而不需要时时让每个人清楚这块代码每行的原理. 不少程序员只是机器, 会解码每行代码, 却不懂合起来的意思, 还责怪别人的代码难懂. 给定代码意图, 只写让所有程序员都理解的代码, 无谓地低效.

如果某人不清楚某块代码的意图, 那是注释的事, 你需要加注释, 以防将来你自己也忘了. 如果某人不清楚某块代码的实现原理, 那是他自己的事. 机器也不懂, 它不需要懂, 它只需要执行. 不懂某块代码的实现原理, 但知道意图, 就很容易重写, 维护问题也就不存在.

自志, 请勿对号入座.

附四年前的代码一段. 估计大部分人不会(立即)清楚这个实现原理, 但清楚意图(仅名字 Single value Linear Regression Analysis 就够了). 当然, 这段还不够高效.


class SLRA:
    '''
    SLRA: Single value Linear Regression Analysis
    usage:
      # Initial a SLRA:
      slra = SLRA(dim)
      # For every incoming vector x of dimension dim, corresponding
      # scalar result y, you can add it to the system by:
      slra.add(x, y)
      # To get the coefficients:
      slra.get()
    '''

    def __init__(self, dim, bigo=1.0e12, eps=1.0e-12):
        self.dim = dim
        self.P = [[i == j and bigo or 0.0 for i in range(dim)] for j in range(dim)]
        self.theta = [eps for i in range(dim)]

    def add(self, x, y):
        px = [sum([self.P[i][j] * x[j] for j in range(self.dim)]) for i in range(self.dim)]
        xpx1 = 1.0 + sum([x[i] * px[i] for i in range(self.dim)])
        K = [px[i] / xpx1 for i in range(self.dim)]
        delta = y - sum([x[i] * self.theta[i] for i in range(self.dim)])
        for i in range(self.dim):
            self.theta[i] += K[i] * delta
            for j in range(self.dim):
                self.P[i][j] -= K[i]*K[j]* xpx1

    def get(self):
        return self.theta

No comments: