本人是非计算机专业毕业的非专业程序员,毕业后也是在非专业软件公司从事业余编码工作,总结的这套编程方法可能会不入某些牛人的法眼,请指点~
1.明确需求
搞清楚到底想做什么,即程序最终要实现的功能。需求越简单明确越好,功能越单一越好。
Simple is better than complex
2.功能分解
将目标分解出可以实现的步骤,然后将每个步骤细化为函数(function),如果某些函数显而易见是一个性质的,可以归结到一个类中,那就没什么说的,就放到一个类中。不提前设计类,不做总体类划分。
3.命令行尝试相关API的用法
由于本人非专业程序猿,记忆力不咋地,偏偏兴趣广泛,桌面网络数据库游戏服务器算法都略懂,因此经常需要在命令行中配合API及相关文档写些脚本来尝试其用法。专家及熟手可以省略此步骤。
4.快速开发
终于可以开始写代码了,首先打开最喜欢的文本编辑器,本人是Vim,因为够轻便够好用。把第三步尝试得出的脚本填到第二步分解出来的每个函数中,有重复的坏味道出现时就抽出来函数之,有新的类冒出来时就类之。一切都是顺其自然,让代码影响程序的结构。
5.单元测试
对于辅助性质的函数,比如文字串变换或列表调整之类的,都直接在doctest里写测试,对于功能性质的函数,比如类中的各接口函数,新建个test文件测试之,之后nosetests即可。
6.重构!
由于没有类设计阶段(鄙人认为这是基本上根本不需要的,第二步功能分解实际上就是类设计阶段的简化版),代码自己随心所欲产生出来的程序往往结构上有问题,在项目越来越大,函数越来越多的时候会产生坏味道,这就是重构的好机会了。通过重构将函数归到类中,将类分到不同包中,在单元测试基础上的重构是很开心的,每次重构都是对项目又一次深入理解的机会,都是项目脱胎换骨的机会。当然,世上没有完美,在满足项目需求的前提下做到适当扩展就可以了,要适合而止。应该牢记“如无必要,勿增实体”,重构需谨慎,全靠自己把握。
写代码应该是很自然,很美好的事情,应该没有那么多刻板的步骤,没有必要套用那么多设计模式、类的条条框框。顺其自然,随心而变就好。