对于今天的学生来说,入门课程有哪些好的任务?[关闭]


25

我定期教授使用Java编程课程简介。我想给我的学生一些激动人心的作业,他们可以与之联系或找寻有趣的事物。至少,我希望分配的指令有意义并具有内部凝聚力(例如,某些非常糟糕的编程练习似乎是人为设计的,因此您必须使用所介绍的最新编程构造)。

为了让您对范围有所了解,这里介绍了以下内容

  • 分配必须使用Java,可以使用一些外部库来完成,但是它必须是简单的API而不是完整的框架
  • 变量,基元和字符串
  • 控制台输入和输出
  • ifforwhile
  • 算术和逻辑运算符
  • 带有线条和形状图的简单图形
  • 静态方法
  • 一维数组

学生不会进入高级主题(例如,不递归,不强调继承)。因此,我不是在寻找复杂的项目:“让他们编写C编译器。我5岁时就做了,这是我学习的唯一方法!”

如果您有比范围更高级的想法,请将其发布在下面链接的“具有挑战性”的问题上,而不是此问题上。

相反,我正在寻找的有趣的想法可以在一个简短的程序中完成。例如:

  • 学生可以编写控制台版本的“星球大战名称”生成器。这实际上是读取Strings并使用substring,但我认为这很有趣。类似的变化是“ Mad Libs ”程序。我在五年前使用了此功能,也许它已经“过时”了。

  • 使用提供给他们的一些三角架,学生可以绘制规则的多边形,并创建有趣的螺旋形状。

  • 使用一些简单的动画类以及提供给他们的大多数代码也不是没有问题。而且,如果您知道可以通过简单的API访问的Twitter或Facebook服务,我将非常感兴趣。

请注意,该问题不同于“ 向初学者挑战Java问题 ”的问题。我并不是要挑战本身,只是很有趣。我认为,如果学生从事的工作很容易回答“为什么有人要编程呢?” 他们就会学得更好。

甚至计算每加仑英里数之类的简单问题也可能很好。虽然,如果有一种方法可以使其更相关,那就更好了。如果您从其他地方(书籍或网站)进行练习,请引用资料来源。

为了帮助您思考当今典型的新生,请查看Beloit Mindset列表,其中有许多示例肯定会让您感到老去。


出于好奇,您正在教哪个级别的学生,您认为递归和面向对象设计等主题太高级了?这些主题在我的第一学期入门编程课中进行了深入讨论。我认为,如果您尝试使课程过于简单,则会对学生造成伤害。
Mayra

@Mayra:这是针对编程课程的介绍,这是CS专业的第一门课程。我正在寻找令人兴奋的问题,供学生在头5周(甚至第一天)使用,而不仅是在最后使用。满足这些要求是一个真正的挑战(并且相信我,有些问题是我无法控制的),因此,我正在寻求你们的帮助。
Macneil 2010年

Answers:


9

考虑到这些限制,我建议实现一个版本的Hangman。这将使学生能够演示您向他们介绍的所有技术,而不会过于复杂。

随着课程的进行,它也可以用作开发项目。例如,一旦您覆盖了字符串,并且变量以文本版本开始

例如

You have 10 guesses left.      * * * E * * T
What is your next guess?

然后引入循环以从代码中删除剪切和粘贴元素,直到10个猜测倒计时...逐渐形成线条图形,并在5周的课程结束时悬挂/保存棍子人。

像大多数其他具有招聘和面试程序员经验的人一样,这确实使我感到畏缩,即大学需要这种水平的学费,但可惜的是,在学校将编程视为与之相当的严肃科目之前,可能会继续需要这种学费。数学或科学


好点子!我想我将使用这个。:-)顺便说一句,“学费水平”是什么意思?如在费用上?
Macneil 2010年

上大学之前缺少编程学费,这更让人感到沮丧。想象一下到达大学从事化学工作,并花费了第一学期有关原子,分子和电子的信息。3年时间对于理解计算机科学来说太短了。
Michael Shaw 2010年

我真的很喜欢这个想法,不需要复杂的图形就可以在命令行上很好地完成。这很有趣,而且不是另一个数学问题解决器。
Joppe

7

听起来像文字冒险游戏可能是一个学期中期的绝妙任务。我上过一堂课,让我们玩《巨大洞穴探险》,然后自己做游戏。早期它教会了我许多基本的构造,让每个人都参与其中非常有趣。


2
听起来很有趣,但请保持小巧。

7

