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

What is a good example to show to a non-programmer to explain what programming “looks like”?

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

但这让我想到了什么才是一个好例子。不是因为我想教她编程什么的,而是为了让她知道程序代码"长什么样"。

这让我想知道什么才是一个好例子。结果证明这非常困难。

我的第一个想法显然是一个简单的"你好世界"计划。但它确实没有任何有用的东西。它并没有真正显示我们如何使用函数、变量或控制流结构(如ifwhile来生成一个实际执行某些操作的程序。这是没有逻辑的。程序对任何事情都没有反应。

所以,计算素数可能是个更好的例子。但同样,这可能过于理论化和不切实际…(这有什么好处?它与编写"真实"程序有什么关系?同样,它没有重要的控制流逻辑。这只是一个简单的数学序列。

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

理想情况下,我不认为它必须是一种非常"干净"的语言。但更确切地说,它应该使结构清晰。如果这样做,那么一定量的噪声和杂波就可以了。也许像C++这样的东西实际上是比Python更好的例子。显式的大括号和类型说明符是显而易见的"钩子",用来帮助解释程序的结构,或者强调它不仅仅是简单的语句,而且几乎可以作为英语读出。

但是用C++,我们也会遇到一些非常奇怪的语法。为什么用std::cout << x来打印x?为什么不使用"普通"函数调用语法?而printf并没有太好,因为它的格式字符串晦涩难懂,而且缺乏可扩展性(我想用char*来处理字符串使程序复杂化吗?或者我是否使用std::string并决定调用看似不必要的s.c_str(),以获得可以用printf打印的字符串?

也许更高级的语言终究会更好。但是哪一个呢?为什么?

我知道这里有很多类似的问题,关于使用哪种语言/示例程序来教授编程。但我认为这里的要求是不同的。在教授编程时,我们最需要的是简单性。我们想避免任何还没教过的东西。我们要确保学生能理解屏幕上的一切。

我对简单本身不感兴趣。而是让"局外人"知道"程序是什么样子的"。程序也不简单。但他们对这种疯狂的行为却表现出一定的结构和方法。哪种语言/程序最能突出这一点?

编辑感谢您迄今为止提出的所有建议。你们中有些人的观点和我预想的有所不同。

也许有一个例子是正确的。我不能驾驶飞机,但我对驾驶舱的外观和飞行员在飞行时的"行为"有了基本的了解。

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

但是,例如,当你看到与电影中的编程有关的事情时,通常只是屏幕上充满了垃圾(如矩阵中的绿色文本)。它看起来不像一个正常人能真正做到的事情。里面没有什么可辨认的。一个不是程序员的人简单地认为这是黑魔法。

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

你们中的一些人建议解释一个算法,或者使用伪代码,但这是我想要避免的。我想要一些简单的东西来显示实际的代码是什么样子的,就像你不需要做木匠就能看到一把锯子,并对它是什么以及它是如何工作的有一个基本的了解一样。

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

这就是我真正想做的。我的朋友对学习编程没有兴趣,我不想强迫她理解源代码。但她很好奇


基本的

1
2
10 PRINT"Sara is the best"
20 GOTO 10

更新:我12岁的时候,我表哥(他14岁)带了turbo pascal 7.0并把它安装在我的电脑上。他从头开始编程一个井字游戏(在BGI模式下,为那些知道的人)。我一步一步地观察程序是如何发展的,直到它成为一个完整的应用程序。在那之前,我只知道如何用BASIC打印字符串。

你也可以做类似的事情。配对编程。好吧,实际上你的朋友会是一个观察者,但她会有一个想法的;)


为什么不考虑一种不存在的语言(或者,如果你这么认为的话)并使用伪代码呢?我认为,这取决于你想要达到什么样的目标——我会考虑这个人熟悉的任务示例,但是会被分解成一个伪代码示例。

我通常认为当向非程序员解释事情时,"烹饪"或"食谱"的想法非常适合。

我让那个人想象一下,他们有一个相当复杂的食谱,比如咖喱饭。然后我建议他们应该试着把它写下来给那些完全不知道自己在做什么的人,这样他们就可以做饭了。

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

  • 为工作收集材料和工具。
  • 准备配料。这很复杂。例如
    • 买3个小红椒。
    • 每种红辣椒切块约1平方厘米。
    • 把红辣椒块放到碗里待会儿用。
  • 单独执行此操作时,调用Prepare Rice函数,并在继续烹饪时在后台异步工作。

我相信你能看到这一切…;)

与烹饪和编程有很多相似之处(很多东西都有相似之处,但是更多的人对烹饪的理解超过了建造房子)。阶段/相似之处(如我所见)是:

  • 收集:(说明实现目标所需的内容,并将其结合在一起)。
  • 准备:切碎原料或准备好数据连接对象等以供首次使用。
  • 异步:一件事情进行,另一件事情进行的能力。
  • 功能:大米制作、鸡肉烹饪和咖喱烹饪都需要单独的过程,只有在最后才能有咖喱(鸡肉、大米)功能。
  • 测试:确保在你进行的过程中,你不会遗漏任何零碎的东西,一切都很顺利——例如,在你进入下一阶段之前确保鸡肉煮熟。
  • 垃圾:一旦你完成了,你必须确保你清理干净。;)
  • 最佳实践的原则:有一些有效的方法可以做像烹饪这样的事情,开始的程序员除了要学习代码之外还必须学习-有时很难让你有头脑。例如,D.R.Y,如何用刀切碎?不要吃生鸡肉;)

