关于学习~

来源:1-6 数组中的包含,搜索和删除

qq_慕娘3016055

2020-10-06 00:02:53

老师 您好,学习遇到了一些小烦恼,就是您在讲课的时候 我能很轻易的听懂 跟着代码敲也能很容易的跟上,但是我想着如果我自己实现的话,我会觉得很困难甚至敲不出来。这让我很困扰,不知道该怎么解决呢?

写回答

1回答

liuyubobobo

2020-10-06

简单来讲:没有什么捷径,只能多练,多写,多调试。


能够把一个你已经理解的想法正确地使用代码实现出来,这本身就是计算机专业的核心竞争力,也是程序员之所以能吃这碗饭的原因。如果有一个想法,正确的程序就能轻而易举地写出来,那早就没程序员什么事儿了。大家都去学数学专业了。


为什么现在反而是搞数学的坑哧吭哧学代码?就是因为有了解决问题的思路,和有正确的实现之间,隔着一道沟。程序员就是要填这道沟。

我的建议是,对于课程中讲的所有的逻辑,你首先要能听懂。在听懂的基础上,你可以跟着视频实现一遍,但之后,一定要做一遍的事情是,扔掉视频,完全按照你自己脑海中理解的逻辑去实现一遍。


如果实现起来没问题,固然没有问题。但如果有问题,你就需要总结了:

有可能你以为自己理解的逻辑,自己其实没有理解。也有可能是你真的理解了,也能实现出来,但是对于语言的细节没有把握,等等原因。总之,你需要自己找到这个原因,然后继续巩固。发现自己实现不出来,或者实现出来有问题,再去和课程中的代码作比较,找到自己的问题。


值得一提的是,很多时候,程序的逻辑你也理解了,语言的使用你也没有问题,但是实现出来还是会出错,这时就要 debug 了。不要怀疑,debug 的过程是每个程序员必须经历的过程。学习程序的过程不是学着学着,就能一次性写出正确的代码了。而是写出错误的代码,发现有问题,使用小的测试用例,一行一行的去调试你的代码,去找到为什么,明明你觉得自己的程序是正确的,但运行的结果却是错误?到底是哪里自己想错了?

这个时间省不得。我上次这个课程直播还说过:花一晚上时间只为了调出一个 bug,太正常了。如果你没有几个小时甚至几天死磕一个 bug 的经历,在我看来,你写程序的经历是不够的。

这不是在浪费时间,这是在深入去理解,计算机到底是怎么执行程序的。只有经过无数次这样的过程,你才能将自己的大脑训练出和计算机执行程序一样的思维,才能做到用眼睛就跟到 bug,甚至动手写出的代码根本没有 bug。


如果你一定问是否有什么诀窍,可能有。比如我在体系课中就一直强调写程序要定义清楚循环不变量;写递归函数要明确宏观语义;给变量起名称要有意义;等等等等。

但相信我,很多大佬根本不知道什么是循环不变量,照样写出的代码又快又好。这都是几年如一日碰见 bug 不服气,一晚上一晚上去调试。最终搞明白了自己为什么写错了,恍然大悟之后最终积累出的经验。

不要害怕自己写不对。去写,写完了去调,调对了去总结,去看别人优秀的实现,然后再去写。


希望你有时间再看一下我的公众号的这篇文章:https://mp.weixin.qq.com/s/TgQ0nj5nP6a36LpMmER3Uw 


另外,这几篇文章我的公众号文章可能也对你有帮助:

隐性知识:https://mp.weixin.qq.com/s/1LHraeRhcYoxY03VS7Riag (实际上,写出正确的代码就是一种隐性知识!) 

高效学习的秘诀:https://mp.weixin.qq.com/s/mvRBDwzVebz4BGAEr8MMtw (其中的 6,7,8 是关于这个问题,你需要关注的) 

大厂为什么总考算法?https://mp.weixin.qq.com/s/r8myL-qGW24R4PRDkKjtyg (4 和这个问题相关) 


加油!:)

3
hq_慕娘3016055
h 非常感谢老师这么认真的回答我的问题和迷茫! :)
h020-10-06
共1条回复

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2603 学习 · 1086 问题

查看课程