在不使用计算机的情况下如何教授计算机科学?


21

在世界上的某些地方,人们通常无法访问计算机(因而对计算机知之甚少),即使可以使用,硬件和软件也已过时,并且由于停电等原因而使使用受到困扰。也往往缺少对(好)书的访问。在这种情况下如何教授计算机科学?

我担心如果无法进行实验并运用所学知识,他们将根本无法学习(好),即使他们的动机非常强烈,并且将大部分时间都花在了这个爱好上。是否可以仅在理论上讲授CS?


13
人们已经对数学着迷了数千年。那时没有人可以使用数字计算机。实际上,通常在理论课程中,您根本不需要计算机。
Juho 2014年

3
我想指出的是,第一台计算机程序是在第一台计算机建成之前大约100年编写的。
加布2014年

2
看一下cstheory。这些人很可能只需要纸和笔,这可能是计算机科学中最高的(我不知道他们大多数时候在谈论什么)。
Trylks 2014年

1
如果您突出显示您打算涵盖的CompSci领域,可能会有所帮助。离散数学甚至数据结构或算法之类的东西都可以单独用笔和纸覆盖。另一方面,软件工程可能会出现问题。
NotMe 2014年

1
@abhimanyu太好了,在我发布答复之前,问题已得到“保护”;我现在把它放在这里:pastebin.com/6tbMtVM8(这是一个很长的答案,因为可能性应该很明显,但似乎没有。可能有很多想法,希望您能找到有用的东西……)
没有人2014年

Answers:


24

询问如何在没有计算机的情况下学习计算机科学有点像询问在没有望远镜的情况下如何研究宇宙学。当然,能够看待您正在研究的事物真是太好了,并且能够玩弄事物通常非常有帮助。但是,您可以在没有计算机的情况下做很多事情:在极端情况下,您几乎可以在没有计算机的情况下完成所有本科课程。

实际上,访问计算机有助于巩固您在计算机科学课程中学到的很多知识。显然,使用计算机可以使编程课程更加自然。另一方面,被迫在纸上编写代码确实会鼓励人们思考他们的代码并确保它确实有效,而不是仅仅一次又一次地通过编译器运行直到编译,然后再一次运行琐碎的测试用例。直到明显的错误消失。

如果没有计算机,最自然的主题将是数学性更高的主题。所有背景数学,例如组合数学和概率论。可计算性,形式语言,逻辑,复杂性理论,算法设计和分析,信息和编码理论。与量子计算有关!


11
+1 CS和编程之间的区别是关键!我的本科CS课程对使用计算机的要求最低,除了可以访问在线阅读材料之外,我可以很容易地在图书馆中以枯树的形式查找这些材料。
Cosmic Ossifrage 2014年

4
@CosmicOssifrage我同意,但是,尽管CS不是编程,但是编程是计算机科学家可以使用的非常有用的工具。这就是为什么我们教它。
David Richerby 2014年

2
@Abhimanyu这将取决于您自己的资格。如果您拥有知识和技能,那么它们就只是您的学生头脑之外的黑板。
拉斐尔

2
@vzn不,编程的很大一部分是学习调试的技巧。这很重要。但这不是计算机科学
David Richerby 2014年

2
@vzn如果您引用此人,请正确执行。他谈论的是运行时实验,目的是验证/驳斥(科学的)假设,而不是调试。我认为Sedgewick从未声称测试/调试实验性实现是科学
拉斐尔

10

纸和铅笔的用途很明显。当我学习信号处理时,我们无法直接使用特殊的信号处理器,我们只提交了纸质报告。

请注意,伟大的计算机科学家Dijkstra显然并没有使用太多计算机:

1972年以后出现的该系列几乎所有文章都是手写的。在发明了许多软件技术之后,Dijkstra数十年来一直在自己的工作中避免使用计算机。即使在他屈从于UT同事的鼓励并购买了一台Macintosh计算机之后,他仍然仅将其用于电子邮件和浏览万维网。

引自Disjkstra的纪念馆

这表明您无需计算机即可完成出色的计算机科学!

除了纸和铅笔计算机科学问题,也可以“在现实世界中”解决,例如,由萨皮恩蒂亚大学(Sapientia University)演示用卡片或更不寻常的卡片分类算法。


关于如何有效执行此操作的任何建议?在大型大学里,老师可能没有黑板粉笔讲座的好处。
拉斐尔

3
很多数学都是用粉笔黑板上的。我想您只是对计算机科学做类似的事情。
FinnÅrupNielsen 2014年

