现代程序设计 (课程设计中, 征求意见稿)

学好程序设计和C语言课程的建议  学好程序设计和C语言课程的建议 1. 要着眼于培养能力。C语言程序设计并不是一门纯理论的课程,而是一门应用的课程。因此,着重培养:分析问题的能力、构造算法的能力、编程的能力、调试程序的能力。 2. 要把重点放在解题的思路上,通过大量的例题学习怎样设计一个算法、构造一个程序。初学时更不要在语法细节上死背死抠。一开始就要学会看懂简单的程序,编写简单的程序,然后逐步深入。语法细节是需要通 阅读详情

背景: 

      目前中国大陆大学里学的编程主要有两种:

1)      学编程为了应付考试,偏重于静态的知识点, 语言细节。以闭卷考试为主。有些学校的数据结构和算法课有许多实际的练习,也有的课程练习很少。

2)      学编程为了ACM 算法比赛,偏重于算法, 解决抽象的问题。主要是由兴趣小组/面向比赛方式。

 

大部分同学到了工作中都用不着上面两种能力 (忘了语言细节可以查;  不用像比赛那样在短时间内搞尖端的算法) , 但是他们要写高效的,可维护的,经得起实际考验的程序,而且往往会用到大学里没有讲到的语言来做。 

 

没有这些知识和经验的同学, 就很痛苦,例如这个同学做软工课的第一个作业:

 

      http://www.cnblogs.com/76er/archive/2012/09/25/2703143.html 

 

又如这个被这个同学吐槽的:

http://www.cnblogs.com/buptzym/archive/2013/05/25/3099389.html 

 

同学们对现有的程序设计课也有很大意见:

http://www.cnblogs.com/SuperBrothers/archive/2012/12/11/2812678.html 

很多人在Blog中都提到了我们大一的时候一门选修课——Java。(实质上应该叫“Java语言程序设计”),但是课上根本没有,对就是根本没有教会我们如何使用Java语言解决工程上任何实际的例子。甚至Console 输出Hello World!\n  都是自己查的Baidu。 然后考核方式是“开卷答题”+“2000行Java大作业”。学了半天什么什么历史,什么什么面向对象的啥啥啥,能写程序吗?开卷考试抄就行了。大家都是80、90分。大作业怎么办?谁都不会写,写出来都是面向过程风格的C-style的代码。能完成一个工程么?肯定不能。那怎么办?只有拿别人的代码抄抄改改。

 

http://www.cnblogs.com/buaashine/archive/2012/12/10/2808107.html

这样又引申到了“很有名”的Java课。 全年级200多人,在Java课上学会Java的,我想不超过10个吧,每年每届学生都是如此,老师在讲台上空谈概念,没有课后练习,没有实际例子,考试考什么是接口,try...catch有什么用,由于是开卷考试,我们都“答出”了“标准答案”,但谁也没学会。

 

所以看起来这是一个缺口:   如何为了写高质量的程序而学习各种编程理论,技术和技巧。实事上可以说是我的《现代软件工程》课的前 1/3 内容: 个人项目和结对项目。

 

对学生的要求:

1)  针对大学二/三年级学生; 假设学生已经会了数据结构/基本算法, C/Java 的基本语法和一些程序设计常识并有一些实践。

2)   先修课:  数据结构和算法;

 

 

 

讲课的安排 (大约有12 次课):

1)   建立和维护自己的源代码库 (GitHub),  基本操作; 建立和维护自己的技术博客, 开始每个学生报告目前会的语言和代码量.

2)   程序如何处理用户的输入

3)   写容易懂的程序  (代码复审,结对编程), 程序理解,写让人懂的程序  (代码可读性)

4)    C/C++  语言中的基本设计模式  

a.    单例 (singleton)

5)    程序如何测试效能 (Performance)

6)    如何做单元测试

7)    一个进程里面的线程如何通讯

8)    模块之间如何通讯 (API 的设计)

9)    程序之间如何通讯,  怎么让不同语言写的程序互相通讯, RESTful 设计

10)   如何设计程序去测试别的程序

11)   写能处理大数据的程序

12)   可扩展的程序

 

 

