如何向父母解释我学习编程语言?


64

我目前正在完成计算机科学硕士学位。我对编程语言特别是类型系统感兴趣。我对这个领域的研究很感兴趣,下学期我将开始对该主题的博士学位。

现在这是一个真正的问题:我该如何向(以前)对计算机科学或相关领域没有知识的人解释自己的意愿?

标题来自以下事实:我什至无法向父母,朋友等解释自己的所作所为。是的,我可以说“重点在于帮助软件开发人员编写更好的软件”,但我认为这并不是真正有用的:他们不了解“编程”,他们不了解它的含义。感觉就像是我对中世纪的某人说我是一名汽车修理工:他们根本不知道我在说什么,更不用说如何改进它了。

有没有人与现实世界有很好的比喻?启发性的例子引起“啊哈”的时刻?我是否应该向60岁以上没有计算机科学(也没有学术经验)经验的人展示一段简短的代码?如果是这样,我应该使用哪种语言?这里有人遇到过类似的问题吗?


评论不作进一步讨论;此对话已转移至聊天
DW

3
如果我正确理解面板的话,这个问题就会被否决,并带有一个或多个关闭标志。请考虑发表评论,以便我改善它。尽管我已经潜伏了一段时间,但这是我第一次积极参与该网站,也许我对某些政策并不熟悉。
effeffe '16


1
我简直不明白为什么这个问题比与特定问题相关的问题更能引起人们的兴趣,而这个问题更有用。这个问题荒唐可笑,令人难以置信。难以置信!
nbro

2
@nbro我对这个问题没有什么可笑的,而且我不确定您如何确定某个特定问题比另一个问题“更有用”。
effeffe

Answers:


59

如果您有几分钟的时间,大多数人都知道如何在纸上将两个三位数字相加和相乘。要求他们这样做(或者如果必须,则承认他们可以这样做),并要求他们确认自己有条不紊地完成了此任务:如果该数字大于9,加一个进位,依此类推。他们只是给出了如何执行该操作的描述,这是一个算法示例。

这就是我教人们单词算法的方法,根据我的经验,这是最好的例子。然后,您可以解释一个人可以想象,计算机必须完成更复杂的任务,因此需要一种明确的语言来向计算机提供这些算法。因此,编程语言的兴起是因为人们表达不同的想法,并且您正在研究设计这些语言的方法,因此更容易出错。

这是一个非常明显的情况。大多数人不知道他们使用的计算机运行程序,或者这些程序是人类编写的源代码,或者计算机可以“读取”源代码,或者与算术相关联的计算是计算机唯一要做的事情做(以及数据移动和联网)。

我的研究领域是量子计算,所以当人们问我要做什么时,我不会试图解释这一点。取而代之的是,我试图解释量子物理的存在(他们通常听说过薛定things的猫,并且事物同时存在于两个地方),并且由于这种奇怪的物理原理,可能可以进行更快的计算。

我的目标是让这个人比他们进入时更加了解,对他们不知道存在的世界感到兴奋,但是现在您已经熟悉了这个世界。我发现这比解释我的特定研究问题更有价值。


27
排序一副纸牌也是引入算法概念的一种简便方法。
Morwenn '16

2
@Morwenn没错!我们在日常生活中执行大量算法!发牌是一种算法,流量有很多算法方面,尽管它们是基于事件的,而不是强制性的,但是当您在自动驾驶仪上进行烹饪时,它是一种算法。我喜欢加法的原因是,每个人在小学时都学习了相同的算法,而要对数字列表进行排序,人们的策略会有所不同,而且他们也不是有条不紊的:他们试图找到相近,相邻数字的模式,而且并不是每个人都知道订购一副纸牌应该仍然有(在黑桃之前是心吗?)
Lieuwe Vinkhuijzen '16

就个人而言,当被问及量子计算我倾向于避免物理学彻底,但尽量给人总体思路(即量子计算机不能正常工作更好更快,但可以简单地做计算的方式这是超出范围的普通计算机)。如果他们问这种方式是什么,他们往往对简化视图很满意,基本上就是SIMD处理(线性资源足以访问并行输入数据的指数大小),毕竟大多数算法都是这样。
Vee

您可以超越卡片。最近,我发现自己使用Quicksort的变体来对一堆我必须整理的文件进行排序,甚至根本没有考虑过,因为基本的插入排序太多了。
JAB

