软件工程 作业一

Task1:注册个人博客账号

Task2:注册码云账号

  • 目的:管理你的项目,记录(源码、文档,历次版本变更,bug发现与修复)等信息。

  • 码云地址:https://gitee.com/cxf1404445126

Task3:提出问题

快速通读教材《构建之法》,并参照提问模板,提出5个问题。
如何提出有价值的问题? 请看这个文章:http://www.cnblogs.com/rocedu/p/5167941.html ,以及 在互联网时代如何提问题。 还有这些要点:

  • 在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文
  • 列出一些事例或资料,支持你的提问。
  • 说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾?

问题一:

书的第三章的标题是 软件工程师的成长,其中在讲到其职业发展的时候,提到了一些软件工程师的职业资格考级,我想这一类的考试还是比价注重理论方面的知识的,如果是在以前,我会很赞同这类的测试,那时候我的想法是一个优秀的软件工程师无论是理论还是实践方面都是必须要精通的。

但是前不久,我看了保罗·格雷厄姆写的一本书《黑客与画家》,其中有一段话引起了我的注意:

​ 人们无法考核你的工作,甚至误解你的工作,都不是最糟的事,更大的危险是你自己也会误解自己的工作。因为你总是从相关领域寻找新思想,如果你发现自己读的是计算机科学系,很自然地,你就会以为“计算机科学”与其他“理论科学”并无不同,你的工作属于“理论计算机科学”所涉及的那种理论的应用研究。读研究生期间,我的潜意识里一直有一种很不舒服的感觉,觉得自己应该多学一点理论,不应该期末考试结束还不到三个星期,就把所有东西忘得一干二净,那样真是不可饶恕。

​ 现在,我意识到自己错了。黑客搞懂计算理论的必要性,与画家搞懂颜料化学成分的必要性差不多大。一般来说,在理论上,你需要知道如何计算“时间复杂度”和“空间复杂度”;如果你要写一个解析器,可能还需要知道状态机的概念;除此之外,并不需要知道特别多的理论。这些可比画家必须记住的颜料成分少很多。

这一段话看起来是在说我们在理论的方面并不需要掌握过多的相关知识,像上面提到的计算机等级考试,现在似乎也不乏为考证而考证,考完以后没过多久就将这类的知识忘得干净,又或者是,在学完了这些理论知识后很久的一段时间都用不上,那么学习那么多的理论知识还有没有用呢,在理论知识和实践知识的方面我们又该怎么权衡呢?

问题二:

在书的61页有这么一段话:

这三个层次和教育理论中的三个区域的理论(舒适区,学习区,恐慌区)也很相似。图上的中间层次,就是我们要尝试、失败、学习、再次尝试的学习区。一个初学者看到关于本领域顶尖人物事迹的报道,见贤思齐焉,也很想马上就像顶尖人物一样的做事,或者得了一本《21天精通某某技术》的书籍,要求自己在21天达到最高层次。这实际上是强迫自己进入“恐慌去”,由于没有实力,心理准备也不够,必然会出现“拖延症”等现象,结果肯定是失败得很惨。这样的失败经验往往给人重大打击,让人不容易重整旗鼓,再开始学习。因此,选择适合的“学习区”来学习,不断构建自己的舒适区,从而扩展学习区,最后在某些领域达到技能的精通,是一个循序渐进的好办法。

对于这三个区域我有如下几个疑问:

  • 上段提到进入恐慌区必然会出现拖延症等现象,肯定会失败,那会不会存在一些特例,能够在恐慌区进行自我的提升?
  • 对于舒适区与学习区、学习区与恐慌区的边界是怎么样的,怎么能判断自己所在的区域?
  • 如何走出舒适区?(这也是我很久之前就有在思考的问题,我个人属于比较不想动脑,比较被动的那一类,有很多想学的东西,但是大部分都是在学完开头比较简单的部分之后就不了了之。)

问题三:

在第五章开头讲到了一些团队合作的模式。其中有一个模式是这样描述的(p99):

5.2.5 秘密团队(Skunk Work Team)

一些软件项目在秘密状态下进行,别人不知道他们具体在做什么。苹果公司1980年代在研发Macintosh之后的系统时,就有两三个团队在不同时期进入秘密状态开发。21世纪的一些创业团队也是处于类似状态。这种模式的好处是:团队内部有极大的自由,较高的热情,没有外界的干扰(不用每周给别人介绍项目进展,听领导的最新指示,等等)。一个团队的成员如果有很大的自由度,又有独特的使命,这对于大家来说,是很大的驱动力。这样的团队往往能发挥超高的效率完成看似不可能的任务。

对于这个模式,在最初看到的时候,就不是很懂它的运行方式,秘密状态下运行的软件项目,两三个团队不同时期同时进入秘密开发,这样运作的话在开发不同时期团队之间的交流看起来不是很多,这样真的可以保证团队的成员充分了解自己要做的项目吗,对于上面描述的这种模式的好处,自由,热情,我觉得这即使是其他模式的团队也会有的特性。至于外界的干扰,我觉得还是有必要的,定期的向别人介绍项目进展,有助于及时发现问题,当局者迷,旁观者清,有时候别人看待我们的项目会有一个更为清晰的方向,如果能够提早发现问题,及时改正,那不是可以减少大量的时间和金钱成本吗。

另外,为了更了解这个模式,我去网上找了一些相关的资料,但是通过我找到的资料,我发现苹果公司在研发Macintosh之后的系统时采取的秘密团队模式的主要原因似乎更多是为了“秘密”而已。下面是我找到的一些资料:

