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

我的一个朋友有一天问我,如果我在编程时只是看数字列表,或者它是如何工作的。 我试图解释说,它通常更像是math公式,用单数的英文单词扔,而且它通常大部分是可读的。 但这是一个非常模糊的解释,对于一个非程序员来说,这并没有太多的解释。

但是这让我想起了什么才是最好的例子。 不是因为我想教她的编程或其他任何东西,而只是为了给她一个程序代码“看起来像”的概念。

这让我想知道什么可以成为一个很好的例子。 而这是令人惊讶的困难。

我的第一个想法显然是一个简单的“Hello World”程序。 但它确实没有显示任何有用的东西。 它并没有真正显示我们如何使用函数或variables,或者像ifwhile一样控制stream程结构来创build一个真正做某事的程序。 没有逻辑。 该程序不会对任何事情做出反应。

所以也许像计算素数这样的东西就是一个更好的例子。 但是再一次,这可能太理论化,不切实际…(这有什么好处呢?写“真正的”程序又有什么关系呢?)另外,它里面没有重要的控制stream逻辑。 这只是一连串的math。

还有,应该使用哪种语言?

理想情况下,我不认为它必须是一个非常“干净”的语言。 相反,它应该可能使结构清晰。 如果是这样,那么一定数量的噪音和混乱可能会很好。 也许像C ++这样的东西实际上比Python更好的例子。 明确的大括号和types说明符是明显的“钩子”,可以帮助解释程序是如何构造的,或者强调它不仅仅是简单的语句,几乎可以作为英语读出来。

但是用C ++我们也陷入了一些奇怪的语法。 为什么std::cout << x用来打印x? 为什么不是一个“正常”的函数调用语法? 和printf是不是更好,与其神秘的格式string,并缺乏可扩展性(我想通过使用char*的string复杂化程序或我使用std::string和解决调用看似不必要的s.c_str()得到一个可以用printf打印的string?

也许更高层次的语言毕竟会更好。 但是哪一个? 为什么?

我知道这里有很多类似的问题,用来教授编程的语言/示例程序。 但我认为这里的要求是不同的。 在编程教学时,我们比任何东西都要简单。 我们想要避免任何尚未教过的东西。 我们要确保学生能够理解屏幕上的所有内容

我对简单本身不感兴趣。 而是给“外人”一个“程序看起来像什么”的概念。 而程序并不简单。 但是他们一般都performance出一定的疯狂结构和方法。 什么语言/程序最能突出显示?

编辑
感谢所有的build议。 你们中的一些人有一个不同的angular度比我的意图。

也许一个例子是为了。 我不能驾驶飞机,但是我已经对驾驶舱的外观有了基本的了解,以及驾驶员在飞行时“做了些什么”。

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

但是,当看到电影编程的任何事情时,例如,通常只是充满垃圾的屏幕(如Matrix中的绿色文本)。 它看起来不像一个正常人能够做的事情 。 没有什么可以识别的。 某个不是程序员的人只是认为这是黑魔法。

我不想教她飞,或编程软件。 但我想给她一个基本的参考框架。 只是一个“啊,所以这是你的工作,所以这不是随机的符号和数字在屏幕上”的想法。 即使只是展示一个简单的if语句,与matrix式的随机符号和数字相比,将是一个启示。

你们有些人build议解释一个algorithm,或者使用伪代码,但这就是我想要避免的。 我想要的东西只是简单地展示了实际代码的外观,就像你不必是一个木匠来看一个锯子,并且知道它是什么以及它是如何工作的。

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

这真是我想要做的。 我的朋友没有兴趣学习编程,我不想强​​迫她理解源代码。 但是她很好奇与我一起工作的工具或实体。 matrix式的符号在屏幕上滚动吗? 纯math? 散文forms的英语?

我感兴趣的是对“当我工作时看起来像什么”这一高层次的理解。

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

BASIC

 10 PRINT "Sara is the best" 20 GOTO 10 

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

你可以做类似的事情。 配对编程。 那么,其实你的朋友将是一个观察员,但她会得到一个主意;)

