现代软件工程 第一章 【概论】练习与讨论

0. 学习别人的经验和体会。 同学们在上这门课的时候,都是大二,大三,有的是跨专业考研过来的。觉得在大学里,到教室来听课有意思么?请看:你为何要来上课并且认真参与, 另外,请看:你也可以把你的课堂生活过得像这样, 如果你的老师和助教做不到,请把博客转给他们看。    
你在学校里的困难和迷茫,别人一定有过。请看看别人怎么学习的,有些是科班,有些是野路子,有些成功,有些失败。 请读完下面所有博客 (读这些博客你不吃亏,你也不上当!)。读完后,写一篇博客,选下面至少 3 个文章(在博客中加上原文的链接)谈谈自己的感想,你现在的条件比他们如何? 你对计算机的热爱仅仅是口头的么? IT 专业的技术道路, 职业道路,社会道路怎么计划呢?
 http://www.cnblogs.com/xiaozhi_5638/p/4485805.html  (偏科生自学摸索的道路)
http://www.cnblogs.com/geniusalex/p/4928713.html (速成的培训班和打基础的大学教育有区别么)
 http://www.cnblogs.com/Tpf386/p/4798437.html 很多同学看不起大学老师按部就班地教课,他们心想,我看视频也能学会的,为何要来听课?请看这个学生学习的经历。
    https://news.cnblogs.com/n/531362/   半路出家,认真学习,不断在实践中进步。
 http://www.cnblogs.com/blog470130547/p/4222870.html   
 http://www.cnblogs.com/unruledboy/p/DevCareer.html 
 http://coolshell.cn/articles/4561.html http://blog.csdn.net/haoel/article/details/1688104
http://www.cnblogs.com/freeflying/p/4796369.html
http://www.cnblogs.com/geniusvczh/archive/2011/12/16/2290808.html 
http://www.cnblogs.com/AndersLiu/archive/2011/04/19/programming10years.html
IT小小鸟的故事: 
 http://book.douban.com/subject/4006425/discussion/22803733/
https://book.douban.com/subject/4006425/discussion/22803961/
 http://book.douban.com/subject/4006425/discussion/22802960/   
补充阅读:
    不要轻易在简历上写我热爱编程,我热爱学习    
请看正式的作业要求: http://www.cnblogs.com/ChildishChange/p/7363123.html   

1.  从第一章的 “四则运算程序” 例子出发, 逐步构建一个能解决实际问题的 “软件”。 

        http://www.cnblogs.com/xinz/p/7417960.html  

2.  软件有很多种,也有各种分类办法:

     ShrinkWrap (在包装盒子里面的软件,软件在软盘/CD/DVD上);   Web APP (基于网页的软件);   Internal Software (企业或学校或某组织内部的软件);Games (游戏);   Mobile Apps (手机应用);    Operating System (操作系统);    Tools (工具软件)

     选取对你最相关的一类软件,  请回答:

     1) 此类软件是什么时候开始出现的, 这些软件是怎么说服你(陌生人)成为他们的用户的?  他们的目标都是盈利么?  他们的目标都是赚取用户的现金么?还是别的?

     2) 你个人第一次用此类软件是什么时候,你当时多大,具体在什么学校读几年级,老师是谁,同桌叫啥?软件是如何到你手里的?例如:邮购,下载,互相拷贝,从应用商店购买,等等。 (这个部分必须详细写,不然这道题目得0分,我要看看全世界的学生怎么抄袭这一段的)。

     3)我们知道有些软件是收费的,有些是“免费” 的, 那么,软件公司为何会给你免费使用这个软件呢? 写这个软件的工程师们,他们的工资如果不从你(用户)这里来, 从哪里来呢? 目前你们当地的软件工程师的工资大约是多少,请给出尽量详细的分析,精确到年收入多少万元人民币。 

     4) 你是如何学会用这软件的?它给你什么好处,坏处? 这些软件是如何处理 bug 的?  如何更新新版本的?  你估计软件团队更新一个主要版本花了多少 人月? 请写上人月的定义. 如果你们宿舍(或者你和另外三四个同学)要做同样水平的软件,请估计你们需要多少时间?

     5) 同一类型的软件之间是如何竞争的?你现在还用它么,你为何选择这个产品,而不是它的竞争对手?

     6)5年后, 这种软件运行的硬件会有什么变化, 软件再过 5 年还会存在么,为什么?

     7)列举你在使用上述软件的时候观察到的 “特殊”现象,它们和硬件有什么不同?  这些能说明软件的某些本质特性么?