@JAB太神奇了!但是您可能已经对Quicksort了如指掌。解释加法与排序的优势在于,每个人都具有相同的加法算法,但没有门外汉有任何系统的排序算法。另一方面,这可能是一个优势!您将解释不同的算法。这是我与具有数学头脑的外部CS交谈时所采用的途径,它遇到了针对具有不同时限的同一任务的不同算法的概念,以及为什么下限比较困难。
Lieuwe Vinkhuijzen

18

我会尝试这样的事情:

程序员可以告诉计算机该怎么做。为此,他们需要使用一种编程语言。那是计算机和人类都可以理解的语言。例如,如果您编辑Word文档并按一个键,计算机将显示您按的字母。那是因为程序员写了一个程序说:如果用户按下“ A”,则在文档中放入“ A”。如果用户按下“ B”,则将“ B”放入文档中,依此类推。计算机仅遵循程序员编写的程序中的规则。

现在,有时程序员错误地编写了一个愚蠢的规则。无论如何,计算机都会尝试遵循愚蠢的规则,但是如果遵循错误的规则,则可能会发生错误的情况。例如,有时,当您编辑Word文档时,突然所有内容冻结,并且计算机不再响应。这可能是因为Microsoft的一些程序员编写了一个不够完善的程序。

我的工作是发明使用其他程序和一些数学方法来检查此类错误和其他错误的方法。基本思想是弄清楚如何预测在执行程序时会发生什么,而无需实际执行。

当然,由于是研究,所以我只研究其中的一小部分,而不是一次完成所有事情,但这是我们要实现的目标的总体描述。

我正在针对自己的领域(特定领域的语言)使用类似的解释,并且我可以报告说它通常可以帮助我克服“哦,您是计算机科学家,我永远也做不到,这让我走开了,不再说话了。给你”的问题。关键似乎是弄清前几句话,直到一个人找到了另一个可以与之相关的示例,例如本例中的Word文档。用于将示例特殊包装到其他人的奖励积分,例如Excel代表会计师,Powerpoint代表老板,或游戏玩家或Web浏览器的计算机游戏,或其他任何形式。

请注意,您不必停留在肤浅的水平。如果您(和另一个人!)想要,则可以从那里深入研究正在执行的操作的详细信息。例如,“在我当前的项目中,我试图数学上证明我去年发明的东西确实有效。这意味着我必须非常仔细地定义程序的真正含义,以及我的发明预测程序的含义,然后我可以证明预测实际上是正确的”。


12

大多数人都懂食谱。如果您按照说明进行操作,您将获得一顿体面的饭。但是,有时可能很难遵循这些说明。例如,当您制作装饰品时,您会从奶奶的波兰语装饰品中逐字逐句找到这样的说明:

煮熟的东西:将一大锅淡盐水烧开。一次放下perogies。当它们浮动到顶部时,它们就完成了。不要煮太久,否则它们会被浸湿!用开槽的勺子取出。

kes。让我们回顾一下奶奶给我们的好建议。拖放在一次一个 ......所以他们都有他们的时间在锅里是不同的长度。得到它了。当它们漂浮到顶部时,它们就完成了。那么“他们”有多少?出现时我会抓住吗?我是否等待80%浮动到顶部然后全部拿走?这太疯狂了。不要煮太久,否则它们会被浸湿!我该如何测量他们何时会变得潮湿,以免他们过长?如果五个同时弹出,我是否有时间将它们全部拿走?

相信我,我一天中毁了很多麻烦。这是任何佩罗吉厨师都曾经遇到过的一个严重问题。但是,尽管即使是最基本的分析也会出现这些问题,但人们仍然可以使用完全相同的方法进行折磨。但是,我们可以做些什么来使更多批次的毛发成功而更少批次的毛发失败?

如果有人专门使食谱更可靠,那岂不是盛大的吗?有人说:“我们可以通过管道输送渗透物,使它们突然弹出并冲出水面!” 或“我们可以在Perogie中添加一种特殊的染料,当然可以安全食用,这可以给它们提供不同的色调,并且我们知道首先将最深色的颜料清除掉,因为它们最容易变湿”。我们希望有一位专家可以采用此食谱并解决其潜在的问题。遍布世界各地的Perogie厨师的生活将变得更加轻松,并且将湿润的面食-马铃薯团块喂给狗的食物也将更少。

程序员也始终遵循食谱。但是有时,他们使用的设备,使用的说明以及使用的解释并没有一起制成他们想要的豪华餐。值得庆幸的是,有些人致力于事业,以提高程序员的生活效率。在您的情况下,您专门研究了程序员使用的一种工具,即语言,试图使其变得更好。