为什么不考虑一种不存在的语言(或者,如果你真的相信),并使用伪代码 ? 我认为,取决于你想达到的目的 – 我会考虑这个人所熟悉的任务的例子,但是要把它分解成一个伪代码的例子。

我一般认为,在向非程序员解释时,“烹饪”或“食谱”这个概念非常适合。

我问这个人想象他们有一个相当复杂的食谱 – 比如咖喱饭。 然后我build议他们把它写下来写给那些根本不知道自己在做什么的人,以便他们能够做到。

有一个非常确定的几个阶段涉及:

  • 收集工作的原料和工具。
  • 准备食材。 这很复杂。 例如
    • 得到3个小红辣椒。
    • 每个红辣椒,切成1厘米左右的块。
    • 稍后将红辣椒块放入碗中。
  • 另外,在继续烹饪的同时,调用准备好的米饭function,使其在后台asynchronous工作。

我相信你可以看到这是怎么回事…;)

烹饪和编程有许多相似之处(因为有很多东西,但是更多的人对烹饪有所了解,而不是build房子)。 有几个阶段/相似之处(正如我所看到的)是:

  • 收集 :(宣布实现目标所需的内容并将它们结合在一起)。
  • 准备工作:剁碎配料或准备首次使用的数据连接对象等。
  • asynchronous(Asynchronous) :在另一件事情发生的时候,有一件事情能够发生。
  • function :制作米饭,鸡肉烹饪和咖喱烹饪都需要单独的过程,最后只有makeCurry(鸡肉,米饭)function。
  • testing :确保随着时间的推移,你不会错过任何东西,一切都会顺利进行 – 例如,确保在进入下一个阶段之前煮熟鸡肉。
  • 垃圾 :一旦你完成了,你必须确保你收拾。 ;)
  • 最佳实践原则 :有一些有效的方法可以做到像烹饪这样的事情,程序员除了要学习代码之外,还得学习一些东西 – 有时可能很难find答案。 例如DRY,如何用刀高效切割,不要吃生鸡肉;)

基本上,我认为把编程教学作为一个普遍的话题 – 我不一定会用语言教学, 除非你有一个令人信服的理由 。 相反,最初要从抽象的angular度去教,直到他们至less明白事物如何结合在一起的基本原理。 然后,坐在显示器和键盘前,他们可能会发现更容易。

我认为这个问题可能没有一个“正确答案”。 但是我认为,也许有一些非常好的想法可能会带来一些问题。

我会解释一下,编程是给出详细的说明,以便计算机可以做出复杂的任务。

如何制作两杯咖啡?

  1. 填满水壶
  2. 烧水

  3. 在杯子里的咖啡

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

  7. 再次做3到6

初级编码员在工作

看起来有点像这样 有时。

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

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

编写一些对非程序员有价值的东西。 如果我向我的母亲展示Quicksort,这将是没有用的。

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

如果这个人使用推特,那么他就可以对他的追随者或者类似的东西进行编码。

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

完成之后或者在编写代码的过程中(甚至更好),您可以解释程序如何发挥作用。

只要保持简单,用人类语言说话。 如果你向他们展示了几兆字节的代码,并且谈论诸如原型inheritance等事情,那么你只是威胁他们,他们会立即失去兴趣。

为了让我的妻子知道我做了什么来赚钱(这是真正的工作!我保证!我们不只是整天浏览网页!)我有一天晚上和她坐在一起,用Python给她看了几个基本概念:调用一个函数(print),分配和读取一个variables,以及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!") 

除了“导入”这个有点抽象的概念之外,这是一个非常简单的例子,它很容易跟随和“连接”屏幕上正在发生的事情,更不用说它实际上做了一些有趣和互动的事情。 我觉得我的妻子离开了整个概念不那么困惑的经验,而不需要太多的代码知识。

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