基本上,我认为把编程作为一个一般性的主题来教学——除非你有一个令人信服的理由,否则我不一定从一种语言来教学。相反,最初从抽象开始教学,直到他们至少理解事物如何结合的基本原理。然后,当他们坐在显示器和键盘前时,他们会发现这很容易。

我认为这个问题可能没有一个"正确答案"。但我想也许有一些好主意,你可以从中吸取一些。


我会解释程序设计给出了详细的说明,这样计算机就可以完成复杂的任务。

怎么做两杯咖啡?

  • 把水壶装满
  • 把水烧开

  • 咖啡杯

  • 倒水
  • 加糖
  • 加奶

  • 再做3到6


  • 为了直接回答你的问题-什么程序"看起来像",我会给他们看一个大型应用程序的打印件。哈斯克尔的玩具应用程序或者像qsort这样的可爱的东西确实给出了错误的想法。


    A junior coder at work

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


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


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


    对非程序员来说,编写一些有可理解价值的代码。如果我能向我母亲示范流沙,那就没用了。

    询问此人的兴趣。例如,如果他/她在证券交易所工作,那么就要编写一个脚本,从适当的网页上读取一些股票统计数据,并将其编译成Excel表格(使用csv,以避免严重的大脑损伤^^),或者将其编译成一个很好的图表。

    如果这个人使用Twitter,那么就编写一些计算他的追随者数量的代码或者类似的代码。

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

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

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


    给我妻子的主意是什么,我做了一paycheck(它真的工作!我的承诺!我们不只是浏览网页,所有的一天!)我有一个在卫星上的Python晚报出售前几个基本概念:在呼叫分配功能(打印),和阅读在if语句和变量,知识工程。因为她是一个教师,我的工作conditionals likened理念与preschoolers:)

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

    一对夫妇后的审查的概念非常高的水平,然后显示的代码是一个简单的数字游戏,让它一直就这样在事后来劝告而来找我的即插即用的代码。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 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!")

    除了有点抽象的概念"进口",这是一个非常简单的例子,很容易遵循和"连接"到什么是发生在屏幕上,它实际上是不做一些有趣和互动的。我认为我的妻子希望从一个小的mystified体验不需要了解整个概念没有很多方式的代码。

    我认为关键是要有人能够看到代码和它并排端的结果。


  • 计算机程序员编写程序。
  • 虽然不是编程,但计算机程序员在他的工作场所惹恼了漂亮的女人。
  • 然后:http://markharrison.net/stackoverflow/univac-1110-500-unisys.jpg

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


    有一个名为logo的cli图形包,最有名的是Turtle图形包,用于使用诸如LT 90, RT 105等命令在屏幕上绘制形状。如果您能找到它,尝试绘制中等复杂度的图形将是一种很好的体验。

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

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

    在logothings或wikipedia上查看更多信息,该网站也有现代logo翻译的链接。


    当我5岁的女儿问我这个问题时,我让她"开发"一个小箭头"机器人"的程序,用流程图的形式把他带到棋盘的左上角,像一张纸,表示移动、转弯和条件。我认为这也适用于成年人。

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

    关于你的编辑:恐怕程序员对其他人关于编程的想法了解得更少。;-)人们认为编程是一种矩阵式的绿色视频卡腐败,就像他们认为间谍都装备了詹姆斯·邦德的高科技玩具一样。任何一个专业人士在看关于他的工作的电影时通常都会感到恼火。因为电影制作人不知道!另一方面,我们知道如何正确地描述电影中的节目吗?;-)


    我发现"不教人编程就教人什么是编程"的最佳方法实际上是删除与特定编程语言相关的任何内容。

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

    比如,如果用户输入负贷款金额,会发生什么?如果用户付不起贷款怎么办?贷款申请怎么知道?贷款申请如何知道要检查哪个银行帐户以及要检查哪些付款历史记录(即,实际用户是谁)?如果用户试图在"贷款金额"字段中键入自己的姓名,该怎么办?如果用户试图接受超过75年的贷款怎么办?我们应该把选择限制在可用长度的列表中吗?

    最后:编程就是把所有这些规则都取下来,用计算机能理解的语言来编写它们,这样它就能完全遵循这些规则。在这一点上,如果有必要的话,我会抽出一些简单的代码,以便可以查看整个语言,然后用该语言编写一个规则。

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


    是什么样子的,当你的工作吗?

    它看起来像打字。

    说真的,虽然,是时候规划文本,如果是类积木,乐高和建造一个大房子,你不得不在很多文本类型,就启动一个hooking钉,一孔。我一般是这样描述它。


    在更高层次的语言中,用图形或窗口进行定义。

    为什么?一个非程序员通常也是一个非材料学家,这就是为什么他不会得到排序的好处。但是在屏幕上显示的东西("看,一个窗口!""看,打字太少了,我们有一个旋转的3D盒子!")能创造奇迹;)。


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

    在Hello World上启动没有什么错,只要你能展示电脑对它的实际操作。然后您可以一次引入一个构造。编程就是这样——进行增量更改,并看到结果。

    所以你有一个"你好,世界"节目。现在改为

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

    那么if构造

    1
    2
    3
    4
    5
    6
    7
    8
    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!");
    }

    然后演示最后一个程序在收到除"是"或"否"以外的答案时失败,以及您将如何修复它……

    等等。我认为您不需要深入研究递归之类的深层次概念,甚至不需要真正了解函数。

    只要你能在计算机上显示出这些不同程序的结果,你用什么程序来实现这一点并不重要。(尽管这些伪代码示例可能非常接近于有效的python)


    机器人编程是一个伟大的解释,我认为,因为即使是简单的例子,contrived实践。在机器人的世界您好或等效的数字打印列表可能有A线的机器人移动或旋转一圈。它很容易在一个非程序员的理解是,一个机器人做什么有用的信息必须与第一移动位置的准备。这可以让你更简单的程序结构和流量控制。

    你要让机器人移动前锋,但只有当有没有阻塞它的路径。那么你想和它的转动。这是一个简单的程序使用基本的流量控制,和功能,你的电话是很容易理解的(如果你的平台有体面的abstractions无论如何)。

    因此,图形可能会工作。什么是安切洛蒂的直接结果。jQuery的,甚至,因为每个人都熟悉的旋转动画图片和网页。即使在contrived实例样推元素在DOM有湖和最容易理解的影响,人民想什么和为什么做的语句在程序中。

    这可能是与东西样robocode的标志真的非常方便。


    http://ALT文本,维基百科upload.wikimedia.org / / / / / /拇指/ 450px-chopin-nocturne-8-preview.png chopin-nocturne-8-preview.png E3

    1
    2
    3
    4
    5
    6
    7
    8
    {
       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;
       // ...
    }

    也许是这一现代作曲家写乐谱。工作of a Composer是智力活动创造的音乐学院。一个评分是一个钢琴家,作曲家告诉我玩,他是由精密单指令手段(休息和笔记,等等)。如果"指示"是不确切的,还想玩一些不同的钢琴家。

    工作的软件开发是智力活动解决问题(问题),要做自动处理的数据)。一个源代码,开发者是告诉计算机要做什么,他是由手段的精确指示。如果指令是不足够精密,计算机要做一些不同的和不正确的解决问题。


    我会用伪代码写一些东西来演示如何使用计算机来解决日常问题。也许决定从哪家商店买一份特定的杂货清单更便宜,或是其他类似的商店。


    我想表演前编程的样子吗?刚刚流行的A端与

    1
    find /

    程序员写指令让计算机执行。运行程序会导致计算机实际遵循这些指令。

    一个例子是,厨师会按照一个食谱来烤一条面包。(即使在他们的头脑中)这是程序设计。与我妻子不同的是,电脑每次都严格按照食谱操作。我妻子,在她脑子里做的,结果每次都不一样,但很好吃;-)

    如果你想继续详细地讲授这个,那么伪代码很容易理解。

    例如

    1
    2
    3
    4
    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代码的美几乎是任何人都能理解的,这就是它的意义所在。


    为什么不在Scrum团队的生活中每天播放延时视频呢?


    完全取决于她的兴趣程度(或你对她的兴趣程度)。大多数人把这个问题当作闲聊来问,其实并不想知道。

    编程不仅仅是算法(比如"如何煮咖啡"),它也从根本上植根于数学。大多数人很快就会被数学术语的微妙使用绊倒(什么是"函数"?.

    为了真正教授编程,回想一下你自己的第一次编程经验,你的第一次编程老师,你的第一次编程语言可能会有所帮助。你是怎么学的?当你在学习的时候,你的头脑里已经有了什么新的技能(比如微积分)?是什么促使你想理解变量是什么,或者为什么有三种不同的循环?

    语言方面:使用类似于python的东西。很高的水平,不卷曲的括号可能更好。


    惊讶这仍然是开放的,惊讶没有人已经给出这个答案。(我想。我可能不小心跳过了40个问题中的一个,反正没人会读。)

    你的答案在你的问题中

    When I was a kid, we once went on vacation in Italy. On the way down,
    the pilot let me into the cockpit of the plane. Of course, I didn't
    learn how to fly the plane. But I did get a peek into the pilot's
    world. I got an idea of how they make the plane go, what the pilot
    actually does.

    That's really all I want to do.

    这就是你要做的。从教程中选择一个简短的练习。一个稍长的图形用户界面,由于增加了视觉效果,也可能是有益的。(游戏可能有点长。)让她看着你编码。就是这样。这和你的飞行员例子一样。

    此外,还有许多在线回复,可以使观看您的代码更加即时。


    在伪代码中:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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允许这样做?).

    您还可以调整这个示例使其具有循环。希望这有助于向那个人展示程序的外观(因为它是一个实际的语法,而且相对容易理解)。


    我说的是做一些标准算法在psuedocode(相当多的任何n ^ 2应精细分类算法。我喜欢选择SORT)或点。他们99-bottles-of-beer.net http:/ /

    然后再次,我只是样指向人们99-bottles-of-beer.net B)


    快速编写代码,读取股票报价并将其写入Excel电子表格。这很容易用几分钟就可以完成,而且当非技术类型看到它的实际价值时,它们会很快给人留下深刻印象。


    爱丽丝是卡内基梅隆大学的学生。

    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.


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


    我说给他看泡泡。

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

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


    我教编程已经很多年了,我发现你需要用多少种方法来解释事情,这和你有多少学生是一样的。但一种大多数时候都有效的方法是:

  • 提供一个流程图,显示一个简单应用程序的逻辑流程
  • 用全人类语言(如英语)编写说明。
  • 把每一条指令缩写成程序设计语言中使用的简写。
  • 为教学目的选择一种不那么神秘的语言,如BASIC或PASCAL。
  • 所有代码都是自然语言的简写。用全英文写的大多数程序似乎都很琐碎。

    至于一个好的算法,那是另一回事。令人遗憾的是,许多计算机科学课程不再教授算法,也不再对它进行学习。


    我会考虑绿脚。虽然这是为了让孩子们学习编程,图形可能会帮助读者把代码与"动作"联系起来。这是我的一位同事写的一篇关于绿脚的文章。


    我喜欢用"更衣室问题"(比如,100间更衣室,最初是关闭的)来激励介绍程序。第2个人进入并打开所有偶数的储物柜,第3个人进入并将其状态从打开变为关闭,所有编号可被3除尽的储物柜的维切弗萨,第4个人进入,以及编号为4的倍数的储物柜的维切弗萨,直到第100个人进入。问题是,哪个储物柜保持关闭?当然,这个问题有一个基本的数学解决方案(只有完美的正方形保持开放),但我认为这是一个很好的入门编程练习。


    Jalf

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

    大多数人都很熟悉选择文件和打印。

    因此,您可以显示一小段请求文件的代码做点什么。它可能非常短,仍然显示程序是如何构建的。

    一段这样的代码将演示:总体结构流动变量和语句的使用API的使用


    我已经做了很多次了。答案很简单,就是你如何对待孩子。玩游戏

    你可能会玩很多游戏,但我遇到的最好的是"猜猜数字"。你玩游戏,他们理解。然后你告诉他们他们刚刚做了一个叫做二进制搜索的事情,它解决了很多问题。然后向他们展示该函数的一些C或基本代码。结构非常简单,因为他们从根本上理解了算法,所以他们几乎可以读取代码。(如果它是100%希腊语,您可能有编码样式问题。)

    C可能更适合整体结构。如果你能把一些哥特人挤进最基本的那一个完美的。跳跃是编程的核心,能够在代码中实际看到它们对于理解来说是惊人的。程序集与未初始化的程序集之间的语法太混乱。而C语言和更高级别的语言在不同类型的结构中隐藏跳跃的频率更高。

    更好的方法可能是抛开basic、c和lisp的打印输出,告诉他们这些语言是不同的语言,它们试图用不同的方式表达相同的东西,而真正的程序员用不同的方式思考许多不同的事情。如果跑去做打印输出对于一个简单的解释来说太困难了,那么就做一张打印输出的名片,把它放在你的钱包里。如果你去掉任何评论,它们应该很容易放在一张卡片上。


    显示R的基础,比C容易理解,有许多内置函数,如mean或sqrt,并且至少R的分配符号是"<-"


    我支持Quicksort,它比Bubble更优雅,也更容易理解:

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


    我会让一个人通过一个相对简单的函数,代码少于十行。不要过分关注语法;要关注它应该做什么,以及它要做什么的步骤。还可以在一些折衷(速度与空间、检查错误或不检查等)上稍微做一点。

    然后解释你展示的是整个程序的0.01%。解释一下,你90%的时间不是花在写东西上,而是花在读东西上,然后弄明白为什么它不起作用。


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

    这可能是一个很长的故事,但是一个很好的例子是一个计算器,比如calc.exe(或者你的操作系统正在使用的任何计算器程序)。每个程序员都应该能够用简单易懂的语言解释"引擎盖下"在做什么(告诉计算机它应该听并记住按下了哪些按钮以及如何处理这些值)。你也可以考虑试着用你自己的语言来证明这一点,这最终也是相当容易理解的。至少,这对我妻子有帮助(我想是)。


    Steven C.引证他的伟大的图书从麦康奈尔,代码完整,ch.2嘿谈论软件metaphors

    A confusing abundance of metaphors has grown up around software development.

    • Fred Brooks says that writing software is like farming, hunting werewolves, or drowning with dinosaurs in a tar pit (1995).
    • David Gries says it’s a science (1981).
    • Donald Knuth says it’s an art (1998).
    • Watts Humphrey says it’s a process (1989).
    • P.J. Plauger and Kent Beck say it’s like driving a car (Plauger 1993, Beck 2000).
    • Alistair Cockburn says it’s a game (2001).
    • Eric Raymond says it’s like a bazaar (2000).
    • Paul Heckel says it’s like filming Snow White and the Seven Dwarfs (1994).