7

这是我要(尝试)向妈妈解释的方法:

人们使用编程语言向计算机提供指令。计算机所做的一切都是通过程序员用某种编程语言编写的一些计算机代码来完成的。

因此,例如,如果我们希望在按下按钮时改变电视频道,那么我们就需要用编程语言编写一些代码来做到这一点。笔记本电脑,智能手机以及其他任何涉及计算机的操作都会发生同样的情况。

程序员似乎可以使用一种编程语言来编写所有程序。但是事实并非如此。对于所有不同类型的应用程序,存在不同的编程语言。

一些用于构建网站,其他用于构建便携式计算机应用程序(例如Microsoft Word)。

存在许多不同的编程语言的原因之一是因为某些语言比其他语言更适合某些任务。另一个原因是某些语言被设计用于不同的计算机。因此,您不能总是获取为智能手机编写的代码并在笔记本电脑上运行它。尽管有些程序员可以使用多种语言进行编程,并且许多程序员具有能力或快速学习新语言,但是任何程序员都比其他人更了解某些语言,而有些则根本不了解。

因此,编程语言是使计算机工作的关键技术之一。设计良好的编程语言可以极大地提高程序员的生产力。它们还可以提高安全性并减少编程错误,错误和缺陷。

因此,基本上,这就是我要研究的内容:编程语言的不同部分如何影响程序员的工作效率?特定语言的哪些部分使其更适合编写网站代码?为什么某些语言比其他语言更受欢迎?

这些问题似乎有些深奥,与普通人的日常生活相去甚远,但事实恰恰相反。学习编程语言对于使用计算机的任何产品或服务都至关重要。今天,这几乎意味着一切;)


7

您最好的选择是与人类语言进行类比。

编程语言用于向计算机提供指令。人类语言用于与他人交流思想并帮助形成我们自己的思想。在萨丕尔-沃尔夫假说说,您所使用的语言会影响你的思想。(Sapir-Whorf假设的正确性尚有争议,但是在讨论编程语言时我们只能接受它是正确的。否则,您不妨放弃博士学位。)

人类语言种类繁多,有些具有我们认为是异国情调的特征。例如:

  • 有些语言要求您在每条陈述中都表明证据的真实性:该陈述是否是由于您自己的经验,推理,传闻和推测等引起的。
  • 有些语言通过凝结形成巨大的单词;每个单词都可能经过高度修饰,以编码有关其语法作用的大量信息。 其他语言几乎根本不会修改单词,而是依靠单词顺序或质点来表达该信息。
  • 语言的词汇量不同。某些语言中的单词只能带割礼才能翻译(例如엄친아)。有些语言具有出色的出色表达,以至于其他语言借用了它们(例如Schadenfreude)。
  • 有些语言没有左右的概念;您必须以北/南/东/西来表达一切。
  • 某些语言没有数字。语言的常用颜色名称也有所不同。
  • 语言的语音策略各不相同。例如,音节速率变化,日语倾向于使用许多简单的音节,而中文则慢一些,但是以音调编码信息。
  • 语言的信息密度各不相同。如果您查看汉英法翻译,您会发现中文版在纸上非常紧凑,而法语将占据最大的空间。
  • 有些语言(例如英语)是混杂的:任何人都可以从另一种语言中随意借用一个单词并将其英文化。其他语言,例如法语,具有抵抗变化的标准化机构。例如,冰岛人天生就非常保守。

客观地说,有没有最好的语言?答案可能取决于您要执行的操作。

  • 如果您想通过无线电秘密通信,那瓦伙族人将是一个不错的选择。(提及您最喜欢的“只写”语言。)
  • 如果您要向后代发出警告,并且铭文必须从现在起几千年来可以理解,那么您可能想要使用中文(由于说话者人数众多且其书写系统稳定)英语(在过去的千年中发生了巨大变化,但众所周知)。(C和JavaScript可能会“永远存在”。)
  • 汉语,有很多同音词,非常适合打扰。(Perl诗歌)
  • 也许中立很重要,在这种情况下,您可以选择世界语。(Java被设计为可移植的; C则不是。)
  • 也许您需要精确地表达思想,自然语言是不够的。您必须诉诸伊斯库伊尔
  • 由于巨大的文化差异和某些单词的文化内涵,在某些语言对(例如阿拉伯语-英语)之间进行翻译可能非常困难。同样,某些想法不容易用某些计算机语言表达,因为该概念根本不存在(例如,尾递归)。