有一个称为LOGO的CLIgraphics包,最着名的是Turtle Graphics ,用来在屏幕上用LT 90, RT 105等命令在屏幕上绘制形状。看看你能不能find这样的东西,中等复杂性。

LOGO – 面向逻辑的面向graphics编程语言。

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

在login或维基百科上查看更多信息,这些链接也可以链接到现代标志解释器。

  1. 计算机程序员写程序。
  2. 电脑程序员虽然没有进行编程,却让工作场所中有吸引力的女性惹恼

然后:
http://markharrison.net/stackoverflow/univac-1110-500-unisys.jpg

现在:
http://markharrison.net/stackoverflow/codemonkey.png

当我5岁的女儿问我的问题,我让她“发展”一个小箭头“机器人”的程序,使他进入董事会的左上angular使用stream程图的纸片表示动作,转身和条件。 我认为这也适用于成年人。

不过,我不主张这个答案的发明。

关于你的编辑 :我害怕,程序员对编程的想法更加不了解。 ;-)人们认为编程是一种matrix式的绿色video卡腐败,他们认为间谍都装备了詹姆斯·邦德的高科技玩具。 任何领域的专业人士在观看有关他的工作的电影时都会感到愤怒。 因为电影制作人不知道! 另一方面,我们知道如何正确描绘电影中的节目吗? 😉

明确的东西,无论是graphics,或窗口,更高级的语言。

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

我发现最好的方法是在没有教他们编程的情况下教给别人什么编程,实际上就是放弃任何与特定编程语言相关的东西。

相反(假设他们实际上是有兴趣的),我会通过在一个程序中实现一个函数来谈论他们,比如一个简单的银行贷款申请(大多数人在某个阶段必须处理贷款,如果他们超过一定的年龄) ,然后在所有假设中找出漏洞。

比如,如果用户input负数的贷款额度会发生什么? 如果用户无法负担贷款呢? 贷款申请如何知道? 贷款申请将如何知道要检查哪个银行账户以及要检查哪个付款历史(即,实际上是谁的用户)? 如果用户试图在贷款金额字段中input他的名字,该怎么办? 如果用户尝试超过75年的贷款呢? 我们是否应该将select限制在一个可用长度列表中?

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

奖励点数,如果你可以让你的朋友然后作出反应:但是,如果我们忘记了什么? 那么,那么我们有bug,现在你知道为什么没有软件程序bugfree太:)

你工作时看起来像什么?

它看起来像打字。

说真的,编程有点像是乐高文本,要build一个大乐高的房子,就要input大量的文字,恰到好处地把正确的挂钩挂上正确的孔。 这就是我通常所描述的。

从源代码的例子来看,编程真的很难理解,因为它太抽象了。

在hello world上开始没有什么错,只要你能显示电脑实际上做了什么。 然后你可以一次引入一个构造。 编程就是这样 – 进行增量更改并查看结果。

所以你有一个你好世界计划。 现在改成它

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

那么如果构造

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

然后certificate最后的程序在接收到“是”或“否”以外的答案时会失败,以及如何修复它。

等等。 我不认为你需要深入的概念,如recursion,甚至function。

只要你能够在计算机上显示这些不同程序的结果,那么使用什么编程就无关紧要了。 (虽然这些psuedocode例子可能非常接近于有效的python)

