[编程开发] 自学编程,然后学完的知识点很容易就忘了怎么办?

[复制链接]
lihanyue 发表于 2023-10-4 19:00:16|来自:中国 | 显示全部楼层 |阅读模式
大佬们,我的情况比较奇怪,就是一段代码,给我看我能看得懂,这个是干嘛的,那个是干嘛的我都清楚,但是让我自己写我就写不出来了,有的时候连建个类都建不出来,我是不太适合这一行吗?
全部回复5 显示全部楼层
wuping69 发表于 2023-10-4 19:00:44|来自:中国 | 显示全部楼层
这太正常了!  就是因为一下记得太多,所以才学就了忘!
人能记的东西是有限的!比如我不会要求我的学生一上来就去背编程圣经《算法导论》,因为上面的内容太多,很多面试的时候都不考!正确的学习路径:

  • 明确自己的所处的位置
  • 确定要学习的知识点
  • 在实战中去理解知识点
1、对于仅针对算法面试,先确定你一点要掌握的知识点




入门级选手

如果你是一个新手,上来就是这么多知识点,怕是烦都要烦死了,也不要一上来就是红黑树、DP,要先搭建基础算法知识体系,就是学点简单的,下面是《算法基础课》上分享的适合新手入门的知识点:





进阶级选手

如果你已经有一定编程能力和算法基础,而且目标是找工作,就要明确哪些是高频算法知识!下面是我总结的面试频率一览表:颜色越红,表示面试中碰到的概率越高;灰色出现概率很低,基本不考。




2、在实战练习中去理解知识点

入门级选手

对于入门级选手我推荐你去刷这个《编程新手必刷50题》,里面的题目循序渐进,包含了基本数据类型、判断语句、数组和循环等6个阶段的题目,让新手也能快速找到刷题顺序。



但是新手刚开始就把理论知识输出为coding,是有一定难度的。针对这一点,我在给学员讲解的过程中会加入伪代码这一过程,帮助学员更快的理清思路!举个例子↓:



我也把刚开始的两个阶段的题目放在这里,大家可以参考:
阶段一:基本数据类型
①考察类型
没有条件控制,没有循环,单纯的按从上到下的顺序执行代码,例如数学计算,取模等问题。
②必刷题目
1.A + B 问题
2.反转一个3位整数
3.计算圆周长和面积
4.巴什博奕
阶段二:判断语句
①考察类型
主要考察选择结构,没有循环,有if,else if,else等判断语句,例如判断闰年等问题
②必刷题目
5.判断数字与字母字符
6.闰年
7.大小写转换
8.月份天数
9.简单计算器
10.三数之中的最大值
进阶级选手

如果你有一定的算法基础,那么这里我推荐炼码精选100题,这些题都是春秋招的高频真题,每题都包含三四个知识点,刷100题相当于别人刷300题。
像这道 134.LRU缓存策略,既可以练习数据结构设计类问题,又能熟练链表操作(单向链表&双向链表),还可以锻炼子函数化能力。  



刷题套路
当你刷题刷到一定程度,你就可以总结刷题模板,下次遇到同类型的题目,直接套用。这里分享一下我刷题3000+总结的leetcode万用刷题模板,背下来可以直接套!(这个模板在《算法面试速成技巧 》讲座中就可以免费领到)

likeart 发表于 2023-10-4 19:01:00|来自:中国 | 显示全部楼层
回答这个问题之前,我先来一个地狱四连问:
你学习的时候记笔记吗?
记过的笔记你看吗?
学习的Demo你练习吗?
练过的Demo后你思考吗?
可能你会告诉我,看了也不一定会,会了也不一定能记住,记住了也不一定会写,写了也不一定思考!然后就弱弱的来一句编程好难啊,我是不是不适合编程,我是不是要换个行业。那我只能说,你只适合在家躺着。
行,继续往下看,你们都写过英语吧,你看一遍英语你能认识吗?显然你是不能认识的是不是。那你认识之后,你能写出来吗?显然你不一定能。学习编程也是这个到底,你看懂不一定是真的懂了,你会写了,才说明你是真的会了,你这个问题只能说明你平时根本不练习,是一个嘴上编程者,你需要show your code。
一个字回答就是练,二个字回答就是多练!要去培养编程思维,而不是像背书一样给它默写出来。
所以我说,问题并不是自学编程有多难而是你想的太多,而实际动手做的太少。并且每天都在焦虑着。你说你连一个类都建不出来,难道你不会百度吗?是家里是断网了吗?还是没有电脑啊?如果是我说的这两样,好了,下面的你就不用看了,别浪费时间哈。
这样搜索不会吗?


