在职程序员再学算法的深刻感悟

一位已经在职程序员在再次学习算法中,在方法上遇到了上点麻烦,他给我来信,并为他出了一些主意,见《一道算法题引起的疑惑——如何“画”算法(附免费视频链接)》。
  随后,他真的打通了这个环节。更难得的是,他在这一段时间内,已经进入到了一个新境界。从学习中的认知层次角度,他已经从上大学时,围绕着能应对考试的那种表层的学习,进入到了真正思考学习内容的意义,并且能够感知和调控自己的学习方法和过程的深度的学习中了。
  这是一个人能在这个终身学习的时代立足的基本条件之一。
  征得他的同意,将他给我寄来的学习体会分享出来供读者参考,在【】中加些我的批注。

【分享他的来信】
1.需要几个指针,初始位置是什么,如何在循环体中移动。而且各种特殊情况都要考虑到,比如链表为空,只有一个节点等等。

【要对程序的流程有个很好的感知,同时,要对“边界”敏感一些。】

2.数组和链表是很多数据结构的基础,使用二者来实现更高级的数据结构(看jdk源码)。
  3.遇见陌生的东西不要有惧怕心理。正是拉取已有知识的好机会。

【这是一种很健康的成长心态。】

4.积累的东西,不能用完就扔了,成为身外之物。要在现有的基础上不停的积累,提高,内化为自己的能力和潜意识。

【不要试图一下子就学会,“滚雪球”式的成长,是最好的。】

5.查漏补缺,如何查漏补缺?看的时候需要注意什么?对知识点的重新复盘,不熟的东西熟悉,和已有的熟悉的东西联系起来,形成知识网络。透彻理解,能给别人讲出来,能自己动手写出程序。目的是学以致用。

【多种学习的手段,组合拳轮流上。】

看以前学过的内容,会发现有新的东西、不理解的东西、貌似以前遗漏的东西,会感觉不爽,觉得是自己以前学得不好导致的。这是自己一直存在的一个很大的问题。

【揪着“以前学得不好”不放,会让自己走不动。放下这份自责,脚步就轻松了。】

首先,要明确一点,不是自己学得不好导致的,知识就是在学习的过程中不断加深理解和完善的,像添砖加瓦一样。在遇到这种情况时候,不能否定自己,要轻松愉悦地吸收知识点,和以前所学联系起来,让知识点更加牢固,这就是持续精进的过程,如果否认这个过程的合理性,就是认为一个知识点都是一次就学的很完善,这是完全不符合实际的。急功近利的表现。每看一次,都不能白看,让知识点更加牢固,这就是你的目的。以后脑子里要有构建知识网络的意识。

【学习,和软件产品一样,是在“迭代”中逐渐完善的。将众多的知识点,不断产生联系,构建自己的知识网络,这是学习中最重要的事。】

当你感觉不适、不想学的时候,有可能就是你的不好的惯性思维在作怪,这时候需要反观自己的思维过程。

【在“学会学习”的过程中,这样的反思,促进自己思考学习,从而指导再后面的学习。这是“关于学习的学习”,是“学习(动词)学习(名词)”,教育学中,将其称为“元认知”。】

6.看链表的时候,size和head陌生,这说明以前就没有整体思路-全局观,只不过是写着程序顺下去了。以后需要改变:不要写一遍写一遍,写了多次还不知道整体思路,所以每次写的时候感觉手生。

【写一遍是手段,在头脑中形成理解和记忆,这是目标。】

搭架子,往里面填充细节。终于找到手生的原因了,下一步就是在实践中解决它。

【有价值的体验!】

7.在做项目的时候有意识的尽量穷尽知识,用到实际中去。如果用不上,是知识体系搭建的不好,不知道往那个知识点对应。零零散散的知识点不好运用起来。

【要主动建构知识网络。常说的“记不住”,很多时候问题出在“调不出来”,这需要建网络,给自己更多的“提取线索”。】

8.搭建知识网络的重要性。

【好感悟!】

9.算法:先考虑一般情况写出算法,然后利用特殊情况来修正。如果报空指针错误,大多数情况是边界条件的问题。如果有多个指针,后面的指针可以考虑在循环体重进行首次赋值。

【我的回信】
  进步怎么可能有这么大?感悟怎么能有这么深?从认知理论的角度,你已经进入到了用”元认知“指导自己学习的层次了。这样的总结很有意义。
  就这样先在技术上钻研,你将同时收获一份比技术更有价值的财富。
  这些思考,我可以在博客上分享吗?

【他的回复】
  嗯嗯,贺老师,可以的。
  以后我把学习过程的疑惑、经历、思考和收获持续发送您。
  现在经常看您的帖子,受益匪浅,要是读大学的时候就能发现您的帖子,现在就是另一番模样了,相见帖子恨晚。

你可能感兴趣的:(学习指导,IT学子成长指导)