替代文字http://upload.wikimedia.org/wikipedia/it/thumb/e/e3/Chopin-nocturne-8-preview.png/450px-Chopin-nocturne-8-preview.png

 { 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; // ... } 

也许一个比喻可能是composer php写一个乐谱的比喻。 composer php的工作是创作音乐的智力活动。 composer php用乐谱告诉钢琴家演奏的是什么,他通过精确的指示(音符,暂停等)来完成演奏。 如果“指示”不够精确,钢琴家就会玩不同的东西。

The job of a software developer is the intellectual activity of solving problems (problems that have to do with automated processing of data). With source code , the developer is telling the computer what to do, and he does it by means of precise instructions. If the instructions are not precise enough, the computer will do something different and will not solve the problem correctly.

Robotics is great for explaining programming, I think, because even simple, contrived examples are practical. The robotics equivalent of Hello World or printing a list of numbers might be having the robot move in a line or spin in a circle. It's easy for a non-programmer to understand that for a robot to do ANYTHING useful it must first move and position itself. This lets you explain simple program structure and flow control.

You want the robot to move forward, but only while there is nothing blocking its path. Then you want it to turn and move again. That's a simple routine using basic flow control, and the functions that you're calling are pretty easy to understand (if your platform has decent abstractions anyway).

Graphics might also work. Anything that has immediate results. jQuery even, because everyone is familiar with rotating pictures and web animations. Even contrived examples like pushing elements around in the DOM has an easy to see effect, and most people will understand what and why the statements in the program do.

Things like Robocode and LOGO are probably really good for this.

I would just write something in pseudocode that demonstrates how to use a computer to solve an everyday problem. Perhaps determining which store is cheaper to buy a particular grocery list from or some such.

I say show him bubble sort.

It's an easy, understandable trick, converted to a formal language.

That's what our job is about. Expressing our ideas in a strict, formal language, such that even a machine can understand. A little similar to designing procedures for organizational design.

Code up something quick that reads stock quotes and writes them to an excel spreadsheet. This is easy enough to do with a few minutes and impresses non technical types very quickly as they see the practical value of it.

My usual choice is to retrieve a set of customer records from a database. Using C# and LINQ in Visual Studio, it takes maybe 10 minutes at most to build a web page and dump out the "Northwind" database customers into a grid. The nice thing is that a "list of customers" is something that almost anybody can understand.

Totally depends on the level of her interest (or your level of interest in her ). Most people ask that question as idle conversation, and don't really want to know.

Programming is more than algorithms (like "How to make a cup of coffee), it's also fundamentally rooted in mathematics. Most people will be quickly tripped up by the subtle use of mathematical terms (what's a "function"?).

In order to really teach programming, it may help to think back to your own first programming experiences, your first programming teacher, your first programming language. How did you learn? when you were learning, what skills did you already have fresh in your mind (ie, calculus)? What motivated you to want to understand what a variable is or why there are three different kinds of loops?

Language-wise: Use something like python. Really high level, non-curly-bracket probably better.

Why not just show the timelapse video A Day in the Life of a Scrum Team ?

A programmer writes instructions for the computer to perform.
Running the program results in the computer actually following those instructions.

An example is a cook will follow a recipe in order to bake a loaf of bread. (even if it's in their head)… that's programming. Unlike my wife, the computer follows the recipe exactly every time. My wife, does it in her head and it turns out different but delicious every time 😉

If you want to go ahead and teach this in more detail then pseudo-code is easy to understand.

例如

 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" 

The beauty of psuedo code is nearly anyone can understand it and this is the point of it.

Jalf,

What usually works best is showing something the person is already familiar with.

Selecting a file and printing is something very familiar to most people.

So, you can show a small piece of code that asks for a file and do something with it. It can be very short and still show how a program is built.

A piece of code like that will demonstrate: Overall structure Flow Use of variables and statements Use of API

Want to show her what programming looks like? Just pop a terminal and

 find / 

I vote for quicksort, which is more elegant than bubble sort and easier to understand too:

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

Show R 's basics, it is easier than C to understand, has many build in functions such as mean or sqrt, and at least R's assigment sign is "<-"

Alice which was developed at Carnegie Mellon.

Alice is an innovative 3D programming environment that makes it easy to create an animation for telling a story, playing an interactive game, or a video to share on the web. Alice is a teaching tool for introductory computing. It uses 3D graphics and a drag-and-drop interface to facilitate a more engaging, less frustrating first programming experience.