同学在写文献综述类的文章的时候, 要参考很多别人的描述或研究成果。 这是无可厚非的, 因为一个人无法亲自经历或验证那么多事情,总要援引间接经验、论断、描述。  关键是 -- 注明引用来源。引用来源不能简单地说 “百度”,而是要指向具体的文章。  如果不注明,就会出大问题。 虽然很多同学以后不会去写科研论文, 但是这个要求坚持,重要引用没有说明的,文章要扣分直到 0 分为止。  

3.  成功的程序,成功的软件,成功的软件企业

 “写程序” 这个活动大多数情况下是个人行为。 我们听说的优秀程序员似乎都是单打独斗地完成任务。同学们在大学里也认识一些参加ACM 比赛的编程牛人,  他们写的ACM 比赛的程序是软件么?   “写程序” 和 ”做软件“ 有区别么? 请采访这些学生。 

Edsger Dijkstra 曾经提到:“Software engineering, of course,presents itself as another worthy cause,but that is eyewash: 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 cannot.’”[i]

软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看? 请采访一个编程特别厉害的学生 (例如学校ACM 队的队员)。

我们说 软件企业 = 软件 + 商业模式
下面提到的一个游戏团队, 有很好的软件,但是商业模式和其他软件之外的因素呢?有没有考虑到?
http://news.cnblogs.com/n/528911/

4.  科学(science),工程 (engineering)和手艺 (craftsmanship)[这个题目可以在期末的时候做]

    你所在的学校有计算机科学专业和软件工程专业么?相关专业的教学计划和毕业出路有什么不同?采访这些不同专业的老师/同学。

    如果是计算机系,问老师: 你发现了计算机科学的什么客观规律

    如果是软件工程,问老师:你构建了什么样的软件?你发现了工程的什么规律?

    如果是搞ACM 等算法比赛的同学,问他们:你最近又在练习什么手艺

    阅读本书有关软件工程和计算机科学的区别的内容,并看其他文章,谈谈你的看法。

    文章举例:http://www.drdobbs.com/architectureand-design/software-engineering-computer-science/217701907 

    http://www.computer.org/cms/Computer.org/ComputingNow/homepage/mostread/MostRead-SW-SoftwareEngineeringAnIdeaWhoseTimeHasCome.pdf

    http://www.exceptionnotfound.net/software-development-is-not-software-engineering-do-we-want-it-to-be/

5. 有人认为,现在绝大多数编程语言都是以英语为基础,中国人编程还要学习英语,这增加了不必要的障碍。  如果有 “中文编程”, 则是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么,它能极大增加中国程序员的效率么? 
参考:
http://weibo.com/2210132365/BiYTws242
http://www.chinesepython.org/ 
http://baike.baidu.com/subview/545069/545069.htm 
6. 创建个人技术博客 (建议是 cnblogs.com), 快速看完整部教材,列出你仍然不懂, 或者不同意的 5 到 10 个议题,发布在你的个人博客上。
如何提出有价值的问题?如何进行有价值的讨论? 请看这个文章:http://www.cnblogs.com/rocedu/p/5167941.html ,以及 在互联网时代如何提问题。 还有这些要点:
① 在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文
② 列出一些事例或资料,支持你的提问 。
③ 说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾?
一个模板可以是这样: 
我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。

【或者】我反对作者的观点(提出作者的观点,自己的观点,二者差别,以及理由)。 

    大学生应该能写出自己的思考, 而不是摘抄书本内容。