最后,计算机上的所有内容都被翻译成机器语言,但是为工作选择正确的语言会极大地影响软件的生产率,可靠性,性能和敏捷性。对于“严重”的项目,我们选择诸如Ada或Java之类的束缚语言,而对于最大的鞭策则选择 Ruby或Perl 。对于查询数据库,SQL是常用语言。编写自己的C代码是愚蠢的。

基于这些类比,我相信您可以花几个小时来阐述一些想法,例如函数式编程,类型安全性,类型推断等。


1
这样做的一个困难是,有些人从未真正反思过自己的自然语言。因此,对于某些人来说,语言示例几乎与编程语言的概念一样难。如果您知道该人(至少)是双语的,则前景可能会更好
。...– TextGeek

@TextGeek即使在英语中,也有方言。人们争论语言规则,例如双重否定句和以介词结尾的句子。语言一直在发展,有时以有争议的方式发展。发短信的流行导致了新的缩写。在美式英语中,可以通过添加“ -gate”后缀将任何名词变成丑闻。我认为您不必双语才能欣赏语言的创新和多样性。
200_success,2016年

3
  • 计算机语言在某种程度上与人类语言有关。他们使用标准/通用/共享字词。考虑到有成千上万种人类语言,有些已经不复存在,有些则很活跃,并且它们的词汇和用法随着时间不断发展。有些人创造了新的有用词来表达以前无法表达的概念。计算机语言和人类语言的另一个重叠方面是语法。有些语言(例如英语)的语法非常复杂。考虑所有不同的时态和控制它们的复杂规则。其他语言没有相同的时态。另一个关联是词性类别,例如名词,动词,副词,形容词等,它们的功能有点像计算机语言中的类型。想象使用以前未考虑过的不同词类或使用来自不同语言等的新词性组合来创建新语言;因此请注意,语言学与计算机科学有联系,例如,在Chomskian语言理论中尤其如此。

  • 软件和硬件通常与引擎机器相关,甚至以此命名。有一个旧的软件比喻,试图修改一个复杂的24/7生产系统就像在飞行中改变飞机的引擎。还请注意,喷气发动机非常复杂,涉及可互换零件的大量精确规格这里有一些类似于控制硬件的计算机语言的类比。想象一下所有文件的复杂性,这些文件精确地描述了如何制造喷气发动机:所有零件,如何构造,如何装配在一起,如何组装等;它们是由工程师使用精确的格式/结构/常规规则创建/编译的;软件与此类似。

  • 机器上,任何没有经过科学或数学教育甚至是孩子的人都可以理解图灵机的基本概念和许多方面奇妙的创造。一名嫌疑人Turing受打字机和/或电传打字机的启发。可以描述状态表,并向他们展示一个计算乘法的状态表样本,然后有人可以观看图灵机的youtube动画来计算基本运算,例如乘法。告诉他们状态表可以计算或从字面上决定一种语言,而输入则从字面上称为word。实际上,图灵机接受语言中的单词等告诉他们,有两个状态表都可以计算乘法,但是一个状态表比另一个状态要快得多或效率更高,并且您的研究需要找到更好的状态表概念。弄清楚如何有效地建立状态表需要使用编程语言来汇总大型状态表的内容!一个编译器转换用编程语言为国家大型一表的代码。

  • 排序算法是计算机科学的一个很好的入门级隐喻。可以查看每种指令的不同指令列表,也称为算法。一个人可以学习什么是冒泡排序,而不是插入排序,可以使用一副纸牌。现在着眼于不同的指令集,并认为它们必须用非常精确的语言编写,就像数学语句一样精确,具有严格的语法等,并且具有基本的共性/结构:条件逻辑,循环,变量等,并说明此精确规范的技巧与计算机语言有关,并且某些不同的语言可能会产生相同的算法,但是这些语言在风格上有一些细微的变化,需要深入研究,等等。


1
为什么要反对这个?我认为有很多见解。可能并非所有人都同意,但是这里有很多可能性。+1
effeffe

3

您只是说“我正在帮助教计算机工作的人”

这个想法是程序员教计算机使用程序来做事,而您正在帮助他们。我认为如果他们已经对计算机有所了解,它将可以正常工作。


要点是:“假设他们已经对计算机有所了解,我认为这将会奏效”:如果您仔细阅读我的回答,就会发现主要问题是向那些不了解计算机实际工作原理的人解释我的所作所为。
effeffe