如何使用http://projecteuler.net/中的一两个问题, 其中一些非常有趣,并且可以看到编写程序来解决这些问题的好处。它们足够小,可以分配几个任务。我想使用的另一个功能是找到$ 1.00的单词。字母编码字母中的每个字母都值得以美分计价,即a = 1,b = 2。您可以找到多少个$ 1.00美元的单词?这可能涉及文件I / O(在字典中读取),数组,循环等。


1
欧拉专案+1。很酷。尽管其中一些问题过于先进,但许多问题并非如此。
Macneil 2010年

我喜欢欧拉计画,但是我不确定如果我上大学时会不会很有趣。
奥利弗·韦勒

并非所有人都不会很有趣,但是有些我认为我们是不错的选择
Gratzy

6
  • 实施大富翁游戏。垄断具有明显的顺序,很容易将其划分为功能子。它也只需要一维数组和一些基本类。逻辑很简单,以至于学生将更多地思考“如何”而不是“什么”,从而可以向他人展示一些东西。

  • 给他们一个加密的文件,该文件使用一些可逆的规则加密,然后要求他们编写一个解码器(不过要使其足够简单)。由于存在有关消息内容的神秘性,因此这给了解决它的额外动力。

  • 我不知道为什么只覆盖一维数组而不覆盖矩阵(它们实际上并没有什么不同),但是如果您愿意将其包含在教学大纲中,乔恩·康威(Jon Conway)的《人生游戏》也相对容易,并且会产生一些结果好玩

  • 像国际象棋这样的游戏需要一些思考,但是仍然处于初学者可以通过最小继承(特定片段从通用类Piece继承,并且棋盘容纳Piece类型的对象)可以做的范围内,以及2D数组(您可以选择无需实施硬性检测(例如,如果敌人的碎片威胁着小径,则无法实施硬脂酸检测或无法防御)来简化此操作)。


为“大富翁”游戏建议+1。对于2D阵列,我绝对同意它们可以导致非常有趣的任务。但是,有一些限制使其无法使用2D阵列(例如,教科书已经修复,还有十亿其他我不会厌烦您的教职政治问题,也不会因为这些问题而引起我的个人意见)问题超出了我的控制范围)。
Macneil

啊,我们必须在学校创建一个垄断游戏。还有一个加密断路器。
卡拉

+1表示垄断。一旦学生对代码进行了编码,请他们生成在各种属性上着陆的概率。这些知识确实在策略上有帮助。
joshdick 2010年

4

我们在学校创建了许多仅具有I / O,功能和条件运算符的项目。在我们学习了面向对象的编程之前,已经完成了所有工作。这些项目进展缓慢,难度越来越大。可以说,到今年年底,我们每周只有4个小时还远远不够。

所有这些项目都是通过功能和I / O完成的:

  • 一个学习的游戏。您拿了一些木棍,电脑拿了许多木棍。重复。最后一个拿着棍子的人松了。我们必须创建一个简单的自我学习程序,该程序在每次游戏后都会变得更好。学习2D数组的好例子。

  • 一个代码破坏者。您知道Caesar加密技术,选择一个字母并将该字母的值添加到单词的每个字母中。例如key ='a'和单词=“ secret”。这将成为“ tfdsfq”。可以通过读取文件,然后为每个字母创建频率表来完成。您还阅读了英语圣经。然后,您可以简单地看到英语字母中最常用的字母是'e'并将其解决。附加的挑战:使用像“ ab”这样的键来分配我们的任务。锻炼身体以了解I / O。

  • 条码机。该程序是调用外部库的练习。您有一个代码,必须使用条形码生成图像。使用外部库生成图像。

  • 一种解决旅行商问题的遗传算法。这是一个供2至3人使用的更高级的项目。您从一条随机路线开始,直到您有了一条“好的路线”为止,这条路线一直在不断改善。奖励:使用路线创建地图。

  • 正在运行的lzw压缩程序。这是最后的4人项目。参数非常简单。“ Zip file.txt file.zip”或类似名称。有趣的项目,但了解lzw算法花了一段时间。


非常有趣...您去哪所学校?这是您第一年的全部吗?
Macneil 2010年

这是一门为信息工程专业提供热情的课程。那年之后,您仍然可以更改您的专业。学生确实知道基本的循环,对屏幕/文件和功能有一些输入/输出。
卡拉

3

计算器对于学习算术运算将是一个很好的项目。您可以使其成为基于菜单的简单控制台应用程序或GUI。四个功能(+,-,*,/)开始,带有加号以表示更复杂的事物,例如平方根等

