1

我教了一学期的大学系统分析和设计课程。主题包括设计模式、UML、OOP、软件开发生命周期,以及各种方法(如敏捷/SCRUM/BDUF/瀑布)的历史、优缺点。

进入这门课程的学生应该对编程有一定的了解,但实际上我已经看到了从精通一两种现代语言的人到勉强通过 FizzBu​​zz 测试的人。

我的问题是双重的:你认为学生在接触这些主题之前需要多少编程经验(或者你认为他们应该在学习编码之前学习它们),第二,你认为什么是公平和适当的方式在课程开始时预测试他们,知道他们的背景没有一致的语言或平台?

4

9 回答 9

4

我认为当学生能够将所学的材料付诸实践时,他们学得最好。为此,我认为最好的课程将包括一些涉及编码的项目(或小型项目)。通常,我希望向高年级本科生和研究生教授这一点。到这个时候,学生应该已经上过一些编程课、一些离散数学和基本的数据结构课程。虽然不是技术上的先决条件(编程课除外),但如果您可能需要这些其他人,那么您就有更好的机会获得具有适当背景的学生。

至于预测试,我建议在课程早期进行一些简单的编程项目来说明设计模式/OOP。也许,对于这些项目,我会比你在课堂早期尝试分配的要求更严格。预先说明课程需要编程技能并以这种方式评分。通过您的评分,让人们知道要求很严格。

这听起来可能很苛刻,但我已经看到太多学生依靠他们的项目合作伙伴完成课程,因为他们无法跟上所需的编码。我认为他们并没有真正从课程中学到很多,因为他们没有机会通过经验将知识内化。

于 2008-12-20T02:46:06.820 回答
4

你不能教学生解决他们从未遇到过的问题。 如果你想让学生能够用这些材料做点什么,他们必须有丰富的编程经验,这样他们才能对所有这些想法要解决的问题有一定的了解。

问问自己为什么要教这些材料,以及你希望你的学生在学期结束时如何改变。如果你想要的只是让他们能够在白板上解释概念,那么编程经验的数量就不那么重要了。但真正的目标取决于你:你越仔细地为班级表达你的目标,你就越有可能实现它们。 你希望完成什么?

于 2008-12-20T03:58:28.063 回答
1

我一直处于同样的位置,我相信学生应该有丰富的编程经验,以及一些复杂的数学知识。至少是一好的、严肃的编程课程、一门数据结构课程,也许还有一门计算机组织或系统编程课程。

于 2008-12-20T03:23:07.650 回答
1

我没有接受过正规的计算机科学教育,所以我不能从这个角度说话,但我确实觉得需要大量的编程经验才能理解诸如设计模式之类的概念

在经历了从爱好编程阶段到认真对待编程的过程中,我通过经验发现适当的设计可以使代码具有高度可维护性。我经历了从GOTOBASIC 中 s 的意大利面条代码到利用设计模式和 MVC 方法的过程,并开始认真欣赏基于良好设计的编码。

如果没有适当的经验水平,学生只会将课程视为“哦,所以有设计模式之类的东西,这很好”,但它不会真正打动人心。

我也是 tvanfosson 的第二篇文章,我认为将项目作为课程不可或缺的一部分将真正展示如何利用面向对象的编程和设计模式来编写设计良好、维护良好、可重用的代码。

于 2008-12-20T04:03:18.020 回答
1

我想说这取决于您的课程目标/目的、目标受众和结果。

从表面上看,你不需要任何编程背景就可以从这样的课程中学到很多东西。毕竟,这些方法和技术实际上是关于通信的,而不是专门针对编程的。事实上,如果做得好,设计可以消除大量不必要的编程——即使使用敏捷方法(这就是为什么他们被告知首先和经常与客户沟通)。

此外,如果有针对性,这门课程可以是许多其他课程、学院和认证的交叉课程;例如各种商业学位、管理课程等。如果有人在“管理”中学习过这样的课程并真正了解正确的客户沟通的必要性,而不是仅仅关注营销想要什么,那不是很好吗?一周加上通常的截止日期太短?

因此,我鼓励您将“程序员”作为此类课程的目标受众进行思考。首先将其视为一门沟通课程,然后从那里开始。

最良好的祝愿。

干杯,

-理查德

于 2008-12-20T05:28:53.403 回答
0

大约 2 年前我还是学生的时候。在最后的课程中可以更好地理解这类主题。为了掌握所有这些主题,我认为学生必须至少有 3 门编程课程(结构编程、OOP 1、OOP 2),软件工程课程也会很棒,还有一些 DB 背景。尝试鼓励学生从头开始一个项目(需求收集 - 发布)没有什么比实践-实践-实践更好的了