@effeffe:但是他们知道计算机存在吗?他们可能会想到有些东西叫做“程序”,“应用程序”或“应用程序”,即使他们自己从未有意使用过计算机。因此,为简单起见,编程(除其他事项外)是通过写下计算机可以遵循的指令来创建应用程序。当然,要让他们欣赏编程的任何细节或如何对其进行改进,将花费大量的时间和指令,但是如果他们知道计算机和程序会随着时间的推移而变得更好,那么他们至少对计算机“有所了解”。
史蒂夫·杰索普

3

如果您不想使用比较,尽管我认为Lieuwe提出的“算法”很好地传达了这一想法,但您可以说您想减少人与计算机之间的误解。毕竟,您正在使用语言,这对人类来说是非常基本的。那么,为什么不假装计算机只是您要与之交谈的另一种想法呢?

人类创造了计算机,因此我们知道计算机的思维方式。但是计算机通常不“知道”我们的思维方式。(或者,当我们编写一个复杂的,精心制作的bug并愉快地生活在代码的荆棘中多个周期时,我们的实际意图是什么?)因此,我们有责任完善用于与之通信的语言,并且减少误会的可能性。那就是你要做的。在这种情况下,当然非常喜欢诸如拼写检查或语法之类的类比。


3

这是两个可能有用的类比:

  • 我的工作有点像探索音乐符号的新方法。示例)尽管主要的注释系统非常复杂,但是探索替代方法可以减少作曲家,表演者的时间/精力/错误,或者允许笨拙或无法在主要系统中表达的内容,或者甚至只是促进不同类型的思维,从而导致新颖的构图。(这使我们容易理解,挑战之一就是说服人们采用新技术。)

  • 我正在帮助为行业内的人们设计更好的工具就像制造业中的人们借助无绳电钻,激光切割机和3D打印机(在60年前都没有这种创新)的帮助下一样,软件开发行业的人们也受到更强大,更精确,更强大或更强大的技术的帮助。易于使用的编程语言及其功能。


2

好吧,很可能,您有一些学习语言的理由-使用该理由。例如:

我正在尝试使计算机及其应用程序更便宜,更易于使用且更安全。

如果那是引起他们注意的东西,请随意加深一点,但不要忘了推论距离 -大多数人在解释那些与学生现有的经验和知识相去甚远的东西时会遇到很大的麻烦。

语言是计算机阶梯上的最底层。您尝试向其解释的人员可能不知道什么是算法,更不用说代表该算法的不同方法或多或少有用。如果您做得足够轻巧,则可以进行任何解释,但是如果您想解释诸如“编程语言RnD”之类的“较深”内容,则可以准备遍及多个层次。如果您要解释的人员已经很好地处理数学,那么这会有所帮助,但这与计算机知识一样稀少:)

轻松进行类比。他们听起来好像在帮忙,但是根据我的经验,即使认为这是很大的帮助,他们通常也会使感到困惑。编程语言有点像律师说话......但是这不是对谁不人非常有帮助已经了解编程和律师业,真的。如果您确实需要一些额外的帮助,示例就可以很好地工作-但您确实需要让示例适应您要向其解释的人员(以及您正在研究的内容)

你知道你怎么不能被零除?我正在尝试确保计算机永远不会尝试除以零,因此当有人犯错时它们不会崩溃。


▲建议采用分阶段且温和的方法。
PJTraill '17

1

我发现最好的类比是针对与您交谈的人量身定制的。他们是画家吗?讨论您的工作方式等同于探索如何制作更好的刷子的理论,只有这个领域才60年,而不是600年!马术者?将其与多年来任务专用马蹄铁的发展进行比较。

如果他们真的想更好地理解,我最喜欢的解释方式是谈论填写税表以及每一行的说明。我发现大多数20岁以上的人都对IRS 1040表格有一定的经验,而您填写的那些框与谈论变量赋值非常吻合。然后我指出,软件每分钟可以完成约20亿次操作(一个虚构的数量,但可以理解这一点)。如果您正在学习计算机语言,那么人们很容易理解为什么更好的说明实际上很重要=)

如果他们仍然感兴趣,那么这就是我开始尝试解释流控制的时候了。通常,当我结束对Form 1040的流程控制的讨论时,他们开始兴奋不已,开始询问我是否已将我的任何想法出售给政府!

我经常谈论嵌入式系统,因此有时我会将1040表格的类比与机器人烹饪一条面包(或500条面包)合并。通常,它很奏效,尽管出于某些原因,从IRS税收表格到制作使您的口中品味良好的产品,对于某些人来说确实很难。