对于字符串处理,我建议一些验证问题。想到电子邮件地址-取消选中它们会导致SQL注入漏洞或其他问题,并且它们相对容易验证。对于追加,也许有一个程序可以使用名字,中间名和姓氏,并用空格将它们串在一起,还可以使用一个全名并将其解析为每个组件。在现实生活中,第一种用法比第二种用法更多,但是我无法想到另一种足够简单的解析方案。

为了演示静态方法,您可以分配一个电子邮件查找问题。有一个包含名称和电子邮件的文件,静态构造函数可以将名称/电子邮件放入列表,并使用静态方法查找给定名称的电子邮件。

希望这些能给您一些想法!祝你上课好运。


1
+1谢谢!这正是我正在寻找的答案。
Macneil 2010年

游戏比计算器更有趣。

3

一项非常有趣且有趣的事情是用2D 编写Conway的《人生游戏》的实现。它很好地映射到基本的数组数据结构,虽然很有趣并且很容易实现,但是仍然需要一些思考。它也可能带来一些好奇心和实验(AI)。

高年级学生可以用3D语言编写一个版本,以获得加分。


3

我将遍历素数生成器。

作业

  1. 打印从1到100的素数。
  2. 将素数从输入1打印到输入2。
  3. 记录和打印主要生成的性能数据。
  4. 图形化总理生成的性能数据。
  5. 迭代素数生成器的算法优化。

2

我正在使用ACM库来帮助入门学生做简单的图形和游戏。我们已经能够制作基本的,两人点击的游戏,仅需您概述的技能即可。这周他们在做《狐狸与猎犬》游戏。

我一直在尝试尽可能远离控制台I / O。如今,对于许多学生来说,这是一个陌生的概念,因为他们都已经使用GUI成长了。因此,我将重点放在MVC上,使模型正确,并仅在他们测试了模型之后才添加GUI。通过自动化的单元测试和BlueJ中的Code Pad完成测试。public static void main()永远没有必要。


有趣。也许您会在文章或博客文章中写下您的经历?

2

我在上个世纪讲授了入门课程,它是BASIC,但是像您一样,我想让学生们进行自己设计的有趣项目。所以我提出了很多可能性:

  • 简单的冒险游戏,例如Wumpus
  • 棒球等运动模拟(仅文本,雄心勃勃的图形)
  • 科学,就像模拟遗传进化
  • 体育/科学,例如帆船比赛
  • 金融,例如为家庭中的人拥有自己的银行或投资
  • 音乐或简单的图形游戏

...或任何学生想到的。他们会来找我说:“ XYZ程序如何?” 我总是说“很棒”,然后也许指导他们一点,不要使其变得过于复杂。

通常,他们的项目最终需要几百行代码,而他们一直都很喜欢。

PS我是在学生熟练掌握基本控制结构,I / O,阵列和顺序文件之后才进行此作业的。这是一个学期项目,是他们年级的主要部分,我有一些中间的里程碑任务,就像概述过程中的大纲一样,因此他们并没有尝试全部完成并最终碰壁。我想让他们尽可能早地在学期开始学习,那时他们有足够的技能开始学习,通常在第6周或第8周左右。


1

我有一位老师编写了一个您为之编写模块的程序。基本上,这是一个游戏,您必须编写算法来解决它,所有东西都可以使它图形化,美观并且可以很好地工作。也许您应该编写自己的游戏框架,并为他们提供基本工具,这些工具是您可以稍后将其放入盒子之外的出色工具的精简版。


1

在我的入门课程中,我遇到了三个项目

编写程序以显示随机的蒙德里安绘画
编写BrickBreaker游戏的第一部分,使球在设定区域内弹跳
编写基于文本的冒险游戏

从我的算法课程中
实现Serpinski三角形

这四个项目使我对字符串处理,随机化,图形,递归和动画有了很好的理解。


1

CS班的所有学生都是吗?我的猜测不是。我会提出适合班级专业的作业。

例子:

  • 艺术专业的学生可以编写一个程序,该程序采用一块画布的尺寸,并计算出一个框架来计算该画布的绘画量(由于将画布包裹和装订在框架上),因此无法进行绘画。

  • 经济类学生可以计算项目的复利。

  • 数学专业的学生可以从欧拉计划中选择问题。


1
该课程适用于专业和非专业。许多人从事生物学。
Macneil

