背景: 

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

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

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

  1. c语言程序设计迷宫,C语言程序设计课程设计-迷宫.doc

    C语言程序设计课程设计-迷宫 大 学 C语言程序设计 课程设计(论文) 题目: 迷宫问题 院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 讲 师 起止时间: 2009.12.14 ...

  2. c语言电子计算器课程设计报告,计算机程序设计课程设计报告.doc

    计算机程序设计课程设计报告.doc PAGE 1 计算机程序设计(C语言) 课程设计报告 题目:学生信息管理系统 学院: 计算机科学与工程学院 专业: 电子信息工程 班级:110406 姓名: 黄伟强 ...

  3. C语言扫地雷游戏的题目简介,C语言程序设计课程设计(论文)-扫地雷游戏.doc...

    C语言程序设计课程设计(论文)-扫地雷游戏 辽 宁 工 业 大 学 C语言程序设计 课程设计(论文) 题目: 扫地雷游戏 院(系): 软件学院 专业班级: 电子商务091班 学 号: 学生姓名: 指导 ...

  4. oracle课程设计摘要,Oracle程序设计课程设计概要(doc 35页)

    Oracle程序设计课程设计概要目录: <Oracle数据库应用与开发实例教程>是学习数据库技术的高级阶段课程,读者应该在选择学习<数据库应用基础实例教程>.<Acces ...

  5. C语言程序项目计划书,(C语言程序设计课程设计计划书.doc

    (C语言程序设计课程设计计划书 C语言程序设计课程设计计划书 一.目的 1.熟悉并掌握C语言程序设计的基本方法与技能. 2.掌握利用递归进行程序设计的方法. 3.掌握对随机事件进行全程模拟的基本方法. ...

  6. c语言程序设计超市会员卡管理系统,C语言程序设计课程设计报告超市水果信息管理系统...

    <C语言程序设计课程设计报告超市水果信息管理系统>由会员分享,可在线阅读,更多相关<C语言程序设计课程设计报告超市水果信息管理系统(28页珍藏版)>请在人人文库网上搜索. 1. ...

  7. C++程序设计课程设计报告——自助点餐系统

    C++程序设计课程设计报告 一.任务要求 该系统为两种角色的用户提供服务,一种是餐厅管理员,一种是顾客.餐厅管理员根据账号.密码登录系统.顾客无需登录即可使用系统. 顾客通过该餐厅在系统中提供的菜单为 ...

  8. 程序设计课程设计报告(学生成绩管理系统)

    程序设计课程设计报告 课程设计题目及内容 题目:学生成绩管理系统 设计要求及提示如下: (1).设计一个学生类Student,包括数据成员:姓名.学号.二门课程(面向对象程序设计.高等数学)的成绩. ...

  9. java学生选课系统课程设计报告_Java语言程序设计课程设计-学生选课系统

    <Java语言程序设计课程设计-学生选课系统>由会员分享,可在线阅读,更多相关<Java语言程序设计课程设计-学生选课系统(23页珍藏版)>请在人人文库网上搜索. 1.10届 ...

最新文章

  1. HOL中的四种排序,Order By、Sort By、Distribute By、Cluster By
  2. vsftp 无法启动,500 OOPS: bad bool value in config file for: anonymous_enable
  3. [渝粤教育] 中国海洋大学 求职OMG 参考 资料
  4. 负压电路_通风设备之负压风机的工作原理与安装方法是怎样的?
  5. 爬取100页京东商品评论
  6. 如何删除动态数组的指定元素 - 回复 Splendour 的部分问题
  7. 微信小程序开发(十二)小程序画布组件canvas
  8. 制作纯天然无污染的微软官方win10Pe(超详细)
  9. ASP.NET操作EXCEL 合并单元格 大全
  10. mac取消开机启动项
  11. WIN10下用anaconda安装tensorflow-gpu1.8.0并用pycharm作编译器(WIN10下anaconda+tensorflow-gpu+pycharm)
  12. 【测试】黑盒测试(功能性测试)和白盒测试
  13. springboot+thymeleaf+bootstrap+mybatis-Plus+mysql 情侣空间网站源代码
  14. python伪装浏览器https_Selenium中通过修改User-Agent标识将PhantomJS伪装成Chrome浏览器...
  15. AMiner权威发布区块链大数据报告(附下载)
  16. linux 行首加特定字符_Linux:用sed命令在文本的行尾或行首添加字符
  17. 【CodeForces 1255E1 --- Send Boxes to Alice [Easy Version]】
  18. cc 和 bcc 的区别 邮件
  19. 使用C#在Visual studio 2012调用OCX控件
  20. 【电子学会】2020年06月图形化三级 -- 海底寻宝

热门文章

  1. word 2013 标题设置多级列表
  2. YYT 0659 - 2008全自动凝血分析仪
  3. 预编译对象解决SQL注入问题
  4. 5款新颖的ReSharper插件
  5. C# GridView单元格合并.
  6. linux标准I/O——按行输入和输出
  7. 牛客15555 1 + 2 = 3?
  8. 关于c语言的数据类型常量的理解
  9. Leetcode--820:单词的压缩编码(java)
  10. c++矩阵连乘的动态规划算法并输出_算法面试必修课,动态规划基础题型归纳(三)