1

您的父母有某种计算机。可能不是一个,但是很多。他们可能有台式计算机,笔记本电脑,电话或iPad。如果没有,则他们有洗衣机,录像带,DVD播放器或内置计算机的东西。

如果他们不这样做,您会说:“对不起,但是您设法完全没有计算机地过着生活。所以我无法向您解释我在做什么。但是世界在变化。您只需要相信我,我知道我在做什么。”

如果他们有任何类型的计算机,您会说:“这是一台计算机,它不仅可以通过魔术工作,而且还可以工作,因为一些聪明的男人或女人编写了一个程序来告诉您的计算机如何工作。这些聪明的男人和女人真的很辛苦,我正在做的是帮助他们使工作更轻松。”


-1

不久前,我认为编写一个很好的类比编程方法是编写编织食谱,而对于那些几乎没有计算机经验或没有计算机经验的人来说,很容易理解。

一个好的编织配方在相同的指令列表中包含多个尺寸,这些尺寸可以为您提供循环和if语句。对于那些没有编织的人来说,这是不可读的,并且如果其中包含错误,您最终将可能会错位花样或额外的袖子。然后,作为食谱编写者,您将有责任根据不正确的毛衣找出食谱错误的地方并进行修复。

然后,您可以使用“我正在研究编织,钩编,Nålebinding和类似方法的食谱有何不同”的示例,并学习X(需要在其中找到实际操作的类比)。


询问者不在学习编程。他们正在研究编程语言的设计。
David Richerby '16

@DavidRicherby这就是为什么我建议使用OP的示例来研究食谱如何寻找不同类型的手工方法。显然这些也有很大的不同。
托尔比约恩Ravn的安德森

-1

这是魔法!

当没有技术背景的人问起编写软件/程序/进行软件工程的意思时,我只是告诉他们这到底是什么:魔术。魔术师用深奥的语言咒骂咒语来执行某些任务,挥舞着魔杖,并且发生了一些神奇的事情。我用某种深奥的语言咒骂某些咒语,扭动鼠标,并且发生了一些神奇的事情(就它们而言)。

如果他们不相信,我请他们打开智能手机,并告诉我它上的所有功能真正起作用。他们通常说:“我不知道,它确实做到了。我按下按钮,事情就发生了。” 然后我告诉他们:“是的,确切地说,但我知道真正发生了什么,基本上与哈利·波特挥舞着魔杖并说:'Hocus pocus'相同。”认为这是完全合理的解释。

几乎每个人都知道哈利·波特是谁,他的所作所为以及使他与众不同的原因(至少他是魔术师,可以用魔术做有力的事情)。您可以简单地解释一下,有时候魔术师需要用一种新的语言来书写他们的咒语,以使他们的魔术变得更加强大,这与事实并没有那么远。您可以告诉他们,您正在研究创建更强大的拼写本的过程,以帮助一代甚至更强大的向导在自己喜欢的消费设备上创建更大的魔法。每个人都对此表示赞赏。

史诗失败

如果失败了,我将回到配方示例,因为解决方案的不一致性至少告诉人们,有多种方法可以剥皮猫(或烤蛋糕),而这正是使编程如此的一部分。棘手的。它还可以帮助人们将自己置于CPU的位置,有时按照他们可能不理解的说明进行操作(大多数人可能不知道小苏打和发酵粉之间的区别,以及为什么配方中会有一种或另一种)。

死胡同

我不喜欢以数学为例,因为要进行数学运算,您必须了解这些步骤的用途。您不能盲目地按照说明进行很多数学运算(可以,但是,这通常不是人们学习的方式)。我不喜欢以排序为例,因为它对技术人员来说太技术化,不值得欣赏。如果我正在与可以欣赏排序示例的人交谈,那么他们可能已经知道编程的含义,并且可能自己尝试过。


1
我不认为这与问题有什么关系。具体来说,问题是要问如何向外行人解释类型理论,而类型理论数学。
David Richerby '16

也许可悲,也许不是,但总体而言编程是针对99%以上世界人口的一本封闭的书。这些年来,我花了很多时间试图让非程序员理解编程,但没有成功。向各种人解释各种类型系统的复杂性和美味之处,就像向他们解释亚原子粒子物理学一样,他们的眼睛会呆呆地呆着,虽然他们很有礼貌,但他们不会接受。没关系-他们不需要理解它,并且很可能他们不在乎他们不了解它。我们要做的就足够了。:-)
鲍勃·贾维斯
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.