工程化的思想

                        工程化的思想


工程这一词:

       最先了解“工程”这一词是从建设、建筑方面有所听闻,建筑工程、项目工程,水利工程、化学工程、土木工程、生物工程等的,之后接触了“软件工程”——是自己详细的学习和了解的一个工程。
       工程的思想:在 较短的时间多人合作,做出一个 功能强大、健壮性好项目事件
                           
                                 工程化的思想_第1张图片                            工程化的思想_第2张图片                            

软件工程

     在六七十年代计算机发展初期,程序设计都觉得是少数聪明人干的事。他们的智力与技能超群,编写的程序既能控制弱智的计算机,又能让别人看不懂、不会用。那个时期编程就跟捏泥巴一样随心所欲,于是他们很过分地把程序的集合称为软件,以便自己开心或伤心时再把程序捏个面目全非。人们就在这种美滋滋的感觉下热情地编程,结果产生了一堆问题:程序质量低下,错误频出,进度延误,费用剧增……。这些问题导致了“ 软件危机 ”。
之后,一群程序员、计算机科学家与工业界人士聚集一起共商对策。通过借鉴传统工业的成功做法,他们主张通过工程化的方法开发软件来解决软件危机,并冠以“软件工程”这一术语。三十年余年来,尽管软件的一些毛病如人类的感冒一样无法根治,但软件的发展速度超过了任何传统工业,期间并未出现真真的软件危机。这的确是前人的先见之明。如今软件工程成了一门学科。
软件工程 主要讲述软件开发的道理,基本上是软件实践者的成功经验和失败教训的总结。软件工程的观念、方法、策略和规范都是朴实无华的,平凡之人皆可领会,关键在于运用。 我们不可以把软件工程方法看成是诸葛亮的锦囊妙计─—在出了问题后才打开看看,而应该事先掌握,预料将要出现的问题,控制每个实践环节,并防患于未然。    工程化的思想_第3张图片      工程化的思想_第4张图片                         

 阅读过《大道至简》同学都应该有印象,它向我们讲述两个内容:做什么和为什么做。“做什么”作为一种状态或者现象,通常是(阶段性)不变的,所以人们了解自己“在做什么”时大多只需要观察。简而言之,只需要自省,就可以了解自己的所作所为了。然而“为什么做”却相对更难于理解,因为这是“表象下的实质”,潜藏得很深:习以为常,便会根本上忘却“习”的来由。例如项目总监说要一份计划,你大概只需要拿一个以前做过的文档模板,很快就能写出一份项目计划案来。但在这个过程中,你已经忘掉了“项目计划案”真正存在的价值——写它的目的,并不是“完成工作”。这就是我们为什么需要学习“工程”的思想和眼界。          
有谋略才会有好战术
 软件工程中的延迟注入、代码复用、分而治之、优化-折衷、合作、管理、界面等等,
                                     工程化的思想_第5张图片


软件复用
构造新的软件系统可以不必每次从零做起,直接使用已有的软构件,即可组装(或加以合理的修改)成新的系统。
                       工程化的思想_第6张图片
分工合作:
      现代社会中,事物变化的如此的迅速,比如软件,自己有一个新点子单单只靠一个人去做的话,做出来了,这想法可能早已经成为过时了;但是,如果分而治之,有工程的思想来做,可能一个人要5年,分工合作给50个人,可能半年就做好了。
                         工程化的思想_第7张图片


工程团队:
                                      工程化的思想_第8张图片

 
 总结
我们思考的方式、思考的范围要工程化,有工程的思想。
                                          工程化的思想_第9张图片

    有人说:“如果没有流水线作业技术,根本就没有后来的如此发达的工业社会文明”。这样说其实一点也为不过分。我们也许不敢说流水线作业技术是最好的分工和协作方式,但是毫无疑问,它却是至今为止最为行之有效的一种分工和协作方式。它把无论多么复杂的制作过程进行拆分,一步一步的,直至它很简单为止。这样,流水线作业技术就使人类自身获得了较彻底的解放,一个人再也不用去掌握那么多的技能。这不仅是提高了效率,也更提高了产品的质量。而且这样被拆分后的每一个简单工作任务,可以很容易地让机器去代替完成,从而大幅提高生产效率并降低生产成本。同时,对复杂过程进行最大程度上的细分后,能有效的实施无关联步骤的并行开发活动,从而大幅缩短每件产品开发所需的时间。
    如果我们从一个更广义的视角来审视软件工程;那么软件工程其实可以被理解为,是对软件的开发活动,如何来实施流水线作业化的拆分过程。这个流水线作业化如果实施得好,那么可以说对这个软件项目的工程化,肯定也是实施得很成功的。80年代盛行的结构化分析和设计方法中的瀑布模型,它基本是遵循完全线性化的工作拆分流程,和其它的工业产品的生产流程类似,前一个“工序”没有被完成并审核通过,后一个任务流程是不会启动的。当然,后来发现,这样僵硬死板的软件工程化开发流程,其实对许多项目并不适合,尤其是那些需求从一开始很难确定的项目,或是需求变化太快的一些项目。因此,在现在的软件工程领域中,出现了许多其它的一些软件开发方法,诸如原型法、迭代法、螺旋法、演进法等等。
     试问!其它的工业产品在其完整生产周期过程中,会只有一个厂家参与某个产品生产的全过程吗?很明显,绝对不是这个样子的。我们知道除了原材料之外,中间还有许许多多的中间产品(半成品)环节。试想!如果一个房产建筑商在承建某一栋大楼时,所有的东西,所有的任务都由它一家公司来做,这可能吗?它又要去生产钢筋,又要去生产水泥,它还有能力去造楼吗?所以这就需要社会分工。而“流水线作业”,也绝对不是狭隘仅指,某个公司内部有很好的流水线作业管理就能够行得通!而是一个某行业的、甚至是全社会的合理分工和协作。
    这正是我们所需要的“工程化”思想呀!努力培养自己工程化的思想、思考问题的方式。在这个时代中,要么你引领时代,要么享受最低保障,被社会牵着走!你会怎样做出选择?我们慢慢的培养,在这之前是要有大量的编程经验和代码的积累。 

你可能感兴趣的:(工程化的思想)