提示:编程经验不多的同学,建议看16章 “创新”, 提出自己的问题。
7. 课上同学们应该根据自己的爱好和情况组成 5 - 7  人的项目小组。 并且报告 老师/助教。
7.1: 请每个小组在 cnblogs.com 上面创建团队博客,第一个博客把小组成员都介绍一下。
既然是一个团队, 就要有团队的一些规矩,大家先要讲清楚,责任/义务/权利/利益是什么,如何衡量各自的贡献,并让同学们都明确(书面签名)同意团队的要求。 
这些要求中要包括这样一条:团队在Alpha 阶段之后会选出一名队员,TA 要自己寻找下一个队伍。
#团队博客作业1#  
7.2: 现代软件工程这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队采访一下:
- 当时的项目有多少用户,给用户多少价值? 现在还有人用吗?
- 这个项目能否给我们团队继续开发,源代码/文档还有么?
- 项目开发有什么经验和教训
- 他们对学好软件工程有什么具体、可以操作的建议
写成一个博客   #团队博客作业2# 

8. 软件工程的各种名词、工具的起源和变化
了解这个行业的基本概念,编程语言,工具,可以引用相关资料并注明来源
名词:
按时间顺序列表, 展示 “软件” , “软件工程”,瀑布模型,Object-Oriented, Mythical Man*Month, Code Complete (代码完成), Structured Query Language, 4GL, CoCoMo,Y2K 问题,  I18N, Agile Methodology,SCRUM, 这些词汇是如何出现的 - 何时、何地、何人提出。
参考资料:
http://en.wikipedia.org/wiki/John_Tukey
http://linux.cn/article-4778-weibo.html 
http://buzzorange.com/techorange/2015/01/26/margaret-hamilton/
http://en.wikipedia.org/wiki/Margaret_Hamilton_%28scientist%29 
同样,写博客的时候,引用资料时请说明来源。
编程语言
汇编语言,COBOL,LISP PASCAL, C,  PL/1, C++, Object-C, BASIC, Unix Shell, Perl, Java, Python, C#, Swift, Go, Kotlin, ...
选取相互有关系的三到四个语言, 描述他们的起源,发展,演化,每个语言在鼎盛时期大约有多少使用者,它们创造了什么样的产品。
你是怎么学习这些语言的?对于一个准备成为软件工程师的大一学生,你认为学习各种计算机语言应该有什么样的次序?
参考资料:
https://en.wikipedia.org/wiki/Generational_list_of_programming_languages   
https://www.info.ucl.ac.be/~pvr/paradigmsDIAGRAMeng108.pdf   
https://webhome.csc.uvic.ca/~mcheng/330/spring.2016/index.html  
https://softwareengineering.stackexchange.com/questions/10675/ideal-programming-language-learning-sequence  
集成代码编辑环境 (Integrated Development Environment, IDE):
在Unix,PC,Mac 上面大家都用什么编程, 按时间先后,列出各个工具第一版出现的时间, 鼎盛时期的用户量(估计),和主要优缺点。
提示:Vi/VIM,Emacs,Turbo Pascal, Turbo C, Visual C (包括VC6.0), Visual Studio, XCode, Eclipse, Android Studio, VS Code, Source Insight
提示:请看年度的编程工具排名。 
源代码管理工具/项目管理工具:

搜索一下 Unix SCCS,  Microsoft Visual Source Safe, Microsoft TFS、Git & GitHub,Mercurial、Bitbucket、Trac、Bugzilla、Rationale, Issue,Jira)

按时间次序,列出各个工具出现的时间,鼎盛时期的用户量(估计),和主要优缺点。

9. 我们不是在真空里谈软件工程, 软件要运行在硬件芯片上面, 下面看看一个计算机芯片的发展历史:
http://perspectives.mvdirona.com/2014/09/august-21-2014-computer-history-museum-presentation/  
http://mvdirona.com/jrh/TalksAndPapers/DileepBhandarkarAmazingJourneyFromMainframesToSmartphones.pdf
https://www.youtube.com/watch?v=7ptXpNFY3XM
请回答: ① 软件的发展历史有什么纪录片/PPT 可以参考?  ② 软件和芯片的发展有什么相互依赖,相互拉动的关系? 能否举例说明?
10. 开发软件有很多种方式,从软件运行的平台来看,可以在下面的平台运行:
  • 网页 (只要有浏览器就可以访问软件或服务)
  • Windows 平台 (例如最新的Windows 10 支持 PC,Surface,Mobile,甚至Xbox 运行)
  • 安卓平台
  • iOS 平台 (Mac 和 iPhone)

