美文网首页技术学习的反思每天写1000字程序员
源码学习的两个问题:深度不够+直接跟着敲

源码学习的两个问题:深度不够+直接跟着敲

作者: 前进的竹子 | 来源:发表于2018-06-05 06:44 被阅读41次

    一天都在照抄别人的代码,边写边理解,通过自己敲能更够好地理解,但问题是这样的效率太低。最重要的是,自己没有思路,全照着作者走,一行一行地敲,一方面没有一个整体上的概念认识,另一方面耽误太多时间。

    还有一点,纯粹照着敲,就不知道自己的问题出现在哪,没有对比,虽然在敲的过程中会发现自己不曾知道的知识点,但也只是知道了,下次能不能用,能不能改,或者还知不知道用就是问题。

    只是知道,还不够

    之前也照抄过一些开源项目,大多数都是比较简单的项目,主要是为了学习某个功能,或者实现某个效果。整体代码比较简单,照着敲完就能运行,不会有太多阻碍。问题是,好多东西在敲过运行成功之后就不再管了,当时感觉很好,有一种明悟,原来是这么实现的,或者原来是这么用的,我知道了。

    知道之后就没有下文了,没有再次的实际操作,也没有自己独立再敲一遍,毕竟很多代码还是比较复杂的,再敲一遍就会浪费太多时间。抱着这种态度,之前看过的源码基本上都没有什么印象,下次用到的时候,还要重新下载,重新看。就好像之前根本就没有学会这个知识点,仅仅只是知道,然后就直接过去了。

    可是这种“知道”,达到学习效果了吗?真正转化为自己的知识了吗?或者说在过程中学到什么了吗?学习不止是要知道,而是要学会,要吸收,要转化,更要思考总结,对比提升。所以只是浮于表面的知道,并没有达到学习的目的,只是满足了一时的好奇心和短暂的满足感。

    如果读过别人的源码,仅仅只是知道有这个功能实现,或者说仅仅只是知道怎么实现的,而忘了将其转化为自己的知识储备,同时不去实践,不使用,不自己尝试实现,仅仅只是“知道”。下次再遇到,也只是回想起有这个功能,却不知道是怎么实现的,那学习的意义在哪?只是在已知功能的列表里,加上一行,然后告诉自己知道这个功能可以实现,仅此而已吗?

    这应该不是学习源码,而是在做一个功能列表,更何况大多数时候连这个功能列表都没有呢?如果没有通过源码切实学到东西,只是走一个过场,仅仅只是知道有这个功能实现,却对代码中的知识点一笔带过,对于作者良好的编程风格视而不见。那你到地在做什么?走马观花?你的工作应该是养花吧,瞟一眼就走算啥。

    直接跟着敲,太匆匆

    自己看源码就是,找到主视图,然后跟着敲。用到新的类,就去创建,再引用。遇到新的方法,就先写新方法,再回过头来接着写。在写的过程中,逐渐梳理出来这个源码的架构、流程,在梳理完成之后,自己也差不多就能照着敲完。

    对于代码量小的Demo,这种方式还好,如果遇到稍微大点的功能,就很容易混乱,尤其是自定义封装类比较多的时候,主流程代码就会不时被中断,而且有时候并不是短时间的中断。当再次回到主流程的时候,之前的逻辑就需要再理一遍,或者就直接往下继续,想着是等写完了再理。

    大概因为之前尝试学习的都是小项目,并没有太大的问题,因为一般的一个小的功能也就需要两三个类文件就能实现。一遍写一遍梳理,脑回路还够用,毕竟整个实现的时间并不长。

    但是面对稍稍复杂的项目,就会觉得很累,而且时不时地就把握不住流程,陷入混乱,打击学习的积极性。而且即使照着敲完,对于整个项目的流程还会不够清晰,需要重新梳理。

    直接开始敲,不可取,虽然开起来很忙碌,很有感觉,但是很容易陷入混乱的境地。

    学习源码的过程跟做一件事情的过程是一样的,首先要知道自己需要什么,直击要点,或许过程中还有很多其他问题,但是最大的前提是,要知道自己的目的在哪。即使只是纯粹地想要跟着敲一遍代码,直接跟着敲也不是好的方式。

    对于学习来说,实践是重要的一步,但实践的前提是要知道你要实践什么知识。

    就像追女孩,你的目标是那个女孩,不要先抱起一本“人类起源”,想着先理解人是怎么来的。除非那个女孩喜欢这个,不然谁给你时间让你研究完人类之后,再去让你追?

    学习源码也是同样的道理,首先要知道要学习的是什么。如果是某个功能,那就直接定位到功能点,然后再扩展实践;如果是真个项目架构,那就整体把控分析,分析架构层次,思考原因;如果只是为了敲代码,那就无所谓了。

    总结

    在学习别人代码时遇到的两个问题:

    • 1、深度不够,只是浮于表面的知道,但并没有真正地理解和掌握。还有一点,就是要思考总结,时常复盘巩固。
    • 2、方法问题,不能先直接开始跟着敲,要搞明白自己的目的是什么,先直击重点,解决重要问题。

    相关文章

      网友评论

        本文标题:源码学习的两个问题:深度不够+直接跟着敲

        本文链接:https://www.haomeiwen.com/subject/frgusftx.html