当前位置:C++技术网 > 资讯 > 开发项目:我们是怎样开发一个项目的

开发项目:我们是怎样开发一个项目的

更新时间:2016-10-13 13:54:54浏览次数:1+次

    前些日子,一个会员问我,“问一下 你学C++ win32 mfc qt 这些复杂的过程中 是如何记忆那些函数 及参数的,我感觉这个是我的一个坎儿。”,我仔细的分析,告诉他如何做。实际上说的是告诉他我们一般是如何去开发一个完整功能的。
    对于新手来说,知道了基本语法,却还是无法玩转软件开发。到底是为什么呢?基本语法是基础工具,有了基础工具并不能说你就会软件开发了。
    那么软件开发到底是什么呢?说白点,软件开发就是功能逻辑的组织和实现。基本语法只是实现的基础,然而功能逻辑的组织设计和语法没有半点关系。功能逻辑设计玩转的是逻辑套路,先做什么,后做什么,各种问题如何解决,最终达到什么效果。而新手只是会语法,所以面临一个功能开发的时候,一脸懵逼。这是再正常不过的事情。很多人感觉自己学了C/C++学了好久,为什么就不能写出一个像样的程序呢?原因就在此。你只会语法基础,却压根不懂得软件开发。
    而软件开发没有既定的模式,而我们学习的软件工程理论性太强又不实用。当然,软件工程在后期是非常有用的,前期作用不大。那么软件开发如何掌握呢?说难也难,说简单也简单,三个字:写程序。
    软件开发的积累,前期一定要大量写程序。我们这里说的写程序,并不是写几个for循环,求几个数字的和,而是写一个实用的程序,能供人反复使用的。比如计算器、换算器、数据分析。这个程序可以一直运行着,用户可以输入不同的数据进行处理,得到结果。你想想你写的程序,给别人用过吗?能够反复使用吗?在脱离IDE环境使用过吗?我想,开发经验不足的人,往往都是只是完成作业式的写好代码,运行,得到结果,然后就over了。这个过程,只能叫做写代码练习,构不成软件开发。
    软件开发得到的是成品程序软件,是可以供他人使用甚至可以出售的软件。软件不一定要有界面,但是一定要有解决问题的本质。因为你的程序软件是用来解决问题的,不是当成摆设的。
    你或许也会苦恼,在黑窗口的控制台写的东西,也算是软件吗?当然算!界面只是一个表皮,核心就是表皮之下的代码逻辑,解决问题的代码逻辑。而控制台程序只是穿着一件性感黑衣的软件而已。举个例子,假如一个控制台程序,拥有最牛逼的算法,可以预测彩票的结果,绝壁是逆天的软件。人家不在乎你的外表,只要你有真才实学,一样喜欢的不得了。这就是解决问题的本质。
    所以,我在和外行人解释,我是做软件开发的,做的东西就是他们见过的任何使用程序的东西。而软件就是可以让这些东西跑起来的东西。而我们知道,让设备跑起来的很多很多都是没有任何界面的程序,连控制台都没有。你可能只是觉得,软件就是电脑里运行的这些东西,理解的比较粗浅,以至于自己开发软件都觉得,控制台程序称不上软件。只是因为你对软件并没有深入的了解,被表象迷住了。
    那么你如何去开发一个软件呢?一定要使用界面吗?
    在你理解了软件之后,下面告诉你如何去做软件开发。基本原则:软件开发是解决实际问题的活动。没有实际使用价值的程序,要么是练习的程序、要么只是作为展示自己能力的作品,也就只是一个摆设而已。
    所以,你要开发软件,最先要做的就是,你想用这个软件做什么事情,解决什么问题。而解决的问题就是什么常常听说的用户需求。想找到用户需求,非常简单。你自己就是用户,你想用软件帮助你做些什么事情,就可以提取这个需求,作为你开发的软件解决的问题目标。
    或者说,你还是不知道怎么提取需求。我在进一步细化,帮助你找一个需求来开发。假如我现在经常要用专业上一些单位的换算,而且手动换算很费劲,容易出错。而专业的单位换算,常见的单位换算软件是没有的,他们只会做生活中最常见的单位换算,面向大众的。而你,作为一个专业的人士,如果有这样一个单位转换,就可以大大提高你专业工作的效率。所以,你决定,写一个程序,以后可以用这个程序来帮忙转换,可以省时省力。
    这样,这个需求就提取出来了。需求提取出来之后,接下来就是要设计使用流程,也就是使用方法逻辑。当然是要以方便高效使用的原则来设计,这样才方便自己嘛。使用方法流程,不同的人实现会有不同的方式,这和每一个人的使用习惯有关。所以,你要知道,你这个软件给谁用,才能设计好软件。你开始练习软件开发的时候,也就是给自己用,以方便自己为原则。
    软件使用流程设计,就是根据解决需求的流程来设计使用流程。作为转换单位程序,肯定是先输入一个值,然后执行转换,得到结果。而不同的功能当然功能逻辑就不一样,这就是业务逻辑。业务逻辑决定了使用逻辑。业务逻辑是程序底层的实现逻辑,基本是都是比较固定的。然而使用逻辑却可以千变万化,不同的使用逻辑流程体验不一样,所以我们的目标是让用户体验第一。使用越简单,软件越流行。
    那么如何设计业务逻辑和使用逻辑呢?业务逻辑和使用逻辑的关系如何呢?
    业务逻辑是用户使用逻辑流程的基础,因为你的软件就是解决业务的需求的。没有业务逻辑,也就没有价值了。然而业务逻辑只能规定基本的使用逻辑,比如这里的是先输入一个值,执行转换,得到结果。所以使用逻辑就是,在界面上输入一个值,点击转换,界面就显示了结果。这个基本的使用流程,是由业务逻辑决定的。但是,这个使用逻辑却可以优化。在界面输入一个值后,可以不用点击转换按钮,而是实时的进行转换并显示。这样,使用流程就变的更好了,体验更好。不过,体验好了,软件实现就要做更多的工作了,这里就是支持实时转换。
    然而实时转换并不是业务的核心,只是辅助提高用户体验,也就是改善用户使用流程的。有没有都可以解决业务需求。
    我们的软件开发,也就是在业务逻辑和用户使用逻辑中做工作了。当然,业务逻辑不只是实现客户的需求,这里指的是解决一个特定问题。不管是做算法,还是客户的现实业务需求,在程序里都是解决一个特定问题。
    而解决特定问题,我们需要一些套路,也就是经验。面对一个特定的问题,我们经验丰富,就可以迅速想到实现的方案,并编码实现。如果经验不足,就无从下手。而这些经验也就是我们常常说的项目开发经验、软件开发经验。这个经验一部分来自他人的分享,比如C++技术网有大量开发经验文章,写的全面细致。另一部分来自自己大量的开发实践。
    作为程序员工作,并不需要你去提取需求,公司会有市场人员、产品人员将客户的需求进行转换,最后到程序员这里就是一个具体问题。比如说,客户需要用户权限控制系统,客户必然不知道准确的叫法,只能说他想用在哪里,想让一些人只能拥有一部分的权限等,然后市场人员搜集到这些需求,产品人员可以将这种需求转为常规的项目产品功能描述,也就是用户权限控制系统。产品人员可能是产品经理PM。这个再传递给程序员,程序员就需要将这种抽象的需求转为具体的实现方案。如何控制权限,如何分配权限,整个控制系统如何运作,这是一个整体的项目设计。设计好之后,就是具体的实现。
    那么在实现的时候,就要进一步具体化,将数据存储到数据库或者配置文件或者注册表,存储在本地还是远程还是云。数据表中各个字段都起什么作用,来支撑起整个系统。然后就是整个代码的实现。每一句代码完成一个具体的动作。
    整体上我们就是做这些事情。这个可以是一个单点功能,也可以是一个完整的模块,甚至可以是一个完整的项目。当然,我这里是在比较上层的角度来分析的。因为这一步是没有经验或者经验不足的程序员看不到的。所以,也非常细致的讲述了。这也正是大量的人说学了基本语法,学的好几遍,为什么还是不会开发软件的原因。