内容 | |
---|---|
这个作业属于哪个课程 | 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:学习知识时,如何去处理"知其然"与”知其所以然“的关系?
我们知道,”知其然而不知其所以然“通常含有贬义意味,”知其然且知其所以然“是被提倡的。想要精通低层次的问题,必须不断的去练习;同时,要去知道它的原理。但是编程却不一样。从零入门的话,比如在我刚接触到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 |
-
-
优点: 对于小团队而言,比甘特图更有用,集成了项目管理、版本控制、BUG 跟踪,能有效实现 SCRUM,能与 VS 无缝接合。
-
缺点: 搭建、维护tfs比较复杂,硬件要求也比较高。
-
-
-
优点: 良好的分支机制,可以让主干代码保持干净。
-
缺点: 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
-
-
-
优点: 命令行简单、容易上手。
-
缺点:功能稍微缺乏,分支模型混乱。
-
-
-
优点:用户众多,社区完善。
-
缺点:不支持免费私有仓库。
-
-
-
优点: 免费支持私有仓库 。
-
缺点:难以发现项目。
-
实践
-
git
-
github
-