有什么好例子可以向非程序员展示以解释编程的“外观”?


74

有一天,我的一个朋友问我在编程时是否只是看数字列表,或者它是如何工作的。我试图解释说,它通常更像是数学公式,加上了奇怪的英语单词,并且通常都可读。但这是一个非常模糊的解释,对非程序员来说并没有真正解释太多。

但这让我思考了什么将是一个很好的例子。不是因为我想教她编程或其他方面的知识,而只是想让她了解一下程序代码的“外观”。

这让我想知道什么将成为一个很好的例子。事实证明,这非常困难。

我首先想到的显然是一个简单的“ Hello World”程序。但这确实没有显示任何有用的信息。它并没有真正表明我们如何使用函数,变量或控制流程结构,例如ifwhile使其真正执行某项程序。没有逻辑。该程序没有任何反应。

因此,也许像计算质数之类的例子将是一个更好的例子。但是话又说回来,那可能太过理论化和不切实际了……(那有什么好处?与编写“真实”程序有什么关系?)而且,里面也没有重要的控制流程逻辑。这只是一连串的数学运算。

而且,应该使用哪种语言?

理想情况下,我认为它不必是一种非常“干净”的语言。但是,它可能应该使结构清晰。如果这样做,则一定程度的噪音和杂波可能会很好。出于这个原因,也许C ++之类的东西实际上可能比Python更好的例子。明显的花括号和类型说明符是明显的“钩子”,以帮助解释程序的结构,或强调它不仅几乎可以读成英语的简单语句。

但是,对于C ++,我们还陷入了一些彻头彻尾的怪异语法。为什么std::cout << x用来打印x?为什么不使用“常规”函数调用语法?并printf没有什么好用的,它具有奥秘的格式字符串,并且缺乏可扩展性(我是否想通过使用char*字符串来使程序复杂化?或者我使用std::string并解决调用似乎不必要的操作s.c_str()来获取可以打印的字符串)printf

毕竟,更高层次的语言可能会更好。但是哪一个呢?又为什么呢

我知道这里有很多类似的问题,涉及使用哪种语言/示例程序来教授编程。但是我认为这里的要求是不同的。在教授编程时,我们最需要的是简单性。我们希望避免任何尚未讲授的内容。我们希望确保学生能够理解屏幕上的所有内容

我对简单性本身不感兴趣。而是给“局外人”一个“程序看起来像什么”的想法。程序并不简单。但是它们通常确实表现出某种疯狂的结构和方法。哪种语言/程序最能突出这一点?

编辑
谢谢您到目前为止的所有建议。你们中的某些人对我的角度有所不同。

也许有个例子。我不能驾驶飞机,但是我对驾驶舱的外观以及飞行员飞行时的行为有基本的了解。

而且我不是一个训练有素的木匠,但是当我看到锯子或锤子时,我会知道。

但是,例如,当您看到与电影中的编程有关的内容时,通常只是充满垃圾的屏幕(如“矩阵”中的绿色文本)。它看起来并不像正常人真正能做的那样。没有任何可识别的东西。不是程序员的人只是认为这是黑魔法。

我不想教她飞行或编程软件。但我想给她一个基本的参考框架。只是一个想法,“啊,这就是您要使用的东西。因此,不仅仅是屏幕上的随机符号和数字”。if与矩阵样式的随机符号和数字相比,即使只是显示简单的语句也将是一个启示。

有人建议解释一种算法或使用伪代码,但这是我要避免的。我想要的东西可以简单地显示实际代码的外观,就像您不必成为木匠去看锯子并了解其含义和原理一样。

小时候,我们曾经在意大利度假。下来的路上,飞行员让我进入了飞机的驾驶舱。当然,我没有学会如何驾驶飞机。但是我确实看到了飞行员的世界。我了解了它们如何使飞机起飞,飞行员实际上做了什么。

那真的是我要做的。我的朋友对学习编程没有兴趣,我也不想强迫她理解源代码。但是她很好奇我使用哪种工具或实体。是矩阵样式的符号在屏幕上滚动吗?纯数学?散文形式的英语?

