抄代码对自己编程提高有用吗?

点上方蓝字计算机视觉联盟获取更多干货

在右上方 ··· 设为星标 ★,与你不见不散

仅作学术分享,不代表本公众号立场,侵权联系删除

AI博士笔记系列推荐

周志华《机器学习》手推笔记正式开源!可打印版本附pdf下载链接

知乎链接:https://www.zhihu.com/question/387940895

编辑:深度学习与计算机视觉

自己刚接触数据结构,完成大作业感觉好难,好奇那些项目是怎么完成的,如果把这个题目给我,思维会很混乱,所以就想看看别人一些逻辑清楚的代码,自己慢慢照着敲,然后看能不能默出来,再自己去写,不知道这种方法有没有效

作者:迦伦
https://www.zhihu.com/question/387940895/answer/1252055229

大概有一点点心理安慰作用。

安慰自己在努力,安慰自己尽力了。

然后用战术上的勤奋掩盖自己战略的懒惰。

这种事情我也做过,我的数据结构和算法基础也不好。虽然我上课也很认真,但是确实没有听懂老师讲什么,为了保持注意力,只能老师在讲,我就撑着眼皮打架,然后一边抄一边试着理解,如果不会理解就努力去背诵。

事实证明,这是个非常糟糕的策略。因为我虽然耗费了大量的时间和精力,最后成绩都不咋地,而且也没有办法灵活使用。

直到我知道班里有差不多一半人都挂科,我才意识到,这可能不是我一个人的问题。

然后我就吸取了这个教训,(这两门课同一个学期学的),如果某一科老师讲的课,我实在听不进去,我就干脆自学,还能省点时间,反正很多老师上课也只是念PPT,跟念经一样,没意思。

结果证明,自学比强逼着抄写背诵好太多了,就像对乳糖不耐的人,喝酸奶效果比喝牛奶好些。

不过,我其实不建议你像我当初那样,拿着教材自学。

因为时代不一样了,现在网络上有大量的教程,图文并茂+视频可视化,你只要穿越了长城,就能畅游知识的海洋,接下来只要学会搜索,学习编程就能像鱼儿在水里呼吸一样自然而舒服。

这是最好的最快的获取一手资料的方法。

但长城以内也有很多知识库,虽然时效性差一点,但是对于学生也足够了。

如果你要练习数据结构和算法,LeetCode 还是非常适合学生的。

如果你想自己做出一些工具/产品。比如小程序,网站,APP,游戏,软件各种,那就得磨炼工程能力。而阿里和腾讯作为国内的互联网巨头,都提供了很多免费超一流的课程,它就躺在那里,等待所有人去搜索。

除此之外,掘金,博客园,CSDN,网易云课堂,简书,阮一峰的入门博客,廖雪峰的Python/Java教程,鸟哥的Linux私房菜,雷神的视频大礼包,github 上的各种 awesome markdown,都是非常值得自学的内容。

也许因为太容易获得,所以很多人只是收藏,很少有人去执行。

所以只要你开始执行,就能超过99.9%的同龄人。

就这样吧,多么希望,十年前的我能看到我的这个答案。

作者:陈文礼
https://www.zhihu.com/question/387940895/answer/1177045843

umm,数据结构可能是一个很不好的例子。

数据结构这种,包括算法,主要是理解。代码其实是最不重要的。如果感觉无法应用(无法用来解决实际问题),那么问题也很可能并不是出在代码能力上,而是出在不能将领域模型转换到数学模型,或者简单来说,对套路不熟悉上。

抄写很多代码,能不能熟悉套路?也许能,但是效率很低。因为“写”这个动作肯定比“读”慢,而且抄写是又读又写,那么你的脑子还能有多少余地去思考。

当然,作为过来人我知道有这样的想法往往是觉得读很枯燥,经常思想开小差,读完了啥也不记得。所以不能仅仅是“读”,这是对的。但是对于程序,用“写”来填补不是什么好办法。我个人推荐用调试、修改来填补。一边单步执行一边读,对照计算机执行的流程和你脑子里认为的流程,可以发现很多问题,加深理解。之后,尝试修改,改得更快,甚至是有意改错,只要你能预计到会出现什么错,就是很好的。

