如何编写编程书

2021-06-17 19:16:08

如果您阅读编程书籍,那么您的目标就是学习。如果您编写编程书籍,那么您的目标就是教。当我写下我的书籍功能编程时,我试图应用本文中复杂的一切。

所以要编写一个编程书,你需要了解如何教导某人关于你理解的主题,而不是周围回答他们的任何问题。

这是一个很高的秩序。我不能告诉你我买了多少本节目书籍,开始阅读和被遗弃,因为这本书失败了。

在我们学习在编写编程书时要做什么,我们应该首先学习不做的事,因为我们从故障中学到的比我们从成功中得多。

太多的编程书籍遵循模式A,B,C,X,Y,Z.这种书很容易。每个章节都是有道理的,并在上一个很好地建立。你很高兴能够以相对较低的努力学习。

然后有一个命运的页面转向。你知道那个。在您准备开始如此之旅之前,将您推进了一个复杂性世界的人。

这就像,第1章:学习你的A,B,CS。第2章:学习1,2,3s。第3章:差分微积分!

难以置信地向前翻回上一页,希望找到你错过了这一大规模差距但无济于事的部分。

作者造成这个错误的原因是最有可能的,因为它很容易谈论简单的东西(因为明显的原因)。很容易谈论难以谈论的东西,因为这是作者真正兴趣的东西。

这是中间地面,从初学材料到先进的桥梁,这很困难。几乎每个技术书都弄错了。用文章和博客帖子很容易说同样的话。

技术书籍的另一个问题是练习。数学书籍是所有违法者的最糟糕者,他们在书背面的奇数答案部分,有关如何获得答案的零信息。

在作者解决问题的那些罕见的场合中,这些问题通常只是最容易的例子。来吧,他们通常将它们作为“读者的练习”。

似乎是一个巨大的警察给我。作者只是懒惰。它不像我可以在我陷入困境的时候给他们打电话或发短信给他们,他们会把一切都放在援助。

一本书应该包含尽可能多的信息,以便大多数读者可以独立地学习其主题。读者不应该搜索网络以填写书的空白。

最后,不要跳过步骤。对于一个受试者的人来说,这很容易从点A到Z.多次,他们甚至不知道他们如何做到他们所做的事情。在比赛的这一点,他们只是这样做。

当你试图向他们学习时,这是世界上最糟糕的事情。你无法读的思想。如果提交人没有花时间减慢他们的思想并解释他们在思考的方式,那么学生就无法自己填补这些缺失的碎片。

现在,有所有的步骤,如果你不明白如何自己解决这个问题,那么只有这3条简单的线条就会丢失。

2x + 10 = 20(给定)我们希望从数字中隔离X,因此我们将从等式的两侧减去10。 2x + 10 = 20 - 10 = -10 -------------2x = 10现在x在等式的一侧隔离,我们希望减少2倍仅为x,这将离开我们在一个等号的一侧上的x和另一侧的x的值。我们' ll通过将两侧除以2.这将取消2 x中的2,将我们带到x。 2x = 10 - 2 2 x = 5

由于我们大多数人以前都有代数,我们可以在我们的头脑中几乎没有做这个问题,甚至没有写下简单的三步版本。

但对于刚学习这些概念的人来说,通过在每个步骤之前解释的策略来看血腥细节的每个步骤对于获得理解至关重要。

请注意我如何首次解释我的策略是什么,然后我解释了我将用来实现目标的策略。这是在每一步之前完成的。

这就像能够对数学家的思想同行。在编程中,我们在我们写的每一系列代码之间做这两种心理步骤。

我尚未遇到采用这种方法的数学或编程书。这并不意味着它们不存在。这只是意味着如果他们这样做,他们确实是一个罕见的品种。

写一本编程书正在写一本书来教授人们如何编程。这意味着它主要是一本教学书,并写这样的书,你真的需要知道如何教学。

我从来没有是学校或书籍中教学的忠实粉丝。我一直以为我会做一个更好的就业教学,因为我已经有很多经验辅导学生我的一生。我错了。

