最近在知乎上看到了一个很有趣的问题,题目叫做:编程学习真的需要天赋吗?
提问题的题主说自己花了半年的时间硬啃C primer plus,结果看到链表的时候就再也看不下去了。然后又看算法导论,看得头疼欲裂。于是陷入了困惑,为什么同样是半年的时间,别人可以把基础的算法都学完,但是自己却一无所获呢,难道真的是天赋不行吗?
其实之前公众号里也有很多小伙伴问过我同样的问题,今天就和大家聊聊,希望能够帮助到大家。
不要通过啃书的方式入门
在我看来题主最大的问题可能不是天赋不够,而是选错了学习方法。
说起来不同的人有不同的方法,有些人喜欢看视频,有些人喜欢看书,还有些人喜欢直接上手练习。不同的方法就好像游戏里的不同职业一样,优势不同,本质上并没有高下之分。所以现在很多年轻人很喜欢B站学习法,在B站上找一些学习视频,配合弹幕看起来非常舒适。
如果要给这些学习方法做个排序的话,视频应该是最简单的,其次是博客,然后是上手练习,最后才是看书。看书基本上可以说是当中最难的,我自己也亲身体验过。在我高中刚毕业的时候,我也曾经试着自学过C语言。和题主不同的是,由于高中的时候参加信息竞赛,所以我当时是有编程基础的,也会一门语言。但即使如此,一整个暑假,我愣是没有把C语言啃下来。
当时我也以为是我自己的问题,我倒没怀疑我的天赋,因为毕竟学过一门语言了。我觉得是我毅力不够,偷懒太多了。结果上了大学之后,听了几节C语言课了解了一下语法,然后又去机房练习了一下,C语言就写得有模有样了。当时还帮一个其他学校的同学写了个图书管理系统。
我后来试着看书啃过很多技术领域,基本上都没有啃下来,但是通过其他的途径基本上折腾了一下,就都入门了。我慢慢总结出了规律,当我们从零开始入门的时候,最好不要选择看书硬啃的方式。因为看书的过程当中会遇到很多很多的问题,这当中很多问题甚至我们不能很好地描述,因为我们本身就没完全理解。另外一个问题是写书的人视角和看书的人视角是完全不同的,因为写书的人已经会了,很多内容他会不自觉地觉得这是天经地义应该了解的,读者也应该都懂了,但实际情况往往不是如此。
所以再好的大学也是把书当做教材,而不是让学生去自学,原因就在这里。
循序渐进学习法
我个人总结出来的是循序渐进学习法,其实也可以理解成防劝退学习法。
当我们学习一个新的领域的时候,最大的困难或者是问题其实不是我们学到的东西,或者是我们不理解的东西,而是劝退。往往遇到的困难多了,就会想要退缩逃避。这种心态人人都有,也是人之常情,人类就是很讨厌自己不擅长的东西,这个很难完全避免。虽然无法避免,但是我们既然预料到会有这种情况,其实可以防止它发生。
防止心态崩溃的方法就是想办法不要让自己心态崩溃,也就是降低学习的难度。一开始的时候先选择比较简单的资料和内容,比如面向纯小白的视频或者是公开课。我们先通过这些入门资料对要学习的东西有一个大概的了解,然后再找一些最简单的挑战上手实操,从实际操作当中体会它的运作原理。
这里要注意,循序渐进法入门门槛低,但是需要我们不断加码,不能半途而废。很多人就到实操这一步就停止了,学了一点操作就以为自己懂了,后面只是积累经验不再学习新的内容了。这会导致我们遗漏很多重要的知识点,或者对很多地方理解不够深刻。我个人会在这个阶段之后,再进行系统性的学习,比如找一本经典的教材完整看一遍。由于我们已经对这个领域有一定了解,并且都已经上手实操过了,对很多技术细节已经有一定的概念了。这个时候再看书其实是一种查漏补缺的作用,完整看一遍下来之后,会学到很多高级的技巧,以及夯实我们的理解。
看完书之后,我们可以再进一步找一些高难度的内容来实操。就拿算法举例,一开始学完算法理解完概念之后做的是基础题。基础题做完了再来巩固学到的内容,做一些难度加大的提高题。提高题做完了,再做和其他算法结合以及需要其他更多知识和能力的困难题。等困难题都做完了,那么说明这个算法是真的学到家了。
总结下来就是通过这种逐渐加码给自己提高难度的方式来反复锻炼和夯实自己的能力。
天赋没那么重要
其实对于程序员这一行,我们很难说出天赋究竟是什么。
是人特别聪明,什么技术一学就会吗?还是特别有耐心,可以阅读无数源码也不会觉得厌烦?还是思维缜密,以至于很少写出bug?
看起来这些都是天赋对吧,但其实它们都不重要。首先先拿聪明来说,聪明的人学东西的确快。但问题是我们这行学东西快不快并不重要,重要的是精不精。精通远远比会的多重要,但精通一门技术无论是谁都是需要长久的打磨和锻炼的,对于聪明人来说也一样不是一件容易的事。再说耐心和思维缜密,这两点其实都是可以训练的,都属于可以训练的技能。我自己之前就很没耐心,也粗心大意,写出过很多bug。但是经过几年的锤炼和训练,养成了操作前三思的习惯,已经很少出错了。
都说行业内卷,竞争激烈。说起来也的确如此。大公司的岗位这么多人竞争,一点也不比公务员逊色。但如果换个角度,我又会觉得有些言重。因为90%的程序员日常工作就是重复着已经熟练的技能,能够逼着自己不断突破,不断学习的,少之又少。靠着经验积累,靠着不断的工作,很多人一样可以进入大公司,拿到不错的薪水。
有人在我知乎下面留言说,阿里的P7就是普通程序员的天花板。可是我认识很多P7,他们当中能做到不断自我提升的,也一样是少数。能让我感知到天赋的,更是几乎没有。所以与其把阿里P7称作是行业天花板,倒不如说是不会持续提升自己人的天花板。
有的时候我倒觉得天赋这个词本身就是留给传奇和天才的,像是楼教主、陈立杰这种顶级大牛,我一定是觉得有天赋的。他们能够用一年时间做到国家队水平,两三年时间成为全国甚至世界冠军。这种成就显然不只是努力就能实现的,背后一定有顶级甚至过人的天赋。我曾经听学长说过acm界一位热爱女装参赛的传奇选手,他为了金牌苦肝数年才最终如愿,付出的努力之多令所有人惊叹。人送外号凡人的极限,也就是说作为凡人无论多么努力就只能达到他的水平,再往上就是神一样的天赋型选手了。
虽然这是一个玩笑,但也有些启发意义。有些时候我们就需要有这样的心态,坦然接受自己就是一个没有天赋的普通人。虽然没有天赋,但我们也不是什么都做不了。靠着努力和热忱,凡人的极限也一样能拿金牌,也一样可以有光明的未来。
本文转载自微信公众号「TechFlow」,可以通过以下二维码关注。转载本文请联系TechFlow公众号。