向非程序员展示解释什么编程“看起来像”的好例子是什么?

时间:2009-12-20 20:28:57

标签: programming-languages

40 个答案:

答案 0 :(得分:49)

BASIC

10 PRINT "Sara is the best"
20 GOTO 10

更新:当我12岁时,我的堂兄(他14岁)带来Turbo Pascal 7.0并将其安装在我的电脑中。
他从零开始编写了一个tic tac toe游戏(在BGI模式下,对于那些知道的人) 我一步一步观察/观察一个程序如何演变,直到它成为一个完整的应用程序 在那之前,我只知道如何在BASIC中打印字符串:-B

你可以做类似的事情。结对编程。嗯,实际上你的朋友将是观察者,但她会得到一个想法;)

答案 1 :(得分:40)

为什么不考虑一种不存在的语言(或者,如果您相信的话)并使用Pseudo Code?我认为,取决于你想要实现的目标 - 我会考虑这个人所熟悉的任务示例,但我会将其划分为伪代码示例。

在向非程序员解释事情时,我通常会发现“烹饪”或“食谱”的想法非常适合。

我要求这个人想象他们的配方相当复杂 - 例如咖喱&米饭。然后我建议他们应该尝试把它写下来,让那些完全不知道他们在做什么的人,这样他们就可以做饭了。

有一个非常明确的阶段:

  • 收集工作的成分和工具。
  • 准备食材。这很复杂。例如
    • 得到3个小红辣椒。
    • 对于每个红辣椒,将其切成约1平方厘米的块。
    • 将红辣椒块放入碗中以备日后使用。
  • 单独对此,调用准备米功能,并在继续烹饪的同时在背景中异步工作。

我相信你可以看到它的发展方向......;)

与烹饪和编程有许多相似之处(因为有很多东西,但更多的人对烹饪有所了解而不是建造房屋)。 阶段/相似之处(如我所见)是:

  • 收集 :(声明实现目标所需的内容并将它们组合在一起)。
  • 准备:切碎配料或准备首先使用的数据连接对象等。
  • 异步:能够让另一件事情继续下去。
  • 功能:制作米饭,煮鸡肉和咖喱烹饪都需要单独的过程,最后只能使用makeCurry(chickenMeat,rice)功能。
  • 测试:确保随着时间的推移,您不会错过任何内容,并且一切顺利进行 - 例如确保在进入下一阶段之前烹饪鸡肉。
  • 垃圾:完成后,您必须确保整理完毕。 ;)
  • 最佳实践负责人:有一些有效的方法可以做一些像烹饪一样的事情,开始程序员除了代码之外还要学习 - 有时候很难让你理解。例如D.R.Y,如何用刀和刀有效地切割不要吃生鸡肉;)

基本上,我认为将编程教学作为一般性主题 - 除非你有令人信服的理由,否则我不一定会用语言教授。相反,最初从摘要中教导,直到他们至少理解事物可能如何融合在一起的基本原理。然后他们可能会发现坐在显示器和键盘前更容易。

我认为这个可能没有一个“正确答案”。但我想也许有一些非常好的想法,你可以从中获取所有的东西。

答案 2 :(得分:34)

我会解释编程正在提供详细说明,以便计算机可以完成复杂的任务。

如何制作两杯咖啡?

  1. 加水壶
  2. 烧水

  3. 杯中咖啡

  4. 倒水
  5. 加糖
  6. 添加牛奶

  7. 再做3到6次

答案 3 :(得分:34)

直接回答你的问题 - 编程“看起来像什么”,我会向他们展示一个大型应用程序的打印件。玩具应用程序或像haskell中的qsort这样可爱的东西确实给出了错误的想法。

答案 4 :(得分:22)

A junior coder at work

看起来有点像这样。有时。

答案 5 :(得分:14)

也许每个人都过分关注代码而不是工具。可能最好在IDE中向她展示一个项目,以及它如何包含各种源文件以及一些图形化的东西,如数据库模式或可视化用户界面设计器。 Visual Studio,Eclipse或Xcode与大多数人在黑色背景上快速滚动发光绿色符号的心理形象相差甚远。

答案 6 :(得分:12)

我认为你应该下载一些用AT& T汇编语言编写的大型win32应用程序,并在记事本中向她展示,然后告诉她,“正如你所看到的,需要像我这样的超人来编程。” / p>

答案 7 :(得分:9)

为非程序员编写具有任何可理解价值的东西。如果我向我的母亲展示Quicksort,它将毫无用处。

