想学好编程,别背代码!

分享我编程 “不忘” 的十几种方法

大家好,我是鱼皮。

最近私信收到最多的问题就是:我学编程的时候记不住代码,老忘怎么办?

比如这位小伙伴,学编程一个月了,问我咋背代码:

头像不错

其实,我自己的记性是非常非常差的,所以我才在选专业的时候弃法从码。

我在最开始学习 C 语言编程的时候,也是敲一次忘一次,很痛苦。但我又不想放弃,于是强迫自己去记忆代码,渐渐地把学编程变成了背单词。但花了很多时间,好不容易把单词背下来了,却还是写不出代码,这就让我逐渐怀疑人生。

后来和前辈们的交流中,我发现记不住代码是很正常的,倒不如说能记住代码的人不太正常(太聪明、记性好)。

于是,我改变了自己的学编程方法,不再背代码,提高了学习编程的效率。

今天就分享下我的编程 “不忘” 大法。

鱼皮编程不忘大法

分为四部分:先分享一些通用记忆方法,再是面向学编程的记忆方法,还给出了忘记代码后的解决方法,以及一些必须要记忆的内容。

本文大纲:

思维导图

通用记忆方法

以下方法,可以帮助我们养成记忆的好习惯,不止编程,适用于所有知识的学习。

编故事

相对枯燥的代码和理论,我们更喜欢看故事。试着把知识点编成有趣的故事,或者和某些人或事进行关联,能够加深印象。

比如我给大家分享编程经验的时候,会提到我的老弟小阿巴,就是为了加深大家的印象,一看到熊猫头就想到 bug,还有什么 “从前有匹马叫代码”,以及一些用故事讲技术的文章和视频,都能起到强化记忆的作用。

兴趣强化

对于自己感兴趣的事情,我们记忆会更容易。

比如我从前爱打游戏,数学公式记不住,但却能精准记忆怪物的血量伤害和装备的爆率。

所以想更轻松地记忆,最好能培养自己对这件事的兴趣,或者用更有趣的方式来学习,比如上面说到的看故事、看图解、看短视频知识分享。

利用感官

我们在记忆时除了需要动脑外,还可以利用好感官,比如搭配一些肢体动作。

关于这点,也不用刻意,每个人都有自己的习惯和小动作。比如有人喜欢用手比划,有人喜欢抚摸下巴,像我则是喜欢在背书时挠头,有的时候把头发挠掉了,看着这根头发,我就感觉知识记得更牢了。真就我变秃了,也变强了呗。

除了感官外,人脑经历过的事物,思考过的问题,体验过的情感和情绪,练习过的动作,都可以成为我们记忆的内容,帮助我们关联记忆碎片。

理解

记东西不能死记硬背,要思考,要理解,这点真的是从小听到大,就不多说了。

体系化

我们在学习时,最好按照体系去学习记忆,而不是东瞅瞅、西瞧瞧。

可以把零碎的知识整理成大纲、学习路线、思维导图等等,按序、分点地去记忆。

老读者应该发现了,我现在就经常在自己的知识分享文章开头放上一张思维导图,就是为了帮助大家快速了解文章结构,从而加深印象。

记忆时间

一般情况下,每天早上和晚上临睡前,是记忆的最佳时间。

我从小养成的一个习惯是:每天睡觉前会躺在床上回忆一遍自己今天做过的事情,的确有强化记忆的效果。

此外,考试周或面试前,我会把复习内容作为文档存到手机上,睡觉前打开 WPS Office 或者一些文档语音朗读软件,让音频伴我入睡。第二天早上起床前,可以先打开音频,闭上眼睛,听到知识点时自己在脑海中再回想一遍,真的有奇效!

定期回忆

不知道大家有没有听说过遗忘曲线(艾宾浩斯曲线),就是说我们在学习中的遗忘是有规律的,并且遗忘的速度先快后慢。

遗忘曲线

观察曲线,我们发现,很多短期记忆消失地很快。所以不能 光记不忆 ,要趁热打铁,学完知识后抓紧应用,并且按照曲线,每隔一段时间复习一遍,才能留住所学知识。

编程记忆方法

上面的方法可以帮助我们更好地记忆知识,而下面的方法更聚焦于帮助我们学习编程,提高效率。

选择性记忆

首先,对于学编程来说,千万不要去背代码!