例如,以下是有关
八字

2
我个人将自己的数据结构和算法知识应用到暑期工作的办公室。我在支票存根的盒子上使用了基数排序,并且比其他做杂事的人快了一到两个数量级,这令人难以置信。我对需要归档的印刷卡使用了自然合并排序。 数据结构和计算存在于现实世界中
JDługosz

8

许多计算机科学理论纯粹是理论上的,可以使用钢笔和纸来解决。获取有关它们的信息并将其传达给外界需要一台计算机。


5
这让我印象深刻。
拉斐尔

7

有关一些很棒的想法,请参见http://csunplugged.org/。Google是赞助商之一。

从站点:

CS Unplugged是免费学习活动的集合,这些活动通过使用纸牌,绳子,蜡笔和大量跑来跑去的有趣游戏和拼图来教计算机科学。

这些活动向学生介绍了基本概念,例如二进制数,算法和数据压缩,与我们通常在计算机上看到的干扰和技术细节分开了。

CS Unplugged适用于所有年龄段的人,从小学到老年人,以及来自许多国家和背景的人。Unplugged已在世界各地使用了二十多年,用于教室,科学中心,家庭,甚至用于公园的度假活动!


条件很复杂,但是在资源允许的情况下值得尝试。
Abhimanyu 2014年

我同意这看起来不错,但是为了做出正确的回答,您需要解决问题中提出的特定问题:需要哪些资源?我们可以期望在非洲(农村)拥有它们吗?
拉斐尔

3

您可以,很明显如何进行。我不确定这对人们有多大用处,但您可以。

但是我什至不知道计算机科学老师会如何,不会问你如何在没有计算机的情况下教授计算机科学。

因为如果您可以教计算机科学,那么您就会知道。

如果您知道-

-Algorithms can be written on pen and paper, and traced on pen and paper.
-Flow charts are written on paper.

研究归一化,可以用笔和纸完成数据库数据表的结构。(当我研究关系数据库时,我只是在笔和纸上这样做的)

计算机科学教科书不需要计算机。

如果您曾经读过一本计算机科学教科书并在图书馆中学习过,您会知道您不需要计算机就可以理解它。

但是您应该知道,任何参加过计算机科学课程的人都可以看到大多数人无法编程,这超出了他们的范围。对人来说太抽象了。在大学水平上甚至如此。

http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf

在英国每所大学的入门课程中,绝大部分学生都未能通过。尽管进行了英勇的学术努力,但这些年来,这一比例有所增加而不是减少。尽管对教学方法和学生反应进行了大量研究,但我们不知道原因。

我要补充一点,称其为少数,是轻描淡写。可以编程的人很少。

但我要指出的是,他目睹了下降的原因。随着计算机的普及,例如在2000年至2010年之间(他在那十年中写道),越来越多的人对研究“计算机科学”感兴趣。在此之前,只有更多狂热的人感兴趣。在更早的时候,使用计算机更具技术性,但是随着计算机对普通人的使用变得更容易,并且在他们可以运行的应用程序中变得更加强大,那么越来越多的人正在使用它们,而更多的人只对他们的工作感兴趣而不是他们如何做以及如何做。


2
什么是“狼”?
Nate Eldredge

1
@NateEldredge 城市词典:«有人快活任期谁或者说做一些愚蠢/有人谁增加了2和2得到5‘什么wolly’»
保罗·克莱顿

@NateEldredge通常拼写为“ wally”。
David Richerby 2014年

2
夸大OP并非答案。
拉斐尔

2

没有计算机,就可以教授计算机科学的概念。当然,如果没有计算机,学习计算机科学的真正好处是什么?

当我在高中学习计算机科学时,我们的前几节课根本没有涉及计算机。相反,我们从一本名为Karel ++的书中学习,该书教授了面向对象的概念。组合语言可以很容易地在白板或黑板上“运行”,因为所有代码都在图形上执行操作。我们最初的几项作业都是手写的,教授将在下一堂课开始时在黑板上演示正确的解决方案。

当我们开始讨论算法时,我们的教授打电话到会议室的最前面,告诉我们站成一排。他继续演示了几种不同的排序算法-从他称为“猴子排序”的愚蠢的东西开始,他将随机交换我们两个人,然后检查是否每次迭代都对我们进行了排序,然后执行气泡排序外壳排序 -在我们身上“奔跑”他们。