询问此人他的兴趣。例如,如果他/她进入证券交易所,那么将一个脚本从一个适当的网页上读取一些股票统计数据并将它们编译成一个excel表(使用csv,以避免重大的脑损伤^^)或者可能成为一个漂亮的图表

如果此人使用Twitter,则会对其关注者的关注者或类似内容进行编码。

这些任务非常简单,可以在很短的时间内完成,而且它们已经使用了很多程序员使用的基本工具,比如循环,库(对于所有涉及的http内容),也许是递归。

在你完成或编码(甚至更好)之后,你可以解释你的程序如何发挥其魔力。

保持简单,用人类语言说话。如果你向他们展示兆字节的代码并谈论原型继承这样的事情,那么你只是恐吓他们,他们会立即失去兴趣。

答案 8 :(得分:8)

让我的妻子知道我做了什么来带薪水(这是真正的工作!我保证!我们不只是整天浏览网页!)我和她一起坐了一晚用Python来展示她几个基本概念:调用函数(print),分配和读取变量,以及if语句的工作原理。由于她是一名教师,我把条件的概念比作与学龄前儿童一起工作:)

IF you hit Jonny THEN you're in time out OTHERWISE you can have a snack.

在回顾了几个非常高级别的概念之后,我向她展示了一个简单的数字猜谜游戏的代码,并让她在查看代码时播放它。

# Guessing Game
import random

print("Guess a number between 1 and 100: ")

target = random.randint(1, 100)
guess = 0
guess_count = 1

while guess != target:
    guess_count += 1
    guess = int(input())

    if guess == target:
        print("Correct!")
    if guess < target:
        print("Higher...")
    if guess > target:
        print("Lower...")

print("Congratulations! You guessed the number in " + str(guess_count) + " guesses!")

除了有点抽象的“导入”概念之外,这是一个非常简单的例子,很容易理解并“连接”到屏幕上发生的事情,更不用说它实际上做了一些有趣和互动的事情。我认为我的妻子离开了这个体验,对整个概念不那么神秘,而不需要对代码的方式有多了解。

我认为关键是能够让某人看到代码并且它是最终结果。

答案 9 :(得分:7)

  1. 计算机程序员编写程序。
  2. 虽然没有编程,但计算机程序员在工作场所惹恼了有魅力的女性。
  3. ,然后

    (来源:markharrison.net

    立即
    http://markharrison.net/stackoverflow/codemonkey.png

答案 10 :(得分:7)

有一个名为LOGO的CLI图形包,以[{3}}而闻名,用于使用LT 90, RT 105等命令在屏幕上绘制形状。看看你是否能找到它,它尝试绘制中等复杂度的东西会是一种很好的体验。

LOGO - 面向逻辑的图形化编程语言。

REPEAT 360 [FD 1 RT 1] -- draws a circle, etc.

Turtle Graphicslogothings查看更多信息,其中还包含指向现代徽标翻译的链接。

答案 11 :(得分:6)

当我5岁时女儿问我一个问题,我让她“开发”了一个小箭头“机器人”的程序,这个机器人将使用类似流程图的纸片代表移动,转弯和条件让他进入棋盘的左上角。我认为它也适用于成年人。

但是,我并没有声称发明了这个答案。

关于编辑:我担心,程序员对其他人对编程的想法更不了解。 ;-)人们认为编程是一个类似矩阵的绿色视频卡腐败,就像他们认为间谍都配备了詹姆斯邦德的高科技玩具一样多。任何领域的任何专业人士在观看有关其工作的电影时通常会感到烦躁。 因为电影制作人不知道!另一方面,我们是否知道如何正确描绘电影中的节目? ; - )

答案 12 :(得分:5)

我发现“教别人什么编程而不教他们编程”的最佳方法实际上就是放弃与特定编程语言相关的任何东西。

相反(假设他们真的感兴趣),我会通过在程序中实现一个功能来谈论它们,比如一个简单的银行贷款申请(大多数人不得不在某个阶段处理贷款,如果他们高于特定年龄),然后在所有假设中挖洞。

比如,如果用户输入负贷款金额会怎么样?如果用户负担不起贷款怎么办?贷款申请如何知道?贷款申请如何知道要检查的银行账户以及要检查的支付历史(即谁实际上是用户)?如果用户试图在贷款金额字段中输入他的名字怎么办?如果用户试图贷款超过75年怎么办?我们应该将选择限制在可用长度列表中吗?

然后最后:编程正在采用所有这些规则,并用计算机理解的语言编写它们,以便遵循这些规则。在这一点上,如果觉得有必要,我会提出一些简单的代码,以便可以查看整体语言,然后用这种语言写出一条规则。