我感兴趣的是传达对“我工作时的样子”的高度理解。


44
我怀疑她不再感兴趣,并且如果您尝试再次详细解释它,您会被迷住。
布列塔尼

17
但是,例如,当您看到与电影中的编程有关的任何内容时,通常只是屏幕上充满了垃圾:这也是对真实编程的一个很好的总结,不是吗?
只是某人

15
什么,您是在告诉我你们不是一整天只看绿色矩阵样式的数字吗?伙计,难怪C#很难被嘲笑。
Lasse V. Karlsen

15
“不是程序员的人只会认为这是黑魔法。” -请不要破坏这种幻想;我们必须以某种方式赚钱。:)
Jeff

18
当我的妻子看到我有一天在家工作时,她很失望地发现“寻虫”并不像听起来那样令人兴奋……
Paddy

Answers:


35

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


是的,这实际上可能是最好的方法。让她看看我目前正在使用的一些实际代码
jalf

39
当然,如果她开始批评您的缩进样式或您对STL算法的使用不佳,您可能会后悔采用这种方法。

6
哈哈,如果她这样做的话,她可以接管我上周一直在追求的比赛条件的调试工作……这将教她!;)
jalf

但是人们看到满屏的make输出并声称自己一辈子都无法理解之后,通常不会问这些问题吗?
Michael Krelin-黑客

1
这就是我最终要做的,几乎是什么。实际上,我终于设法解决了她第一次问时一直在寻找的问题,只是向她展示了错误的路线,以及我用它替换了什么。无论如何,接受这个:)
jalf

51

基本知识

10 PRINT "Sara is the best"
20 GOTO 10

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

您可以做类似的事情。配对编程。好吧,实际上您的朋友将成为旁观者,但她会明白的;)


12
实际上,我认为这是迄今为止最好的主意。

3
这当然是最好的萨拉:)。
Liran Orevi

提供了现在她会被称赞的次数...(根据SO的资料,答案是在37分钟前提交的)
Michael Krelin-hacker 2009年

3
+1用于配对编程,您可以逐步指导她并向她展示输出听起来很酷!
melaos

3
至少要提到BGI才+1 :) ---顺便说一句,当我的祖母在我的第一个基本程序之一-Else中看到自己的名字时,她感到非常自豪。
peterchen

41

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

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

我要求那个人想象他们有一个相当复杂的食谱-例如咖喱饭。然后我建议他们应该为一个完全不知道自己在做什么的人写下来,以便他们可以自己煮。

涉及非常明确的几个阶段:

  • 收集工作所需的成分和工具。
  • 准备配料。这很复杂。例如
    • 得到3个小红辣椒。
    • 对于每个红辣椒,将其切成约1平方厘米的块。
    • 将红辣椒块放入碗中,以备后用。
  • 与此分开的是,调用“准备米饭”功能,并在继续烹饪时在后台异步运行该功能。

我敢肯定,你可以看到这是怎么回事...;)

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

  • 收集:(声明实现目标所需的内容并将它们聚集在一起)。
  • 水面浮油:切碎的成分或准备好数据连接对象等,为第一次使用。
  • 异步:一件事同时进行的能力。
  • 功能:制饭,鸡肉烹饪和咖喱烹饪都需要单独的过程,只有最后才能使用makeCurry(鸡肉,米饭)功能。
  • 测验:确保在进行过程中不会遗漏任何东西,并且一切进展顺利-例如,在移至下一阶段之前,确保已将鸡肉煮熟。
  • 垃圾:完成后,必须确保收拾整齐。;)
  • 最佳实践的负责人:有很多有效的方法来做饭,例如做饭,除了代码之外,初学者还必须学习-有时很难掌握。例如干,如何用刀有效切碎,不要吃生鸡肉;)

基本上,我认为将编程作为一般主题进行讲授-除非您有令人信服的理由,否则我不一定会用某种语言教书。取而代之的是,从头开始进行抽象讲授,直到他们至少了解事物如何融合的基本原理。这样一来,当他们坐在显示器和键盘前时,可能会觉得更容易。