当我第一次开始教导我的女儿来编程时,我惊讶于我有多糟糕。我一直在编程30多年。说实话,我很善于善。

但要教它。哇。这比我想象的那么困难得多。我教导了一点令人认识的人,以便于轻松了解。

但是从一开始就教一个人是非常困难的。当我教导她的编程时,她可能会教我关于教学和学习。

现在,这并不像我没有考虑教学或学习我的一生。关于教导某人时,我对我认为很重要的想法有一些非常好的想法。

但我真的很磨练我的教学模式,试图解释计算机如何运作,随后,如何将计算机编程到出生于一个天地世界的人作为烤面包机。

从他们所在的地方带着学生在他们想在整个旅行中乘坐一步的地方,每一步都在整个旅行中解释自己,而永远不会跳过一步或离开任何东西。

这应该是如此明显,但它不是。在我开始教导我的女儿之前,我打开了我的工作电脑,并让她触摸了系统的每个部分。

我知道她是使用电脑的“专家”,因为她已经这样做了,因为她在一年级。这就是我开始的地方。我想消除关于电脑的任何谜。

我有她触摸CPU芯片。正如她所做的那样,我告诉她这个芯片是如何实现的,这是一种像简单的数学和基本逻辑一样的东西。我告诉她,她曾经运行过的所有程序都被解释并在这个芯片内部执行。

然后我有她触摸存储卡。我解释了所有她的开放计划都存储在这里,当她关闭电脑时,他们都消失了。我还解释说,这些是一个微小的电路板,适合插槽,以便如果我们想要,我们可以添加更多内存。

我接下来让她从主板到磁盘驱动器的带状电缆。然后,我解释说,她的节目是在这里安装的,即使在关闭计算机后,他们也会持续。

我也解释说,她的所有文件也在这里以及磁盘如何由以非常快速的速率旋转的盘子组成,因此我们可以快速从它们中获取数据,并且它由我们用于存储信息的磁性材料制成上。

这种经验没有让她成为硬件专家,但它给了她一个具体的计算机模型,计算机是什么以及一个接地的经验,并且是我建立了所有后续知识的基础。

这证明了这么成功,她出去了,并有一本关于计算机如何工作的书,这在详细解释的情况下,比我所做的更好。

我的目标是确保当我们为虚构机器组成自己的小汇编语言时,我画了一个标记的CPU,它不会是抽象概念。

相反,我对CPU的一切都与触摸芯片的经验有关。当我谈到在内存之间运行的数据总线时,页面上的另一个矩形和CPU,这对她来说有某种意义,因为她记得他们在主板上彼此生活得如此接近。

这是教师最大的问题之一。他们遭受太多而且太久了解。当我的女儿问我为什么我们使用功能时,这是我的问题,我看着她,就像她问为什么我们用杯子来喝。

太多的老师责怪学生不要跟上。他们可以通过指向持续罚款的课堂上的学生或两人来证明这个职位证明这一位置是合理的,而不是考虑到这些学生已经学会了课堂外的主题。

在学校,这是一个巨大的问题。希望一位专业的老师能够努力学会识别他们的时间太快或在他们跳过造成许多学生造成麻烦的步骤时。

但是一本书作者没有这样的希望。他们写了他们的书并继续前进。大多数读者都责怪自己“太愚蠢”,以便无法理解材料。

但这只是婆婆。负担在作者不是读者。通过撰写一本书,一个作者对世界说,“嘿,我是一个你对学习感兴趣的这个主题的专家,我知道这么好,我可以教你太了解它”。

好吧,如果这就是你对世界的说法,那么你有一个非常高的酒吧清楚。而且最甚至不接近。我个人遇到了数百,如果不是数千次,我正在阅读技术材料试图了解作者刚刚迈出的东西,并让我落后。

想象一下,你住在这个国家,你的家和学校被汹涌的河流分开。

现在,有一个很好的桥,你可以用来穿越这条河,但它会向学校散步20分钟。所以在过去的10年里,你一直穿过河流,这是一堆滑溜溜的岩石,从岸边到岸边。