所以第一步你需要做的就是要去尝试动手,善于百度。
接下来说说知识点,刚开始学习的时候不建议你把各种资料都收集一遍,因为后面你会发现你收集了很多资料在你的电脑里。但是你打开它的几率是0,你根本不会打开它。学习知识点,你可以买一本书看或者是选择一个网站或者选一个视频看看。这个阶段你要适当的做一点笔记,你不要想着一下要记住全部的知识点,那是不现实的。除非你是神人或者神童!
书的话子,你可以考虑买一本或者如果从网上白嫖一本电子书,视频的话子很多地方都有入门的课程,现在知乎站内也有,比如20天学会java,黑马程序员的视频:
20 天学会 Java - 知乎放心,该课程没有任何套路,0费用,知乎站内的!这个视频是一个很不错的入门视频,0基础教学,讲解由浅到深,你先不用管它什么多少天学会。有20天的内容你可以看它个一个月2个月,主要是看懂,学会而不是看多长时间。该课程结合一线大厂真实需求驱动知识的学习。目标性更强,更清楚,更高效,更实用。
除此之外课程中有很多案例实战,可以让许多嘴强王者学会动手,对0基础的初学者很友好,对 Java 语言形成完整体系,用心学下来后,可能你对java基础知识有一个不一样的认识。
学习过知识点后,你可能会有去做项目的冲动,这时我建议你缓一缓,你先去刷题网站去写写Demo,再写他个半个月一个月,不懂的再回来看知识点,主要还是培养自己的编程思维。
这时候,你感觉你行了,你想去做项目了,理想很丰满,现实很骨干。你会发现你一脸懵逼,不知道从哪下手。很多人都有这方面的感觉,不要着急,这时候你需要去看点框架的内容。先学会框架是如何使用的,这个阶段不要去管什么原理,源码这些东西。对你意义不大真的,你就先学会它怎么用就好了。
会用了之后,你就去找项目干就万事了,git上一大丢,自己去找该语言的项目,但是一定要对标企业目前所用的技术。
学到这,你会感觉编程其实没这么难,你算是入门了。但是未来你能走多远,就要看你在工作中是否坚持学习了。
这个时候,你算是打开了编程的新世界,走上了从入门到放弃的另外一个阶梯。


总结一下:
1、记笔记,练习Demo,思考Demo为什么要这么写
2、要善于百度查阅一些帖子解决问题
3、基础知识的学习不要收集太多的资料,把收集到的某一个或某两个学好就OK了
4、去一些网站去刷题联系回过头来学习知识点
5、去项目之前去学习框架。
zke 发表于 2023-10-4 19:01:31|来自:中国 | 显示全部楼层
针对这种问题,我们有一句描述,叫:一学就会,一用就废
这就和刚开始写作文一样。字儿都认识,别人的文章也能看懂,但自己写就怎么都写不出来。
那后来怎么就能写出来,甚至还能上知乎逻辑严密地提问题了呢?因为被老师逼着写得多了,就会了呗。
所以,还是练得少。
自学编程,在「练」的方面,我建议分三步走:

  • 刷 OJ 题练语法
  • 读源码练认知
  • 用AI编程练感觉
一、刷 OJ 题练语法

就是到各种 Online Judge 刷题,非常适合新手。
可以先从简单题入手,一个一个地切。乏味了,再逐渐增大难度。这样可以不断收获成就感,甚至上瘾。
首先推荐「力扣」(LeetCode),商业化运营,比较友好。
力扣其次推荐各种大学的面向 ACM 竞赛的 Online Judge,知乎有集合贴介绍。
应该选择哪个 Online Judge?不管在哪里刷题,做到需要特别的算法才能求解的题,就可以暂停,走下一步了,因为我们的目标是提升工程能力,而不是算法。工程能力才是大多数程序员吃饭的家伙,算法是锦上添花。后面需要时,随时可以再回来修炼算法。
二、读源码练认知

