当前位置 博文首页 > SoftwareTeacher的专栏:现代程序设计 (课程设计中, 征求意见稿

    SoftwareTeacher的专栏:现代程序设计 (课程设计中, 征求意见稿

    作者:[db:作者] 时间:2021-08-29 22:34

    背景:?

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

    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 cs
    下一篇:没有了