BUAA2020软工作业(二)——对软件工程的初步理解
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 2020春季计算机学院软件工程(罗杰 任健) |
| 这个作业的要求在哪里 | 个人博客作业 |
| 我在这个课程的目标是 | 进一步提高自己的编码能力,工程能力 |
| 这个作业在哪个具体方面帮助我实现目标 | 反思过去,展望未来 |
| 其他参考文献 | 《构建之法——现代软件工程》第二版 |
一、速读《构建之法》后的几个小问题
1.关于技能的反面
书中3.3节,作者提出了一个考察一个人是否精通魔方的方法:
a. 给面试者一个各面打乱颜色的魔方;
b. 要求他把六面还原;
c. 如果还原了,要求他把魔方恢复成我最初给他那个混乱的局面,必须一模一样。
我感觉对于还原成原混乱的局面的这个要求,如果不提前告诉被考察者这个要求,那么应该不会有人去留意这个问题,也就不会记得自己复原的具体过程。如果提前告诉被考察者这个要求,那么应该只要记忆好就可以做到。所以我觉得这个问题不应该作为考察一个人是否精通魔方的问题。那么作者用这个对这个例子的理解是什么呢?
2.关于创新
在16.1.2节中,作者给出了“创新者甚至恨创新”的支持例子,就是假设发明电报的人被发明电话的人上门推销,发明电报的人会感到不安,因为电话这个创新将会颠覆目前的电报产业,导致辛辛苦苦建立起来的电报公司失去市场。而在我看来恰恰相反,一个颠覆性的产品必将会带来很大的商业价值,只要抓住机会加以利用,就会取得成功。比如这个电报和电话的问题,发明电报的人看到商机后,完全可以投资帮助这个发明电话的人建立市场,电话市场发展起来后,也许电报会失去市场,但是他们两个人都会获得更大的收益,实现双赢。请问作者是否考虑到了这种情况呢?
3.关于用户需求
在8.3节中,作者提到了自己的体会:
微软公司有专门的部门,经常招募目标用户来做试验。这项活动有专门的研究人员和PM负责,作为开发人员,我也曾实地参观过用户使用新版本的Outlook (我们隐蔽在单向玻璃窗后面)。研究人员通常让被试者完成一-些任务, 例如,
在Excel中,你想互换一个表格中的行和列,你怎么做到的呢?
你想给不少客户都发送内容相似的贺年邮件,但是客户的名称和地址都各不相同,你怎么用Word/Outlook完成这个任务?
在Excel中,你在看一些大的表格的时候,要来回移动,但是这样表格的标题栏就看不到了,怎样锁定标题栏呢?
众所周知人们在刚接触一款强大的软件的时候,不免都会受到认知阻力的影响,而据我调查很多高级软件的设计厂商都没有配套的详细的教程,或者教程太过专业很难入手,用户在使用的时候只能自己去搜索相应的资料。众所周知产品是以用户为中心的,所以软件厂商是否应该把重心向编写教程方面侧重一下呢?
4.关于代码规范
作者在4.3节中提到:
函数最好有单一的出口,为了达到这一目的,可以使用goto。
但是现在网上普遍的一种理论是goto有害论。goto虽然用起来很自由,但是它会使程序逻辑非常复杂,不易阅读。而且使用goto使得分析和验证程序(尤其是涉及循环的程序)的正确性的任务非常困难。我也有相同的理解,所以我觉得我们在团队项目中,应该尽量少用goto语句,不知道作者对此看法如何?
5.关于用户体验
在第12章用户体验中,作者提到一个产品设计的细节——静音按钮要同时关闭闹钟铃声么?
- 如果关掉了,那么就会造成习惯静音的用户接收不到闹铃的问题,遭到用户的抱怨;
- 如果不关掉,就会出现书中说的纽约交响乐团的管弦乐演出被iPhone闹钟铃声打断的问题,后果也很严重。
事实上,在现在的大部分软件的功能中都会存在矛盾性的问题,一个功能既有好的方面也有不好的方面。那么,我们在设计产品时,面对复杂的用户需求,怎么做合理的取舍才能让软件被大多数人所接受呢?
二、请问 “软件” 和 “软件工程” 这些词汇是如何出现的——何时、何地、何人?
软件:图基在1958年发表的论文《具体数学的教学》包含了在搜索中发现的最早的“ 软件 ” 一词的用法。在工程环境中,最早的“软件”一词的发表是在1953年8月,Richard R. Carhart在RAND Corporation的研究备忘录中发表的。
软件工程:1969年(阿波罗11号期间),由MIT Draper 实验室的数学与电脑科学先锋— Margaret Hamilton女士提出。下面是她的原话:
我一直以来坚信这项发明流着艺术与科学的血液,虽然当时很少人是这么想。因此,我致力于为软件以及那些发明者争取应有的正统性与尊重,所以我开始使用“软件工程”这样的字眼来将之与硬件还有其他工程学类做出区别。
三、请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?
林纳斯·本纳第克特·托瓦兹,生于芬兰赫尔辛基市,拥有美国国籍。他是Linux内核的最早作者,随后发起了这个开源项目,担任Linux内核的首要架构师与项目协调者,是当今世界最著名的电脑程序员、黑客之一。他还发起了Git这个开源项目,并为主要的开发者。
林纳斯在网上邮件列表中也以火暴的脾气著称。例如,有一次与人争论Git为何不使用C++开发时与对方用“放屁”(原文为“bullshit”)互骂。2012年6月14日,托瓦兹在出席芬兰的阿尔托大学所主办的一次活动时称Nvidia是他所接触过的“最烂的公司”( the worst company)和 “最麻烦的公司”(the worst trouble spot),因为Nvidia一直没有针对Linux平台发布任何官方的Optimus支持,随后托瓦兹当众对着镜头竖起了中指。
四、上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
用户数量排名:参考wiki百科