就像写出好文章,得先读几百篇别人的好文章一样,读优秀的代码能学到太多太多别人的经验了。
但没实际做过项目,没经过工程化的洗礼,常常不能领会别人代码里的精妙,甚至会觉得人家的一些做法好像多此一举。所以有了一些项目经验后,再读优秀的源码,才能真的提升认知。
现在开源软件那么多,优秀的代码并不缺,缺的是一颗啃下去的恒心。
建议选一个自己会用到的,比如各种框架源码,开始读。这有两个好处:

  • 知道它是干嘛的,读起来更容易理解。
  • 读懂了,对用好它们也大有帮助。
读源码的技巧,知乎已经有很好的相关答案了。
如何快速读懂开源代码?读的过程中,如果能再试着改改 bug,做做自己想要的 feature,提个 PR,一旦被接受,那成就感是相当爆棚的!
三、用 AI 编程练感觉

前两条都是传统硬路线。这第三条是个捷径,但可能是直通未来的。
AI 大模型出来后,尤其 GPT-4 无与伦比的编程能力,让很多人惊呼,程序员要被替代了
从我实际使用 GPT-4 + Copilot 写出几万行代码的经验看,程序员并不会被替代,而是要改变工作习惯,尤其是学技术的方式。
以前我们是先学再用,以后是先用 GPT 生成代码,边调程序边学。
AI 编的代码是厉害,但很少有直接就能用的,还是需要有经验的人 review,确认后再提交。
在这个过程里,人类的价值体现在能看懂 GPT 的输出,并基于认知判断有没有问题,问题在哪里。把问题指出,AI 还能再改。人类自己手敲代码的机会是不多了。
所以通过本文一和二练好语法能读懂 AI 输出,练好认知能判断 AI 对错就足够了,并不需要牢牢记住很多细节。也就是说,有编程的感觉就够了。
我正好在知学堂有包含 AI 编程的公开课,主要分享以下三个知识点:

  • 这次 AI 技术,和以往的技术变革有何根本不同?
  • 在这种剧烈变革下,程序员的职业会发生哪些变化?
  • 如何让自己成为变化的受益者?
欢迎你来直播间,我们可以直接交流。同时我也给你准备了大模型相关的学习资料,也有助于你快速了解和学习大模型,让你编程能力实现质的飞跃。
fiveok 发表于 2023-10-4 19:01:46|来自:中国 | 显示全部楼层
首先,自学编程是行得通的,很多同学都是通过自学编程的方式进入到了互联网领域发展,但是自学编程的过程中,往往会走一些弯路,也确实有不少同学因为迟迟不能形成自己的编程思想,而最终放弃了继续学习。
自学编程最常见的问题就是能看得懂代码,但是却写不出来,原因无非有以下三点:
其一是没有掌握基本的编程流程。
编程流程就是一门编程语言在解决一个逻辑问题时的基本步骤,比如Java的基本编程流程就是类的定义、对象的创建和方法的调用。
掌握了这个基本的编程流程之后,就要根据具体的业务逻辑来进行抽象,最终再进行模块化封装,这个过程还涉及到算法、抽象的层次,以及模块化的工具和方式等问题。
其二是没有掌握基本的编程模式。
掌握编程流程是第一步,接下来就应该掌握一些经典的编程模式,这会在很大程度上保证自己的代码质量。
尤其是对于刚开始进行编程的初级程序员来说,要尽量使用成熟的编程模式,这对于复用和调试都有积极的意义。
其三是缺乏场景开发实践经历。
学习编程语言通常需要经过三个阶段,其一是基础语法的学习,其二是围绕主攻方向做知识积累,其三就是进行场景开发实践,而这个步骤往往是实现编程能力跨越的核心步骤。
判断自己是否掌握编程语言,最简单的标准就是能否在生产场景下运用编程语言来解决具体问题,而缺乏编程场景往往是自学编程同学所面临的最大的障碍之一,尤其是非计算机专业的同学。
我联合多名导师,包括企业导师,共同打造了一个实践平台,基于我们的科研资源和产业资源,设立了一系列科研实践课题和编程实践项目,包括深度学习、知识图谱、推荐系统、Web开发等,也欢迎包括非计算机专业同学在内的本科生和研究生同学申请参加。
最后,如果有编程相关的问题,欢迎与我交流。
3s3s9119 发表于 2023-10-4 19:02:28|来自:中国 | 显示全部楼层
对于所有编程学习者,尤其是想自学编程的同学,在学习的初期最好能想明白下面几个问题:

  • 编程可以自学吗?
  • 学习编程需要什么基础?
  • 我应该学习哪种编程语言?
  • 应该按什么步骤学习编程语言?
  • 学习编程有什么方法吗?