有一天,一个新的孩子进入你的邻居,你成为快速的朋友,开始一起走路。也就是说,直到你来到汹涌的河流和它的岩石的滑道。

你轻松地穿过它,并在怀疑的犹豫不决地看着你的新收购的朋友。你告诉他们,这很容易,他们所要做的就是慢慢地走过岩石,他们会安全地到另一侧。

这些话没有什么可以提高他们的信心。意识到告诉他们什么是不够的,你决定展示他们。所以,你冒着回到河的另一边,告诉他们密切关注你的交叉。

然后,你就像以前一样交叉。你的朋友仍然不相信他们擅长制造它。所以你又过度回来了,说得很慢,解释你在做什么,因为你更慢慢地穿过岩石。

在最后的解释和演示之后,你的学生是更聪明的,决定走到桥上。你得出结论,你的新朋友足够好,但不是一个非常好的学生,你让自己独自上学。

在这个故事中老师的问题是他们忘记了不知道如何穿过河流。他们一直在这样做,这很长时间,他们不记得他们如何第一次感受到无法做到这一点。

试着在你搭配鞋子之前回想一下。试着感受到它的努力使循环造成并推动鞋带进入正确的配置。我敢打赌,你无法认为这感觉如何。

现在尝试想象你无法读取。同样困难。这是因为我们一直在做这么久,以至于我们不再有意识地思考它,这就是学生必须做的事情。

当你不知道如何做到这一点时,需要很多意识的心理能量来思考阅读或绑鞋。没有多少展示某人如何开车将使他们更容易开车。

与我们的河流过度故事,展示了新的孩子如何穿过河流,并用言语慢慢解释它并没有帮助。那么应该做些什么?

这是婴儿步骤进来的地方。新的孩子应该在岸边牢牢握住一只脚。这是他们是专家和非常有信心的地方。然后他们应该到最近的岩石到最近的岩石,并非常缓慢地将一些重量施加到岩石上。

一旦他们到达这个职位,他们需要时间来建立信心,以便他们不会失去立足点。我们不能急于把他们的另一只脚放在岩石上。

一旦他们觉得准备好了,那么他们应该把手放在同一个岩石上。不是下一个岩石。这太先进了。他们需要感到舒适的摇滚,所以这是另一只脚的下一个岩石。

再一次,他们站在那里,直到他们觉得自信地跌倒,然后重复这个过程,然而,在他们需要时慢慢地,终于越过河流。

随着时间的推移,他们将开始厌倦这种步伐,他们会看到跳过每个岩石的脚。但只有在重复这一过程后几十和几十次。

记住,你一直穿过那条河10年。这就像绑你的鞋子。你不必再考虑它了。但你的朋友需要完全关注高度集中的只是为了移动英寸。

这就是为什么跳过一些步骤是容易的专家,即老师,而不是学生。教师已经忘记了是什么感觉不能够做什么,他们是教学就像我们都可以不记得是什么样子不能够配合我们的鞋子。

这种健忘就是为什么这条规则非常重要。教学时,任何步骤都没有被遗漏。

当我们被告知第10章是关于对数的时候,我记得数学课程,我们需要在下周进行测试。

没有提到为什么我们应该关心这些对数。只是那里有这些东西称为Logarithms,我们需要了解它们的所有内容,所以我们可以在我们不太遥远的未来中传递一些测试。

我讨厌这个。我并不孤单。我可以记住更多的是,当学生在我们试图在现实世界中教导我们时,学生会问老师的时候。

答案总是可疑的,从不令人满意。但想象一下,你理解为什么你需要这个神奇的新想法。与这个新主题有什么更好的方法来解决你拥有的问题。

而且没有更好的方法来实现这一问题,而不是给你的学生提供这个问题。我有一个喜欢的例子。

想象一下,你是一位音乐老师,你想教你的教室关于音乐符号。你会在哪里开始?也许谈论符号的历史以及我们在这里如何得到很好。

