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

简介:

 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 各种编程的玩法
编程可以是一门理论,也可以是一门工程,还可以是一门手艺,这些年来程序员们玩出了不少好手艺,请看:
 
 
5 学什么,怎么学?
程序员经常在学习,交流,提高自己,怎样才是有效的学习方法呢?  打字快就能写程序快么?  哪一种语言、编辑器是最好的? 请看:
 
6. Coder, and Hacker 的区别:
 
 




本文转自SoftwareTeacher博客园博客,原文链接:http://www.cnblogs.com/xinz/p/3803109.html,如需转载请自行联系原作者

目录
相关文章
|
机器学习/深度学习 算法 数据挖掘
神经网络训练失败的原因总结 !!
神经网络训练失败的原因总结 !!
333 0
|
Linux Shell 文件存储
xxl-job执行器启动报错读取不到配置文件Could not resolve placeholder ‘xxl.job.executor.address‘ in value “${xxl.job
有几个不用配置的属性,也要写出来,不填值就行 但是最后一个日志天数得写,写个-1。不然空字符串无法转成数字
|
7月前
|
人工智能 自然语言处理 供应链
《DeepSeek:工业互联网与人工智能融合的“催化剂”》
在工业4.0和智能制造的浪潮下,DeepSeek技术作为工业互联网与人工智能融合的“催化剂”,通过智能数据处理、精准建模预测、智能决策支持及智能交互,全面优化生产流程,提升企业竞争力。它能高效处理多源异构数据,挖掘关键信息,预测设备故障,提供科学决策建议,并简化操作流程,推动制造业向智能化、高效化、绿色化方向迈进,引领工业互联网新时代的发展潮流。
182 5
《DeepSeek:工业互联网与人工智能融合的“催化剂”》
|
9月前
|
机器学习/深度学习 数据采集 人工智能
基于Qwen 2.5的世界科学智能大赛冠军方案
本方案基于通义千问模型,采用多阶段的Easy-to-Hard数据合成方法,模拟人类学习的由简单到困难的思路,逐阶段构造多样化的训练数据。数据生成阶段,训练数据的标签,引入了“Chain-of-Thought”思维链模式,生成多样化的推理路径,逐步对齐推理Scaling Law。训练阶段,采用了LoRA对通义千问32B模型在合成数据集上进行参数高效微调。推理阶段,使用了4bit低精度量化,并结合vLLM框架进行推理加速,最终达到准确性、效率和显存利用率的统一。
525 2
基于Qwen 2.5的世界科学智能大赛冠军方案
|
自然语言处理 算法 数据挖掘
【数据挖掘】十大算法之PageRank连接分析算法
文章介绍了PageRank算法的基本概念和数学模型,包括如何通过一阶马尔科夫链定义随机游走模型以及如何计算网页的重要性评分,并提供了PageRank迭代算法的具体步骤。
358 0
|
负载均衡 安全 网络架构
|
网络架构
连接差异:探索RJ45与RJ11的世界
【4月更文挑战第21天】
754 0
连接差异:探索RJ45与RJ11的世界
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的酒店管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的酒店管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
129 0
|
存储 安全 数据挖掘
性能30%↑|阿里云AnalyticDB X AMD EPYC,数据分析步入Next Level
阿里云原生数仓 AnalyticDB for PostgreSQL 与 AMD 新一代硬件深度优化,结合全自研计算引擎及行列混合存储实现性能升级,综合性能提升30%。结合丰富的企业级能力帮助企业构建离在线一体、流批一体综合数据分析平台,采用同一引擎即可满足离线批处理、流式加工,交互式分析三种场景,在开发运维、时效性及成本上具备更高的性价比。
658 0