我认为可能没有一个“正确答案”。但我认为,也许您可​​以从中吸取一些真正的好主意。


9
好答案。最后,有人专注于编程原理,而不是非程序员几乎没有意义的怪异事物。
CesarGon

5
在很多情况下,我都同意,但是在这种情况下,我认为最相关的是怪异的东西。她的问题不是“您如何编写程序”,而是“它看起来像什么?您只是盯着满是数字的屏幕吗?” 我认为最好的答案是显示一些实际的代码,表明其中隐藏了实际的含义和结构。它实际上的含义不那么重要。她是否可以阅读代码并不重要,但是如果她可以识别出它是由几个英语单词(if,while)组成的,那么小的数学表达式(x = y + z)就提供了基本的参考框架。
jalf

3
我完全不同意。这种评论来自对学习如何工作的根本误解。所有这些抽象概念可能使更容易理解编程,但这仅仅是因为您已经受益于数百个具体示例,并且可能已有一些实际编程经验。某人完全渴望的是实际使用实际代码进行编程的具体示例,否则就没有这些抽象概念与之相关联的东西,也没有与之相关的个人经验。另外,它太多了。
布列塔尼

抱歉,我的评论针对的是CesarGon和Amadiere,而不是杰夫
布列塔尼

我坚持认为,伪代码足以满足该人可能想要实现的目标。它看起来很像代码以显示代码结构,同时提供关键细节。如果她对学习编程感兴趣-那么肯定会需要语言。但是要显示某人您可能希望看到的内容而不是1和0,则伪代码(imho)是理想的选择。但是,如果您打算显示一些实际的代码,那么我将向她展示一些您知道的东西,并且可以对它进行充分的解释(并且我建议您不要花很多时间)。
Amadiere

35

我会解释说,编程给出了详细的指令,因此计算机可以执行复杂的任务。

如何冲泡两杯咖啡?

  1. 加满水壶
  2. 烧水

  3. 杯中咖啡

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

  7. 再做3到6


9
尽管这对于描述编程原理很有用,但实际上并没有给出“看起来像什么程序代码”的概念。jalf的朋友问他在编程时是否只看数字列表:她想可视化jalf处理的实体是什么。因此,我认为他想展示例如函数,类和变量:编程的水壶和杯子,而不是咖啡的壶。
itowlson

5
代码只是一步一步的说明,我认为这是编程“看起来像”的完美示例,而没有显示令人恐惧的术语和语言库。而且据我们所知,总有一天编程会像这样。
kowsheek

1
我喜欢这个例子,输入“如果水壶是空的” goto1。那么您就有了编程结构。
Qwark

1
当我看到这篇文章时,我只是想提出这个建议。我总是告诉好奇的人,编码就像写食物食谱。这是算法的一个很好的类比。

1
我认为该示例确实很糟糕,但也许是因为我从未编写过咖啡应用程序。你不是在工作之外编程的吧?
IAdapter

23

A junior coder at work

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


6
笑声+1。(而且因为我之前已经调试过该程序!)
Toji

15

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


是的,这也是我的想法。只是带她出去在您的工作环境了几分钟,就像我点击这里跑,在这里打开的文件,我在这里编辑文本等
法比安Steeg的

13

我认为您应该下载一些用AT&T汇编语言编写的大型win32应用程序,并在记事本中显示给她,然后告诉她:“如您所见,编程需要像我这样的超人。”


7
+1。最后应用“您的用户在大学宿舍里的22岁。该软件如何让他安葬?”的格言。堆栈溢出。你是一个革命者,老兄。
阿德里安·彼得雷斯库

小鸡会挖Unix专家吗?该死的MS诅咒付了我的账单!
杰森D

1
大声笑@卡森·迈尔斯(Carson Myers)的评论...有点像我挖清理一个呕吐物的水坑,比清理两个水坑还要多。:)
j_random_hacker 2010年

(作为一名经常的汇编程序员和Unix爱好者发言)
j_random_hacker 2010年

10