苹果公司非常注重人才的选拔,为找到合适的优秀人选,他们投入了大量的时间和精力。这在CEO乔布斯的身上表现得尤为明显,他将自己大约1/4的时间都用于人才招募,从技术天才沃兹尼亚克,到Macintosh之父杰夫·拉斯金,再到设计大师乔纳森·艾维,苹果公司绝大多数骨干员工几乎都是乔布斯亲自挑选出来的。为找到最合适的人选,苹果公司还会使用一些与众不同的选拔手段,并取得了意想不到的效果。同时,苹果公司也很擅长发掘员工的特长,并根据他们的特长来为其安排恰当的工作岗位及工作内容,实现真正的“人岗匹配”。

乔布斯认为这个世界没有全人也没有全才,但总有一部分是他们最优秀的,而苹果用的就是员工最优秀的那一部分。这就是为什么一些员工在其他公司不被看好,加入苹果后却能发挥出巨大价值的原因。此外,为了让精英更好地发挥作用,乔布斯创造性地提出了“A级团队”的概念,强调小团队的力量。所以,多年来,苹果公司的核心技术团队始终保持着小规模运作,很多项目的运营都由精选的设计师、程序员和管理人员组成的A级小组在执行,保证了价值创造的高效性。

虽然苹果同一团队的精英成员之间一直保持着高效的沟通和良好的默契,但是他们习惯自成一体,从不与外界进行过多的互动。例如,苹果的设计团队就很少参加行业盛事或者颁奖典礼,他们似乎并不需要外界的肯定,因为在他们看来,没有人会比他们在设计方面更加权威,分享更多的信息只会使得别人窥得秘密缩小差距。这种极度的自信和“舍我其谁”的气概正是苹果精英主义的最佳体现。

苹果公司总能在他们的发布会上像变魔术一样拿出各种神奇产品。但“魔术”之所以成为魔术,正是因为它让人捉摸不透底细,之后在不经意间给人出其意料的结果。对苹果公司来说,这为产品保密带来了极高的要求。

再说苹果公司,他们的保密文化起源要追溯到1984年,乔布斯领导研发第一款Macintosh计算机的时候。直至今天,苹果的保密实验室都有多道安全门,需要扫描工牌和口令才能进入,办公室也处于不断监视下。

文章引用自:

所以我认为,苹果公司的运行模式更像是变形的功能团队模式,对于要秘密进行开发,实属无奈之举,那么我的问题是秘密团队开发的运行机制到底是怎样的?好处又有哪些?希望老师可以给我一个更为清晰的回答。

问题四:

第八章用了一整个章节来讲需求分析,也介绍了很多需求分析的方法,那我们应该如何在需求分析的时候选择适合自己的分析方法?进行需求分析的时间又应该占整个产品开发时间的多大比重?如果后期需要不断地对需求进行重新调整,那么前期在制定需求分析的时候是否可以不用太过精细,只要列个大概的分析,等到后期开始开发产品的时候再根据实际问题进行细化?

问题五:

本书的262页在谈到用户体验时举了这么一个例子:

用户需要帮助,但是用户没有那么笨

微软必应搜索有一个“实时显示英语解释”的功能,但是这个功能把鼠标所在的所有英语单词都解释一下,包括小学生都懂的“a,of,at,on,and,the,he,she,…”,用户的鼠标常常会无意地停留在这些词语上面,你会看到这个“英语翻译”功能自作多情地告诉你“a”是什么意思,顺便把页面上的其他文字给遮住了。

事实上,对于这个例子,我个人认为屏幕取词这个功能将这些简单词进行翻译没有什么不妥,它只是很忠实的执行了自己的任务,这些词或许是大部分人眼中的简单词,但是如果因为这个原因就武断将这些词不纳入翻译的行列,那用户的体验又能因此提升到什么程度呢?(对于有强迫症的我,要是发现它会不显示某些词的解释,兴许还会觉得这是bug呢)另外,每一个人对于简单词的定义似乎也没有那么清晰,如果非要强行取消某些词解释,那也很难界定其范围,所以想想还是所有词都解释的方法比较稳妥,或许以后可以改进一下,根据每一个人词汇量来进行屏蔽部分词语的解释什么的(emmm好像扯远了)。

【附加题】:请将问题提交至豆瓣:https://book.douban.com/subject/27069503/, 并在博客中给出链接
在豆瓣页面的最下方 “读书笔记” 那里发言, 《构建之法》的作者会亲自答复问题

豆瓣链接:https://book.douban.com/annotation/61321176/

Task4:Git基本操作练习

完成以下Git基本操作

  1. 将https://gitee.com/happyfaye/SoftwareEngineering仓库fork到自己的账号下
  2. 将远程仓库clone至本地仓库
  3. 在本地仓库添加学号姓名.txt(例如:201621123000happy.txt),并提交至远程仓库
  4. 在本地修改该文本内容并再次提交
  5. 给出提交历史信息截图
    参考:实验楼练习:https://www.shiyanlou.com/courses/4

git的基础配置:

将链接仓库内容fork到自己的账号下:

将远程仓库clone到本地仓库:



在本地仓库添加学号姓名.txt(例如:201621123000happy.txt),并提交至远程仓库


在本地修改该文本内容并再次提交




posted @ 2018-09-09 03:23  一只水饺  阅读(346)  评论(6编辑  收藏  举报