但这不会通知学生如何阅读或撰写音乐。相反,最好让学生弥补一个非常简单的曲调。或者他们可以想到一个简单的曲调,例如闪烁,闪烁的小星星,如果他们不想试图努力。

然后给他们时间在钢琴或合成键盘上爆炸,直到他们可以弄清楚所有正确的票据。

现在,让他们写下哪个键按钢琴播放这个简单的调整。但他们必须保持秘密的曲调。然后,当他们完成的时候,他们可以拿到你,然后把他们的纸上用手,让你在键盘上玩。

所以想象一下,你可以从学生,a,b和c中得到3个笔记的一张纸。你真的很长一段时间。然后你以后快速地播放B和C.

然后你问学生,如果那是他们的歌。显然,它不是,他们会宣称你错了错了。当被问到你怎么播放错了时,他们会解释一下你玩了太长了,而且速度太快了。

为此,您回答说明每个音符的播放时间没有提到,只是有这些笔记,a,b和c。它在这一点上,您指示学生创建某种方式来指定“如何长”。

然后,当下一个学生出现时,你一遍又一遍又一次地重复这一点。当每个学生获得自己的语法来指定注意持续时间时,通过播放一些笔记,您可以再次播放他们的歌曲,真正悄悄地悄悄地和其他人强有力地。

学生将理所当然地对象您对他们的杰作的可怕解释,您将指出,没有关于唱取笔记的大声的信息。

你教导它们的下一课是通过播放一个非常低的B然后是一个非常高的B然后中间C.一个人希望学生再次反对这种可怕的材料性能。

然后,你解释说他们没有告诉你一个游戏所以你选择了一个人喜欢。再次,学生再次返回他们的桌面以进一步改善符号系统。

现在,一旦所有的学生都有时间磨练他们的符号系统,你就有一些志愿者来到前面,向你解释他们的符号,然后你玩它。

最有可能的是,你会玩它很好,很多学生甚至可以猜测你刚刚演奏了行的第一部分,行,排船。

在这一点上,你要求学生用邻居贸易论文,然后要求志愿者来到钢琴并发挥邻居的作用。

希望在学生不愿意志愿者或者令人沮丧的性能尝试之后,课堂将理解为什么有一个标准的音乐符号系统是如此重要。

现在,每个学生都有试图向别人发挥成分的人传达他们的个人音乐符号的问题。现在他们有问题,他们完全准备好,对你有的解决方案更感兴趣。

只要我们是人类,人类一直发明要解决问题的事情。和那些邀请某些事情真正了解他的发明人的人,因为他理解它解决的问题。

当我的女儿问我为什么我们在编程中使用函数时,我做得很好。但是,在很多几个月之后,当我以一个深思熟虑的回应来到她时,她将这个问题视为明显。她觉得她甚至质疑它说“我们使用一切函数”。

即使在她早期的学习编程中,她也经历了足以看到功能的好处。所以,所以,她无法相信任何人会遇到质疑。

这是一个相同的问题,面向许多关于复杂抽象概念的学生。他们发明了他们的人了解他们,因为他有问题来解决,这就是为什么让学生在给予他们的解决方案之前是如此强大。

但是,如果你不告诉他们解决问题的解决方案,那么更好的是,如果你刚刚在他们身上的问题,而是通过发明或发现解决方案的过程来接受它们。

由于时间限制,我们永远无法真正发现在教学环境中的解决方案。一些科目花了几年或几个世纪来成熟。但我们可以模拟发现的道路。作为了解道路的人,您可以指导学生得出你想要的结论。

当我向想了解功能规划的程序员解释Monad时,我这样做。我给他们以纯粹的功能编程语言做效果的问题,然后让他们尝试使用纯粹和有效的功能,直到它们遇到问题。

然后,我们为每个问题案例逐个创建解决方案,当我们完成时,我们实际上创建了Monad。当我们采取我们创建的解决方案时,不了解Monad,并将它们与Haskell或Prescript这样的语言中的Monad进行比较,我们可以看到这两个解决方案彼此相同。

现在他们也有inv

......