他在板上绘制了图表,解释了计算机内存和堆栈如何工作的基础知识。他演示了变量和指针(这是一个C ++类),并从那里到链表和树。

如果我回顾了我在那堂课上记下来的笔记,我可能会补充一点,但这就是我现在所记得的。如果这些建议很有趣,我可以扩展这个答案。


1
您似乎将编程(技巧)与计算机科学相混淆。
拉斐尔

@Raphael我了解使用特定语言进行编程的技巧对于科学部分而言可能并不重要,但是在计算机科学变得理论化以至于可能对甚至不熟悉的学生无法理解之前,您能真正地将计算机科学与编程相分离吗?如何操作电脑?我可以更改答案以将两者分开,但是基于OP的问题而浮现在脑海的图像不是成年人,他们不是想学习复杂性理论的数学基础,而是要求学年级的学生介绍CS的应用。
Blackhawk 2014年

@DavidRicherby我已要求OP澄清目标学生群体是谁(年龄/计算机经验)以及他打算教什么材料。我将相应地调整答案。如果可以的话,我建议一个更直接的类比是创造性写作,而不是知道如何使用字母和词汇。除非类比不足,否则因为计算机科学实际上涵盖了编程语言的研究。
Blackhawk 2014年

@Blackhawk当然,没有比喻是完美的(几乎是按定义)。但是,尽管编程语言的设计是CS,但不能简单地使用它们。
David Richerby 2014年

1
@DavidRicherby我刚刚阅读了CS的游览页面,特别是“询问...”和“不要询问...”,我的印象是,太多人在此站点上询问/回答问题,这样会好很多...所以,如果我对此做出了贡献,我深表歉意。您能否向我指出我可以更改此答案的具体内容,以使其与网站的目标保持一致?我怀疑我至少应删除对“分号”和“ C ++”的引用,但是如何将Karel ++用作面向对象语言概念的教学工具呢?还是计算机内存?
Blackhawk 2014年

2

我获得了计算机科学学位,并且认为我们被教导了很多编程(各种语言),还被教导了许多数学方面(以及一些硬件)。

数学部分对于第一年更重要-考虑矩阵数学,这对3d图形至关重要(如何计算用于照亮顶点的表面法线?)。我们进行了大量统计-考虑作业吞吐量分析,您可以在系统阻塞之前将多少作业传递给系统?对于许多集中式系统和网络而言,这非常重要。

您可以教很多算法,这里提到的一张海报给学生一个数字,然后让他们使用各种算法(主动的和信息性的)对自己进行排序。实际上,可以用这种方法来教授可以在互联网上的动画图像中描述的任何算法。同样,计算基础- 程序计数器,累加器和寄存器可以用相同的方式或在纸上进行教学。以学生为基础的多线程处理方式-在一组经典的多线程练习(或1个共享的问题)中,为一组学生设置一个纸牌游戏,每个学生之间都有一个堆栈。或者说设计模式,我认为黑板体系结构非常适合学生学习如何实现多进程通信,或者描述为一种中国耳语游戏或有限状态机的n层体系结构适合学生扮演。 “生活计算机”中的模块。您可以教授二进制数学或基于堆栈的(即反向抛光)执行。

当然,如果您可以使用电子产品,则可以使用运算放大器来构建模拟计算机。他们很棒。

不幸的是,所有这些似乎更像是数学,而不是计算,但是它会持续很多,有一天他们会明白为什么要教它(假设他们进入了计算行业)。请记住,任何一台计算机可以做的,一个人可以做的-它会只是把他大量的时间和无聊来达到同样的效果。您只需要举一些简单的例子来演示计算机的功能,并想像一下,以一种不太干的方式描述计算基础,就可以追溯到:)


1

询问如何在没有计算机的情况下学习计算机科学有点像询问在没有望远镜的情况下如何研究宇宙学。

我主要是为了回应这个陈述而回答,因为我强烈不同意其他答案。我认为正确的比较是

询问如何在没有计算机的情况下学习计算机科学有点像询问如何在没有宇宙的情况下学习宇宙学。

计算机科学是关于计算机的,而不仅仅是使用计算机。的确,许多计算机科学都是基于数学的,因此无需计算机即可学习数学部分(因此您要教数学)就像代替宇宙学一样,您可以学习物理学,一旦宇宙出现(或可以使用望远镜),但最终您仍在学习物理学。