本来编程知识这辈子都学不完了,背代码的话下辈子都学不完了。

学编程时,我们应该:记住有什么,你能做什么,而不是具体怎么做

举个例子,现在让你设计一个电梯调度系统。你只需要听说过有个东西叫 电梯调度算法 ,以及它能实现电梯的有序调度就行了,而并不需要记住怎么写代码。等到要做的时候,去搜该算法具体的实现就行了。

再举个例子,现在前端的类库那么多,假设让你做一个网页动画效果,那你在此前只需要知道 Animate.css 库可以实现,等用的时候查文档就好了,并不需要把它的每个类、每种用法都记下来。别忘了,代码更新换代很快的,即使有的东西你能记住,但它也有时效性。

尤其是对于编程的初学者,不要去背代码,你只需要知道某个函数大概能做什么事情,我要完成某个功能时能想到它(甚至是能搜到)就可以了。

另外,刷算法题目的时候很多同学理解不了就直接死记硬背,其实记忆算法没有问题,但你要记的不是某段代码,而应该是一类题目的 解题套路

笔记

学编程时,一定要多记笔记,无论是看书、看文章还是看视频。

但是请注意,笔记不是什么都记!

有些同学怕自己忘记视频中老师讲的知识,直接把老师的原话一句句地敲下来,一个视频暂停几十次。看似笔记上内容很多,但其实真正有用的、你能记住的东西很少,而且很浪费时间,大可不必。

不要忘了,笔记是 给你自己看的 ,是为了帮助自己复习的。我记笔记时,重点在于记思路、记流程、记关键节点。

比如我看一个前端项目实战教程时,我会记录老师设计系统的思路、以及实现系统的关键操作步骤,并且在看完视频后自己按照笔记的步骤去回想、去操作,而不是把老师写的每一行代码都记下来。还有就是记录老师重点强调的细节,尤其是一些坑。

记笔记还有个好处就是记录自己的学习过程和进度,虽然会花一些时间,但性价比是很高的。

多写代码

想学好编程,一定要多写代码多实践。很多同学理论玩的很 6、视频看的又多又快,但看完视频后还是不会写代码、没思路,大概率是因为敲的少了,都是纸上谈兵。

像我初学编程的时候,就是只看不写,最后约等于没看。

后来,我修改了自己学习的节奏,一般看视频学技术时:先看理论部分,了解某项技术它是做什么的、有什么功能;然后看实战,跟着老师看一集写一集,并且看完一套视频后,一定要对照笔记自己再做一个项目,把视频中讲到的重点技术进行综合运用。

不要觉得写项目浪费时间,想要学好编程,就一定要多做项目,可以帮助你更好地理解技术、加深印象。

另外,通过实践,可以帮助你理解很多枯燥的理论。比如当时我们上计算机组成原理这门课,基本全是理论,上课听的一知半解、昏昏欲睡,也根本记不住。

直到后来老师带我们到实验室,使用开发箱实际操作,通过接线点亮电路小灯,实现指令集运算,才真正帮助我记住了课堂上讲到的知识。

卡塔练习

我是从一本程序员修养类书籍接触到的 卡塔 ,官方的解释是:卡塔是指 “形”,即招式套路,练习时必须按形进行。

简单来说,就是每日练习。

想要学好编程,每天都要写一些代码,做一些训练。比如学前端的同学可以每天用 JS 来实现一个小功能,学后端的朋友的可以每天书写几条 SQL 语句,巩固 SQL 语法。此外,现在程序员找工作非常看重基础算法和数据结构,想要学好这些,我们也应该坚持每天刷 1 - 3 道题,坚持过就知道这到底有多重要了。

每日一题

多踩坑

相比快乐,我们更容易记住痛苦。所以学编程的时候,一定要多写代码,尤其是要多遇到 Bug,多解决 Bug。摔得越痛,飞的越高。

比如我曾经经历过一个线上事故,因为资源未释放导致服务停机,直接影响了现金收益!所以直到今天,我时刻记得要释放资源,不要再翻车了。

除了不经意间写 Bug 外,我还会 主动试坑 。就写代码的时候故意去尝试一些可能出现的操作,比如把函数参数的类型从 A 改为 B,然后分析对函数的影响,很多情况下,会有意想不到的收获,说不定就发现了一个知名框架的 Bug 呢?

激励