请找一个同学结对 (参看本书结对编程的内容),两人共同工作 (不能分开干活),从上面的列表中选取两个平台,在每个平台上,写一个最简单的 "Hello World" 类型的程序,把写程序的经历写成博客发布出来,内容包括:

- 什么平台, 用什么编程语言,什么软件构建环境 (IDE),什么软件工程的工具,开发的流程大概是什么,最后程序的源码,和用户界面是什么?

(可以从网上查找相关资料,甚至源程序都可以参考其他人的, 但是要自己把程序编译,运行)

11. 这么多作业,似乎压力很大啊! 请看别的同学的体会:本科,本科,美国硕士。
请看TED 的演讲, 谈谈你对压力的看法,以及怎么和别人合作, 帮助别人,把压力转化为动力,在互相帮助的环境中成长。

[i] 来源: http://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036.html 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代软件工程 第二章 【个人技术】 练习与讨论

1 基本作业: 从Hello World开始 要求每个读者(或者学生)开始管理自己的源代码: 每个人都有一个VSTS的客户端,系统管理员给每一个人都创建了TFS项目,每个学员都是各自项目的管理员。每个同学去申请一个GitHub [i]的项目&#xff0…

现代软件工程 第三章 【软件工程师的成长】练习与讨论

1. 选哪一种医生? 作为一个软件工程师, 你觉得自己表现如何? 有没有这样的体会: 看书的时候觉得“技止此耳”,开发项目的时候才觉得实际情况和书上讲的都有一些出入,一些重要的细节书上没有提。我们很多人是边看Asp.net的书, 边开发Asp.ne…

现代软件工程 课件 软件工程师能力自我评价表

这是《构建之法》和软件工程教学的一部分,用于学生/工程师自我评价。 软件工程师如何评价自己的能力? 有人写Java,有人用C,还有人用1980年代就出现的 Object-C, 有人写前端,有人写后端,有人偏于行业应用&a…

现代软件工程 第四章 【结对编程】练习与讨论

4.7.0 结对编程的练习题 地铁导航和遍历 4.7.1 结对项目的案例和论文 在现代软件工程教学的过程中,同学们已经总结了不少切身体会。例如: 总结1[i]:那是project到了比较关键的创造阶段,整整一天,我们俩椅子靠椅子的坐在电脑前&am…

现代软件工程 第五章 【团队和流程】练习与讨论

团队模式和团队的开发模式有什么关系?如果你领头开展一个全新的项目,你要怎么选择“合适”的团队模式?不同的团队模式如何影响团队绩效的评估?团队精神和集体主义的区别? 大家回想在小学和中学的学习过程&#xff…

现代软件工程 第六章 【敏捷流程】练习与讨论

6.3.1 什么时候适合选择敏捷 我们看了这么多方法论之后,一些同学一定比较困惑,到底选择哪一种开发方法比较好呢? 这在实践中不是难题,有学者还列出了一些简单的问题来帮助人们做决定[i]: 表6-3 问题引出方法 问题 Yes – 偏向传…

现代软件工程 第七章 【MSF】练习与讨论

7.7 移山开发方法——比TFS敏捷更精简 几个软件学院的学生来请教阿超,同学们自豪地说,我们要用全套TFS敏捷开发模式开发项目! 真的?阿超不敢相信。 同学: 对!我们要用全5个工作项类型 – 任务、缺陷、场景…

现代软件工程 第八章 【需求分析】练习与讨论

1 扩展阅读下面两篇文章也说明了软件估计的难度: Steve McConnell 软件估计的 10 种罪:http://www.ewh.ieee.org/r5/central_texas/austin_cs/presentations/2004.08.26.pdf Quora精选: 为什么软件开发周期总是预估的2~3倍http://jandan.net/201…

现代软件工程 第九章 【项目经理】练习与讨论

