软件工程的思考

软件工程的思考

 ----读《大道至简:软件工程实践者的思想(典藏版)》有感

 

从就读软件工程专业以来,我一直都在思考着一些问题,我的专业主要是学习什么?以后究竟能做些什么?我们能做仅仅是coding吗?

 

后来我姨问我,你的专业将来做什么呀?(我姨学历为小学,对建筑中的装修比较了解)我想了一会,说,我们是做软件的,做的方法与建一座大厦一样,是一个很大的工程,所以就叫做软件工程了。建大厦过程中有很多部门,做软件过程中也会有这些;建大厦时用到的框架,软件也会有相对应的框架等。有些混乱的对比与理解,感觉一直以来都理解得不透,到今天看到了《大道至简:软件工程实践者的思想(典藏版)》得到一个清晰而形象的理解。其实,比较喜欢书本清晰由浅及深的思路;喜欢字里行间跳动通俗易懂的文字;喜欢由整体及部分而又部分及整体的思维方式及方法论。对于软件工程体系,一图瞬间点破。

 

想到我们中国高等教育的软件工程专业的培养计划,不外乎也是上面那个图,只是那时候我们实现太年轻而一头埋在其中,只见到一棵一棵树木而不知这是一片森林。大一时学习C,大二学习java,数据结构与算法设计,面向对象编程设计思想。接着大三就开始学习需求工程,信息建模与软件开发,还有各种软件工程理论。大四,则学习项目管理;就这样从上面由里向外面扩展着。

 

受作者风趣故事,发散与逆向思维深深感染。让我想到了数学建模,因为从小喜欢数学,对程序设计的兴趣大部分原因是来自于它,数学建模过程是通过对客观世界进行抽象建立数学模型,然后对数学问题的求解,再由数学的解答回归到现实的世界,就是这一串的思维与方法过程。而在数学问题分解与解决的过程中用到了各种算法,重点就在于算法,算法是面向逻辑的,与用什么语言去实现没有太大关系,如果真的要实现可以用Cjava等。其实说到底算法也是数学来的,慢慢我们会明白,我们为什么要学习高等数学,线性代数,概率与统计等等。对于数据结构,其实与语言也没有大太的关系的,可是不知道为什么很多同学与我讨论数据结构的时候,都会说C的结构体就是数据结构。我猜他没把严蔚敏的《数据结构》完全弄懂,里面写的都是类C语言,可以看成是一个伪代码来的。数据结构是讨论逻辑与物理的数据的表示、存储和处理的,对于逻辑就得有数学基础,例如离散数学,组合数学等。对于物理方面,得了解计算结构体系,组成原理,操作系统。其实,这些只是作者说的第一个椭圆部分。这部分是最核心的,同时也是最本质的。所以,面试的时候面试官很喜欢从一层去出题检验你的基本功是否扎实。

 

对于行为与思维的积累,我们有了作者的第二个大椭圆----方法。经过积累,我们留下很多对某些方面的设计方法与设计模式,而在面向对象中以UML为载体描述出来并被总结出来,这些都属于实现部分。实现包括两个内部椭圆,总的来说是侧重于个人的,也就是作为一个程序员应该掌握与学会的内容。

 

但是个人的力量是有限,那就把很多个个人聚集一起,从而就形成了团队。个体是团队的个体,团队是个体的团队。也就是说,个体现在不能各自行动了,必需由团队去支配,而团队的构成必须要有个体去组成,形了一个组的概念,我们用一个组长去负责。一个团队形成后,做什么事情呢?可以做一个操作系统也可以做一个杀毒软件等等。这个就是工程或项目,给之一个角色叫项目经理。项目经理负责项目的管理等等的技术与非技术内容。说到管理,它包含四个职能:计划,组织,控制,领导。下图就是一个管理过程。 

其实管理是分层的,分为战略管理层,战术管理层,作业管理层,管理对象层。Boss们是战略管理层,关心的是整个企业的方向问题,与技术没什么直接关系,关心的是大的方向,用来统领全局。回到软件工程的管理,它会有一个计划,计划就会涉及到目标是什么,人力资源是怎样分配,进度是怎样等等。项目的计划形成后就把个体组成为一个团队,团队有一个领头的角色来带着,这个就是领导。它得每天根据计划来检查着团队的每个人是否把当天的工作是否完成了,这个是控制。整个过程就是形成管理过程。

 

从另一个方面看看,软件工程开始于需求,对客观世界的分析,得到客观世界的需求。形成文档作为沟通与交流的媒介;需求分析完成,进行制定计划,对软件开发过程的管理。切分各个阶段与划分各个角色的职责,形成各种设计文档,例如UML图,最后由程序员实现。

 

《大道至简:软件工程实践者的思想(典藏版)》使我对软件工程一个全新的认识、思维受到了冲击、和对交叉学科相关的综合认识,受益不浅。

 

猜你喜欢

转载自happyprince.iteye.com/blog/1717893