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

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

  1. 《Getting Started with WebRTC》第二章 WebRTC技术介绍

    <Getting Started with WebRTC>第二章 WebRTC技术介绍 本章作WebRTC的技术介绍,主要讲下面的概念:   .  怎样建立P2P的通信   .  有效的信 ...

  2. 沧小海基于xilinx srio核的学习笔记之第二章 Rapidio技术概述

    总的目录在这哦~ https://blog.csdn.net/z123canghai/article/details/114648658 目录 第二章 Rapidio技术概述 2.1 总体原则 2.2 ...

  3. 信息技术导论 第二章 物联网技术 笔记

    第二章   物联网技术 2.1 物联网概述 2.1.1   物联网的基本概念 物联网的定义是:通过射频识别(RFID)装置.红外感应器.全球定位系统.激光扫描器等信息传感设备,按约定的协议,把任何物品 ...

  4. 软件工程-第二章 软件过程

    第二章 软件过程 目录 第二章 软件过程 2.1 软件过程概念 一.软件生命周期 二.软件过程 三.软件过程模型 四.软件过程评估 2.2 传统模型---早期提出的 一.瀑布模型 / 经典生命周期模型 ...

  5. 工程数据计算机处理的方法有,第二章 CADCAM技术基础-工程数据的计算机处理2011.ppt...

    文档介绍: CAD/CAM技术基础 CAD/CAM Technology Base 主讲人:XXX E-mail:XXX 第二章 工程数据的计算机处理 Computer Processing of E ...

  6. 软件工程第二章 软件工程

    详细思维导图及资源可点击幕布连接 :第二章 软件工程

  7. 软件工程--第二章--可行性分析

    文章目录 可行性研究内容 可行性研究的步骤 系统流程图 数据流程图 数据流图 命名 数据字典 定义数据的方法 数据元素字典的定义 数据流字典的定义 数据存储字典的定义 数据处理字典的定义 成本效益分析 ...

  8. 第二章 局域网技术和组网规范

    第一节 局域网协议标准 IEEE 802(也称为局域网参考模型)主要包括以下几种类型: 以太网(Ethernet) 令牌环(Token Ring) 令牌总线(Token Bus) 光纤分布数据接口(F ...

  9. 第二章个人技术和流程课后题

    1.软件工程和程序设计大调查 专业         用时                代码                用工具 16计本     两天                500行    ...

最新文章

  1. 例6.12(Java)
  2. 关于如何解决解决The SDK platform-tools version ((25.0.3)) is too old to check APIs compiled with API 26...
  3. RobotFramework自动化框架—robot文件中调用自定义库
  4. 为什么银行存款不能按复利计息?
  5. delphi 函数内创建对象 释放_JavaScript 的函数底层运行机制
  6. 最常见的Java异常及其对Java开发人员的评价
  7. 前端学习(1358) :渲染模板默认
  8. 区块链入门与去中心化应用实战 之一 第3章 区块链技术核心原理实现
  9. FPGA学习---Quartus II新建工程
  10. VCS命令行选项总结简单脚本实例
  11. HTML/CSS面试题(收集)
  12. 投影幕布尺寸计算器_投影距离和屏幕尺寸计算器Ver1.02.xls
  13. [转]U盘启动制作工具|大白菜启动制作工具
  14. 项目实训--Unity多人游戏开发(八、3D音效融合AudioMixer、统一的音频播放系统)
  15. 希尔顿康莱德酒店及度假村亮相中国科技与创新孵化中心
  16. 现行各主流语言的特点
  17. opencv中 idft与 mathlab中 ifft2结果不对应的解决方案
  18. 线段树1——神奇的数据结构
  19. 玩转华为ENSP模拟器系列 | 配置OSPFv3 ABR路由聚合示例
  20. js对json、xml字符串格式化(美化增强可读性)

热门文章

  1. 题解 【国家集训队2011】数颜色
  2. 【译】索引进阶(四):页和区
  3. python 几种常用测试框架
  4. (转载)spring配置hibernate 事务。
  5. [HDOJ4027]Can you answer these queries?(线段树,特殊成段更新,成段查询)
  6. Repository 返回 IQueryable?还是 IEnumerable?
  7. Oracle中输出一个变量
  8. JS_01JavaScript基础笔记
  9. 【剑指offer】面试题42:连续子数组的最大和(java)
  10. 取文字_把这4个字母输入word,会得到一段神秘文字,承载着一段历史