9.5.1 PM们的故事 讲了这么多条条框框,我们还是来讲几个故事吧。 A)是不是所有的好功能都是由PM主导,一步一步根据用户需求,按照用户场景设计,然后进行可用性测试等等步骤之后得来的呢? 功能本天成,妙手偶…

现代软件工程 第十章 【典型用户和场景】 练习与讨论

1. 讨论:下面的老板犯了什么错误? 只看用户的表面语言或行动还是不够的。我们还要找到用户语言行动背后的动机! (图像来源: http://www.weibo.com/funnyshoelace) 2. 是否要文档 有人说,我们敏捷的团队,就喜欢直接的面对面的交流&#xff0…

现代软件工程 第十一章 【软件设计与实现】 练习与讨论

1 如何避免在产品开发后期不断有重大修改,导致其它模块的连锁反应? DCR Tell mode vs. Ask mode设计变更 在项目早期,如果大家觉得要做一个设计变更,便可以采用告知模式(Tell-mode)的形式,也就是说,修改方必须通告所…

现代软件工程 第十二章 【用户体验】练习与讨论

1 什么是用户体验, 什么时候开始考虑用户体验? 究竟什么是用户体验呢? 请看: http://www.infoq.com/articles/aaron-sanders-user-experience (中文版)http://kb.cnblogs.com/page/508097/ 既然用户体验和用户界面对一个项目这么重要&…

现代软件工程 第十七章 【人、绩效和职业道德】 练习与讨论

0. 为啥要讲人、绩效、和职业道德? 学好专业不就行了么,为啥要扯这么多? 用专业知识教育人是不够的。通过专业教育,他可以成为一种有用的机器,但是不能成为一个和谐发展的人。要使学生对价值有所理解并且产生热烈的感情…

现代软件工程 第十三章 【软件测试】 练习与讨论

13.5.2 有错不改 果冻: 微软的产品经过这么多版本的不断完善,应该是把所有问题都搞定,“止于至善”了吧? 阿超: 那也不一定,在非常有名的电子表格软件Excel中,就有这样一个Bug:Exce…

现代软件工程 第十四章 【质量保障】 练习与讨论

15.3.1 有些成功人士或公司认为不需要独立的测试角色(Test),你怎么看? 我猜想和踢足球类似,还是那几个原因: 人太牛: 不世出的天才,例如高德纳写书时发现排版软件不好用,就自己写了一个。也没听…

现代软件工程 第十五章 【稳定和发布阶段】练习与讨论

15.3.0 案例分析 可以看看这两个学生项目的例子,推断出这些团队的血型: STG游戏的跳票(为了完美,推迟了7天,但是7天之后也没有发布……) [i] 英语学习软件(说了“明早发布”,但是明早一直没到)[ii] 15.3.1 反动分子阿…

现代软件工程 第十六章 【IT 行业的创新】练习与讨论

16.6.0 Xerox Parc 的成功创新和推向市场的失败 http://research.microsoft.com/en-us/um/people/blampson/Slides/AltoAtPARCIn1970s_files/frame.htm http://research.microsoft.com/en-us/um/people/blampson/38-AltoSoftware/WebPage.html http://research.microsoft.com/…

感恩回馈——你评博客,我送好书

各位博客园的用户: 最近我的书《构建之法—现代软件工程》上市了,得到了不少读者和老师的好评,出版2个月即告重印。该书的相关信息参见豆瓣页面:http://book.douban.com/subject/25965995/ 《构建之法—现代软件工程》得以出版和畅…

《梦断代码》读后感 - 驱动,责任,交流,远虑

这三篇读后感原来发布在我自己申请的域名 yishan.cc 上面,后来这个域名被墙了。 (原文写于2008年12月) 几个星期前,我给《现代软件工程》课的每一个团队都发了一本 《Dreaming In Code》的中文版 《梦断代码》,要求写读后感。这本书讲了这样的…

软件工程练习:模块化,单元测试,回归测试,TDD

这是《构建之法》实战教学的一部分。适合作为同学们的第二个程序作业。 第一个程序作业: 请看 “概论” 一章的练习,或者老师的题目,例如这个。 作业要求: 软件工程的作业越来越有意思了, 我们在第一个作业中&#xff…