和上面提到的兴趣一样,如果写程序能给我们带来激励和正反馈,我们就更乐意、更主动地去完成它。

对我来说,自己主动去做的项目更容易记住,比如我至今都能想起大一时主动做的国家级创新创业项目用到了哪些技术、有哪些不足;但却想不起来大四时被要求做的图像处理毕业设计都有哪些功能了。

外力

除了主动之外,压力也能帮助我们提高编程学习效率,加深记忆。

比如我在腾讯实习期间,有一周上线时间很紧张,那一周基本每天工作到凌晨,所以印象尤为深刻。

分享

有的知识你以为自己会了,但没办法把它讲出来,就是不理解,这样很快就会遗忘,面试时还会吃大亏!

所以最好能把自己写过的代码、学到的知识分享给他人,能够极大地加深对知识的理解和印象,还能帮助自己发现不足。

分享的途径多种多样,比如写文档、写博客、对着小黄鸭去讲、参与演讲、录制视频等。

像我刚开始学编程大概半年多的时候,就建立了自己的个人博客,在上面记录自己学到的知识。现在来看,虽然当时写的真的是太烂了!但也为我如今做知识分享做了铺垫。

我真的是很享受学习知识并且对外输出的过程的,持续学习,持续输出。说个好玩的事,大学的时候骑着我小电动车带室友一起上课的路上,我都会跟他扯一通技术。分享真的是可以激励自己不断进步,并且帮助到更多人的!

复盘总结

这也是很多同学忽略的一点,学了一个技术、做了一个项目后,就赶紧把他们像炸弹一样丢掉了。其实,你自己学过的、实践过的知识都是值得珍藏的宝藏。

我在学校时,每做完一个项目,都会展开回忆,从当初想做这个项目开始、到当时的思路、实现过程、遇到的坑等,并且还会分析自己做的好或不好的地方,再加上一些心得感悟,整理汇总成一篇博客文章。

同理,学完一门技术时,我也会把这个技术的关键知识点汇总成博客。

现在工作了,我依然保持总结的好习惯,自己会写日报、周报、月报、年报等。现在回过头来看,也是一笔不小的成就,要不然谁还记得自己一年前干了啥呢?

记录工作

忘了怎么办?

我知道很多同学追求完美,想把什么都记住,害怕今后忘记重要的知识。

其实对学编程来讲,忘记是很正常的,而且完全不可怕!

我建议大家索性少记一点,不要给自己太大的记忆负担,即使忘了,我们也有下面的方式来解决。

积累

首先,一定要注重积累,整理自己做过的事。

像我会整理自己写过的代码,这样等要用的时候,直接去找,然后 CV(复制粘贴)大法好。

我会整理自己写过的文章、看过的好文、好句子、好表情,打造自己的语料库、素材库,随用随搜,省去了大量记忆量。

我还会整理自己踩过的坑、写过的 bug,并且将解决方案也一同整理,即使下次再遇到同样问题,也能高效解决。

整理 Bug 及解决

利用搜索和文档

忘了某段代码怎么写、没有思路、或者遇到问题了,那就去网上搜索一下;忘了某个框架的特性、函数的参数、用法,那就去看框架的官网文档就行了。

难道还要别人帮你搜索嘛?

多写注释和文档

程序圈里有个梗:有位程序员骂一段代码特别辣鸡,结果最后发现是自己写的。

这是每位程序员都会遇到的事:

  1. 看不懂自己写的代码
  2. 不认识自己写的代码

为了防止此类沙雕事件的发生,我们应该适当地给代码添加注释,像我的话经常会放一些设计思路、设计文档链接、作者等等:

/*
 * 功能:三连
 * 思路:请参照文档 xx.cn
 * 作者:狗鱼皮
 */
function sanLian() {
  console.log('感谢三连')
}

还可以适当回顾下自己写的烂代码,说不定就有什么优化灵感了呢?

除了注释外,做项目一定要写文档,把项目背景、选型过程、设计思路、实现方案都写清楚。不仅可以帮助自己总结工作,还能给其他项目的参与者指引和帮助。

最好把产品说过的一些话也记录上,防止日后产品改需求。

不得不背?

最后,虽然说学编程不靠背代码,但等到找工作的时候,一些面试的考点还是必须要记住的。不过在背面经、背考点时也不要像背课文一样死板,还是要加上自己的理解,多实践。