1.Microsoft TFS的优缺点:
优点:是对敏捷,msf,cmmi等项目、过程管理、过程改善的支持。任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用。
缺点:能应用起来的团队、公司的数量极少,多数真正用起来,也就是源代码管理这部分,这也仅仅是占TFS极小部分功能。
2.GitHub的优缺点:
优点:GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。
缺点:可能不是捕捉创意过程和记录创意点子的最佳工具。对于这种特殊功能模拟可以选择LayerVault 或其他相似工具。之前,我们已经强调过Github非常适用代码跟踪,但是却不是最好的设计跟踪工具。将图片内容转化为代码,或者将设计用于产品设置,看起来依旧不是那样顺利。
3.Trac的优缺点:
优点:非常灵活,可以随心所欲控制可以和SVN集成
缺点:功能不是很强大
4.Bugzilla的优缺点:
优点:免费,有中文版支持
缺点:快速搜索结果不准确。只能管理缺陷。
5.Apple XCode的优缺点:
优点:编译速度极快,每次操作都很快速和轻松。自动提供撤消、重做和保存功能,无需编写任何编码。
缺点:更新版本后,某个插件可能会失效。
五、调查完目前流行的源程序版本管理软件和项目管理软件后,请你选择其中至少2个软件来进行动手实践
1.Git

使用git进行版本管理可以说是十分方便的了,由于git没有GUI,所以如图配合iterm2进行使用,效果极佳。
2.Github