如果你可以让你的朋友做出反应,可以获得积分:但是如果我们忘了什么呢?好吧,那么我们有bug,现在你知道为什么没有软件程序也是无bug的:)

答案 13 :(得分:4)

最终使用更高级别的语言,使用图形或窗口。

为什么呢?一个非程序员通常也是一个非配偶的人,这就是为什么他不会得到排序之美。然而,在屏幕上显示一些东西(“外观,一个窗口!”,“看,这么小的打字,我们有一个3D盒子旋转!”)可以创造奇迹;)。

答案 14 :(得分:4)

工作时看起来像什么?

看起来像打字。

严重的是,编程有点像Legos是文本,并且要建立一个大的乐高房子,你必须输入很多文本,恰到好处,用正确的孔钩住正确的钉子。这就是我一般描述它的方式。

答案 15 :(得分:4)

很难从源代码示例中理解编程是什么样的,因为它太抽象了。

启动hello world没有任何问题,只要你能显示计算机实际上用它做什么。然后,您可以一次引入一个构造。这就是编程的样子 - 进行增量更改,并查看结果。

所以你有一个hello world program。现在将其更改为

string Name = getLine();
printf("Hello, %s", name);

然后if构造

printf("Do you like cake?");
string answer = getLine();
if(answer == "yes") {
    printf("Yeay! I like cake too!");
} else if(answer == "no") {
    printf("Filthy cake hating pig!");
}

然后证明最后一个程序在收到“是”或“否”以外的答案时失败,以及你将如何修复它.......

等等。我认为你不需要深入了解递归,甚至功能。

只要您能够在计算机上显示这些不同程序的结果,您使用哪种编程并不重要。 (尽管这些伪代码示例可能非常接近有效的python)

答案 16 :(得分:3)

我认为机器人技术非常适合解释编程,因为即使是简单,人为的例子也很实用。相当于Hello World或打印数字列表的机器人可能让机器人在一条线上移动或旋转一圈。非程序员很容易理解,对于机器人来说,任何有用的东西都必须首先移动并定位自己。这使您可以解释简单的程序结构和流程控制。

您希望机器人向前移动,但只有在没有任何东西阻挡其路径的情况下。然后你想让它再次转动。这是一个使用基本流控制的简单例程,而且您调用的函数非常容易理解(如果您的平台无论如何都有不错的抽象)。

图形可能也有效。任何立即的结果。 jQuery甚至,因为每个人都熟悉旋转图片和网络动画。即使是在DOM中推送元素等人为设计的例子也很容易看到效果,大多数人都会明白程序中的语句是什么以及为什么会这样做。

像Robocode和LOGO这样的东西可能真的很适合这个。

答案 17 :(得分:3)

alt text
(来源:wikimedia.org

{
   wait for 6/8;
   play F (5), sustain it for 1/4 and a half;
   play E flat (5), sustain it for 1/8;
   play D flat (5), sustain it for 1/8 and a half;
   play F (4), sustain it for 1/16;
   // ...
}

也许隐喻可能是作曲家写作乐谱的比喻。作曲家的工作是创作音乐的智力活动。通过乐谱,作曲家告诉钢琴演奏者要演奏什么,并且他通过精确的指示(音符,暂停等)来完成。如果“说明”不够精确,那么钢琴家将扮演不同的角色。

软件开发人员的工作是解决问题的智力活动(与自动处理数据有关的问题)。使用源代码,开发人员告诉计算机该做什么,并且他通过精确的指令来完成。如果说明不够精确,计算机将执行不同的操作,并且无法正确解决问题。

答案 18 :(得分:2)

感到惊讶的是,这仍然是开放的,并且惊讶没有人已经给出了这个答案。 (我想。我可能不小心跳过了无论如何都没有读过的40个问题中的一个。)

你的答案在你的问题中

  

当我还是个孩子的时候,我们曾在意大利度假。在路上,   飞行员让我进入飞机的驾驶舱。当然,我没有   学习如何驾驶飞机。但我确实看到了飞行员   世界。我知道他们如何让飞机去,飞行员是什么   实际上。

     

这就是我想做的一切。

这就是你要做的一切。从tutorial中选择一个简短的练习。由于添加了视觉效果,适度更长的GUI也可能是有益的。 (游戏可能会推动一些长度。)并且让她看你的代码。而已。它跟你的试验例子一样。

此外还有a number of online REPLs可让您更快速地观看代码。

答案 19 :(得分:2)

想要告诉她编程是什么样的?只需弹出一个终端

find / 

答案 20 :(得分:2)

为什么不显示间隔拍摄视频A Day in the Life of a Scrum Team

答案 21 :(得分:2)

程序员为计算机编写指令 运行该程序会导致计算机实际遵循这些说明。

一个例子是厨师会按照食谱来烤一条面包。 (即使它在他们的头脑中)......这就是编程。与我的妻子不同,计算机每次都遵循配方。我的妻子,在她的脑袋里,它每次变得不同但美味; - )

