当前位置: 首页 > 科技观察

算法记不住?大师告诉你秘诀:将其逻辑内化

时间:2023-03-19 10:16:46 科技观察

有网友诉说自己的苦恼——我以前很擅长写不同语言的代码,但一年后,我完全忘记了如何用这些语言写代码。现在我正在尝试学习Lua,我可以读懂每一行的意思,但是到了写出来的时候我不知道该怎么做。针对他的苦恼,网友纷纷给出建议。你是指循环、变量等语法吗?或者排序、搜索、递归?在这两种情况下,我只有一些基本的想法,其余的将由Google完成。我不记得代码,只是我需要的。是的,就是这个方法。知道你需要在这里使用循环比记住循环语法更重要。一旦你知道你需要使用什么,你可以根据需要谷歌语法。显然有些东西你应该记住语法,比如如何创建一个函数,如何创建不同类型的变量,如何将输出放在屏幕上......虽然它变得越来越复杂,只要理解概念,然后谷歌出来。你的意思是如何记住如何编写编程语言,如Lua、Python或C++或其他语言?一般都是靠写代码来记住,一会不写就会忘记,然后需要重新学习。我做的网页设计/编程越多,我就越喜欢“直线”方法。只需选择你需要学习的下一件事,并在你和去学习那件事之间划出一条最直、最快的线。弄清楚这一点并继续下一步。您需要学习的只是极少数能让您完成工作的具体事情。你不需要成为完美的全栈开发人员,事实上,你可以将整个过程分解为大约10到20个核心步骤,假设它不是非常复杂。我确实阅读和研究了除此之外的编程语言,因为它们确实有助于将更多东西添加到你的工具包中,并用不同的方法填充你的记忆,但是当涉及到实际实现时,直线方法可能会让你快1000倍。有条件的时候,要做减法。如果一个平台/后端主机很复杂,你需要5个小时才能弄清楚如何做最简单的事情,而这本应该需要几分钟的时间,那么退后一步,看看你是否能以某种方式简化它。您是否需要学习3种不同的编程语言并观看4小时的视频才能完成实际上非常简单的任务?或者,您能否找到一些简单的服务器来存储您临时搭建的数据库——如此易于使用和集成,以至于白痴也能立即找到它?我们不会因为从A点到B点走最耗时、最复杂的路线而获得额外积分。我依靠实践、谷歌和同事:)我记得很少,只有帮助我找到答案的一些面包屑。如果有好的方法,请指教。我在面试中最喜欢听到的答案是——“所有值得记住的东西都被加了书签,剩下的我现在很容易找到;我不需要所有的答案,但我很擅长找到它们。”许多算法网站排名很高。在我看来,从内存的角度理解算法是行不通的。你需要内化它的逻辑。想一想你知道如何做的其他事情,你可能会写下它的每一步,但你不会在做的时候考虑它。就像做黄油吐司一样。假设您有一个按钮式烤面包机。在给面包涂黄油之前,你必须先烤面包。这个顺序不仅仅是你记住的东西,它是有道理的。如果先涂黄油,它会滴入烤面包机底部的加热元件中。Toast是一种算法。是的,您记得这些步骤,但每个步骤和步骤顺序背后都有一个原因。将此应用于您的数据结构和算法。学习简单算法背后的原理,构建理解面试问题所需的基础知识。抽认卡式助记法会占用你很多时间,而且几乎没有任何回报。我了解算法,因为它们是解决问题的广泛技术。每当我无法弄清楚特定语言的确切语法时,我就会用谷歌搜索并阅读文档。Linter和编译器错误消息通常也很有帮助。在过去的十年里,我建立了一个笔记集,我称之为“个人备忘单”,其中包括我需要一次又一次查找的所有内容。起初,我用它来查找rsync命令、Postgres转储/导入命令、nginx配置等,但现在我只用它来查找我一两年才用一次的晦涩的东西。我会说我现在已经记住了一半的东西。但是当我学习一门新的语言或概念时,备忘单是至关重要的一步。重新查找您记得的SO帖子或博客帖子的过程太麻烦了。如果你指的是代码的语法,那就没必要死记硬背了。上网查一下,很简单的。如果你指的是实际的算法(一段代码是一个算法的实现),那么不要着眼于“记住它”,试着像它是某种神秘的公式一样去分析和理解它。当我说“明白”时,我不是说“能说出每一行是干什么的”,而是“能说出为什么会这样,它的原理是什么”。一旦您理解了它是如何工作的,您甚至不必记住如何去做——因为您将拥有重现它所需的所有推理。如果您正在维护其他人的代码,您可能会发现某些代码非常晦涩难懂并且涉及很多间接和/或副作用。在那种情况下,只需问问自己该代码的输入和输出是什么。只有当你需要重构一个东西时,你才需要更深入地挖掘。老实说,我记得以前项目的一些部分,但我并没有过多纠结,而是更关心算法的高级概述,比如合并排序:将一个数组拆分为2个数组,然后将这些数组拆分为另外2个数组,直到数组大小降至1,然后按顺序合并数组。或快速排序:选择一个枢轴,遍历数组交换值,如果它们位于枢轴的错误一侧,则大于或小于枢轴,然后对枢轴的每一侧重复此操作,直到每个值都是枢轴。我记住了算法的主要部分,如果我在理解它时遇到问题,我会把它们放入伪代码中,并根据需要修正我对算法的理解。