我是如何写程序的
做为一名软件工程师,日常的工作就是去编写程序,写一段程序很简单,就比如 “hello world“。但是如果想要写好一段程序,就不是那么容易的事了,这篇文章主要是记录一下自己在编程时的一般流程。
1. 明确并且理解需求
最近在读一本关于微服务架构的书,其中对需求有这样一个定义:
需求是一个必须要解决的问题,以及围绕这个问题的特定上下文环境
将每个开发任务当成需要解决的一道数学题。那么在解题的第一步就是要“读懂”题目, 也就是说理解题目在描述什么,并且明确问题的答案应该是什么。
所以在开始变编码之前一定要明确并且理解自己需要做什么,自己的产出会是什么。
如果将程序看作是对数据的一个映射,是一个函数,那么在确定好需要后,我们就可以得到如下的一个表达式
1 |
|
我们的任务就是完成函数 F, 在给定输入后,得到所需要的输出。
2. 分解编码步骤
程序等于算法加上数据结构。
在有了明确的问题之后,就需要思考如何去解决这个问题了。
在确认好需求之后,我就会在纸上列出已有的条件,然后思考如何完成 F。
首先, 我会定好输入输出的数据结构。
然后,我会开始画时序图或者是流程图,确认处理步骤,理清逻辑,划分模块。
最后,我把需要做的事拆分成一个个小的 task,写在便签上,产出 todo list。
3. 编写测试用例以及具体的程序
一个良好的程序是离不开单元测试的,单元测试保证了程序的正确性,也可以在之后的重构过程中起到至关重要的作用。
因此在划分好模块后,我会将需要的处理函数定义好。然后就是为这些函数编写各自的单元测试,通常我会编写三个测试,分别处理正常的数据,处于边界的数据,以及超出边界的程序。
在写完单元测试后就会跑一遍测试,这时不出意料所有的测试都应该是失败的,不过没关系,我的目标是让所有的测试通过。
接下来就是要去编写具体的程序,根据 task 将程序一步步的写完,每完成一个模块就跑一次测试,然后 commit。保证当前的程序是正常工作的。然后就是重复,code-test-commit 的步骤。
在完成所有的编码以及通过所有的测试之后,就将每个小 commit 合并成一个大的 commit。到目前为止基本的功能就完成了,但是这不代表我们的程序就没有问题的。这时候需要重新读一遍自己的程序,看看其中是否包含了 《重构》 中所说的坏味道的代码,如果有,那就进行重构,然后测试,提交。
在做完上面的所有工作时候,就可以提交自己的代码了。
以上就是我通常的编码过程了。