编程之路—编程规范

Posted by YueLng Chen on 2017-11-30

编程之路

  • 编程规范
  • 函数式编程
  • 性能与优化
  • 单元测试

####宏观编程规范

编程规范应该是编程活动中的精华所在,虽然与其他几种同列,但是我认为这不仅仅是规范

规范体现了一个程序员的基本素养,武林高手一般会有他自己的独有风格,但是也会有大多数高手都有的气质。编程规范是能够体现出程序员水准的标准,通常在达到一定的境界的时候,大家都会不约而同形成一套体系,而这套体系是前人不断总结出来的,在我看来这也是为什么《代码大全》《The Pragmatic Programmer》如此经典的原因,这些书籍在没有太多编程经验看来,如同鸡肋,但是对于真正已经将程序员作为真正的职业的人来说,却是金玉良言。很多时候我们看不懂书籍的内容,很大一部分原因都要归咎于我们没有作者相似的经历,这种情况在我们读初中高中的时候就更为明显,语文中的阅读理解。这里先梳理下最近遇到的一些关于编程规范的内容,有些内容不一定是属于编程范畴,但是从宏观角度来讲都是属于编程活动

编程规范当然包含编程思想,过程型,面向对象,函数式编程,编程中最重要的能力我认为是归纳抽象的能力,解数学应用题,数学建模,算法实现这些都体现了抽象,算法设计更是用程序语言来演算出我们的思维活动,在这一过程中我们得到了一些经验,数据结构+基础算法,数据结构组织数据,例如链表,数组,二叉树,红黑树等等,基础算法则是解决问题的基础,例如二分法,贪心,递归,分冶,利用这些我们可以解决绝大多数的小范围问题,在我理解范围内是一种解应用题的模式,包含大量巧妙的设计,看有些算法真是会多几根白头发,也会真心感叹这个作者的想法很巧妙,这里插一个例子,虽然我明白插入排序的原理但是没有下面下面这段代码来的巧妙:

1
2
3
4
5
6
7
8
9
10
11
def InsertionSort(A):
for j in range(1, len(A)):
key = A[j]
i = j - 1
while (i >= 0) and (A[i] > key):
A[i+1] = A[i]
i = i - 1
A[i+1] = key
input = [8, 3, 9, 15, 29, 7, 10]
InsertionSort(input)
print(input)

算法应该是一种局部优化的头脑风暴,而面向对象则是一种良好的组织结构,在知乎的一个帖子如何用一句话说明什么是面向对象思想中,简明扼要地说明面向对象的思想是一种“你办事,我放心”,如果细化到面向对象理论,Milo Yip的回答应该也算言简意赅,引用如下

把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)/泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派(dynamic dispatch)。

面向对象的程序设计就不得不提GoF,基本大多数程序员都以设计模式为构建面向对象代码的组织准则,应该是说设计模式是通用常见的面向对象的模式,23个模式中包含5个建造者模式,7个结构模式,11个行为模式,当然还有更多的设计模式,只是这几个通用一些而已,在左耳朵耗子的一篇从面向对象的设计模式看软件设计就表示设计模式虽然好,但是就是没有UNIX的设计思想好,如果要在软件设计中搞设计模式,可以参考GoF的模式,但是UNIX的设计思想才是正规军,极力推荐了《The Art of Unix Programming》,所以现在在面向对象领域又有了指导,就是反复看这本书,然后反复实践

函数式编程在下文补充

在程序员面试的时候一般还会考察系统设计,比如如何设计一个分布式缓存系统,nosql或者是短网址系统,这种题目对于现在的我来说还是略超纲,这种题目涉及面比较广,应该是说这个就是技术上的产品了,如果以上都是零件的话。在我现在的水平来考虑的话,首先会想系统是单机的还是分布式的,对于分布式就有的说了,服务调用,发现与治理,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),微服务等等,这方面的理论与实践都很欠缺,还在学习路上,先给出几篇关于分布式架构的文章,待补


####狭义编程规范
狭义的编程规范是具体在编程过程中需要知道的一些约定,例如一个函数最好为40行,别写过长的函数,下面是几篇关于编程规范的文章

  • 编写优雅的代码:秦迪,新浪平台架构师
  • 编程的智慧:王垠大神的文章
  • PEP 0008 – Style Guide for Python Code:Python编码规范
  • Python best practices:具体实例说明
    从上文引用的文章归纳总结出一下几点(不断学习与添加中
  • 代码分为几个阶段,基本实现,可扩展,可复用,可测试。无论写什么代码都走一遍
  • 反复推敲代码,优雅,模块化,可读,简单,直观,无懈可击,正确处理错误,正确处理null,防止过度工程

下篇为编程之路————函数式编程