对非程序员具有任何可理解的价值的东西进行编码。如果我要向妈妈演示Quicksort,那将毫无用处。

向该人询问他的兴趣。例如,如果他/她要进行股票交易,请整理一个脚本,该脚本从适当的网页上读取一些股票统计数据,然后将其编译为excel工作表(使用csv,以避免严重的脑部伤害^^)或一个漂亮的图表。

如果此人使用Twitter,请编写一些计数其关注者数量的代码或类似内容。

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

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

只需保持简单并以人类语言交谈即可。如果您向他们展示兆字节的代码并谈论诸如原型继承之类的事情,您只会吓them他们,他们将立即失去兴趣。


1
我喜欢参与Twitter的想法。也许可以使用HTML和JS / jQuery来做到这一点:这可以让您快速了解他们在计算机上也可以看到的内容。地狱,把它塞在互联网上。“现在任何人都可以通过进入example.com/myawesomestuff来使用它。这有多酷?”
萨米尔·塔尔瓦尔

9

为了让我的妻子了解我如何带来薪水(这是真实的工作!我保证!我们不只是整天浏览网页!),我一个晚上与Python一起坐下,向她展示了几个基本概念:调用函数(打印),分配和读取变量以及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!")

除了有点抽象的“导入”概念外,这是一个非常简单的示例,易于遵循并“连接”屏幕上发生的事情,更不用说它确实可以做一些有趣且互动的事情。我认为我的妻子对整个概念不太了解,而无需真正地了解代码的方式。

我认为关键是能够让某人看到代码,并且最终结果可以并排显示。


8

有一个称为LOGO的CLI图形软件包,最著名的是Turtle Graphics,它用于使用诸如LT 90, RT 105etc之类的命令在屏幕上绘制形状。看看是否能找到尝试绘制中等复杂度的东西是一种不错的体验。

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

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

logothingsWikipedia上查看更多信息,其中也包含与现代徽标解释器的链接。


这一定是我对编程的第一次介绍。它具有足够的基础知识,使人们可以理解编程的含义,而不会感到无聊。
罗伯特·保尔森

6
那么您的朋友可以问一个有关如何移动徽标中的海龟的问题...
安东尼

+1安东尼。如果我在这里看到一个LOGO问题,我会笑了。说起这几十年来我没有做过任何LOGO。。。有点。。。。。。。 12岁...
Jason D

这是在我的小学教的!现在不能说这与我的兴趣有关。是很久以前的事了 但是您可以用它来做一些很棒的事情,我记得我们拼凑了一些(相对)令人印象深刻的游戏。
诺娜·乌尔比斯

@Jason D:也许您应该然后检查一下。stackoverflow.com/questions/1003841/…–
萨米尔·塔尔瓦尔

8
  1. 计算机程序员编写程序。
  2. 虽然没有编程,但计算机程序员却在他的工作场所中惹恼了美女。

然后:(来源:markharrison.net


现在:


3
因此,您是说所有程序员都是社交无能的男性。看到人们提倡这种负面刻板印象,我感到很难过。我将按照建议的阅读方法给您[1],并保留该内容。[1] sas.upenn.edu/~nathanen/files/cbi-gender.pdf
史蒂夫·兰迪

1
我是一名计算机程序员。我知道有许多人符合上述刻板印象...而许多人则不然。我仍然笑得很开心。
杰森D

史蒂夫,放轻松点,这很有趣,因为它被认为是刻板印象。这两个图像相隔将近半个世纪,但本质上是相同的。我以为每个人都会认出Coulter / SpiffWorld代码猴子,但是我已经添加了指向图像的链接。检查一下,太好了!
马克·哈里森

8
呵呵,我同意,如果程序员不能取笑程序员,我们可以取笑谁?:)
melaos

2
历史上这是不准确的。在最上面的照片中,年轻女子更有可能是程序员,而小兵则更有可能是经理。
Marcin 2013年

7

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

不过,我不要求发明该答案。