平时使用Github都是进行代码备份用的,以防电脑突然坏掉了,写了一半的代码就白写了。但同时Github也是一种记录,记录了一个程序员的成长,同时在Github中我们还可以阅读到很多高质量的开源代码,方便学习。
BUAA2020软工作业(二)——对软件工程的初步理解的更多相关文章
- BUAA2020软工作业——提问回顾与个人总结
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 提问回顾与个人总结 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方 ...
- BUAA2020软工作业(五)——软件案例分析
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 软件案例分析作业 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方面 ...
- BUAA2020软工作业(四)——结对项目
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 结对项目作业 我在这个课程的目标是 进一步提高自己的编码能力,工程能力,团队协作能力 这个作业在哪 ...
- BUAA2020软工作业(三)——个人项目
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人项目作业 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方面帮助 ...
- BUAA2020软工作业(一)——谈谈我和计算机的缘分
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第一次作业-热身! 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方 ...
- BUAA2020软工团队beta得分总表
BUAA2020软工团队beta得分总表 [TOC] 零.团队博客目录及beta阶段各部分博客地址 团队博客 计划与设计博客 测试报告博客 发布声明博客 事后分析博客 敏 杰 开 发♂ https:/ ...
- [软工作业]-软件案例分析-CSDN
[软工作业]-软件案例分析-CSDN(app) 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业-软件案例分析 我在这个课程的目标是 ...
- 软工作业-----Alpha版本第一周小结
软工作业-----Alpha版本第一周小结 Part1.第一周周计划记录 姓名 学号 周前计划安排 每周工作记录 自我打分 yrz(队长) 1417 1.进行任务分析 2.任务分配 ...
- 【软工作业&思考】关于软工的一些概念性理解暨第一次阅读作业
概述 项目 内容 本次作业所属课程 2019BUAA软件工程 周二班 本次作业要求 第1次个人作业当然,比这个更重要百倍的还是实实在在的思考,这也是标题如此命名的原因 我在本课程的目标 在原有实践经验 ...
随机推荐
- (2)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Cloud是什么?Spring Cloud版本介绍
Spring Cloud 是一系列框架的有序集合.它利用 Spring Boot 的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务注册.服务发现.配置中心.消息总线.负载均衡.断路器.数 ...
- this关键字的理解
this理解为:当前对象 或 当前正在创建的对象 this代表所在类的当前对象的引用(地址值),即对象对自己的引用. 备注:意思方法被那个对象调用,方法中的this就代表那个对象.即谁调用,this就 ...
- SQLSERVER存储过程基础
SQLSERVER存储过程基础 1.声明变量 DECLARE @F001 SMALLINT, (三元素,声明declare+变量名+类型) @F002 INTEGER, @F003 V ...
- .NET 中的HTTP 3支持
dotnet团队官方博客发布了一篇HTTP3的文章:HTTP/3 support in .NET 6.文章介绍了.NET 6 将预览支持HTTP3,.NET 7正式支持HTTP3,原因主要是HTTP/ ...
- 关于在.H文件中定义变量
KEIL中,在".H"文件定义变量. 如果该".H"文件同时被两个".C"文件调用,则会出现重复定义错误(*** ERROR L104: M ...
- Java基础系列(27)- 什么是方法
何谓方法 System.out.println();它是什么呢 # System:类 # out:对象 # println():方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问 ...
- PHP 7.4 checking for libzip 和 failed to open error_log 问题
来源: https://hqidi.com/154.html 两个深坑,成年阿根廷龙踩出来的坑,网上都没找到解决方法,都是自己摸索出来的. 前面一切顺利: yum install -y libxml2 ...
- 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 百篇博客分析OpenHarmony源码 | v59.01
百篇博客系列篇.本篇为: v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿 ...
- 鸿蒙内核源码分析(内存管理篇) | 虚拟内存全景图是怎样的 | 百篇博客分析OpenHarmony源码 | v12.04
百篇博客系列篇.本篇为: v12.xx 鸿蒙内核源码分析(内存管理篇) | 虚拟内存全景图是怎样的 | 51.c.h .o 内存管理相关篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有 ...
- bash是什么?
bash shell就是一个bash程序 --解释器,启动器 --解释器: 用户交互输入 如vim 文本文件输入 脚本本质: !/bin/bash !/usr/bin/python 读取方 ...