一、编程可以自学吗?

首先给出结论,完全可以,但自学编程的弯路多得数不完,坑多得踩不完,这必定是一条充满挫折的道路。
有哪些坑呢?

  • 好几天都没有成功搭建一个可以正常使用的编程环境,比如 Python、Java
  • 敲了半天的代码,一运行发现提示几十个错误
  • 学了很久,感觉会的很多,但不知道自己的实际水平怎么样
  • ...
正如我们学习英语需要一个交流环境,编程的学习同样需要,特别是自学编程,以下几个网站尤其重要。

  • GitHub
  • Stack Overflow
  • 菜鸟教程
以上三个网站,可以帮助你解决自学过程中 90% 的难题。
更多程序员喜欢访问的网站,可以阅读我之前的一篇回答:
程序员们平时都喜欢逛什么论坛呢?二、学习编程需要什么基础

学习编程不需要什么基础,不需要你的数学、英语有多好,也不需要你精通计算机网络、编译原理等。
这个结论是有现实依据的,很多培训班根本就不会培训这些内容,照样量产出一些基础虽然不牢固但却可以工作的程序员。(这里并不是为了说明培训班这种方式是正确的方式)
甚至我希望自学编程的初学者能一开始蔑视编程。
在战略上藐视编程的目的是为了在心理层面上克服恐惧,有这个心态可以学起来事半功倍。
我亲身经历过这样的改变。
作为一个转行程序员,在转行学习编程的那段日子,没有人告诉我说要去学数据结构,也没有人告诉我说要去刷 LeetCode,都是靠自己一个人摸索,绝大部分的时间都花在具体项目上,误认为自己和那些已经工作的程序员的区别在于有没有做过项目。
这就是科班出身和非科班出身的学生最大的区别,科班出身的学生知道去学什么,知道大学期间安排的每一门课程是干什么的,知道要先去做哪些小项目来循序渐进的编码练习,知道知识点在工作中能起到什么样的具体作用,非科班出身的程序员感觉计算机相关的知识点简直是一团乱麻。
这种情况导致我去找工作参加面试的时候,很多基础面都通过不了,最后侥幸进入一家要求不太高的创业公司,薪资不高,为了进大厂必须完善算法和计算机的知识。
因为未知,所以恐惧,恐惧导致盲目的崇拜,我认为那些科班出身的程序员太牛逼了,居然可以掌握那么多繁杂的计算机知识;那些写源码分析的程序员都是大神;那些写算法题解的程序员都是高手。
恐惧把小的问题放大,比如学到单调栈、双向链表、记忆化的内容,一看到题目要用到这些概念便觉得代码很难写,索性那些内容就不看,所以学了大半年还在原地踏步,还在原来的公司拿着微薄的工资做着 CURD。
几个月后,创业公司不行了,受迫于重新找工作的压力,只好咬着牙再去啃,再去刷题。
而当我开始写题解、做动画的时候,我就发现算法题也就那样,缺的只是时间去不断的重复练习。
单调栈无非就是在栈的概念基础上增加了排序,记忆化也就是增加一个数组用于存储,动态规划在面试和实际工作中用到的只需要掌握百分之五就行。
抱着编程技术也就那样的心态,学习了爬虫以及 Vue。