关于您的编辑:恐怕,程序员对别人对编程的想法甚至更少。;-)人们认为编程是矩阵式的绿色视频卡损坏,与他们认为间谍都配备了James Bond的高科技玩具一样多。在观看有关其工作的电影时,任何领域的专业人员通常都会感到恼火。因为电影制片人不知道!另一方面,我们是否知道如何正确地描述电影中的节目?;-)


3
有时候,编程更像是RoboRally(en.wikipedia.org/wiki/RoboRally),而不是完全令人欣慰的。
itowlson

1
最初有一个名为[Guido van Robot(或GvR)] [1]的Python编程环境,实际上做得很好。令人惊讶的是,它涉及学习以各种方式在网格周围驱动一个小的机器人图标。[1]:gvr.sourceforge.net
Peter Rowell

itowlson,我从现在可用的俄罗斯程序KuMir(不记得它的名字)的前身知道这项技术,直到80年代后期才重返学校;-)
Michael Krelin-hacker

彼得,起初我想如果它既不涉及计算机也不涉及语言,那会更舒服。但是,事实证明,像我们在编程语言中一样降低写作水平是一种可以接受的技术,因为当我们又有一个编程“课程”时,她已经5岁零4个月了
Michael Krelin-hacker

6

我发现,“教别人什么编程而不教他们编程”的最佳方法实际上是删除与特定编程语言有关的所有内容。

相反(假设他们确实有兴趣),我将通过在程序中实现一个功能来与他们交谈,例如简单的银行贷款申请(大多数人都必须在某个阶段处理贷款,如果他们超过一定年龄) ,然后戳破所有假设。

举例来说,如果用户输入的是负数,应该怎么办?如果用户无法负担贷款怎么办?贷款申请怎么知道的?贷款申请将如何知道要检查哪个银行帐户以及要检查哪个付款历史记录(即用户实际是谁)?如果用户尝试在贷款金额字段中输入其姓名怎么办?如果用户尝试超过75年的贷款怎么办?我们应该将选择范围限制为可用长度列表吗?

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

如果您可以让您的朋友与之反应,您将获得加分:但是,如果我们忘记了一些东西怎么办?好吧,那我们就有错误了,现在您知道为什么没有软件程序也没有错误了:)


5

明确地用高级语言显示带有图形或窗口的内容。

为什么?非程序员通常也是非消极主义者,这就是为什么他不会得到排序的好处。但是,在屏幕上显示绘制的内容(“外观,窗口!”,“外观,只需打字很少,并且我们有一个3D框在旋转!”)可以产生奇迹;)。


“看,很少打字,我们有一个旋转的3D盒子!” -您正在使用哪种神奇的语言来制作“只需很少的输入”的3D旋转框?我的大部分内容“我可以收看盒子!” 代码至少约为100 LOC。(创建窗口,实例化3D库,设置矩阵,创建顶点/索引,将它们推入图形内存,更新旋转,绑定和渲染顶点,甚至不谈纹理或照明...)
Toji

这是一个在某人编写的“一行”代码中旋转的3D框:codegolf.stackexchange.com/a/5168不要以此为例:)
1j01 2014年

5

工作时看起来像什么?

看起来像打字。

认真地说,编程就像是乐高积木一样,要建造一座大型乐高积木,您必须在正确的位置输入大量文字,并用正确的孔钩住正确的钉子。这就是我通常的描述方式。


就像烤蛋糕一样,不同之处在于配料是单词,而要使其结冰,则必须输入很多单词。
布列塔尼

就像打曲棍球一样,只是曲棍球棒是键盘,冰球是单词,目标是正确的语法。
布列塔尼

这就像被小丑吓坏了,只不过您说要使小丑走开的话就是言语,而小丑坚持要取笑的坚持就像您每天对公司管理层的沮丧
Breton

就像墨西哥卷饼,除了bean是单词,salsa是preparser指令,玉米饼是编译器。
布列塔尼

就像上剧院一样,除了剧本是用文字构成的,而且在中场休息前5分钟您不会入睡。
布列塔尼

5

仅从源代码示例就很难理解编程是什么样的,因为它是如此抽象。