有趣。想法:找到一张在水中游动的单细胞生物的图片。将图像转换为黑白。编写一个程序来计算水中的生物数量。这将带来各种有趣的讨论主题:边缘检测,区分水和非水,除尘等之间
巴里·布朗

对于生物技术而言,显而易见的显而易见的是细胞自动机。您可以在bioquest.org上掠夺一些想法。
Kavet Kerek 2010年

1

在高中时,我参加了入门编程班,我们使用了Karel J. Robot。它提供了用于查看机器人的gui,并具有一组非常基本的传感器和移动方法,您必须对其进行扩展才能使其变得有趣。我认为这很好,因为对于尚未掌握软件之间差异的人来说,机器人很容易理解。

还有我刚刚发现的Processing,它最初是设计用来教授编程的,它也是用Java编写的。


0

我将成为这里的反对者。我认为您应该给他们有效的业务类型问题,而不是解决玩具问题。如果他们不够认真,没有兴趣和动机,他们实际上会以专业人士的身份从事这类工作,那么我宁愿您在入门课程中也没想到他们。真正的工作不是制作精美的东西,而是满足客户的需求。我也看到很多人无法在游戏中学习到在业务编程中使用相同技术之间取得飞跃。

我认识的每个高级开发人员和招聘经理都对应届毕业生的素质感到厌恶。尝试着重于他们在现实世界中学习工作所需的知识,而忘记使其变得有趣。


我认为许多学生会发现商业问题很有趣。如果您可以提出一些具体建议并改善您的答案,那将会有所帮助。我正在寻找细节。
Macneil 2010年

1
他们不能(轻松)在TI-83计算器上这样做应该是一个问题。另一个税收计算器不会削减它。
巴里·布朗

1
这些学生是编程的新手,需要在本课程中迈出自己的第一步。使其变得无聊可能不是教他们如何编程的最有效方法,我们应该看最好的老师,而不仅仅是让他们从头到尾地背诵Java规范。

1
不。这些项目首先应该很有趣。有趣的项目可能很困难。实际上,我的大多数宠物项目都比我在工作中所做的日常编程难。
卡拉

2
我明白您的意思,但我至少部分地,并且至少在入门课程方面,我表示不同意。一个人可以采用多种编程方法,而我认为这样的课程应该涵盖程序可以完成的不同工作。向学生展示计算机仅对解决我们认为的“业务必需”的问题很有用,但这并不是创造性的程序员所做的事情,因为它限制了他们的思维定势。我认为,精心设计的课程除了展示计算机可以做的有趣事情(例如编写游戏程序)外,还会挑战学生解决现实世界中的问题
Nick Donohue 2010年

0

在手机上构建一个愚蠢的小部件的任务。他们可以向朋友展示的东西。我有一个价格便宜的AT&T电话,它需要某种jar文件。


0

我见过的最重要的任务迫使人们去思考他们原本不会考虑的事情。某些内容完全超出了简单的课程材料,这似乎是不可能的。具有多个有效解决方案的事物。

一些让我印象深刻的:

  1. Roshambo AI(在UOA的AI课程中使用)。一个简单的函数,返回石头,纸张,剪刀的-1、0、1。认可机构相互对立,并通过汇总的实用程序收集统计信息。这项任务不断使人们惊讶,有多少种方法可行(以及有多少种方法的效果如此差)。

  2. 具有不可能特性的简单分类问题。用有限的内存对无限长的文件进行排序。这个问题动摇了我思考算法的基础。有许多相关的问题:无限长数据上的加窗平均值等,每个均迫使解决方案似乎是不可能的。

  3. 看起来微不足道的模拟问题。交通模拟(车辆,网络),赛车模拟(左,右,更快,更慢),杂货店模拟。

  4. 网络问题(在过去几年中与我合作的毕业生中有很大的缺点)。手持设备的对等网络问题,例如,证明n同步问题,对等更新,对等信任的复杂性。

  5. 语言很少(最近的毕业生的另一个弱点)。为简单的游戏AI(跳棋,roshambo,坦克,CSS mojo,Twitter机器人)开发一种语言。思考语言设计,解释和动作的概念是基础。


纸,石头,剪刀的AI是否知道结果,还是看看历史是什么?
Macneil 2010年

是的,可以在C示例中通过数组获得历史记录(但它同样适用于Java,Ruby等)。请查看原始比赛页面:webdocs.cs.ualberta.ca/~darse/rsbpc.html
Bruce Alderson 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.