练手(写)也是必要的,但是我认为这种对于熟悉API更有效。API文档再怎么看,不实际调一调用一用,看看结果,就是空的,实际上还是啥都不知道。


作者:黄兢成
https://www.zhihu.com/question/387940895/answer/1255467684

对于我来说,看不懂时,将书中代码敲入电脑,这种行为是有点用处的。我最初学数据结构的时候,就是将书中代码敲到电脑编译测试。

这并非是敲代码本身有用,而是用敲代码的方式,强迫自己将看书的速度慢下来,一行一行,一字一字地看。

实际上,当你看不懂的时候,任何让阅读速度慢下来的方式,都有用。包括

  1. 朗读。

  2. 做笔记。

  3. 抄书。

  4. 用手指在字上移动。

根据内容的不同采用适当的慢下来方式。这些方式,都是让你慢下来后,思考速度跟上阅读速度。

只是当你对这部分内容很熟悉,还这样做。还去敲代码(或者抄书、手指指着字等),效率就低了。

作者:世最新一期
https://www.zhihu.com/question/387940895/answer/1254099234

更新一下定义澄清,在我看来所谓的「抄代码」的定义,按照题主说的「慢慢抄代码敲」和自己慢慢照着敲,然后看能不能默出来,再自己去写

来看的话,至少要满足:

1 代码不是自己写的

2 并且别人的代码不能是CTRL+C/V,甚至把别人的源代码下载下来直接跑,毕竟这根本称不上敲。

如果你非得推广到「把别人的代码下载下来」甚至「看范例自己推广」、「看别人的思路自己实现」都要能算得上「抄」,那我觉得根本就偏离题主原意了


我就不理解为什么那几个抄代码的人会被顶到那么高,是因为这些抄代码的人互相有了共鸣吗……

我早年学C的时候用过一点点打进电脑这种办法,包括后来看那本《笨办法学Python》,后来觉得这确实是很笨啊(而且抄Python代码那酸爽,谁抄谁知道),于是我就再也不抄了,不然每次看一个源代码都抄一遍那要疯啊,更何况稍大点的项目你根本不知道他是以什么顺序写的,这就相当于一像素一像素去临摹别人的画,那抄也白抄。

尤其是楼主描述中说的这个「看看别人一些逻辑清楚的代码,自己慢慢照着敲,然后看能不能默出来」,是更加笨的办法。你还不如找他给你说明一下,或者找那些图形化示范数据结构的网站看看实际上是怎么做的,然后再自己实现一遍并且调通。学习数据结构这种东西就是要自己实现一遍才晓得每条代码到底是怎么运作的。与其去抄,还不如把别人的代码拷过来看行为,比如放到环境里面跑一跑,打打断点和输出,右键看看调用过程什么的,比你瞎抄快多了。

国内一些教材确实讲得很不好,你光看它看不懂是正常的。真正能打的教材,比如SICP和Algorithm,都是先把思想给你讲得很透彻了,然后再让你一步步实现或者给你代码。我也算是比较笨的那种人,当时学SICP也有很多当时感觉非常mindfuck的东西,都是看书完了看视频,然后再去写出来调到通。

这个过程说白了才是真正的学习过程,因为你代码跑不通、不按预期方式执行肯定是因为你就是没想明白它是怎么个结构。看输出和debug慢慢调到过的过程,就像是一个老师慢慢教你哪里出问题的过程,毕竟你写得不对那就是因为你有些地方没考虑清楚——而debug就可以很方便地找出自己到底是哪里没考虑清楚。

比如说写个遍历链表的时候它会漏掉某些元素,那就debug一下,打打断点看看变量池,看看执行到什么地方会漏元素,为什么会漏元素——这个过程比你输入代码、背诵代码的过程要更能检查你的想法到底哪里出了问题。

大家都在争论该不该抄代码,

我的问题是:你直到学到数据结构了,要做大作业了,才发现你的编程基础有问题,面对作业根本没思路的吗?

