个人博客作业

项目内容
这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健)
这个作业要求在哪里 个人博客作业
我在这个课程的目标是 学习编写一个完整软件、掌握c++、培养系统思维
这个作业在哪个具体方面帮助我实现目 熟悉软件工程的意义,思考更深一点

一、思考问题

问题1:计算机科学中的“理想化”指的是什么?

在书中1.2.2,讲到软件工程与计算机科学的关系,对比表格中有一项

在计算机科学领域是理想化的,而在软件工程中则是对各种因素的折衷。我觉得这里所述的理想化我不太理解,因为根据所学过的课程来说,许多地方都是折中的操作,以硬件资源换软件资源,以空间换时间,很少有理想化的操作。以页面置换的LRU算法为例,该算法的命中率优良,但是也需要大量的硬件支持(计数器和栈),还有软件的开销(对栈维护、选择)。还有在硬件方面,比如cache的引入。SRAM的价格昂贵,但是速度很高,而DRAM相比,价格便宜,但是速度较低。因此,采取了trade-off,引入了缓冲机制。

因此,对于此处的“理想化的“形容,我不太理解指的什么,也没有什么印象。

问题2:如何看待PSP的内容的不断增加?

在书中2.3中,指出了软件的个人开发流程PSP,卡内基梅隆大学制定的各个版本的内容如下所示

从上表可以看的出来,每次版本的更迭,都有2-4个条例的增加,非常有规律。我知道逐渐多,逐渐具体的条例是趋于成熟的体现,就好像是工业的生产线一样,越完善越好,在特定的时间段做特定的事情,具体而微,完善产品。这样看来是映照了Dijikstra的那句话

Software engineering, of course, presents itself as another worthy cause, but that is eye-wash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter ‘How to program if you can-not.’

按照上述的标准,我们可以将自己的项目以这样的形式,一项一项地列出来,对新手小白来说十分友好。但是,这样特定的标准,我认为在一定程度上也会约束着我们的行动,对于某些项目,并不能保证产能的提升。

对于遵守这样的标准,我存在着一些疑问,不仅仅是对于软工这门课。在python中,我们输入”import this“,会出现一条”Simple is better than complex“。那么,我们对于这样的标准,在学习课程或者工作时,应该如何去看待呢?

问题3:学习知识时,如何去处理"知其然"与”知其所以然“的关系?

书中第三章,关于软件工程师的成长,3.3节提到了技能的反面,其中,老师举了一个自己玩魔方的例子。说到时隔多年,魔方的公式已经记不全了,然后引发了对技能的思考,又举了巴克斯顿的”问题的反面“,引发问题层次的思考,如下所示

我们知道,”知其然而不知其所以然“通常含有贬义意味,”知其然且知其所以然“是被提倡的。想要精通低层次的问题,必须不断的去练习;同时,要去知道它的原理。但是编程却不一样。从零入门的话,比如在我刚接触到C语言时,一个helloworld程序足以让我充满各种问号——”include“是干什么的,为什么”printf“就可以输出文字。大一就完全不明白这个问题,编译原理又更为高深一点,因此在练习时总会有那么一丝丝的不舒服。

精通低层次问题就需要多加练习,仅仅去背诵、复制是不可取的,要去追求原理;但是会有一些东西,难以”知其所以然“,那么,如何去处理这样的关系呢?

问题4:敏捷流程是”走一步看一步“吗?

在书中第六章,我大致了解了敏捷的流程,但是不是很理解,于是上网搜了一下,在知乎上看到了一个回答

敏捷开发:我们也不知道到底要开发啥,走一步看一步吧 .

我对敏捷开发的理解是要有一个产品负责人主导,然后将任务分成一个又一个的小阶段,对于团队人员,只专注当前工作,走一步看一步。

对该流程的理解不是很够,因此提了这个问题。

问题5:创新者和成功者的区别

在书中16.1.4,创新迷思之四说到,创新者都是一马当先,我并不太赞同。虽然有点抠字眼,但是我觉得其中给的例子并不是很贴切。我认为他把创新和成功混淆了。创新,字面意思,创造了新的,那么肯定形成了一些新的东西,肯定是先行者。成功,并非单单由一个创新的因素决定。其中的例子,google成功原因在于公司的管理及技术、创新;而ipod成功是因为其简约大气的外观及人性化的操作。google在搜索引擎上不是发明者,ipod也不是随身听的发明者。

因此我想说成功的要素有很多,不能混淆创新和成功。

软件和软件工程

”Software”:这个单词最早出现在出版物中是由Richard R. Carhart 于1953年8月出版的书籍。2000年,耶鲁法学院的图书管理员Fred Shapiro发表了一封信,这封信揭露了其在对JSTOR的电子档案的搜索中,发现在由美国数学家Tukey于1958年发布的论文"The Teaching of Concrete Mathematics"中,提到了对于单词“software”的用法。1995,Paul Niquette声称他在1953年十月最初创造了这个词,虽然他没能找到任何资料支持他的说法。

“Software Engineering”:是由 Margaret Hamilton 发明的, Hamilton是一个自学程序设计,并且当上 MIT 软件工程测试实验室主任(也就是为美国太空总署 NASA 开发电脑系统的单位)的女性。它在阿波罗计划期间发明了“Software Engineering”一次,她在采访中说到:“软件在这个计划的初期还被当作初初学步的孩子一般对待,完全不像其他工程学科;例如像硬件工程那样的受到重视,而且在大家的眼光中他就像是艺术、魔术一般,而不是一门科学。我一直以来坚信这项发明流着艺术与科学的血液,虽然当时很少人是这么想。因此,我致力于为软件以及那些发明者争取应有的正统性与尊重,所以我开始使用“软件工程”这样的字眼来将之与硬件还有其他工程学类做出区别。当我第一次使用这样的语词时,大家都觉得有些好笑,甚至有很长一段时间被当作笑话。他们常笑我极端的想法。但最终,软件学科确实得到了应有的尊重!”

软件故事

也许最令人难以置信的是,历史上第一位程序员是位女性。她的名字是Ada Lovelace。在1843年,这位英国数学家Ada Lovelace,翻译了意大利工程师Luigi Menabreaw撰写的分析引擎文章。在翻译过程中,她把自己的理解都批注到每篇文章下,而这举动加快了计算机编程技术的发展。在这之后,她又设计出了第一种能够利用分析引擎计算伯努利数的算法,这也是第一个用电脑编写的算法。

源程序版本管理软件和项目管理软件

名称使用人数
GitHub 31,000,000
Bitbucket 5,000,000
Launchpad 3,965,288
SourceForge 3,700,000
GitLab 100,000
GNU Savannah 93,346
OSDN 54,826
Ourproject.org 6,353
  • Microsoft TFS

    • 优点: 对于小团队而言,比甘特图更有用,集成了项目管理、版本控制、BUG 跟踪,能有效实现 SCRUM,能与 VS 无缝接合。

    • 缺点: 搭建、维护tfs比较复杂,硬件要求也比较高。

  • Git

    • 优点: 良好的分支机制,可以让主干代码保持干净。

    • 缺点: 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

  • Mercurial

    • 优点: 命令行简单、容易上手。

    • 缺点:功能稍微缺乏,分支模型混乱。

  • GitHub

    • 优点:用户众多,社区完善。

    • 缺点:不支持免费私有仓库。

  • Bitbucket

    • 优点: 免费支持私有仓库 。

    • 缺点:难以发现项目。

实践

  • git

  • github

  •  

原文地址:https://www.cnblogs.com/lucien98/p/12443469.html