现在,每个人在这里所做的回答都表明,本科学历的计算机科学在很大程度上是理论性的,不需要计算机,恕我直言的人们忘记的是,直到那时,同一个人已经广泛使用计算机。没有自然的理解,直接钻研理论知识只会导致许多学生放弃或者对计算机科学的看法极为不匹配。因此,请教一些程序设计,首先了解什么是计算机,然后才了解理论。

就像我要在非洲教授一般水平的知识外不懂计算机但又渴望学习高级计算机科学并将大部分时间投入到这一爱好的学生一样?

取决于预算:

  • 几乎没有预算如果您有钱去非洲旅行,请抢一堆arduino克隆(有一些功能正常的arduino克隆,价格为13美元,例如查看此列表),一些输出组件(例如LED)和一台笔记本电脑。从一些基本的编程开始,在纸上教给他们,然后在笔记本电脑上输入。这不是最有效的方法,但是它将至少教会他们关于什么是计算机的基本基础知识。
  • 低预算购买$ 750美元的$ 50的Android智能手机和键盘(键盘的MicroUSB或蓝牙键盘,请检查ebay.comaliexpress.com为智能手机和键盘两种)。是的,他们以一百万种方式cr脚,甚至不告诉我。尽管如此,您仍可以在它们上输入数据(尽管甚至不考虑使用屏幕键盘),并且有适用于Android的简单编码应用程序。每个智能手机有多个学生,这可以很好地工作。

因此,我要说清楚,我并不是说没有计算机就不能教授计算机科学,只是您需要习惯计算机并且对计算机非常了解之前,您才应该开始考虑这样的事情。


我或者误解了您对我的回答的不同意见,或者我不同意。如果我们知道没有宇宙,那么宇宙学就是一个虚构的东西。如果我们真正相信宇宙的存在,那么宇宙学在最坏的情况下就是本来是对资源的故意浪费。但是,实际上,我们知道它的存在。没有望远镜的宇宙学说:“嘿,我本周无法观察到宇宙,但它肯定在那里。我现在就可以了解到它,下周再来看看。” 没有计算机的CS会说:“嘿,计算机确实存在,所以我现在可以学习它们,以后再实际体验。”
David Richerby 2014年

在没有人使用或几乎不了解计算机是什么的情况下,教某人计算机科学也是如此。您不会直接通过望远镜与宇宙互动,这只是多种观测方式之一。到了晚上,仍然可以看到它,并且可以很容易地从根本上理解它。同样的情况不适用于计算机。
David Mulder 2014年

我完全不同意教别人真正地存在但他们没有经历过的事情。
David Richerby 2014年

2
@DavidRicherby:您和这里的其他人非常习惯于使用计算机,很难理解在没有计算机基础的情况下尝试教某人计算机科学的真正含义是什么...我知道确实有某门课程的人对于从未将计算机与实际计算机结合使用的年轻人……他甚至没有尝试教授编程或计算机科学,并且只是对计算机的基本理解,如果您不长大,这是它自己的任务与计算机。(续)
David Mulder 2014年

2
如今,随着更多的年轻人至少有一些经验,这相对容易一些,但是问题是关于那些根本没有经验的情况。那个人告诉我,在他所教的国家里,有一段时间中学的学生会在不接触计算机的情况下上大学的信息学课程。。。大多数(到目前为止并非全部)结局较差的案件。问题/想法是计算机工作报酬高,所以无论如何他们只是想得到这些...
David Mulder

1

计算机科学是关于算法的,而不是(严格地)关于计算机(和电子)的。

这样,对算法(甚至是基本算术)的研究可以带来对计算机科学和编程的理解。请记住,甚至“算法”一词也是一本算术书(旧书报》,约9美分,公元9世纪)作者的措辞。

对算法的研究可以使用基本手段完成,但应涵盖算法的工作原理,产生的方式以及如何实际证明其正确工作的内容。

不可低估计算机科学,算法和程序设计背后的历史。例如,Babbage / Ada的计算器,Enigma机器,Konrad Zuse的plankalkul,ENIAC等。

然后可以引入编程(和编程语言)作为形式化算法的一种方式。这也可以使用基本手段来完成(在很大程度上)。

注意,一些研究表明,peole学习编程在理解上有两个主要困难(与符号重载有关,例如赋值与相等性测试以及RAM机器的操作)。

  1. 循环构造(例如for,while等)似乎很困难
  2. 分配与平等测试似乎也很困难。

因此,可以确保人们清楚地理解和理解了这些内容。

