程序员开发思考-1
今天对突然对自己平时的开发凡是思考了一下,出于以下两个原因:
1.自己对自己负责的需求的开发时间评估总是不准或者说压根就没有认真评估过,导致一直都没思考这个主题的内容。
2.觉得自己对某个功能的开发周期太长,或者说是开发出来了,总是记不住自己的开发思路,老大问起的时候,总是解释不全,要重新翻看自己的代码才知道自己的逻辑,有点可笑。
3.自己开发出来之后,bug总是比较多。
基于以上原因,自己回顾了一下软件开发过程,如下。觉得任何一个功能,都要按照软件开发流程的模式去执行才符合一个高级工程师或者说架构师的风格。根据自己的思考,手绘了以下图(ps.哪位朋友有比较好的关于画图这方面的软件,希望可以介绍几个,下次我就不用手工画图了,嘿嘿~)
问题1:
开发需求,只有每次都自己主动去评估开发周期,自己才会对自己更了解,同时对需求的开发周期评估才会更准确,更有经验。——这样你才有胆量去做项目经理或者说“老大”。至于说如何去评估开发周期,我个人认为有两个参考点:①业务复杂度;②算法复杂度;
这里附带个连接,挺有意思的:人生经验——如何在三分钟内完成开发周期评估
问题2:
软件开发,任何时候思考都比编码更重要。思考过的编码才更清晰更少bug。大牛都是90%的时间思考,然后10%的时间用于编码的。如果思考好了,编码真的是个简单的事情。关于如何思考,在软件开发这方面,当然是按照工业的软件开发流程啦,认真想想,这个流程真的是很有道理的,按照流程去开发(也不用严格按照要求每一步都做完,但是思路上得是这样),开发出来系统(功能),才更具可扩展性,可用性以及可伸缩性。软件开发就是要求开发系统要考虑以下几个特性:①可扩展性;②可伸缩性;三高性能;④可用性。至于这几个词是什么意思,这里我就根据自己的理解大概说一下:
可扩展性:能适应需求的变化,以及后面软件的扩大,达到改动最小;
可伸缩性:单机性能达到瓶颈的时候,可以方便的通过横向扩展,增加机器就可以承载更大的请求;
可靠性:其实就是容错性,在系统正常处理的过程中,出现异常的时候,也能保证系统整理逻辑正常的,最简单的例子就是:数据库的事务,等等~
高性能:这个就不用说啦,就是让系统的处理能更加高效,更少的资源占用或者说处理逻辑更加简单等等~
问题3:
其实答案和问题2一样,只是开发出来之后,自己要认真地做单元测试走一遍流程。在临界值的地方,要认真度量好,最好也做一下临界值测试~
下面是关于上面这样图的以下思考总结:
1.其实软件开发流程,就是跟哲学一样解决几个问题:可以做?-》做什么-》怎么做-》怎么样
可行么:
可行性分析:经济可行性+法律政策可行性...
做什么:
需求分析:功能+性能+硬件环境条件
怎么做:
概要设计:建立系统的逻辑模型,与计算机无关;架构(分模块等)+数据库(那些表,不用具体到表字段)
详细设计:物理模型,可以直接翻译成代码;算法+数据库(表字段)
编码:根据详细设计,把详细设计的文字翻译成具体的编程语言而已~
怎么样:
测试:单元测试+回归测试+系统测试
2.概要设计阶段要认真考虑以下几个特性(各个特性的含义以上已经有解释):
可扩展性,可伸缩性,可靠性,高性能
3.平时说的电商网站有以下几个特性:
高并发,高可用,高性能
即所谓的三高。这只是电商网站或者说是一些软件的特性而已。而我们平时说,设计一个系统的时候,要考虑的是不一样的概念来的,比如说,我们设计一个系统,要考虑:可扩展性,可伸缩性,可用性,高性能~