怎么认识一个事物-----从程序开发角度看认知
一款软件从无到有,并不是一蹴而就的。
软件像一个幼小的植物一样,不断的生长;
又像是一栋建筑,互相之间有很多依赖关系,互为整体;
还像战争之后的国家,初期到处都是残垣断壁,通过不断的建设,不断的发展,不断的完善,变成现在交通便利,高楼林立,分工明确的社会。
软件开发的过程,其实是一个对软件的认知不断深化的过程,这个过程是怎么样的?如何才能加快这个深化的过程呢?
- 需求明确,且要达到可用状态。 根据某种意义,或者环境的的惯性,你要完成一款软件,或者做成某件事情。
- 初步知道要做什么,做成什么样?
- 试着去做,遇到问题,不断的去寻找答案。
- 不断的验证自己的所做的东西,直到自己能想到的点都已经验证的时候结束。
- 找相关领域的专业认识给予意见,根据意见反思你的做法。
- 根据意见,修证你的认识,可证伪性是一个衡量标准。
- 反思过程中,哪些做的好,哪些做的差,有哪些东西需要不断打磨,因为使用到的频度很高。
通常的学习过程
----看书,理解,做题,巩固。继续看书依次循环。
程序开发中也有这个几个过程,但是比之深化了很多,其一,需求理解错了,做出来的东西,不是别人要的。其二,机器很傻,你的任何错误它都不能帮你遮掩。
看书
程序开发也需要看材料:需求原始,需求设计文档,一般需求设计和开发可能是不同的人,这个时候,负责需求的人,讲一下需求,开发的人做初步理解,不懂的在交流之后再理解领悟,过几天,由开发者再想需求设计着,讲讲自己是怎么理解的,打算怎么做,初步的设计是怎么做的。
从整个软件开发过程来看,需求和设计文档固然很重要,但更为重要的事。对这些文档的理解和统一认识。
理解
对需求的理解。
- 用户打算怎么用?
- 需要做到何种程度才能满足用户的需求。
- 规格是怎么样的?
- 有什么地方是需求文档中欠缺考虑的。
- 有什么地方是需求文档中没有说清楚的。
对代码的理解
- 目前已有的代码中已经实现了哪些功能?
- 新增实现的难点在哪里?有什么风险?
做题
学习中的做题原本是为了进一步巩固认知,也是为了增加熟练度。
这里和做题类似的是开发过程,开发的过程,以前一些只是概念的描述。现在需要变成一行一行的代码。以前有什么认知偏差你在代码当中,要么出错,要么你就根本写不下去。在写代码的时间再去澄清需求,是很常见的事情。
1.需求的明确
程序的需求,对应的不仅仅是你想要做的事情,而且还是经过初步加工的想法,以及可行性的判断。
写程序常常不是一蹴而就,首先要明确需求,知道自己想做什么,做成什么样,而且还要设计罗辑上完备的用例,来验证是不是你想要的样子。
很多时候在没有做之前,你不会发现其中一些问题和实现过程中的细节,而是在做的过程中不断地确认,不断地澄清,最后才能不断地完善。
在开发的过程中不断验证自己开发的部分是否正确。
这些都做完之后,你觉得心里很靠谱,因为基本功能都已经实现了。有点像是一个人做一件事情初见成效。
然而事情远没有到完善的地步。
如何将软件开发中成熟的流程,应用在自己提升自己的认知上?
首先要明确需求,明确你想要认知的对象,他是什么,不是什么,我想要了解到什么程度?
小而完整的功能,快速迭代,每次迭代中不断升级自己的认识。
学习认知升级中的书本,和程序中的需求文档,最为相似,有时候,甚至还不如一个需求文档呢,至少需求文档言之有物,还会考虑很多实现细节。