如果您想继续并更详细地讲授这一点,那么伪代码很容易理解。

e.g。

IF today's date is the 1st of may then
  print to screen "Happy Birthday"
ELSE
  print to screen "It's not your birthday yet"

psuedo代码的美妙几乎任何人都可以理解它,这就是它的重点。

答案 22 :(得分:2)

我会用伪代码写一些东西来演示如何使用计算机来解决日常问题。也许确定从哪个商店购买特定的购物清单哪个商店更便宜。

答案 23 :(得分:1)

我喜欢用“更衣室问题”来激励介绍性编程(例如,100个更衣室,最初关闭。人员2进入并打开所有偶数,第3个人进入并将状态从打开变为关闭所有储物柜的副数,其数字可被3整除,人4进入,而这对于数字为4等的倍数的储物柜,直到人100进入)。问题是,哪些储物柜仍然关闭?当然,有一个基本的数学解决方案(只有完美的方格仍然是开放的),但我认为这是一个很好的练习介绍编程。

答案 24 :(得分:1)

我已经完成了很多次这项任务。答案很简单,这就是您与孩子一起做的事情。 玩游戏

可能有很多游戏可以玩,但是我碰到的最好的是 “猜数字”。您玩游戏,他们就会理解。然后,您告诉他们他们只是做了一个名为 binary search 的事情,它解决了很多问题。然后 显示它们 该功能的一些C或BASIC代码。该结构非常简单,以至于 ,因为他们从根本上了解了 ,因此他们几乎可以读取代码。 (如果是100%希腊语,您可能可能存在编码样式问题。)

C可能对整体结构更好。如果您可以将一些技巧融入到BASIC中,那是完美的。跳转在很大程度上是编程的核心,并且能够在代码中实际看到它们对于理解而言是惊人的。汇编太复杂了,无法使用奥秘的语法。 C语言和高级语言比其他类型的构造更容易隐藏跳转。

更好的方法可能是同时放弃BASIC,C和Lisp的打印输出,并告诉他们那些是 种不同的语言 用不同的方式做同样的事情 ,而真正的程序员用许多不同的方式思考许多不同的事情。而且,如果要进行简单的说明来进行打印输出实在令人生畏,那么只需 制作名片 并将其保存在钱包中即可。如果您删除任何评论,它们应该很容易放在一张卡上。

答案 25 :(得分:1)

我会说要么在伪代码中做一些标准算法(几乎任何n ^ 2排序算法应该没问题。我喜欢选择排序。)或者将它们指向http://99-bottles-of-beer.net/

然后再说一遍,我只想把人们指向99-bottles-of-beer.net B - )

答案 26 :(得分:1)

我说给他泡泡排序。

这是一个简单易懂的技巧,转换为正式语言。

这就是我们的工作。用严格的正式语言表达我们的想法,即使机器也能理解。有点类似于组织设计的设计程序。

答案 27 :(得分:1)

Jalf,

通常最有效的方法是展示一个人已经熟悉的东西。

选择文件和打印是大多数人都非常熟悉的事情。

因此,您可以显示一小段要求提供文件的代码 并用它做点什么。 它可以很短,仍然显示程序是如何构建的。

这样的一段代码将证明: 整体结构 流 使用变量和语句 使用API​​

答案 28 :(得分:1)

我会考虑Greenfoot。虽然它旨在让孩子们学习编程,但图形可能会帮助读者将代码与“动作”联系起来。 Here is an article on Greenfoot我的一位同事。

答案 29 :(得分:1)

我一直在教授编程多年,并发现解释事物所需的方法数量与你拥有的学生数量相等。但是大多数时间有效的方法如下:

  1. 提供一个显示简单应用程序逻辑流程的流程图
  2. 以完整的人类语言(例如英语)
  3. 编写说明
  4. 将每条指令缩写为编程语言中使用的简写
  5. 为教学目的选择一种不那么神秘的语言,如Basic或Pascal
  6. 所有代码都只是自然语言的简写。用全英文写的大多数程序看起来都很简单。

    对于一个好的算法,这是另一个故事。很可惜,看到很多计算机科学课程不再教算法或刷满了。

答案 30 :(得分:1)

在伪代码中:

