前言
如果有人问你:你怎么看待编程这件事?你怎么回答。
这个问题是忽然出现在我脑子中的。我突然意识到,其实不管是函数还是属性,他们都是数据。我们编写的所有程序都是在处理数据。函数本身也是一种特殊的数据。
真正难的是生产数据的这一过程。举个例子,给你一堆菜籽,要求生产出油来。怎么办?我们首先为这个任务设计一个函数:
-(油)用菜籽生产油(菜籽);
这就是我们最外层的函数,也应该是我们最开始想到的函数。然后经过我们的研究发现,这个生产过程很复杂,必须分工合作才能实现。于是我们把这个任务分割为好几个小任务:
1. - (干净的菜籽)取出杂质(菜籽);
2. - (炒熟的菜籽)把菜籽炒一下(干净的菜籽);
3. - (蒸了的菜籽)把菜籽蒸一下(炒熟的菜籽);
4. - (捆好的菜籽)把菜籽包捆成一块(蒸了的菜籽);
5. - (油)撞击菜籽包(捆好的菜籽);
大家有没有发现,整个榨油的过程在编程看来就是对数据的处理。这一点其实很重要。如果没有把- (油)用菜籽生产油(菜籽);这一任务进行拆分,我们就会写出复杂无比的函数。那么就有人要问了,只要实现这个功能就行了呗。但是这就可能造成代码臃肿,逻辑复杂的问题,这往往也是写不出好代码的原因。毕竟协调合作,效率更高.
整个任务的设计应该是事先就设计好的(开发设计文档)。任务被分割成更小更简单的部分,然后再去实现这些最小的任务,不应该是变写边分割任务,往往临时分割的任务(也算是私有函数吧)没有最正确的界限,并且可能严重影响开发效率.
有了上边合理的分工之后呢,我们就可以进行任务安排了。我们回到现实开发中来。上边5个子任务的难度是不同的。有的人可能基础比较差,那么让他去干筛菜籽这种体力活,应该没问题。那些炒或者蒸的子任务是要掌握火候的,也就是说有点技术含量。那么就交给能胜任这项工作的人去做。所有的这一切,我们只要事先定义好各自的生产结果就行了,完全不影响每个程序的执行。
怎么样?大家体会到这种编程设计的好处了吗?我还可以进行合并,把炒和煮合成一个小组,完全可行。如果我想买煮熟了的菜籽,是不是也很简单?
有的人用原始的撞击菜籽包榨油,有的人却用最先进的仪器榨油,这就是编程技术和知识深度的区别。