于 2008-12-20T03:01:33.137 回答
0

Coobird 和 Tvan 关于需要大量编程时间的观点是绝对正确的。我将补充一点,在学习环境中,获得即时反馈(除了让代码运行)和处理各种情况非常重要。

没有什么比吃自己的狗粮和被迫收拾自己的烂摊子更能说明问题的了。

于 2008-12-20T05:16:13.613 回答
0

我认为可能有一个基本的计算机编程课程可以在介绍现代编程的各种基本思想的课程之前提供,例如什么是 IDE,什么是算法,什么是测量复杂性的基本方法等。是给学生的 2 个选择:使用课程建议的语言,或者从这个列表中选择你自己的,TA 和其他人会足够了解以确定解决方案是否可以接受。要考虑的一个问题是各种异国语言,如 Logo、Lisp、Modula-3 或 Fortran 是否可以。理解如何使用各种工具的想法将比使用可能在学术界之外无法使用的特定编程语言更重要。

在某些方面,此类课程的期末考试将作为确定一个人是否能够跳过此类课程的一种方式。主要思想是确定特定领域内的一些基础知识,这与小学中以 10 为基数的阿拉伯数字系统具有加、减、乘、除和放置值(如十、百等)操作不同。是数学的基础知识,而不是学习任何这些作为对数学的介绍,这些都是可能的起点:

  1. 三角函数使用十六进制数基定义函数,例如正弦、正割、正切以及每个函数的余数和所有这些函数的倒数以及这些函数的图形。

  2. 图论包括路径、广度优先搜索、深度优先搜索和最小权重生成树。

  3. 复数系统或一些更高维空间(如 N x N 实数矩阵)上的导数、积分和偏微分方程。

  4. 概率和统计理论,包括算术和几何平均值、中位数、众数,以及最小二乘和线性回归的概念,以及足够的代数,所以这一切都是有意义的。

  5. 有限数学,例如排列、组合、枚举和渐近线。

  6. 模块化算术和浮点数系统。

  7. 各种形状的几何检查角度和平行边的类型作为对各种形状进行分类的方法。这里还有各种形状的周长、面积、表面积和体积的公式。

  8. 具有极限和无限概念的序列和系列,以及用于总和的大写 sigma 和用于乘积的 pi 的特殊东西。

  9. 布尔代数涉及各种逻辑门,例如真值表形式的 AND、OR、XOR 和 NOT。

  10. 仅使用矩阵和线性变换的线性代数。

  11. 类似于棋盘游戏线索的逻辑问题。

  12. 纯数学涉及各种定理的证明,并使用充满缩写的语法,包括以下内容:<=> 好像且仅当 => 暗示,向后 E 表示存在,向后 E 后跟感叹号表示存在并且是唯一的,颠倒 A 作为“For all”或“For each”限定词,一个排列中的三个点代表“因此”,另一个代表“Since”,以及与充分条件相比的必要条件的想法以及归纳证明。

  13. 代数概念,如群、环和场。这里还有逆运算、结合运算和交换运算的概念。

想象一下,如果一个教室有 30 名学生,其中 10 人接受过北美基础教育,另外 20 人每人学习上述 12 个数学部分中的一个,但不一定学习其他部分。像“图”这样的术语是否可能是多个分支使用具有非常不同含义的术语的情况,例如 (x,y) 平面中的函数图与作为图或网络中的一组顶点和边的图如何构建各种 3-D 形状的 2-D 表示?我相信那将是类似的情况。

于 2008-12-24T06:25:58.357 回答
0

我已经做了很长时间的程序员,我希望我一开始就学会了正确的系统分析。

正确分析系统和设计解决方案是创建正确解决方案的基本步骤。系统分析方法为您提供了构建的基础。这是蓝图。如果没有适当的计划,您如何构建应用程序?可以做到,但通常是一团糟。如果我有编程课程,这就是我会教的:

1.系统分析与设计。
2.项目规划(PMI研究所)使用MS Project。获得这些技能后,您可以以专业的方式从事任何编程工作。
3.创建设计的编程解决方案(VB.NET、C#、C++、ASP.NET JAVA等)。

如果你想成为一名专业的程序员,那么这些就是你需要的基本技能。不幸的是,我没有在我工作过的地方看到这些项目被强制执行。一个好的计划总是有帮助的。

于 2010-12-22T00:23:29.277 回答