软工个人博客作业
项目 | 内容 |
---|---|
这个作业属于哪个课程/ | 2020年春季计算机学院软件工程(罗杰 任健) |
这个作业的要求在哪里? | 个人博客作业 |
我在这个课程的目标是? | 提高代码水平,熟悉团队合作 |
这个作业在哪个具体方面帮助我实现目标? | 整体了解然软件工程,知其大概 |
个人博客作业
1. 快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上
-
问题1:”软件工程是不是教那些不怎么会写程序的人开发软件?“
1.3练习与讨论中:
Dijkstra曾经提到:
“...you will discover that software engineering has accepted as its charter ‘How to program if you can-not.’”在我的理解中,软件工程是给程序员开发过程中使用的脚手架,而不是代替程序员行走的轮椅。毫无疑问,软件工程给程序的开发、维护带来了极大的便利,但同时我也有这样的疑问:软件工程是在弱化程序员的代码水平在工程中的影响吗?
我们可以看到,工程师在“需求分析”和“测试”这两方面明显地要花更多的时间(多60%以上);但是在具体编码上,工程师比学生要少花1/3强的时间。
文中也提到了软件工程师把更多的精力放在了”测试“上,这是不是意味着实际工作中”具体编码“这个环节会失去足够的重视。程序员可能会萌生出这样一种心态——“这么写到底对不对?算了不管了测试的时候再说”,程序员也可能会去选择更“丑”的代码而不是精心构思一个巧妙地逻辑?反过来讲,这样的工作是不是粗心的、代码水平不那么高的程序员也能胜任?
-
问题2:为什么要结对编程
4.5章节介绍了结对编程:
......面对同一个显示器,使用同一个键盘、同一个鼠标一起工作。
并给出了“驾驶员-领航员”这样的例子来说明结对编程中两个人扮演的角色。我也有过类似的经历,去年期末复习数学建模这门课时,我和室友面对同一个显示器、使用同一份笔记进行复习,两人每隔一段时间互换念讲义和做笔记的角色,与本章节描述的结对编程很是相似。这样很快地复习完了课程讲义,但两人在不断交流的同时数学模型却没记住多少,最后还是得一个人仔细读一遍笔记。
就我以及周围人的经历来看,在编程时人都会陷入沉思的状态,期间并不是很愿意同别人交流。两人结对编程,大脑势必会停留在“轻思考”的状态,换而言之就是很“浮躁”,这样能达到1+1>2的效果吗?“驾驶员-领航员”这样的关系中,二者本身的侧重职能不同,各自的水平也不尽相同,驾驶员与领航员合作就一定会取得更好的成绩吗?领航员与驾驶员互换角色就一定能胜任对方的工作吗?
-
问题3:非专业的PM会不会对团队造成伤害
如果一定要说专业能力的话,PM的专业就是理解和表达,你能否理解不同人的心理、需求和言外之意?
第9章中介绍了PM的之职能和作用,在团队中,PM是leader,他们的主要任务并非是开发。那一名非计算机专业的PM如何让聪明的程序员信服自己?他的要求是否合理又由谁来评判呢?
Steve平静地反问——你能继续改进,让圆角的矩形框显示速度加快么?程序员说:这个太难了,也没有必要。椭圆不是挺好的么?
在随后的故事中讲述了微软的PM说服程序员实现了圆角的设计,好在这个功能最终实现了,大家皆大欢喜。但也有这样的事情:中国平安的产品经理要求用户App的主题颜色能根据手机壳自动调整,程序员觉得这个要求太过分,两人一言不合大打出手。当然这个需求最终有了解决方案——用摄像头采集人瞳孔的成像来确定手机壳的颜色,但现阶段显然是没有这样的硬件技术的。即便有,这也超出了程序员的工作范围。除了不欢而散,PM的无理要求由谁来制止呢?
-
问题4:“好的想法会赢”
16章迷思之三:好的想法会赢吗?
但是如果使用 Dvorak 键盘布局, 你可以在home row打出 60% 的单词,这样会减轻手指和相关肌肉的负担, 减少劳损, 同时加快打字速度。
关于键盘布局我还听过这个一个故事。打字机时代键盘的字母都是按顺序排列的,为了防止打字员打字速度过快按键来不及回弹,厂商才把字母打乱成为现在的qwer模式。为什么第一次键盘布局改革就能成功,现在键盘布局创新就这么困难呢?不是好想法不能赢,是好想法没有解决足够的问题。第一次改革,qwer的好想法解决了打字机卡壳的问题,但是Dvorak的布局改革明显没有足够的吸引力让大家改变现有的打字习惯——他的学习成本远大于它所带来的便利,所以这并不是一个足够好的想法。
-
问题5:如何维持一个磨合好的团队
17.5讲了团队合作的几个阶段——萌芽阶段、磨合阶段、规范阶段、创造阶段。
显而易见地,一个团队想要达到创造阶段,成为一个“高效的团队”时十分不容易的。磨合期的团队工作效率会显著下降。那么我们有什么办法去维持一个磨合好的团队?避免这些团队里面的人跳槽离职?如何保证一直团队里的人高效的工作状态?如果新人加入团队如何能迅速进入角色?更换领导会不会极大地改变团队的氛围?
2. 请问“软件”和“软件工程”这些词汇是如何出现的 -何时、何地、何人?
- “Software”:这个单词最早出现在出版物中是由Richard R. Carhart 于1953年8月出版的书籍。2000年,耶鲁法学院的图书管理员Fred Shapiro发表了一封信,这封信揭露了其在对JSTOR的电子档案的搜索中,发现在由美国数学家Tukey于1958年发布的论文"The Teaching of Concrete Mathematics"中,提到了对于单词“software”的用法。1995,Paul Niquette声称他在1953年十月最初创造了这个词,虽然他没能找到任何资料支持他的说法。
- 是由 Margaret Hamilton 发明的, Hamilton是一个自学程序设计,并且当上 MIT 软件工程测试实验室主任(也就是为美国太空总署 NASA 开发电脑系统的单位)的女性。它在阿波罗计划期间发明了“Software Engineering”一词。
3. 大家知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?
-
“埃尼阿克”是美军在二战七见制造的电子计算机,诞生之初,由于它存在诸多缺陷,无法广泛应用。直到1951年,莫克利和埃克特在“埃尼阿克”基础上研制出了UNIVAC(通用自动计算机),电子计算机才开始从实验室走向社会。不久,一件偶然事件的发生,又使其知名度迅速提高。
1952年,适逢美国大选。为了对选举资料进行处理,哥伦比亚广播公司租用了UNIVAC,用来预测大选结果。选举结束后仅仅45分钟,UNIVAC就计算出艾森豪威尔将以438票的绝对优势赢得胜利。但在选举前,几乎所有的专家和媒体都预测竞选双方势均力敌。所以对于计算机的预测结果,广播公司拒绝报道。工程师们只好重新计算,但该计算机仍坚持艾森豪威尔将大获全胜。当选举结果正式揭晓后,所有的人都惊呆了:艾森豪威尔实际得票为442票,UNIVAC的预测只有不到1%的误差率!从此,整个世界开始对电子计算机的功能有了新的认识,电子计算机的发展进入了一个新时代。
4. 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些,各有什么优缺点?请按照最近一两年使用人数的多少,从多到少排序并说明各自有多少用户(估计),工具的优缺点(可以引用相关资料并注明来源)。
- Microsoft TFS
- 优点:TFS秉承了微软所有产品的特新,开发人员非常容易上手;TFS高度集成主流的开发工具和常见的办公工具。
- 缺点: TFS 定位并不是源代码管理,而是一个团队工具,贯穿需求,开发,测试,发布各个流程提供自动化工具。但大部分团队只用到了源代码管理这一功能。
- GitHub
- 优点:适合分布式开发,公共的服务器压力和数量都不会太大;速度快, 成熟的架构,开发灵活;离线工作,管理代码成本低,不需要依赖服务器;开源项目非常多;
- 缺点:代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
- Mercurial
- 优点:命令行简单,容易上手。
- 缺点:Mercurial 对于修改旧提交有非常多设限,对于刚上手常搞出错误提交的人非常不友善
- Bitbucket
- 优点:同时支持Hg和git;完全免费;支持中文。
- 缺点:非完全免费。
- Trac
- 优点:Trac做一个SCM配置管理平台,有良好的扩充性;Trac的权限体系是比较完备的设计;非常灵活,可以随心所欲的定制,可以和TortoiseSVN集成。
- 缺点:不支持多项目,需求和缺陷没有分离;用 wiki 来替代 Word 等工具编写文档对于产品策划来说门槛太高了,中文化不完整,美术人员接触起来困难重重;不显示中文名,本地化做得很差; 核心功能很少,不安装插件基本上没法用。
- Bugailla
- 优点:免费,支持中文版。
- 缺点:只能管理缺陷。
- Apple XCode
- 优点:可以自动创建分类图表。自动提供撤销、重做和保存功能。
- 缺点:更新版本可能导致插件失效。
名称 | 用户数量 | 项目数量 |
---|---|---|
GitHub | 31,000,000 | 100,000,000 |
Bitbucket | 5,000,000 | Unknown |
Launchpad | 3,965,288 | 40,881 |
SourceForge | 3,700,000 | 500,000 |
GitLab | 100,000 | 546,000 |
GNU Savannah | 93,346 | 3,848 |
OSDN | 54,826 | 6,294 |
Ourproject.org | 6,353 | 1,846 |
5. 调查完目前流行的源程序版本管理软件和项目管理软件后,请你选择其中至少2个软件来进行动手实践
github
github是我最常用的版本管理工具,用起来很顺手。命令行格式的pull和push很有linux的感觉。
Bitbucket
第一次使用Bitbucket,本质上跟github大同小异,但是个人更喜欢bitbucket的界面风格。Sourcetree采用图形化的客户端,确实比github操作简单。