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

 1  基本作业: 从Hello World开始

要求每个读者(或者学生)开始管理自己的源代码:

  1. 每个人都有一个VSTS的客户端,系统管理员给每一个人都创建了TFS项目,每个学员都是各自项目的管理员。
  2. 每个同学去申请一个GitHub [i]的项目,或者 www.coding.net 项目,存放源程序和其他文档。

下面的练习可以用来锻炼学生的编程基本功。

(1)全部用命令行工具和notepad编辑器,不用Visual Studio 等集成编辑环境,每人手工创建并编译一个C的命令行程序:“Hello World”。

(2)练习数值计算。找出一个整数数组中子数组之和的最大值,例如:数组[1, -2, 3, 5, -1],返回8(因为符合要求的子数组是 [3, 5]);数组[1, -2, 3, -8, 5, 1],返回6(因为符合要求的子数组是 [5, 1]); 数组[1, -2, 3,-2, 5, 1],返回7(因为符合要求的子数组是 [3, -2, 5, 1])。

(3)写一个命令行程序, 找出一本英文长篇小说中最常出现的字母数大于 4 的单词的前十名, 和最常出现的两个相邻单词的短语前十名。 并用效能分析工具来分析程序中最费时的函数是什么, 如何改进? 请看《构建之法》 中效能分析部分。

(4)使用工具Visual Studio,创建一个C++或C# Windows程序,在主窗口中显示“Hello World”,用户可以用鼠标拖动“Hello World”在主窗口中移动。

(5)很多同学自己会写不少程序,但是往往看不懂别人写的程序,这也需要练习。不借助电脑的帮助,回答下面的问题(如代码清单2-8所示)。

View Code

问题1:这个程序要找的是符合什么条件的数?

问题2:这样的数存在么?符合这一条件的最小的数是什么?

问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间精确到分钟(电脑:单核CPU 4.0G Hz,内存和硬盘等资源充足)。

问题4:在多核电脑上如何提高这一程序的运行效率?


[i] GitHub 的资料请看: https://github.com/

2  软件工程和程序设计大作业的调查

请同学们做一个调查,到相关的软件学院或计算机学院采访学长或学弟学妹,调查一下程序设计大作业的完成情况:程序花多少时间完成?程序量是多少(多少行代码)?开发过程中使用了源代码管理等工具么? 完全独立完成的同学有多少个?程序解决实际问题么?在一些学校里,全班50 个同学,交上来的作业只有 4 到 5 种版本。这说明了什么?

3  效能分析的讨论

果冻:噫吁唏,危乎高哉!我以前一直害怕做效能分析,看来是否会用效能分析工具来提高程序质量是一个优秀程序员的标志之一。我在今天之前都是盲人骑瞎马。

小飞:改成盲人摸象更恰当。我听说,如果一个程序员从来没有用过效能分析工具,那他就不是一个程序员,只是一个编程爱好者罢了。

我的WC 程序事实上是最快的。但是在今天的程序评比之前,我想更进一步,就再优化了一下,估计能把速度提高2%。没想到出了一个小错误,导致报告的结果(行数、词数、字数)仅仅差了1。由于程序不正确,因此不能参加速度评比。我才是最需要大喊“噫吁唏”的人。

阿超:这有两个教训:

(1)先保证正确性,再提高效能。一个“仅仅差了1”的错误可能会导致缓冲区溢出(Buffer Overflow[i])的严重漏洞。

(2)如果效能的提高效果在5%以下,用户不会注意到程序效能的区别。所以要考虑那些微小的提高是否值得。

另外,WordFreq算法的时间复杂度是多少?能否再优化?请写实际程序加以验证。

荔荔:怎么才能快捷地得到有适量重复文字的文件,来帮助我们进行测试和效能分析?

小飞:我是这样做的,在电脑的根目录下,运行“dir /s > c:\temp\test.txt”命令。

阿超:好主意,大家还有没有别的办法?

4 各种编程的玩法
编程可以是一门理论,也可以是一门工程,还可以是一门手艺,这些年来程序员们玩出了不少好手艺,请看:
http://news.cnblogs.com/n/501488/
5 学什么,怎么学?
程序员经常在学习,交流,提高自己,怎样才是有效的学习方法呢?  打字快就能写程序快么?  哪一种语言、编辑器是最好的? 请看:
http://news.cnblogs.com/n/509554/
http://www.tuicool.com/articles/r6Vramr 
6. Coder, and Hacker 的区别:
http://news.cnblogs.com/n/513177/ 
http://st-threath.blogspot.tw/2013/06/an-engineer.html 
http://aknow-work.blogspot.tw/2013/06/reply-to-coder-hacker-and-architect.html
[i] 参见:http://en.wikipedia.org/wiki/Buffer_overflow

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

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

相关文章

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

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…

《构建之法》参考书和链接汇总

《构建之法》 参考书和链接汇总 参考书汇总 一些读者对《构建之法》引用过的参考书也感兴趣,因此我把所有参考书单独列出来。其实人大部分的思想都是受某些外部信息的启发影响而来,很多道理看似新颖,其实别人早就讲过了😀。这个参…