function dealWithPerson(person){
    if(ILike(person)){
        getCookie().giveTo(person);
    }
    else{
        person.tell("You shall receive no cookies!");
    }
}

dealWithPerson(Person.fromName("Nick"));
dealWithPerson(Person.fromName("John"));

这以类似C语法的方式演示了函数,面向对象和字符串的概念(当我说C语法时,我指的是奇怪的字符)。
它还显示了如何重用代码。 请注意,虽然它是伪代码,但如果有一种语言接受这种语法,我也不会感到惊讶(也许JavaScript允许这样做?)。

您还可以调整此示例以获得循环。 希望这有助于向该人展示程序的外观(因为它是一种真实的语法并且相对容易理解)。

答案 31 :(得分:1)

Alice由Carnegie Mellon开发。

  

Alice是一个创新的3D编程环境,可以轻松创建动画,用于讲故事,播放互动游戏或在网络上分享视频。 Alice是入门计算的教学工具。它使用3D图形和拖放式界面来促进更具吸引力,更少令人沮丧的第一次编程体验。

答案 32 :(得分:1)

快速编写快速读取股票报价并将其写入Excel电子表格的内容。这很容易做到几分钟,并且非常快速地打动非技术类型,因为他们看到它的实用价值。

答案 33 :(得分:1)

我通常的选择是从数据库中检索一组客户记录。在Visual Studio中使用C#和LINQ,最多可能需要10分钟来构建一个网页并将“Northwind”数据库客户转储到网格中。好消息是,“客户列表”几乎是任何人都可以理解的。

答案 34 :(得分:1)

完全取决于她的兴趣水平(或您对的兴趣程度)。大多数人都认为这个问题是闲谈,并不是真的想知道。

编程不仅仅是算法(比如“如何制作一杯咖啡”),它也从根本上植根于数学。大多数人都会被数学术语的微妙使用(什么是“功能”?)迅速绊倒。

为了真正教授编程,回顾自己的第一个编程经验,第一个编程老师,第一个编程语言可能会有所帮助。你是怎么学习的?当你在学习的时候,你已经掌握了哪些技能(即微积分)?是什么促使你想要了解变量是什么或为什么有三种不同的循环?

语言方面:使用像python这样的东西。真正的高水平,非花括号可能更好。

答案 35 :(得分:0)

我会通过一个相对简单的函数来处理一个人,只需不到十行代码。不要过分关注语法;专注于它应该做的事情,以及完成它所需的步骤。还要稍微考虑一些权衡(速度与空间,检查错误或不检查等)。

然后解释你所展示的是整个节目的0.01%。并解释说,90%的时间不用于编写内容,而是尝试阅读这些内容并弄清楚它为什么不起作用。

答案 36 :(得分:0)

我的妻子对编程和电脑一无所知。但是,当我解释说计算机完全没脑子并只遵循说明时,她确实理解了。您可以使用编程语言定义和控制这些指令。基本上你是在告诉计算机使用编程语言做什么;它是计算机(in)直接理解的语言。

这可能是一个很长的故事,但一个很好的演示示例是计算器,例如calc.exe(或您的操作系统正在使用的任何计算器程序)。每个程序员都应该能够以易于理解的语言解释它在“引擎盖下”做什么(告诉计算机它应该听,并记住按下哪些按钮以及如何处理这些值)。你也可以考虑尝试用你自己的语言证明这一点,最后也应该很容易理解。至少,它帮助了我的妻子(我假设;))。

答案 37 :(得分:0)

我投票给quicksort,它比冒泡更优雅,也更容易理解:

qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)

答案 38 :(得分:0)

引用 Steven C. McConnell ,在他的伟大着作 Code Complete 中,在第2章中他谈到了软件隐喻

  

围绕软件开发成长起来令人困惑的隐喻。

     
      
  • 弗雷德布鲁克斯说,编写软件就像农场,狩猎狼人,或者在焦油坑中淹死恐龙(1995)。
  •   
  • David Gries说这是一门科学(1981)。
  •   
  • Donald Knuth说这是一门艺术(1998)。
  •   
  • Watts Humphrey说这是一个过程(1989)。
  •   
  • P.J。 Plauger和Kent Beck说这就像驾驶汽车(Plauger 1993,Beck 2000)。
  •   
  • Alistair Cockburn说这是一场比赛(2001)。
  •   
  • Eric Raymond说它就像一个集市(2000)。
  •   
  • Paul Heckel说这就像拍摄“白雪公主”和“七个小矮人”(1994)。
  •   

答案 39 :(得分:0)

显示R的基础知识,它比C更容易理解,有很多内置函数,如mean或sqrt,至少R的分配符号是“&lt; - ”