按理说大一应该有一些编程语言的基础课程的,这个课程应该有大量的小题目练习,来帮助你熟练掌握语法,对编程有个基本思路的,那么那个时候的作业,您好好做了吗?

抄,

你抄语文课文,抄英语单词那种抄,没用。

文科,需要把既定事实,一字不差的记下来,在正确的时候运用。

编程不是的。编程那是,在既定的语法规则下,用这套语法规则,把自己所想的逻辑表达出来。

作者:匿名用户
https://www.zhihu.com/question/387940895/answer/1255957801

一般抄在以下情况下,是有必要的:

1、完全不知道语法规则什么样的,

2、对着语法规则,完全没有想法,想参考一下一般大家是怎么做的(对某种情况,大家通常的表达是什么样的)。

但是,数据结构不行!

数据结构,那是建立在更高一些的抽象上的,硬抄代码而不理解这一段、那一段代码想表达什么样的数据结构的操作,那是没用的,抄完你仍然不会用数据结构解决问题。

所以

你先搞清楚,你到底哪块不行?是本来编程语言了解不扎实,C/Java/Python就低分飘过,简单的循环都不会写;还是数据结构就没听,完全不知道数据结构。

前者请从0开始补,后者请同学吃顿饭,给你好好辅导一下。

没用。

抄代码只对具体的细节问题有效。譬如说怎么在窗口上画一个圆,这个可以抄。但是你连怎么架构mspaint都要抄,那这是在白费力气。

作者:Malachite

https://www.zhihu.com/question/387940895/answer/1154820977

抄是可以,别光是抄

想想每行代码除了上下文无关的意义之外,对于整个块、最终目标的意义

然后给每一个块写注释,要自己说得通、别人看得懂

会有用的

作者:冒泡
https://www.zhihu.com/question/387940895/answer/1263391419

可以的,不过关键是用脑子抄,而不是抄完就忘,事前得知道自己要抄的代码的大概结构是什么,哪些节点在做什么事情,抄的时候主要是深入到细节

话说我每次接手新项目的时候有个习惯就是一行行将老代码改成我自己的风格,对理解代码细节还是有用的(主要是控制自己阅读代码的节奏)

作者:裴浩
https://www.zhihu.com/question/387940895/answer/1186330814

看你怎么抄。

初学者做大作业难往往是没有一个清晰的思路,写代码就像写作文一样,都是首先确定大致的流程,然后再填充细节。首先要审视自己,是因为细节写不出来,还是大致的思路都没有。

回忆下中小学时代你背课文(不知道现在的老师有没有这么变态了,背现代文……),你如果是一个字一个字地顺序背,那么效率很低,最后背完了可能也学不到什么。但如果你是预先把每个自然段大致讲了什么记下来,那就算每个自然段背得有所出入,你也能大致了解作者的行文思路,从而看看能不能借鉴。

不同于写作,写代码的套路相对而言更单一,所以记住设计思路的作用其实更大。细节部分也可以照着敲,敲完再理解。


作者:到处挖坑蒋玉成
https://www.zhihu.com/question/387940895/answer/1252523111

有用,事实上这就是正确的学习方法。但前提是,首先你要在编程环境里亲自动手写,不能抄在纸上,第二,在开始写之前你要先了解算法的宏观原理,然后一句一句写,一句一句想,搞清楚为什么这么写,每一句的含义。最后,写完一遍之后要试着自己写一下,反复练习确保自己完全掌握

抄代码是一个增加肌肉记忆,强制自己思考,防止走神的过程,初学阶段这个过程对大多数人来说是绝对有重要意义的。

作者:静阳
https://www.zhihu.com/question/387940895/answer/1187406552

答:抄大佬写的代码确实是有用的。

我们上课不就是先看着老师做一遍案例嘛,抄代码其实可以看作是模仿例题。

但抄别人代码只是第一个阶段,如果一直靠抄别人的代码是很难进步的。抄别人的代码主要是初步的学习,在这之后我们就需要进行实践。这就是为什么计算机专业在老师上完课以后有实验课自己敲代码。

