zoukankan      html  css  js  c++  java
  • 《构建之法》--阅读

    《构建之法》

    第一章  概论

        1、软件工程

          软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。

          软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试盒软件维护。

          软件工程和下列的学科相关:计算机科学、计算机工程、管理学、数学、项目管理学、质量管理、软件人体工学、系统工程、工业设计和用户界面设计。

         2、软件的特殊性

             <1>、复杂性

             软件的各个模块之间有各种显性或隐性的依赖关系,随着系统的成长和模块的增多,这些关系的数量往往以几何级数的速度增长。

           <2>、不可见性

             软件工程师能够直接看见源代码,但是源代码不是软件本身。商业软件出现了错误,工程师可以看到程序在出错的一瞬间留下的一些痕迹(错误代号、大致的目标代码位置、错误信息),但是几乎无法完整重现到底程序出现了什么问题。

           <3>、易变性

             软件看上去很容易修改,修改软件比修改硬件容易多了。人们自然地期待软件能在下面出现的两种情况下“改变”,一个是让软件做新的事情;另一个让软件适应新的硬件。但是与此同时,正确地修改软件是一件很困难的事情。

           <4>、服从性

              软件不能独立存在,它总是要运行在硬件上面,它要服从系统中其他组成部门的要求,它还要服从用户的要求,行业系统的要求。

           <5>、非连续性

              人们能够比较容易地理解连续的系统:增加输入,就能看到相应输出的增加。但是许多软件系统却没有这样的特性,有时输入上很小的变化,会引起输出上极大的变化。

         3、为什么要学软件工程呢?学完软件工程我们能学到什么?(提问)

          http://zhidao.baidu.com/question/432289923986540484.html (查询了网上的资料,觉得这个还不错的!)

    第二章  个人技术和流程

            1、如何更好地学习程序设计和软件工程

          http://news.cnblogs.com/n/509554/

           2、个人软件开发流程(PSP)

          <1>、PSP原理

            每个程序员都不同,为了使工作更有效率,程序员必须在其自己的历史数据基础上制定工作计划;为了达到持续不断的更改,程序员必须实施过程并进行度量;程序员必须追求质量最优化;提早发现缺陷并改正;提早发现缺陷并改正可以减少付出成本;用最快速、最直接的工作方式。

          <2>、PSP定位

            PSP的定位是每一位开发人员。通过制定过程、计划、度量、跟踪,进行相应的过程改进。指导开发人员更有效的估计、计划、跟踪,完全在进度、质量、成本内的项目,并实现不断的过程改进。

          <3>、PSP说明       

              a. PSP流程的建立需要管理者和执行者共同参与;

             b. 在PSP中关注开发人员的5点:规模估计、工作量估计、产品质量、流程质量和个人生产率;

             c. 通过统计学和历史数据可以使规模、工作量估计更加的有效;

             d. 对于产品质量,提出尽早的发现并解决bug。可以很大的减少成本,增加客户满意度;

             e. 通过更有效的计划和产品质量的提高,可以减少重工时间,从而减少生命周期的时间。

          <4>、PSP流程

               PSP有七个等级,PSP的开始点是开发人员选择改进哪些他们自己的工作流程。每个等级都是在它之前等级的基础上增加的,为了最小化的减少流程改变对工程师的影响,开发人员可以慢慢的实现每一个等级。

         3、如何能更好的保证软件的质量(提问)

          http://wenku.baidu.com/view/73367c28e2bd960590c677da.html

          http://www.doc88.com/p-677129508676.html

          http://www.vipcareer.com/Publish/ViewArticle.aspx?articleId=45684

    第三章  软件工程师的成长

           1、软件工程师有什么更好的方法来衡量自己的能力和价值呢

          http://www.docin.com/p-307034950.html

          http://www.cnblogs.com/xinz/p/3852177.html

          2、软件工程师的成长道路上会遇到哪些(提问)     

          (下面是一位前辈总结的程序员成长四个阶段,个人觉得非常有道理,你在哪个阶段?)

      阶段一:不知道自己不知道(Unconscious incompetence)

     

              

     

      大学期间,我和老师做过一些小项目,自认为自己很牛,当时还去过一些公司面试做兼职,但是就是不知道为什么没有回复。那个时期的我,压根不知道自己不知道,还以为自己懂很多,现在想起自己以前就好笑,那个时候还算不上程序员,顶多只能算是个业余编程爱好者。 

    表现:假自信、过度承诺、满口我能行没问题、看不起其他程序员….

      阶段二:知道自己不知道(Conscious incompetence)

     

              

     

      工作后,发现自己在项目中工作时遇到困难不知道怎么解决,和身边人一比发现自己知识很欠缺,这时候知道自己技不如人,很多地方都不足,需要大补才行,这个时候就是大家所说的初级程序员阶段,这个阶段必须依靠别人指导。

    表现:有点心虚、虚心学习、偷偷努力、羡慕牛人…

      阶段三:知道自己知道(Conscious competence)

     

              

     

      工作三四年后,自己的技能逐步提高,成为了项目组的技术大拿,这时候也很自信,知道自己能够解决遇到的所有问题,这时候就是高级程序员阶段了。

    表现:自信、比较客观、真正承诺、有点自我…

      阶段四:不知道自己知道(Unconscious competence)

     

              

     

      工作多年后,随着自己知识的深度和广度的提高,越学发现越不懂,有时好觉得自己以前真是浪费了太多时间。虽然觉得自己还有很多需要提高,但是对工作中遇到的问题基本没有解决不了的,这个时候很多知识都自成体系,解决问题也有了自己的潜意识,有时连自己都不知道自己知道,这时候属于架构师级别了。

      表现:开放、主动、好学、谦虚…

      各位程序员,你在成长道路的哪个阶段了?

     

    第四章  两人合作

          1、代码规范   

            课本P55—P70    

            http://www.doc88.com/p-50876794995.html

          2、结对合作有什么好处?为什么要结对合作?性格对合作的影响?是否需要代码规范?(提问)

          http://www.cnblogs.com/xinz/p/3852241.html

          http://www.cnblogs.com/xinz/archive/2010/11/27/1889978.html

    第五章  团队和流程

           1、“团队”与“非团队”

          <1>、团队的特点

             a、团队有一致的集体目标,团队要一定完成这目标

               一个团队的成员不一定要同时工作,例如接力赛跑。

             b、团队成员有各自的分工,互相依赖合作,共同完成任务

               一个团队可以把任务切成无数块,但每一块都是相互依赖的,缺一不可。

          <2>、团队合作

             团队合作指的是一群有能力,有信念的人在特定的团队中,为了一个共同的目标相互支持合作奋斗的过程。它可以调动团队成员的所有资源和才智,并且会自动地驱除所有不和谐和不公正现象,同时会给予那些诚心、大公无私的奉献者适当的回报。如果团队合作是出于自觉自愿时,它必将会产生一股强大而且持久的力量。

          <3>、团队的表现        

             a、成员密切合作,配合默契,共同决策和与他人协商;

               b、决策之前听取相关意见,把手头的任务和别人的意见联系起来;

             c、在变化的环境中担任各种角色;  

             d、经常评估团队的有效性和本人在团队中的长处和短处。

         2、典型的软件团队模式和开发流程都有哪些?各有什么优缺点?

           <1>、软件团队的模式

             a、主治医师模式

             b、明星模式

             c、社区模式

             d、业余剧团模式

             e、秘密团队

             f、特工团队

             g、交响乐团模式

               h、爵士乐模式

             i、功能团队模式

             j、官僚模式

           <2>、开发流程

             一群人在一起做软件开发,总是要有一些方式方法。

               我们在开发、运营、维护软件的工程中有很多技术、做法、习惯和思想。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”,软件开发流程的目的是为了提高软件开发、运营和维护的效果,以及提升用户满意度、软件的可靠性和可维护性。 

             a、写了再改模式

             b、瀑布模式

             c、瀑布模型的各种变形

             d、Rational统一流程

             e、老板驱动的流程

             f、渐进交付的流程

         3、很多团队在合作的过程中都会遇到很多问题,很多矛盾,有些团队因此而破裂,当遇到很难调解的问题时,该如何解决呢?(提问)

  • 相关阅读:
    Cocos2d-x 学习笔记(15.2) EventDispatcher 事件分发机制 dispatchEvent(event)
    ‎Cocos2d-x 学习笔记(13) ActionEase
    ‎Cocos2d-x 学习笔记(12) Speed Follow
    ‎Cocos2d-x 学习笔记(11.10) Spawn
    ‎Cocos2d-x 学习笔记(11.9) FadeTo FadeIn FadeOut
    ‎Cocos2d-x 学习笔记(11.8) DelayTime ReverseTime TargetedAction ActionFloat Blink TintTo TintBy ResizeTo ResizeBy
    Cocos2d-x 学习笔记(11.7) Repeat RepeatForever
    Cocos2d-x 学习笔记(11.6) Sequence
    指针
    TX2常用命令
  • 原文地址:https://www.cnblogs.com/OuZeBo/p/4429096.html
Copyright © 2011-2022 走看看