第一时间获取价值内容
仅作学术分享,不代表本公众号立场,侵权联系删除知乎链接:https://www.zhihu.com/question/387940895 编辑:深度学习与计算机视觉
自己刚接触数据结构,完成大作业感觉好难,好奇那些项目是怎么完成的,如果把这个题目给我,思维会很混乱,所以就想看看别人一些逻辑清楚的代码,自己慢慢照着敲,然后看能不能默出来,再自己去写,不知道这种方法有没有效
迦伦然后用战术上的勤奋掩盖自己战略的懒惰。
这种事情我也做过,我的数据结构和算法基础也不好。虽然我上课也很认真,但是确实没有听懂老师讲什么,为了保持注意力,只能老师在讲,我就撑着眼皮打架,然后一边抄一边试着理解,如果不会理解就努力去背诵。 事实证明,这是个非常糟糕的策略。因为我虽然耗费了大量的时间和精力,最后成绩都不咋地,而且也没有办法灵活使用。直到我知道班里有差不多一半人都挂科,我才意识到,这可能不是我一个人的问题。
然后我就吸取了这个教训,(这两门课同一个学期学的),如果某一科老师讲的课,我实在听不进去,我就干脆自学,还能省点时间,反正很多老师上课也只是念PPT,跟念经一样,没意思。结果证明,自学比强逼着抄写背诵好太多了,就像对乳糖不耐的人,喝酸奶效果比喝牛奶好些。
不过,我其实不建议你像我当初那样,拿着教材自学。 因为时代不一样了,现在网络上有大量的教程,图文并茂+视频可视化,你只要穿越了长城,就能畅游知识的海洋,接下来只要学会搜索,学习编程就能像鱼儿在水里呼吸一样自然而舒服。这是最好的最快的获取一手资料的方法。
但长城以内也有很多知识库,虽然时效性差一点,但是对于学生也足够了。 如果你要练习数据结构和算法,LeetCode 还是非常适合学生的。 如果你想自己做出一些工具/产品。比如小程序,网站,APP,游戏,软件各种,那就得磨炼工程能力。而阿里和腾讯作为国内的互联网巨头,都提供了很多免费超一流的课程,它就躺在那里,等待所有人去搜索。除此之外,掘金,博客园,CSDN,网易云课堂,简书,阮一峰的入门博客,廖雪峰的Python/Java教程,鸟哥的Linux私房菜,雷神的视频大礼包,github 上的各种 awesome markdown,都是非常值得自学的内容。
也许因为太容易获得,所以很多人只是收藏,很少有人去执行。 所以只要你开始执行,就能超过99.9%的同龄人。 就这样吧,多么希望,十年前的我能看到我的这个答案。 陈文礼当然,作为过来人我知道有这样的想法往往是觉得读很枯燥,经常思想开小差,读完了啥也不记得。所以不能仅仅是“读”,这是对的。但是对于程序,用“写”来填补不是什么好办法。我个人推荐用调试、修改来填补。一边单步执行一边读,对照计算机执行的流程和你脑子里认为的流程,可以发现很多问题,加深理解。之后,尝试修改,改得更快,甚至是有意改错,只要你能预计到会出现什么错,就是很好的。
练手(写)也是必要的,但是我认为这种对于熟悉API更有效。API文档再怎么看,不实际调一调用一用,看看结果,就是空的,实际上还是啥都不知道。 黄兢成实际上,当你看不懂的时候,任何让阅读速度慢下来的方式,都有用。包括
来看的话,至少要满足:
1 代码不是自己写的 2 并且别人的代码不能是CTRL+C/V,甚至把别人的源代码下载下来直接跑,毕竟这根本称不上敲。 如果你非得推广到「把别人的代码下载下来」甚至「看范例自己推广」、「看别人的思路自己实现」都要能算得上「抄」,那我觉得根本就偏离题主原意了我就不理解为什么那几个抄代码的人会被顶到那么高,是因为这些抄代码的人互相有了共鸣吗……
我早年学C的时候用过一点点打进电脑这种办法,包括后来看那本《笨办法学Python》,后来觉得这确实是很笨啊(而且抄Python代码那酸爽,谁抄谁知道),于是我就再也不抄了,不然每次看一个源代码都抄一遍那要疯啊,更何况稍大点的项目你根本不知道他是以什么顺序写的,这就相当于一像素一像素去临摹别人的画,那抄也白抄。尤其是楼主描述中说的这个「看看别人一些逻辑清楚的代码,自己慢慢照着敲,然后看能不能默出来」,是更加笨的办法。你还不如找他给你说明一下,或者找那些图形化示范数据结构的网站看看实际上是怎么做的,然后再自己实现一遍并且调通。学习数据结构这种东西就是要自己实现一遍才晓得每条代码到底是怎么运作的。与其去抄,还不如把别人的代码拷过来看行为,比如放到环境里面跑一跑,打打断点和输出,右键看看调用过程什么的,比你瞎抄快多了。
国内一些教材确实讲得很不好,你光看它看不懂是正常的。真正能打的教材,比如SICP和Algorithm,都是先把思想给你讲得很透彻了,然后再让你一步步实现或者给你代码。我也算是比较笨的那种人,当时学SICP也有很多当时感觉非常mindfuck的东西,都是看书完了看视频,然后再去写出来调到通。
这个过程说白了才是真正的学习过程,因为你代码跑不通、不按预期方式执行肯定是因为你就是没想明白它是怎么个结构。看输出和debug慢慢调到过的过程,就像是一个老师慢慢教你哪里出问题的过程,毕竟你写得不对那就是因为你有些地方没考虑清楚——而debug就可以很方便地找出自己到底是哪里没考虑清楚。
比如说写个遍历链表的时候它会漏掉某些元素,那就debug一下,打打断点看看变量池,看看执行到什么地方会漏元素,为什么会漏元素——这个过程比你输入代码、背诵代码的过程要更能检查你的想法到底哪里出了问题。
大家都在争论该不该抄代码,
我的问题是:你直到 学到数据结构了,要做大作业了,才发现你的编程基础有问题,面对作业根本没思路的吗?按理说大一应该有一些编程语言的基础课程的,这个课程应该有大量的小题目练习,来帮助你熟练掌握语法,对编程有个基本思路的,那么那个时候的作业,您好好做了吗?
抄,
你抄语文课文,抄英语单词那种抄,没用。
文科,需要把既定事实,一字不差的记下来,在正确的时候运用。
编程不是的。编程那是,在既定的语法规则下,用这套语法规则,把自己所想的逻辑表达出来。 匿名用户但是,数据结构不行!
数据结构,那是建立在更高一些的抽象上的,硬抄代码而不理解这一段、那一段代码想表达什么样的数据结构的操作,那是没用的,抄完你仍然不会用数据结构解决问题。所以,
你先搞清楚,你到底哪块不行?是本来编程语言了解不扎实,C/Java/Python就低分飘过,简单的循环都不会写;还是数据结构就没听,完全不知道数据结构。 前者请从0开始补,后者请同学吃顿饭,给你好好辅导一下。没用。
抄代码只对具体的细节问题有效。譬如说怎么在窗口上画一个圆,这个可以抄。但是你连怎么架构mspaint都要抄,那这是在白费力气。 Malachite https://www.zhihu.com/question/387940895/answer/1154820977 抄是可以,别光是抄 想想每行代码除了上下文无关的意义之外,对于整个块、最终目标的意义 然后给每一个块写注释,要自己说得通、别人看得懂 会有用的 冒泡回忆下中小学时代你背课文(不知道现在的老师有没有这么变态了,背现代文……),你如果是一个字一个字地顺序背,那么效率很低,最后背完了可能也学不到什么。但如果你是预先把每个自然段大致讲了什么记下来,那就算每个自然段背得有所出入,你也能大致了解作者的行文思路,从而看看能不能借鉴。
不同于写作,写代码的套路相对而言更单一,所以记住设计思路的作用其实更大。细节部分也可以照着敲,敲完再理解。
到处挖坑蒋玉成抄代码是一个增加肌肉记忆,强制自己思考,防止走神的过程,初学阶段这个过程对大多数人来说是绝对有重要意义的。
静阳但抄别人代码只是第一个阶段,如果一直靠抄别人的代码是很难进步的。抄别人的代码主要是初步的学习,在这之后我们就需要进行实践。这就是为什么计算机专业在老师上完课以后有实验课自己敲代码。
所以,我认为第二阶段就是参考大佬们的代码,写出自己的代码。这一步是把别人的变成自己的。这一步实现以后,一定要注意!对比!。有对比的学习,记忆更加深刻,进步也会更快,了解大佬为什么是大佬,为什么大佬是这么写的,这样写有什么好处优势。
第三阶段,我认为就是开始自己创造,自己写代码。很多朋友是存在老师说的会写,但是一旦离开老师,自己在做项目就啥也不会。这一阶段就是开始独立的写代码,降低依赖性。
第四阶段,我认为就是加快自己写代码的速度和提高自己写代码的质量。这就是成长吧(狗头滑稽)
第五阶段,我认为就是可以静静的装逼,成为别人眼中的大佬,接受别人膜拜,让别人抄你的代码,向你提问。狗头狗头
为什么我这么清楚,因为我只是第一阶段的菜鸡,后面都是我编的。 架构师作为初学者,抄代码肯定能加强你对代码的熟悉感,这里包括语法,一些常用概念等。对着敲代码顶多也是增加你对语言的熟练程度而已。
数据结构作为编程最基本的内功,重在理解。你只有理解了原理,才会明白别人为什么要这么写,只有内功练到一定程度,才能识别别人的代码是不是值得超的代码。当你把数据结构理解深透之后,你就会发现别人的代码有时候不是最完美的,这个时候你就有自己的逻辑了。就像做数学题一样,你总是抄别人的答案没用,你最终要理解解题过程,解题思路,这才是一个初学者要学的。
同样作为过来人,学习编程是有一点点捷径的,那就是找一个资历深厚的老师,不懂就要问,知道自己明白。不过这样的老师现实中很难找,当然自己努力也很重要。
学习编程切记不要浮躁,静下心来,理论+实践才是硬道理 扶余城里小老二事实上,从printf显示搬到图形控件上显示,你还距离一个图形库,比如qt,mfc,wxwidget,ue4这类的库。然后你就得画大量时间去学习这些前端内容。慢慢地你发现,你忘记了初衷,然后开始想学习如何掌控这些前端图形控件,你搞得这些窗口,都是一些华而不实的东西,虽然你也知道这么个情况,但是呢,你仍然继续着昨天的努力。
假如你选择的是qt,那么你就得学习qt的信号和槽,还有一堆q打头的类库和用法。moc这些东西。你就养成了使用非c++的东西,慢慢的你开始学习qml脚本,然后就过渡到了pyqt里面。紧接着,你就想跟pytorch接轨,搞起了深度学习。
然后你就在鲜花和掌声中,告别了c++。 这就是残酷的现实。点赞才能够逆天改命。
扫一扫下面的二维码免费领取10G的Python学习资料哦~
“扫一扫,领取Python学习资料”