构建之法读后感

我过去仅仅是抄袭同学的代码,几乎很少自己动手去思考,我仅仅再看视频的时候才跟着课程写一些代码。

在这一章中,作者为我们介绍了一些关于软件工程的基本知识。

软件=程序+软件工程:正是因为对软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)相关的内容的完成,才能完成把整个程序转化成为一个可用的软件的过程。

②软件开发的不同阶段:玩具阶段→业余爱好阶段→探索阶段→成熟的产业阶段

③软件所具有的特殊性:复杂性、不可见性、易变性、服从性、非连续性(由软件的本质所决定的)

软件还有其他特性:

·有许多不同的程序设计语言、软件工具和软件开发平台

·存在许多不同的软件开发流程

·软件团队中存在许多不同的角色

·软件通常既可以存储在磁带上,也可以存储在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. 有必要的提示和帮助文档

不需要文档,用户就能使用自如,当然更好,必要时还可以提供在线帮助。如果软件和用户的工作相关(而不是简单的游戏),那么基本的提示和帮助文档还是很有必要的,而且也要提供便利的检索功能。文档要从用户的角度出发描述具体步骤,并且不要太冗长。

如果没有独立思考的能力,我的编程思想没有办法进行得到提高,就无法取得进步。

需要自己提高能力。

 

posted @ 2021-08-06 19:56  华茹  阅读(39)  评论(0)    收藏  举报