只要您可以显示计算机实际使用的功能,就可以开始使用hello world。然后,您可以一次引入一个结构。这就是编程的样子-进行增量更改并查看结果。

因此,您有一个hello world程序。现在将其更改为

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)


我喜欢这个答案中的示例+1!
卡尔·斯莫特里奇

4

我认为,机器人技术非常适合用来解释编程,因为即使简单,人为的示例也很实用。类似于Hello World的机器人技术或打印数字列表的操作可能是使机器人成一直线移动或绕圈旋转。对于非程序员来说,很容易理解,对于机器人来说,要做任何有用的事情,必须首先移动并定位自己。这使您可以解释简单的程序结构和流程控制。

您希望机器人向前移动,但前提是没有任何障碍物阻止其前进。然后,您希望它转动并再次移动。这是使用基本流控制的简单例程,并且您正在调用的函数非常易于理解(如果您的平台仍然具有不错的抽象性)。

图形也可能起作用。任何有立竿见影的效果。甚至使用jQuery,因为每个人都熟悉旋转图片和网络动画。即使是像在DOM中推送元素这样的人为例子,也很容易看到效果,并且大多数人都会理解程序中的语句的作用和原因。

诸如Robocode和LOGO之类的东西可能对此确实非常有用。


4

替代文字
(来源: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;
   // ...
}

隐喻可能是作曲家写乐谱的隐喻。作曲家的工作是创作音乐的智力活动。作曲家通过分数告诉钢琴演奏家该演奏什么,他通过精确的指示(音符,暂停等)来演奏。如果“指令”不够精确,钢琴家会演奏不同的东西。

软件开发人员的工作是解决问题的智力活动(与自动处理数据有关的问题)。使用源代码,开发人员可以告诉计算机该怎么做,而他可以通过精确的指令来做到这一点。如果说明不够精确,则计算机将执行其他操作,并且不能正确解决问题。


2
对于音乐,明确要求表演者对页面上的文字音符进行艺术性的解释,为此可能有很多表达。电脑没有这样的概念。因此,这种比较对于与音乐家一起使用将特别不利。
Phil Miller

这样的比较可能仅对音乐家有意义。有多少人发现阅读音乐就像阅读代码一样令人困惑?
Toji

@Novelocrat:我当然同意解释是故事的一部分,但是计算机仍然可以添加一些细微的变化(不是出于艺术目的)。例如,考虑random()。同样,许多现代电子音乐实际上是通过“程序”(以图形化编程语言,带有框图等)编写的
Federico A. Ramponi 2009年

3

我只是用伪代码写一些东西,演示如何使用计算机解决日常问题。也许确定哪家商店更便宜,可以从中购买某种杂货清单。


3

为什么不只是播放延时视频“ Scrum团队的一天”


1
问题是大多数程序员会识别该视频中发生的事情,但是其他人会看到一群人迟到,聊天很多,吃了很长时间的午餐,发脾气,只是偶尔朝一个方向挥手。电脑。(我知道我们会做什么,但我们现在不想给人留下错误的印象,是吗?)
Toji

3

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

一个例子是厨师将遵循食谱来烤一条面包。(即使是在他们的脑海中)……那是编程。与我的妻子不同,计算机每次都会严格按照配方进行操作。我的妻子,在她的头上做它,结果每次都不一样,但是美味;-)

如果您想继续进行更详细的讲授,那么伪代码很容易理解。

例如

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"

伪代码的魅力几乎是任何人都可以理解的,这就是它的重点。


2

想向她展示编程的样子吗?只是弹出一个终端,

find / 

2

令人惊讶的是它仍然是开放的,并且令人惊讶的是没有人给出这个答案。(我想。我可能无意中跳过了没人要阅读的40个问题之一。)

您的答案在您的问题中

小时候,我们曾经在意大利度假。下来的路上,飞行员让我进入了飞机的驾驶舱。当然,我没有学会如何驾驶飞机。但是我确实看到了飞行员的世界。我了解了它们如何使飞机起飞,飞行员实际上做了什么。

那真的是我要做的。