在这个课程中, 我们想让学生有机会在实践中学到程序设计的一些原则 (我都不全懂, 也不会全讲, 或者全部强加给学生)。 例如:

  1. Single Responsibility - a class should have only one reason to change
  2. Open-Closed Principle – software components should be open for extension, but closed for modification.
  3. Liskov Substitution Principle – subtypes must be substitutable for their base types
  4. Dependency Inversion – Abstractions should not depend upon details.  Details should depend upon abstractions.
  5. Interface Segregation Principle – clients should not be forced to depend upon methods that they do not use.  interfaces belong to clients, not to hierarchies.
  6. Release-Reuse Equivalence – the granule of reuse if the granule of release.
  7. Common Closure – the classes in a package should be closed together against the same kinds of changes.
  8. Common Reuse – classes in a package are reused together.  if you reuse one of the classes in a package, you reuse them all.
  9. Acyclic Dependencies – Allow no cycles in the package dependency graph
  10. Stable Dependencies – depend in the direction of stability.
  11. Stable Abstractions – a package should be as abstract as it is stable

 

 

课怎么上? 

所谓做中学 ( learning by doing), 大家写好玩的程序, 互相观摩,  看书上网查资料,  相互学习,  写点博客记录心得, 录点视频展现效果。我对编程语言懂得不多,但是手头题目倒是挺多的。 作业肯定不少,但是大量的作业不是压迫学生,而是通过有深度有难度的作业来调动、发挥学生的潜能。软件开发这么好玩,真正感兴趣的同学会做很多作业之外的探索。

 

怎么评分?

据说有很多考研补习班都是以 “包过”  为口号,  我觉得如果学生每个题目都认真做了,  分享了必要的博客/视频,一定会过的。

 

这是网络公开课么?

课是在北航计算机学院上 ( 讨论中 )。  资料尽量放到网上,学生的程序/博客/视频都是公开的。

上课时间地点:

 

周一晚上 6-8pm 北航 主南  210,  10/21 号起,时间不变,但是地点改在新主楼 D218。

  

 

课程质量如何? 

今年是第一次开课,  大部分东西的第一版都不怎么样,  所以不要期望值太高。  然而驽马十驾,  功在不舍,  持续改进几年之后, 也许会有可观之处。

 

 

课程的教材 和 TA:

中文版 代码大全 (第二版) 斯蒂夫·迈克康奈尔 ISBN: 7121022982  Code Complete (2nd Ed) Steve McConnell  ISBN: 9780735619678

Agile Software Development Principles, Patterns, and Practices,  by Robert C. Martin

重构:改善既有代码的设计  Martin Fowler (马丁 福勒), Kent Back, et al.

 

助教的博客: http://www.cnblogs.com/softwareTA/ 

 

 

 

课程的的定位和扩展:

参考  习而学的软件工程教育, 这门课的定位:   “数据结构 & 算法”     --> “C 或者 JAVA 语言初步”   -->  “现代程序设计语言 I”   --> “现代软件工程”

 

这门课有许多内容可以放进来,  但是考虑到一般大学生的水平和时间,  一些深入的话题可以放在  现代程序设计 II 中。

 

未决定的议题:   可以分两门课,  由浅入深。第一门课用 C, JavaScript 语言为例, 讲程序设计基础, 第二门课扩展到 (Python,Java, C++) 同时讲接口设计, 设计原则, 重用,重构等。

 

当然还有 @GeniusVczh 的 一系列关于程序语言的文章。

 

 

这门课不讲什么:

算法, 某种程序设计语言的基本语法,编译原理,   程序和用户的交互,  用户需求分析,项目的管理, 软件的测试。

 

打分:

每次作业大都要交两个部分,  代码和博客

a)      代码签入到 GitHub 中, 包括代码, 测试用例, 使用说明, 测试数据。 等。 

b)      博客写到cnblogs.com 自己的博客账户中。博客写什么:

a.       程序的架构和思路

b.      自己在写这个程序的心得

c.       自己在这个作业中的时间消耗和开发效率分析 (请看软件工程师的能力和评价)

d.      程序运行结果的截屏或者效果的录像

 

每次作业满分10 分,  每次博客满分10 分。把同学的作业和博客按照质量分为4档:

第一档:  9 – 10 分   (不超过1/3)

第二档: 5 – 6 分     (不超过1/3)

第三档: 2 – 4 分

第四档:  1 分