比如经典面试题:MySQL 如何性能优化?

死记硬背当然可以,但有时间的话,更好的做法是自己实践一下 MySQL 的优化手段,并且记录优化的效果,比如性能提升了百分之几等等,这样自然就能记住,跟面试官聊的时候也更有底气。


以上就是本期分享,希望大家能养成好习惯,多敲多练,别再强迫自己背代码了!

最后再送大家一些 帮助我拿到大厂 offer 的学习资料

跑了,留下 6T 的资源!

我是如何从零开始通过自学,拿到腾讯、字节等大厂 offer 的,可以看这篇文章,不再迷茫!

我学计算机的四年,共勉!

我是鱼皮,<stron> 还是要求一下的,祝大家都能心想事成、发大财、行大运。</stron>

#Java学习##Java##学习路径#
全部评论
经典自问自答
1 回复 分享
发布于 2021-07-19 21:34

相关推荐

二、Text2SQL&nbsp;相关技术问题1.&nbsp;不同数据表量级下,Text2SQL&nbsp;的技术选型差异是什么?2.&nbsp;为何要将数据表每一行数据向量化?使用的&nbsp;Embedding&nbsp;模型是什么?3.&nbsp;行级向量化与表元数据(Metadata)检索的优劣对比,为何不直接用&nbsp;Metadata?4.&nbsp;Text2SQL&nbsp;业界常用方案、技术框架与难点你了解哪些?三、RAG&nbsp;相关技术问题1.&nbsp;Jira&nbsp;Agent&nbsp;Rack&nbsp;项目要解决什么问题?高频查询内容是什么?2.&nbsp;为何采用关键词+向量混合检索?各自适用场景是什么?3.&nbsp;结构化数据用固定分块的原因?什么场景不适合固定分块?4.&nbsp;长文档&nbsp;RAG&nbsp;如何分块?标点分块如何解决语义割裂问题?5.&nbsp;RAG&nbsp;中为何要加**重排(Rerank)**环节?你的项目是否使用?6.&nbsp;加重排后效果变差的原因是什么?7.&nbsp;是否做过Query&nbsp;改写?解决什么问题?如何实现?8.&nbsp;RAG&nbsp;与小模型微调的适用场景分别是什么?四、Agent&nbsp;相关技术问题1.&nbsp;多&nbsp;Agent&nbsp;系统采用什么架构?任务如何编排?2.&nbsp;OpenCloud、Perplexity&nbsp;等&nbsp;Agent&nbsp;系统的核心是什么?3.&nbsp;Agent&nbsp;的短期/长期记忆如何设计、区分与协作?4.&nbsp;Agent&nbsp;系统相比直接用大模型的优势是什么?5.&nbsp;用户如何自定义&nbsp;Agent&nbsp;与&nbsp;MCP?流程是什么?整体上就是自己给自己挖坑,很多细节答不上来,面试了差不多50min,面试完感觉被抽干了,像是做了一次小丑,好不容易有次二面,被自己浪费了
查看17道真题和解析
点赞 评论 收藏
分享
04-13 16:31
已编辑
吉林大学 后端工程师
第一次面AI应用岗上强度,全程不问具体实现,全是架构层面和底层原理的问题,我差点怀疑面的是架构师岗,感觉专门挑犄角旮旯的地方进行发散提问,还是老老实实润后端吧1.请讲一下&nbsp;RAG&nbsp;系统整体的技术架构是什么样的?你项目中对应每一块是怎么做的?2.项目背后的知识库是怎么构建的?3.知识库是怎么采集的?怎么更新的?4.你是在&nbsp;C&nbsp;端问答的时候调用网页,而不是在知识采集的时候调用,对吗?5.知识采集部分的更新机制是什么样的?6.知识库是项目自己实现的吗?7.怎么选择性增加知识库内容?具体流程是什么?8.时效性强的信息为什么要存进知识库,而不是直接实时检索网页?9.你怎么理解&nbsp;RAG&nbsp;静态知识库和动态网页检索之间的关系?10.哪些场景适合用静态知识库,哪些场景只需要动态&nbsp;Web&nbsp;Search+Web&nbsp;Fetch&nbsp;就够了?11.你判断哪些知识可以从动态转为静态存入知识库的标准是什么?12.网页实时更新后,静态知识库内容滞后,这部分影响怎么消除?13.如果让你设计情感咨询类的静态知识库,应该采集哪些静态知识?大概怎么采集、怎么更新?14.请设计这套知识库系统的框架。15.检索端应该采用哪些措施做优化,让检索更准确、知识覆盖更广?16.你项目中的图&nbsp;RAG&nbsp;是怎么构建的?17.大模型识别实体的原则是什么?18.知识增多后实体可能泛化、不统一,怎么控制实体的内聚性?19.相同含义但表述不同的实体,怎么合并成同一个实体?20.图构建过程中,怎么抽取实体和实体关系?怎么选择上级节点?21.用大模型抽取实体不可控、不准确,怎么解决这个问题?22.OpenManus和你的系统是什么关系?23.你项目中定义的工具有哪些?24.OpenManus&nbsp;整体技术架构分几层?分别是哪几层?25.OpenManus处理&nbsp;Memory&nbsp;吗?26.为什么没有用&nbsp;OpenManus自身的&nbsp;Memory&nbsp;管理,而是用&nbsp;Spring&nbsp;AI&nbsp;实现?27.Spring&nbsp;AI&nbsp;是怎么处理历史上下文、记忆记录的?具体机制是什么?28.Spring&nbsp;AI&nbsp;实现的记忆机制和OpenManus原生的&nbsp;Memory、State&nbsp;管理机制在功能上有什么区别?29.OpenManus&nbsp;提供的&nbsp;Memory&nbsp;和&nbsp;State&nbsp;管理机制有哪些缺点,导致你放弃使用?30.你了解&nbsp;OpenManus的&nbsp;Memory&nbsp;管理是怎么处理上下文超限问题的吗?31.OpenManus&nbsp;的&nbsp;Memory&nbsp;分几层?怎么做记忆的晋升和提取?32.如果让你自己设计&nbsp;Memory&nbsp;晋升机制,会怎么设计?33.短期记忆到长期记忆的晋升机制是什么?按迭代次数还是按时间?34.长期记忆的遗忘机制是怎么设计的?35.项目是多&nbsp;Agent&nbsp;架构吗?36.OpenManus&nbsp;怎么处理不同&nbsp;Agent、不同任务之间的数据依赖、静态条件、竞争条件?37.单&nbsp;Agent&nbsp;为什么要选用&nbsp;OpenManus框架?38.了解&nbsp;OpenManus&nbsp;多&nbsp;Agent&nbsp;管理能力吗?怎么解决数据流转和静态关系?39.如果让你解决多&nbsp;Agent&nbsp;之间的相互依赖,有什么办法?40.Agent&nbsp;执行的先后顺序怎么定义?定义在哪里?怎么组织?41.Spring&nbsp;AI&nbsp;核心有哪几套抽象设计?42.你用&nbsp;Cursor&nbsp;实现项目的工作过程、思路、框架是什么?怎么让&nbsp;AI&nbsp;帮你写项目、实现需求、管理项目?43.如果从&nbsp;0&nbsp;到&nbsp;1&nbsp;实现同样项目,不是直接拉开源代码,怎么用&nbsp;AI&nbsp;辅助完成?44.了解什么是外部肯定吗?45.了解什么是&nbsp;SDD&nbsp;吗?46.用&nbsp;AI&nbsp;开发时出现反复修&nbsp;bug、问题修复后复发、修复不生效,是&nbsp;AI&nbsp;本身问题还是使用姿势问题?正确的&nbsp;AI&nbsp;驱动开发流程应该是什么样的?47.Agent&nbsp;角色漂移与&nbsp;Skill&nbsp;类问题48.你系统里&nbsp;Agent&nbsp;角色漂移问题的表现是什么?49.你认为角色漂移本质上是什么问题?50.用什么手段解决角色漂移?51.了解&nbsp;Skill&nbsp;吗?Skill&nbsp;的基本结构是什么?52.有没有不带工具的&nbsp;Skill?53.了解渐进式披露机制吗?54.选用&nbsp;PGVector&nbsp;的原因是什么?55.了解&nbsp;PGVector&nbsp;的底层原理吗?反问:我的简历有什么问题?哪些方面了解不够需要加强?传统后端项目在&nbsp;AI&nbsp;编程时代还有没有必要性?这真是一个本科生能回答出来的问题吗,一个多小时的狠狠压力
点赞 评论 收藏
分享
评论
10
18
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务