而且,如果可以访问任何计算机(甚至可以编程的计算器),也可以用来提供应用示例和动手经验。其他人可以使用模拟计算机。这可以通过多种方式来完成,例如,一群人可以模拟计算机的各个部分,而班级可以设计算法来解决该模拟计算机的各种问题并查看其运行方式。这也可以看作是一种游戏,具有创造力和创造力。

然后,可以引入一些(抽象的)计算模型(例如Turing Machines),并将其与先前有关算法和形式化的材料(一种编程语言)相关联。

如果要介绍一台实际计算机的电子设备,也可以分为两个部分。

请记住,即使在大学中,一些电子和计算机体系结构课程也是理论性的(实际上并没有接触过CPU或设计课程)。

因此,可以介绍与计算机体系结构有关的电子(和基础物理学)操作的一些原理(半导体,固态能量区,p-np门等)。

然后,您可以利用先前有关编程和算法的材料,并介绍行业中使用的(现代)CPU设计(和描述)技术(逻辑门触发器FPGAVHDLCMOS电路等)。

这可以进一步考虑到CPU设计架构问题,例如并行性,流水线,高速缓存,矢量地址,微编程,DMA等。

好吧,也许这可能太多了,但可以使答案自成一体。


-1

您要教编程吗?

小时候,我们去野营度假,我随身带了计算机手册。我能够用纸和笔写一个简单的游戏。

我猜这是我的第一个实际程序,因此涉及很多学习。我知道自己想做的事,但是当我发现它的时候有很多错误的开始。但是最终我能够写出整个代码。

我想我想说的是从伪代码和/或流程图开始,以计划项目,然后转换为代码。只需阅读即可调试很多代码。您也可以在此处使用同行评价。


我肯定会使用伪代码而不是流程图。
David Richerby 2014年

每个问题应为这个问题提供多个经验数据点。
拉斐尔

-2

回想一下以前的答案:阅读和做纸笔练习可以学到很多东西。如果您可以在纸上解决问题,那么您将很难接受。但是,我也想提及存在相当便宜的方式让学生接触CS。您是否熟悉 Raspberry Pi项目?即使需要共享几个人,或者您只能负担1个或2个单元,这仍然值得考虑,可以让您的学生接触到该技术。


这不会在现有答案上添加任何内容。
拉斐尔

1
@Raphael True,不过请注意,其他有关廉价计算设备的答案都在此之后发布。
David Richerby 2014年

-3

我将尝试稍微摆动一下并“在框外思考”。配备齐全的计算机确实很昂贵,有时资源需求很大,而且维护起来很棘手。但是,有许多廉价的电子系统可以模仿功能成熟的计算机,例如带有LCD屏幕等,并且可以应用许多基本的编程原理,许多电池供电。EE原理与诸如建立二进制逻辑电路之类的计算也有着紧密的联系;如今,某些玩具也具有可编程能力。

  • 可编程计算器。有些内置了完整的编程语言(不是那么高级,但更像汇编语言)。有些会支持高级程序。

  • Raspberry pi小型计算机/微控制器是为此目的而开发的,并运行linux。在许多情况下不到40美元。

  • 视差STAMP套件微控制器需要USB连接,但也许Raspberry pi就足够了。另请参见PIC微控制器

  • 机器人系统。有许多便宜的具有一些可编程逻辑的逻辑。乐高机器人思维风暴/ nxt是最好的机器人之一,而且价格便宜。

  • 一些游戏机内置了编程原理。例如Little Big Planet内置了惊人的编程功能。有一些掌上游戏机版本。有许多关于复杂结构的youtube视频可供您借鉴。

  • 智能手机是新的编程世界。他们有运行javascript的浏览器,并且有许多与编程相关的应用程序,甚至可以通过Internet连接(包括wifi)浏览编程站点。

还建议在构建TM程序(例如添加等)并尝试手动跟踪它们的注释中提出建议。


2
我怀疑无法访问计算机的人也无法访问乐高Mindstorms,游戏机游戏系统,智能手机或wifi。
David Richerby 2014年

一个公平/明显/预期的观点,但问题标准中没有明确排除任何提及。从问题中不知道学生是否没有东西,因为它昂贵,而且上面列出的所有东西都比台式计算机便宜。买得起教科书的学生或学校可以付得起以上费用(也许可以分享)。如果课本负担不起,那么还剩下什么呢?
vzn 2014年

(自撰写此答案以来,mod极大地改变了fyi的问题范围,对我而言,问题编辑做出的主要假设并非原作者所希望的,并且更倾向于将原义作为功能而不是错误)
vzn 2014年
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.