那就是你要做的。从教程中选择一个简短的练习。由于增加了视觉效果,适度较长的GUI也可能是有益的。(游戏可能会有点长。)然后让她看着你编码。而已。与您的试验示例相同。

另外,还有许多在线REPL可以让您更加直接地观看代码。


1

我说给他看泡沫排序。

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

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


1
但这不是使它成为一个很好的例子吗?您不会像向他人提供指令那样对计算机进行编程。电脑没有直觉。或看到并采用适当捷径的能力。冒泡排序甚至存在的事实说明我们根本没有程序员。编程的许多方面都依赖于计算机速度快而不智能的事实。
mmc

3
@Set我一眼就看着它们,找到最大的。我不做的是循环查看卡1和卡2等。

3
当我必须对大量物品进行分类时,例如当我不得不拆开一千本左右书并将它们按顺序放在架子上时,我想我会使用类似于插入分类的东西。
丰富

1
是的,我想说插入排序是一种更普通的人工算法(尽管正如Neil指出的那样,我们通常一次可以查看大于两张卡片的批次,以找到最大的卡片。但是一旦我们拥有最大的卡片,通常做类似插入排序的操作。)
杰夫

1
@Neil,也许您一次查看所有内容的能力是对您大脑实际排序算法的一种抽象:)您知道必须有一个。
卡森·迈尔斯,

1

快速编写代码,以读取股票报价并将其写入Excel电子表格。只需几分钟即可轻松完成,并且非技术性类型很快会给他们留下深刻的印象,因为他们看到了它的实用价值。


不过,这并不是真正的“令人印象深刻”,而只是让他们对代码“看起来”是一个想法。基本上是“调用库A。将结果传递到库B”的东西可能并不理想。
jalf

1
也许“打动”不是正确的词。代替“显示”的价值
ennuikiller 2009年

是的,但是我真正想要的是让她了解我说我在编程时的含义。我在看什么,如果不只是原始数字表或1和0的表?
jalf

因为它涉及到输入,输出和计算(显示的平均股价或什么的,这将做。
ennuikiller

1

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


1

完全取决于她的兴趣(或你感兴趣水平的高低)。大多数人把这个问题当作闲聊,并不真正想知道。

编程不仅仅是算法(例如“如何煮一杯咖啡”),它还从根本上扎根于数学。大多数人会因精妙地使用数学术语(“函数”?)而陷入困境。

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

语言方面:使用类似python的工具。真正高水平的,非弯曲的括号可能更好。


1

卡内基梅隆大学开发的爱丽丝

爱丽丝(Alice)是一个创新的3D编程环境,可轻松创建用于讲故事,玩互动游戏或在网络上共享视频的动画。爱丽丝(Alice)是介绍性计算的教学工具。它使用3D图形和拖放界面来促进更引人入胜,更轻松的首次编程体验。


有趣的是,我已经选择下载它。。。但是,这可能会给今天的编程带来错误的印象。。。“真实编程”在视觉上远没有那么刺激。。。
杰森D

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允许这样做),我也不会感到惊讶。

您也可以使此示例适应循环。希望这有助于向人们展示程序的外观(因为它是一种现实的语法并且相对容易理解)。


我会说这段代码比C更类似于Java。。除非Java被认为是C的分支...
Jason D

函数是JavaScript关键字,而不是Java / C关键字。所以我想这是类似JavaScript的语法...但是我同意它的面向对象部分使其不像C语言。并非非技术人员会知道。
luiscubal

1

我从事编程的课程已经很多年了,发现您需要用来解释事物的方法数量等于您所拥有的学生数量。但是,大多数情况下可以使用的一种方法如下:

  1. 给出一个流程图,该流程图显示了简单应用程序的逻辑流程
  2. 用全人类语言(例如英语)写说明
  3. 将每条指令缩写为编程语言中使用的速记
  4. 为教学目的,选择一种不太隐秘的语言,例如Basic或Pascal

所有代码都是自然语言的简写形式。用全英语写的大多数程序似乎微不足道。

至于好的算法,那就是另外一回事了。很可惜,看到很多计算机科学课程不再教算法或刷过它。

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.