迟交作业的同学: 0  分.

超过截止日期两周不交作业的同学:  -5 分.

 

 

 

 注: 一些题目:

        纵横加,  word search,  彩球, Programming Pearls: graph generator

SurfaceControlViewHost使用介绍 可以看到,主要用途:是把一个进程的View显示到另外一个进程里面。 阅读详情

相关推荐

Ubuntu16.04下禁用scp、sftp和winscp

在上一篇博文《Ubuntu16.04 搭建FTP服务器,设置用户权限为只许上传、禁止下载和删除》中,我讲述了Ubuntu16.04下配置FTP,并且设定用户权限为只能上传数据,禁止下载和删除数据。这算在FTP层面封堵了服务器数据泄露的途径。 但是,Ubuntu系统的scp和sftp还是起作用的,理论上只要能用本地机器ping通服务器,就可以用scp和sftp下载数据,这还是存在数据泄露可能的,所...

HPC&Geophysics攻城狮 5737

树莓派部署Google Assistant:免官方套件,USB麦克风+3.5mm音箱完整教程

语音助手技术通过自然语言处理与云端AI协同,实现人机语音交互。其核心原理是将本地音频采集、语音识别与云端语义理解、知识库查询相结合,最终通过语音合成反馈。这项技术的价值在于为物联网和智能家居提供了直观的控制入口,极大提升了设备交互的便捷性。在应用场景上,它广泛用于智能音箱、车载系统和家庭自动化中。本文聚焦于如何在树莓派这一流行的嵌入式开发板上,利用常见的USB麦克风和3.5mm音箱,通过Google Assistant SDK,部署一个响应“OK Google”唤醒词的智能语音助手。教程详细涵盖了从系统镜像

weixin_33749131的博客 427

wintab开发例程

 タブレットとスタイラスペンを使うと、パソコンに手書きの線を入力できます。筆圧を入力することができるので毛筆のような表現も可能です。ペンの傾きを入力できる機種もあり、アイデア次第で面白いことに使えそうです。  私は昔(94年頃)、WACOMのタブレットを用いたプログラム開発をしたことがあります。当初A3版ほどの大きさのUDというタブレットを使っていて、その後 ArtPad という小さいサイズの

grass168的专栏 3240

现代程序设计 作业6 - 简单而有意义的题目

这是这个课件的一部分: 现代程序设计 (课程设计中, 征求意见稿) 好多同学们都说题目难,这回我们来一个简单而很有意义的。 :) 写代码爽还是读代码爽? 往一堆乱麻中再加上一些线索,似乎比较容易;然而从这一团乱麻中理出头绪,还是比较难的。下图来自 知乎的一个讨论。 我们练习了这么多作业,所有作业都是从头写程序,但是我们到了真正的项目组或公司里,通常我们会改进一个已经...

depx7366的博客 220

J1939协议实用指南与J1939数据记录方案

