构建之法读后感
我过去仅仅是抄袭同学的代码,几乎很少自己动手去思考,我仅仅再看视频的时候才跟着课程写一些代码。
在这一章中,作者为我们介绍了一些关于软件工程的基本知识。
①软件=程序+软件工程:正是因为对软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)相关的内容的完成,才能完成把整个程序转化成为一个可用的软件的过程。
②软件开发的不同阶段:玩具阶段→业余爱好阶段→探索阶段→成熟的产业阶段
③软件所具有的特殊性:复杂性、不可见性、易变性、服从性、非连续性(由软件的本质所决定的)
软件还有其他特性:
·有许多不同的程序设计语言、软件工具和软件开发平台
·存在许多不同的软件开发流程
·软件团队中存在许多不同的角色
·软件通常既可以存储在磁带上,也可以存储在CD/DVD上
个人开发流程PSP(Personal Software Process)
特点:(1)不局限于某一种软件技术,而是着眼于软件开发的流程,这样,开发不同应用的软件工程师可以互相比较。
(2)不依赖于考试,而主要靠工程师自己收集数据,然后分析、提高。
(3)在小型、初创的团队中,很难找到高质量的项目需求,这意味着给程序员的输入质量不高。在这种情况下,程序员的输出(程序/软件)往往质量也不高,然而这并不能全部由程序员负责。
(4)PSP依赖于数据(工程师输入数据的时间代价、数据可能遗失或者不准确的风险、可能会出现一些数据不利于工程师本人的情况)
(5)PSP目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度,工程师有可能很高效地开发出一个顾客不喜欢的软件。
1.软件工程包括了开发、运用、维护软件的过程中的很多技术、做法、习惯和思想。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”,软件开发流程的目的是为了提高软件开发、运营和维护的效率,以及提升用户满意度、软件的可靠性和可维护性。
2.初级软件工程师的成长包括以下几种:
(1)积累软件开发相关的知识,提升技术技能(如对具体技术的掌握,动手能力)。例如:对JAVA、C/C++、C#的掌握,诊断/提高效能的技术,对设备驱动程序、内核调试器的掌握,对于某一开发平台的掌握
(2)积累问题领域的知识和经验(例如对医疗或金融行业的了解)
(3)对通用的软件设计思想和软件工程思想的理解
(4)提升职业技能(区别于技术技能),包括:自我管理的能力、表达交流的能力、与人合作的能力、按质按量完成任务的执行力
(5)实际成果——最重要的评价标准
3.敏捷开发原则:
(1)尽早并持续地交付有价值的软件以满足顾客需求
(2)敏捷流程欢迎需求的变化,并利用这些变化来提高用户的竞争优势
(3)经常发布可用的软件,发布间隔可以从几周到几个月,能短则短
(4)业务人员和开发人员在项目开发过程中应该每天共同工作
(5)以有进取心的人为项目核心,充分支持信任他们
(6)无论团队内外,面对面的交流始终是最有效的沟通方式
(7)可用的软件是衡量项目进展的主要指标
(8)敏捷流程应能保持可持续的发展。领导、团队和用户应该能按照目前的步调持续合作下去
(9)只有不断关注技术和设计,才能越来越敏捷
(10)保持简明——尽可能简化工作量的技艺
(11)只有能自我管理的团队才能创造优秀的架构、需求和设计
(12)时时总结如何提高团队效率并付诸行动
敏捷流程概述:找出完成产品需要做的事情→决定当前的冲刺(Sprint)需要解决的事情→冲刺(冲刺期间每天开每日例会)→得到软件的一个增量版本并发布
敏捷的团队
自主管理:自己挑选任务、自己提出改进并实施改进
自我组织:每个人联合起来对项目负责
多功能型:每个人都全面负责,自己搞定规格说明书,和别人沟通,自己搞定测试
 学习所有的经验 
在学习过去的经验的同时,也要避免让过去的经验妨碍解决现在的问题 
这一原则有两个含义——
- 把经验总结出来
- 分享经验
获取和引导需求:软件团队需要找到软件的利益相关者,了解和挖掘他们对软件的需求,引导他们表达出对软件的需求;需求还可以来自各种管理机构;需求不仅来自外界,还可以来自软件企业本身;需求还可以来自技术团队本身;有些需求的目的是要更好地了解用户的行为和需求。
分析和定义需求
验证需求
在软件产品的生命周期中管理需求
软件产品的利益相关者
获取用户需求——用户调查
几种常用的用户调研方法:焦点小组、深入面谈、卡片分类、用户调查问卷、用户日志研究、人类学调查、眼动追踪研究、快速原型调研、A/B测试
一定的专业能力 
如果一定要说专业能力的话,PM的专业就是理解和表达,你能否理解不同人的心理、需求和言外之意?你能否借助文字、图表、草图,甚至代码来清晰准确地表达自己的想法?PM通常也能写代码,能玩转Excel、PPT、Visio、甘特图,会PS,有文字功底,写的博客有人爱读,反正,总得有几招绝活吧!不用说还要有大量的阅读,对IT行业、用户心理、社会都要有广泛的了解
自省的能力 
一个PM做第一个项目时可以拍脑袋定工期,拍胸脯打包票,最后拍屁股走人(谁没年轻过呢),但是失败之后要有自省和自我改进的能力
用户体验的要素
用户的第一印象
从用户的角度考虑问题
软件服务始终都要记住用户的选择(长期的使用只会使软件更好用)
短期刺激 长期影响
不让用户犯简单的错误
注重用户体验和质量
情感设计
评价标准
对于一个软件的用户界面,我们有没有什么评价标准呢?可以参考费茨法则(Fitts law)、Nielsen启发式评估十条原则以及其他经验。下面是邹欣老师在自身实践的基础上总结的一些原则:
1. 尽快提供可感触的反馈系统状态
2. 系统界面符合用户的现实惯例(Familiarity,Avoid Surprise)
与用户沟通,软件系统要使用用户语言而不是开发者语言,所用的概念要贴近生活实际,而不是用学术概念或开发者的概念。我们说的生活实际,最好是目标用户的实际生活体验。
3. 用户有控制权
操作失误可回退,要让用户可以退出软件(很多软件都没有退出菜单,这是导致用户反感的一大原因)。用户可以定制显示信息的多少,还可以定制常用的设置。
4. 一致性和标准化
在软件中,对同一事物和同类操作的表示用语,各处要保持一致。例如,某词典软件有“帮助用户收集生词并且背诵生词”的功能。这个功能要有明确一致的称呼,不能混杂着叫“单词本”、“生词本”、“Word List”、“Word Book”、“单词文件”……等等。
5. 适合各种类型的用户
6. 帮助用户识别、诊断并修复错误
7. 有必要的提示和帮助文档
不需要文档,用户就能使用自如,当然更好,必要时还可以提供在线帮助。如果软件和用户的工作相关(而不是简单的游戏),那么基本的提示和帮助文档还是很有必要的,而且也要提供便利的检索功能。文档要从用户的角度出发描述具体步骤,并且不要太冗长。
如果没有独立思考的能力,我的编程思想没有办法进行得到提高,就无法取得进步。
需要自己提高能力。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号