两年学习“计算机程序的结构和解释”的结果





原件于2020年11月11日发布在我的博客上。如果我理解正确,这不是问题。



我相信软件开发与伪代码编程息息相关。如果您提供了伪代码,然后将其翻译成Python,C,那么这不是问题。主要困难在于这种概念上的活动,而不是编码。您需要知道如何解决某些问题。模块化,抽象。灵活性,可靠性,简单性。设计模式。单元测试。于知道。



世界上有一门课程“计算机程序的结构和解释”(以下简称SICP),该课程定位为计算机科学的入门课程,以前曾在MIT用来教新生。两年前,我很高兴完成了关于它的讲座。 拿起书 首先,我会告诉您有关好处的信息。



文字讲述了与我的日常工作相去甚远的事情,并让我重新审视了编程。功能性是一个按照自己的规律生活的世界。 Lisp语言与我习惯的C语言有很大的不同,因为动态输入,自动内存管理以及在运行时重新定义任何内容的能力使它具有极大的灵活性。我对原则上如何解决不同的问题提出了更通用的想法。用国际象棋语言来说,我极大地扩展了我的功课范围,使我的工作很方便(尽管不是每天)。锻炼使我的大脑工作(有时非常紧张),重新思考和系统化了较早的知识。总的来说,学习SIKP使我成为更好的开发人员,开阔了我的视野。我确定我开始以更加系统和成熟的眼光看待不同的事物。



这本书不断地促使我思考,为此我向她鞠躬。我深刻地意识到了每个人似乎都知道的事情,但是每个人都懒得提及。例如,首先将所有软件简化,然后不可避免地变得更复杂,以提高性能。用户不在乎内部有多少行源代码,但是速度很重要。



如何处理特定效果?在查看代码过程中的缺点时,我变得更好(首先是我自己的代码)。喜欢小的功能,最好尽可能通用。我开始练习对宏的谨慎和适当的使用-有时在C语言中,您可以根据规则谨慎地执行某些操作,而每个人都只能从中获胜。我从本书中的练习中获得的经验帮助我解决了一些工作问题。



但这是硬币的一面。另一个是,本课程的学习方法可以用英语措辞单元“下沉或游泳”来表达。您面前有一个横杆,旁边是任务:向上拉10次。原则上,这足以完成任务,但是不能说这种方法令人愉快。我会说他很累!您已经半准备投入战斗,并且不是从解释中而是从错误中学习了部分材料。也许这是一种训练有上进心的人的可接受方法,但是他把我当成懒惰的人。我几乎无法忍受5章中的3章(有时我停了几个月!),从头到尾都进行了练习,但是似乎我的耐心已经耗尽。



例如,这本书只字未提如何组织工作流程。甚至没有粗略地考虑诸如“调试”(在此特定),“ IDE”(在此特定),“单元测试”,“拆分成文件以供重用”之类的概念。有些片段正在开发某个复杂的系统,只有在本章结束时才能完全准备就绪,并且任务会出现在文本的每个段落之后。那些。严格来讲,阅读了第N页后,在某些情况下,如果不从后续页面中拖动代码,就无法解决该问题。必须仔细拖动代码,因为注释可能会讨论不明显的细微差别,有时还会给出一些代码作为示例,以说明错误的想法。真烦人!是的,就像在现实生活中一样-您需要自己定义任务,在Internet上查找内容,但是该死的...这是一个教程!我在工作中充满了艰巨的任务,也许作者本该对文本进行更多的研究?好的,我是一名专业的政治学家,可以快速访问互联网,但是80年代的MIT新生呢?我确定这并不甜...



让我强调这本书的主要优点:它使您获得个人经验,掌握自己的知识,并从总体上考虑复杂的问题。劣势与它们直接相关:它很复杂,通常不给您提供一些了解某些东西的线索。例如,如果您有某种战斗经验,那么您知道没有单元测试的代码不能称为解决方案,但是本书不会告诉您。您必须自己解决这个问题!你觉得呢?好吧,或者我在撒谎,这本书会以最悲惨的方式告诉你。您将在上一个任务的基础上执行下一个任务(通常在此处)。如果您以前获得过一个测试用例,并且您决定“太好了,那就走得更远!”,那么您将很乐意一次调试两个任务的解决方案。可能,当这种情况发生几次时,您将意识到自己在做错事。最重要的是这样一来,您就不会放弃课程,但是明白了,一切都会好起来的!



文本的另一个烦人的特征:任务(再次,如在现实生活中)有时没有很好地定义。前几天,我在做一个练习,半个小时后,我草拟了一个解决方案,开始重新阅读问题陈述。原来,如果您认真地考虑,那么我完成了95%的工作,花费了大约40%的努力。我检查过的大多数帅哥都做过同样的事情。一个人完全做到了,但是使用了另一个Lisp解释器的黑客手段。我感到沮丧和吐口水,失去了继续前进的动力。让我重申问题的实质:有些任务可以简单而合理地解决所有问题,但前提是您对自己不严格。因此,我了解现实生活中的情况,但对教科书的期望却有所不同。当您在空闲时间做运动并检查自己时,您想100%解决问题,不足以“对当前的迭代足够好”。



单元测试的问题实际上是同一种。有时您需要花点时间思考,以便将其简单地实现到系统中。我知道没有他们是无处可逃的,但是简单的人只是勾勒出解决方案而无需检查并继续前进!严格,专心,经验丰富的人,给您带来的困难就越大。有时只是有时!这很令人沮丧,因为在这里,与工作不同,他们不赞美也不为之付出代价,而且迭代方法的适用性很差。在现实生活中有用的知识和技能在解决学生问题时会伤手!



值得一说的是,这本书包含许多数学知识。通过练习,我了解了这门科学的美丽和力量,但有时正是由于这些具体问题,而对我而言却是困难的,而这些问题仅与所解决的问题间接相关。只是作者决定通过集成示例展示一些内容,因此请记住并保持冷静!



总的来说,我不后悔参加这次冒险,这对我很有用。但是,我建议其他人寻找更好的东西。例如,基于SIKP,考虑到他的错误(正如他们所说,我没有检查),最近开设了“如何设计程序”课程。我想我也应该垂涎他,但是您不会浪费时间。



PS Peter Norvig对SIKP进行了精彩的回顾



All Articles