“没错,这是一份SAE J1939简单、实用指南。”—虹科 **开篇:**在这篇介绍中,我们介绍了J1939协议的基本知识,其中包括PGN和SPN。因为这是一篇偏向应用的简介,所以您还将会学习到如何通过DBC文件解码J1939数据、如何记录J1939、典型的应用案例和实用技巧。下面,来了解下这份简单易懂的J1939介绍吧~ 什么是J1939? 简而言之,SAE J1939其实是一套标准,重型车辆ECU间就是按照这套标准在CAN总线上进行通信的。当今大多数车辆都通过CAN(Controller Area Ne

1万+

高速PCB设计中串扰的成因、影响与实战控制策略

在高速数字电路与硬件系统设计中,信号完整性是确保系统稳定可靠的核心基础。其核心原理在于,当信号在传输线上传播时,会伴随产生电场与磁场,若相邻导线距离过近,便会通过电磁场耦合产生不期望的能量转移,即串扰。这一现象会直接导致信号波形畸变、时序偏移和噪声裕量降低,严重影响系统性能。从技术价值看,深入理解并有效控制串扰,是提升数据传输速率、保障系统稳定性和降低误码率的关键。其应用场景广泛覆盖了从高速SerDes链路、DDR内存接口到高精度模拟电路等几乎所有现代电子系统。本文聚焦于高速PCB设计中的串扰问题,系统剖析

weixin_27625589的博客 576

作为一名计算机系的学生,如何真正进入计算机的专业世界?

光是看到了这些信息,多半还不够。如果老师不给力,同学不给力,这个时候该怎么办呢—— 推荐大家看看刘未鹏写的怎样花两年时间去面试一个人 大家也可以了解这样的网络公开课:计算机专业课程汇总(网易云课堂) 希望这里的故事也能不断给你打气,让你在困境中能够坚持,相信自助者天助: 来吧,IT小小鸟(持续不定期更新)

5961

机器学习篇-KNN算法实现鸢尾花模型和手写数字识别模型

一个样本最相似的k个样本中的大多数属于某一个类别, 则该样本也属于这个类别类似于: 近朱者赤近墨者黑回归机器建模流程:数据获取数据基本处理(空值和非法值)特征工程(特征提取, 特征预处理(归一化, 标准化), 特征降维, 特征选择, 特征组合)模型训练模型预测模型评估# 1. 定义函数 dm01_load_iris(), 用于加载 鸢尾花数据集, 并简单查看下数据集的各部分.# 1. 加载数据集.​# 2. 打印iris_data, 发现其实是1个: 字典.​。

m0_60916732的博客 2403

北京python线下青少年培训

2019年10月25日,《青少年编程能力等级》标准联合发布会在北京清华大学举行。《青少年编程能力等级》团体标准第1部分、第2部分由全国高等学校计算机教育研究会、全国高等院校计算机基础教育研究会、中国软件行业协会及中国青少年宫协会4个全国一级团体联合正式对外发布。 全国高等学校计算机教育研究会理事长/国防科大王志英教授、全国高等院校计算机基础教育研究会副会长杨小平、中国软件行业协会培训中心理事长张志明、中国青少年宫协会科普事业部部长陈玉光、全国高等学校计算机教育研究会秘书长王茜、《青少年编程能力等级》标准研

weixin_63757190的博客 419

NHANES更新数据后,权重计算方式也更新了

官网说明在此:如果你比我还懒,我下载了几个说明文件。2021年8月至2023年8月的总样本量与之前的2年周期相似。然而,。特别是,与之前包括过度抽样的周期相比,非西班牙裔白人的样本量较高,而非西班牙裔黑人的样本量较低。此外,60岁及以上人群的样本量较高,而年轻群体的样本量较低。子组的估计值可能具有较低的精确度,因此,检测组间差异的统计能力可能较低。此外,年龄和种族/西班牙裔亚组(尤其是儿童和青少年年龄组)的估计值可能会显示意想不到的模式。

珏世佳人的博客 2410

数学建模算法案例精讲500篇-【深度强化学习】深度确定性策略梯度(DDPG)(附MATLAB和python代码实现)

它是一种学习连续动作的无模型策略算法。它结合了DPG(确定性策略梯度)和DQN(深度Q网络)的思想。它利用DQN中的经验重放和延迟更新的目标网络,并基于DPG,可以在连续的动作空间上运行。# 用于生成带有噪声的动作def __init__(self, action_space, mu=0.0, theta = 0.15, max_sigma = 0.3, min_sigma = 0.3, decay_period = 100000):#decay_period要根据迭代次数合理设置# 均值 mu。

qq_36130719的博客 325

高校计算机专业实践教学改革研究,民族高校计算机专业实践教学改革

《民族高校计算机专业实践教学改革》由会员分享,可在线阅读,更多相关《民族高校计算机专业实践教学改革(5页珍藏版)》请在装配图网上搜索。1、民族高校计算机专业实践教学改革民族高校计算机专业实践教学改革2018/09/28 摘要:针对当前民族高校计算机专业实践教学的现状和特点,分析了民族高校计算机专业在实践教学中存在的问题,提出适合民族高校计算机类专业实践教学的方法策略和改进措施。对帮助提升专业实践教...

weixin_39604280的博客 176

使用epiDisplay包中的logistic

其中的logistic.display函数可以用于获取逻辑回归模型的汇总统计信息,包括自变量的优势比和置信区间,以及回归系数的Wald检验的p值。最后,我们使用print函数打印出汇总统计信息。使用epiDisplay包中的logistic.display函数获取逻辑回归模型的汇总统计信息(包括自变量的初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)- R语言。通过使用logistic.display函数,我们可以方便地获取逻辑回归模型的重要统计信息,并对自变量的影响进行解释和推断。

CyberJolt的博客 608

顶级程序员的心得 - Coders at Work

读了 “Coders at Work”, 对15 位顶级程序员的采访, 总共600页。 从采访的模式看,有点像“艺术人生”, 一般都是音乐起,讲小时候的故事,你怎么开始写程序的? (Brad 同学 5 岁开始写) ; 不过后来并没有神秘嘉宾上场,也没有声泪俱下的宣泄。 无论如何, 这些看似冗长的问答中有不少精辟的言论。 我摘录了一些关于挑选,面试程序员,优秀程序员的特点,和程序设计的句子。下面是这些程序员的心得,和我的几句解释.

SoftwareTeacher的专栏 4万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

编程的未来 - 还有未来么?

AI编程时代,程序员还有前途么?这也是最近软件工程师们聊得比较多的问题,上周,在上海的 “关东小磨” 和十多位 优快云 博主聚会的时候,大家也稍微谈了一下这个话题,但是谈得不透。我想在本文整理一下我的思路。

SoftwareTeacher的专栏 3万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

2022年下半年部分团队的总结

总结的链接其他团队的汇报博客如下 (全部上线日期:2022/12/26)博客+优快云 主站业务优快云 运营工作,特别是针对创作者的运营服务优快云 APP优快云 学习优快云 社区云优快云 的 AI + 数据服务优快云 研发团队的其他汇报其他 …

SoftwareTeacher的专栏 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C笔记 -- 一个为 IT人士打造的笔记工具

设想我们有这样的笔记工具,你会使用么? 优快云 浏览器助手今天发布的新版上线了《C笔记》功能,通过C笔记可以帮助用户快速的收集、记录和整理自己感兴趣的内容。它能将用户在 PC 浏览器(推荐 Chrome, Edge)上访问的任何网页都很快的收录到自己的「C笔记本」上——「C笔记本」是用户在 优快云 的一个私密社区,不仅可以收录,用户还可以很方便的通过 优快云 浏览器助手、社区云对收录的内容进行记录,将自己的每个想法都记录下来,并最终通过「C笔记本」整理好,形成自己独特

SoftwareTeacher的专栏 2万+

软件工程 敏捷的酒后问答

王屋村移山公司的程序员果冻最近请假参加了一系列敏捷的培训, 热情地和同事们酒后谈敏捷。

SoftwareTeacher的专栏 1万+

顶级程序员的心得 –– Coders at Work

顶级程序员的心得 –– Coders at Work 我2009年读了 “Coders at Work”, 这是作者对15 位顶级程序员的采访, 总共600页。 这些看似冗长的问答中有不少精辟的言论。我摘录了一些他们关于面试程序员的建议; 优秀程序员的特点;对高效率软件设计的看法,等等。

SoftwareTeacher的专栏 1万+

优快云 统一标签设计 征求反馈

优快云 在长期发展中,各个业务发展出各有特色的标签定义和用户体验,这个博客的目的是想把这些设计都统一起来,同时征求用户的意见, 发布一个全站一致,用户体验好的标签系统。 设计: 研发一级,和二级分类: PHP C/C++ 游戏 JavaScript 数据库 数据结构与算法 大数据(Big Data) 移动开发 人工智能 开发工具 网络 嵌入式 区块链 ...

SoftwareTeacher的专栏 1万+

认识代码之前,请先认识你自己 |《编程人生》

这是我的湛庐课程) 的一部分。《编程人生》是一本优秀程序员的采访集,里面记录了15位世界级编程大师的故事。我在里面说过,在这个书单课里,我会通过对四种关系的梳理,帮你系统思考自己的职业发展。而在这几种关系中,最基本的一个,就是要处理好“我和自己的关系”,更好地认识自己。

SoftwareTeacher的专栏 1万+
上一篇: 现代软件工程讲义 5 团队合作的阶段
下一篇: 现代软件工程 团队作业 - 软件分析和用户需求调查 (2013)
SoftwareTeacher
SoftwareTeacher 《编程之美》作者 《编程之美》作者 领域专家: 产品设计技术领域 领域专家: 产品设计技术领域
博客等级 码龄16年 2万+粉丝 334原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值