所以,我认为第二阶段就是参考大佬们的代码,写出自己的代码。这一步是把别人的变成自己的。这一步实现以后,一定要注意!对比!。有对比的学习,记忆更加深刻,进步也会更快,了解大佬为什么是大佬,为什么大佬是这么写的,这样写有什么好处优势。

第三阶段,我认为就是开始自己创造,自己写代码。很多朋友是存在老师说的会写,但是一旦离开老师,自己在做项目就啥也不会。这一阶段就是开始独立的写代码,降低依赖性。

第四阶段,我认为就是加快自己写代码的速度和提高自己写代码的质量。这就是成长吧(狗头滑稽)

第五阶段,我认为就是可以静静的装逼,成为别人眼中的大佬,接受别人膜拜,让别人抄你的代码,向你提问。狗头狗头

为什么我这么清楚,因为我只是第一阶段的菜鸡,后面都是我编的。

作者:架构师
https://www.zhihu.com/question/387940895/answer/1211997634

首先谢谢邀请,作为一个工作10年+的 “老人”说两句吧

作为初学者,抄代码肯定能加强你对代码的熟悉感,这里包括语法,一些常用概念等。对着敲代码顶多也是增加你对语言的熟练程度而已。

数据结构作为编程最基本的内功,重在理解。你只有理解了原理,才会明白别人为什么要这么写,只有内功练到一定程度,才能识别别人的代码是不是值得超的代码。当你把数据结构理解深透之后,你就会发现别人的代码有时候不是最完美的,这个时候你就有自己的逻辑了。就像做数学题一样,你总是抄别人的答案没用,你最终要理解解题过程,解题思路,这才是一个初学者要学的。

同样作为过来人,学习编程是有一点点捷径的,那就是找一个资历深厚的老师,不懂就要问,知道自己明白。不过这样的老师现实中很难找,当然自己努力也很重要。

学习编程切记不要浮躁,静下心来,理论+实践才是硬道理


作者:扶余城里小老二
https://www.zhihu.com/question/387940895/answer/1182895268

一点用途没有。你看数据结构书的时候,都是大佬把环境给你搭建好了,你直接造个算法函数,输入数据,就ok了。

事实上,从printf显示搬到图形控件上显示,你还距离一个图形库,比如qt,mfc,wxwidget,ue4这类的库。然后你就得画大量时间去学习这些前端内容。慢慢地你发现,你忘记了初衷,然后开始想学习如何掌控这些前端图形控件,你搞得这些窗口,都是一些华而不实的东西,虽然你也知道这么个情况,但是呢,你仍然继续着昨天的努力。

假如你选择的是qt,那么你就得学习qt的信号和槽,还有一堆q打头的类库和用法。moc这些东西。你就养成了使用非c++的东西,慢慢的你开始学习qml脚本,然后就过渡到了pyqt里面。紧接着,你就想跟pytorch接轨,搞起了深度学习。

然后你就在鲜花和掌声中,告别了c++。

这就是残酷的现实。点赞才能够逆天改命

end

这是我的私人微信,还有少量坑位,可与相关学者研究人员交流学习 

目前开设有人工智能、机器学习、计算机视觉、自动驾驶(含SLAM)、Python、求职面经、综合交流群扫描添加CV联盟微信拉你进群,备注:CV联盟

王博的公众号,欢迎关注,干货多多

王博的系列手推笔记(附高清PDF下载):

博士笔记 | 周志华《机器学习》手推笔记第一章思维导图

博士笔记 | 周志华《机器学习》手推笔记第二章“模型评估与选择”

博士笔记 | 周志华《机器学习》手推笔记第三章“线性模型”

博士笔记 | 周志华《机器学习》手推笔记第四章“决策树”

博士笔记 | 周志华《机器学习》手推笔记第五章“神经网络”

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(上)

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(下)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(上)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(下)

博士笔记 | 周志华《机器学习》手推笔记第八章(上)

博士笔记 | 周志华《机器学习》手推笔记第八章(下)

博士笔记 | 周志华《机器学习》手推笔记第九章

点个在看支持一下吧

你可能感兴趣的:(编程语言,人工智能,java,xhtml,etag)