“自大”的认为爬虫能有多难,基本步骤无非以下几步:

  • 1、找到需要爬取内容的网页URL
  • 2、打开该网页的检查页面
  • 3、在 HTML 代码中找到你要提取的数据
  • 4、写 Python 代码进行网页请求、解析
  • 5、存储数据
下载安装 Pycharm,安装 Scrapy,根据步骤输入 URL 和数据格式,在完全不懂分布式、ip代理、js加密、模拟登陆、MongoDB的前提下,顺利拿到了自己想要的数据。
无论是分布式还是ip代理,爬虫的每个知识点深挖下去都大有文章,我所学习到的爬虫知识只是冰山一角,但这并不妨碍我们可以从战略上去蔑视编程,编程的很多内容没有那么高不可攀,缺的只是时间去学习,时间恰恰是我们可以去支配的。
对于计算机专业的学生而言,读计算机经典书籍不光能让你快速提升知识和能力,更会让你在校招之际如虎添翼。
书籍下载:计算机必看经典书籍(含下载方式)


三、我应该学习哪种编程语言?

可以通过下面这张图做个小测试,看看自己更适合哪种编程语言。
图片来源: Should You Learn Python, C, or Ruby to Be a Top Coder? (Infographic)-MediumWhich Programming Language Should I Learn First?  翻译:麻瓜编程

下面的图对比了最流行的9种编程语言,来帮初学者选择最适合自己的。


















目前国内的大环境下 Java 的就业岗位相对是最多的,如果你没有特别的偏向于其它的编程语言,那么自学编程的第一门语言选择 Java 是一个不错的选择,关于如何学习 Java,可以点击下方链接阅读。
最新整理的 Java 开发学习路线!当然,C++ 也是一个不错的选择。
这才是你需要的 C 语言、C++ 学习路线!四、应该按什么步骤学习编程语言?

各种编程语言的学习路径基本上都这样的。


如果你学习过一段时间的编程看到这里,可能会疑惑:为什么我从头到尾都没有提及计算机专业的那些课程?
计算机专业的课程内容: 1、计算机组成原理 2、计算机操作系统 3、计算机编译原理 4、数据结构与算法 5、计算机网络

原因很简单:先学习怎么用,再学习它的构造显然比反过来的要好得多!
很多计算机专业一开始都是先教 Java、Python、C 等等高级语言,然后在大二才开设数据结构和计算机组成原理等课程,因为在用这些高级语言做出 Demo、小项目的过程中,肯定会遇到各种问题,而这些问题的答案就藏在那些专业课里面。
一方面做出小东西能有成就感更加容易坚持下去学习,另外一方面带着问题去找答案效率更高映像更深刻。
否则一开始让你去学编译原理,估计一年过去了都不知道编程有啥乐趣。
关于还应该学哪些课程才能赶上计算机学院本科生,可以阅读我之前的一篇回答。
还应该学哪些课程才能赶上计算机学院本科生?说个题外话,想进大厂少不了学习算法,我写了三百篇算法题解,在 GitHub 上收获了 63k 的star,关于如何刷题有些话我想对你说。
写了三百篇算法题解,关于如何刷题有些话我想对你说我的不少粉丝拿到腾讯字节快手offer,因为用了这套算法刷题笔记:
BAT大佬写的Leetcode刷题笔记,看完秒杀80%的算法题!推荐我自己搭建的一个不错的算法学习网站,讲解视频短,每个视频都精心规划过,全部都有动画过程,争取五分钟讲清楚。
AlgoMooc-一个专属于程序员的平台,和大家一起刷题五、学习编程有什么方法吗?

不知不觉自己的编程生涯已经有 6 年,变秃了,也变强了。


回想起这些年的编程经历,保守估计自学看视频的时间都有 3000 小时,我的一些经历或许可以带给你一些思考。


学习编程的道路上有太多的弯路,有的弯路很短,走进去就当散步,马上就能出来,增长了一些经验倒是好事;有的弯路是五连发夹弯,资深编程老司机都容易翻车;但还有一些弯路更可怕,它们是隐形的,弄不好你以为走在康庄大路上,实际上是南辕北辙却浑然不知。
学习编程的过程最切忌的就是用学生的思维学习编程,有不少人在这个弯路里面徘徊,浪费了时间与精力。


