帮助新手程序员时的合适词汇


9

我发现自己经常会帮助新手程序员。解释为什么他们的代码在询问时不起作用,并提出解决方案之类的建议。我正在帮助的人员接受了Java一年级学位课程的编程方面的正规教育,但是我觉得我无法与他们很好地交流。

例如:一个人可能编写了一个函数,但不理解为什么不执行它,却没有意识到他们忘记了调用它。如果我使用like这样的短语"(make a) call (to) the function/it""pass it the.."我会显得空白。

然后,我的正常流程是在代码中找到一些地方,以使他们从语言中调用函数,并告诉他们可以像调用此另一个函数一样调用自己的函数。有时,即使看起来空白。

还有其他词汇更适合(更好吗?)帮助新手程序员?还是这不是沟通问题?


5
电子表格用户知道如何调用函数。许多人可以自己写。这里根本有错误。
JeffO

@JeffO我一直觉得有些不对劲,但想让那个模块和那些人受益匪浅
Andy Hunt 2012年

7
等一下 您正在使用的程序员不知道“调用函数”和传递参数的含义是什么?这是最基本的,而无需绘制它们的图片并使用涉及猫和狗的隐喻。这超出了沟通问题,不幸的是可能是缺乏知识的问题。我重读了您的问题,看来他们基本上参加了入门级课程,仅此而已?
wkl 2012年

3
@AndyBursh:这样的学生是如何进入第二年的?希望他们不会通过考试并选择软件开发以外的工作。
Doc Brown

3
袜子木偶也许会有所帮助
MattDavey 2012年

Answers:


15

他们最终必须越早学习越好的术语。

正确使用它们,并在每次出现空白凝视时进行解释。只需尝试发送正确的信号,就可以询问他们不了解的任何内容-唯一愚蠢的问题是您不问的问题。


2
我将要发布几乎完全相同的响应,然后再加载您的响应。:) +1
Tom Squires 2012年

不要将解释降低到最低水平,而要提高其水平。
弯曲

2

一般来说

当某人不了解您时,您有两种选择:

  1. 根据人们的了解或不熟悉来适应词汇,

  2. 向该人解释她不理解的术语。

如果该人已经很好地了解了技术词汇,但还不够,或者在您的领域中还不很了解,第一种情况就很好。

例如,您可以在C#或Java中使用术语“ 方法”,而主要使用其他语言的人将无法理解该术语。然后,您将说明在C#或Java中,方法是指我们通常所说的函数(例如,在C中),并且在C#或Java中没有函数。例如,在PHP中方法和函数都存在,并且含义不同。如果差异对人来说太痛苦了,那么为了简单起见,您将讨论功能

在您的确切情况下,您几乎不能选择第一个:不能以任何更简单的方式来重新编写“调用函数”。通话就是通话。您不能再简化了。

这意味着您必须选择第二种方法:向人员解释每个技术术语。

  1. 将该人指向词典或维基百科,这对于基本概念和术语非常有用。

    我会选择这个作为常用术语。例如,我希望邀请该人阅读Wikipedia,以了解什么是多态性,或者什么是协方差和逆方差。这些术语已经很好地解释了,因此不需要在这里重新发明轮子。

  2. 或者用你自己的话解释

    我将针对特定于上下文和/或接受范围广泛的定义的术语进行选择。例如,维基百科对于理解微软对云计算的愿景不是很有帮助,我宁愿向将要使用Windows Azure应用程序的人解释什么是云。

在你的情况下

与您交谈的人缺少编程中使用的最基本的概念和术语。他们无法不学习此核心词汇而无法继续学习,因为他们根本无法交流:他们无法阅读有关编程或博客的书籍,无法听取同事的意见,甚至无法真正地提出问题。堆叠Exchange网站,因为没有人会理解他们的要求。

在您的情况下,我将花几天或几周的时间教给他们一些核心的编程概念和常用术语,而不是寻找合适的词汇。几天后,您将可以与他们交谈,而无需不断地“画它们并使用涉及猫和狗的隐喻”


1

子例程开始,而不是函数。告诉他们,一个程序就是指令列表,菜谱告诉计算机如何做。并且它正在一条指令之后被另一条指令执行(可以并行执行某些步骤,但稍后会更多)。

有些任务是相当常见且重复的,因此如果我们不得不一遍又一遍地写下来,那将是很糟糕的,因此我们只编写一次并从中编写一个“较小的程序” –一个子例程,该例程可重复使用。程序的其他部分。为了能够多次执行它,我们在程序中给它起一个有意义的名称。然后,当我们要将该“小程序”作为较大的程序的一部分执行时,可以使用该名称,方法是使用该名称进行调用

调用子例程就像召唤一个知道如何执行该任务的恶魔一样,以该恶魔的名字命名。因此,当我们想在程序中执行该特定任务时,编写“调用名为Argoth的恶魔”,该恶魔就会出现并按照我们指示他的任务为我们完成任务,然后消失并继续我们的工作。工作。

有时,恶魔需要一些其他信息,如果没有这些信息,他将无法决定要执行哪些任务,或者我们真正想要他提供什么。例如,如果恶魔应该建造一座城堡,他可能需要知道他应该在哪里建造城堡,或者要建造多大的建筑物,等等。这些是传递给恶魔的参数 ……我的意思是,子例程现在变成了参数化的

参数是为了执行任务而缺少但必需的那些信息。它们稍微改变了子例程的功能。它们就像配方中的空白插槽,需要先填充才能执行。

参数,在另一方面,是实际的信息(值),我们提供这些参数。

至于并行执行,我们可以认为它是这样的:总有一个人(或东西正在执行的程序(指令列表))。它是另一个人(您是否知道“计算机”曾经是执行计算的的名字?)或一台机器。程序只是指令列表,它不能独立运行。必须有人来做计算过程(从列表中执行这些操作)。有时,这些操作可以并行执行-我们可以将列表的副本分发给几个人,并让他们每个人执行列表中的一组不同的任务,只要他们彼此之间不打扰或不打扰即可。不必等待别人的工作成果。那对您来说是多线程的;)

至于函数子例程(也称为过程)之间的区别,通常的区别是调用一个函数来计算某个,该将由于执行而返回,而过程只是出于娱乐目的而执行;)对于它们的“副作用” –仅出于列表中执行的操作。

但是,如果一开始调用过程或函数引起一些麻烦,则可以使用曾经流行的另一个术语:jump。可以跳入一个子例程,这意味着您停止执行当前正在执行的操作,并“跳转”到列表(或任何其他列表)上的另一个位置(子例程)以执行其任务。然后,当您完成操作时,您将“跳回”-也就是说,您将返回到被打扰的地方,以便您可以继续执行上一个任务。呼叫和跳跃之间的区别在于,现在是恶魔。

至于有人在这里提到的方法,或者某些语言​​“没有功能,只有方法”的事实–这不是很正确,因为方法函数!–其中的一种特殊类型:它们是用于检索封装在对象内部的某些信息或对其进行操作的函数。它们是“对这些数据进行操作的方法”。该名称来自面向对象的范式,其中数据被对象所包围,并且只能通过称为“方法”的特殊功能才能直接操作。

方法在其他方面很特殊:它必须知道应该操作/调用哪个特定对象(“此”对象)。这就是为什么通常用附加的隐藏参数来修饰方法的原因,该参数存储有关在其上被调用的对象的信息(“ this”指针)。这使函数的调用方式变得很复杂,但这只是程序员的“执行细节”,只要他知道自己在做什么,就不必太在意。

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.