一、记笔记 Vs 写技术教程

在我们十几年的求学生涯中,关于知识的获取基本上都在执行以下步骤: 学习课本上给的教程案例,练习课后的配套习题,如此反复,直到通过考试。
很多学生思维的人会把这种学习方式映射到编程上:学习基础语法,练习几个小的教学案例,如此反复,直到认为学会编程。


在学习编程的过程中,读书时记笔记的习惯变成了抄代码,变量名、if语句是否换行、函数名完完全全照搬书中案例。
不可否认,在初期抄代码是不错的一个入门方式,每次都可以成功的运行代码极大的增进了学编程的信心,但一直抄很明显不是理智的行为,需要调整为写技术教程
当你自己去写技术教程的时候,你必然会重新回顾一下整个流程,甚至会亲自再操作一遍,很容易发现之前学习过程中的疏漏点,为了弄明白它,你会查阅相关的资料,知识点得到了补充。
其次,由于你写的技术教程是发布于网上,为了让更多人看明白、更多人认可,肯定会尽可能的讲清楚,在讲清楚的过程中,对于所学的知识更加全方位的了解。


补充个我自己觉得不错的学习路线。
这才是你需要的 C 语言、C++ 学习路线!二、害怕未知 Vs 接受未知

学生时代大家总是会如饥似渴的学习,想尽办法把所有难题都弄明白,学生害怕的是未知,害怕一切不确定的问题,不知道问题是哪个范围,一旦问题找不到方向,总是会陷入焦虑的状态。
由于所学内容被限定了范围,所以总能通过书本、同学、老师、互联网找到明确的答案,即使无法弄明白也明确知道这个知识点属于哪个明确的范围,只是由于自己的问题做不出来而已。
但编程不同,很多编程问题无解的,无人知晓怎么去解决。
为了学好编程,我们必须忍受一定的未知。
未知是永远存在的,这是一个客观规律现实,不因人的意志而改变,和客观现实做斗争是无效的行为。


其次,有些未知的事情就是无解,把时间精力投入到无解的事情上属于浪费,有些未知的事情是因为当下的知识贮备不足以解决,需要忍受这一时的未知、咬咬牙坚持学习后面的内容才能得出答案。
三、按部就班 Vs 不断回溯

课本上的内容都按部就班阶梯式上升,如果没有学会前面的 A 内容,后面的 B 内容根本搞不懂。
由于未知的存在,学习编程过程中总是有一些问题会拦住我们,我们需要做的是先记录它,然后搁置在一旁,继续前行,继续学习新知识、练习新技能、接触新领域,不断的积累,不断的成长,以后时不时回溯一番,把它拿出来重新审视,说不定在学到某个新知识、练习某个新技能、接触某个新领域的时刻突然豁然开朗:哦,原来是这么一回事



<hr/>
自学编程说起来真的挺难的,我佩服你能一直走下去,自学编程的收获是巨大的,自学能力的提高、解决问题的能力、创造改变世界的憧憬。
最后,再给大家送上点干货!

下面这是一个高赞回答合集,建议大家点赞&收藏,Mark住别丢了,大学期间绝对用得上
1、怎么学好数据结构,看下面这个回答,已经获得了 21000+ 的赞和 50000+的收藏。
怎么学好数据结构?2、如何系统地学习算法,看下面这个回答,已经获得了 11000+ 的赞和 26000+的收藏。
如何系统地学习算法?3、一份适合新手的算法刷题笔记,已经获得 4000 点赞和上万收藏。
程序员吴师兄:无意中发现一位大佬的算法刷题 pdf 笔记4、谷歌工程师的 LeetCode 算法笔记是怎么样的?
程序员吴师兄:谷歌工程师的 LeetCode 算法笔记是怎么样的?5、大家一般刷满 500 道 LeetCode 题目要花多久?
大家一般刷满500道LeetCode题目要花多久?6、如何系统地学习 C++ ,这个回答能帮你找到路线。
如何系统地学习 C++ 语言?7、想要准备 Java 面试,那么这些面试题必须掌握。
Java 面试都只是背答案吗?赶紧点赞和收藏吧~

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则