先说结论:
1、一定要接触最好的编程体系,好的体系可以达到事半功倍的效果,否则即便智商再高,也有可能要走很长的弯路;
2、切勿有畏难心理,在学习的过程中会遇到数次平台期,期间有可能会怀疑人生,需要熬过去;
3、编程水平的提升需要经过大量的练习,不存在不劳而获;
4、要和优秀的人一起学,遇到不会的问题,要放下面子,敢于提问;
5、遇到不会的知识点,需要硬啃,今天不解决的问题,明天不会自己解决;
6、数学对于编程非常重要,请学好数学;
7、教别人会让你自己水平变高;
我是从初一开始学编程的,一开始学编程只是为了多玩会游戏。2010年在三线城市的普通初中,编程这个事情压根就没有普及,我也不知道学这个东西有什么用,那时就是学着玩呗。因为也没有人教,我就买了一本清华大学出版社出的Pascal的教材在那边瞎折腾。那时候网上也没什么资料,所以我学了三年啥也没整明白,像搜索、最短路这些算法我连名字都没听过,更不用说会写了。
进入了绍兴一中,我突然发现,原来编程不是我以前认为的那样子的,是另一个样子的。因为周围有一些很牛逼的人,就是那些能拿国内甚至国际奥赛金牌的人,我才意识到差距不是一般的大,他们五分钟十分钟能解决的问题,我自己搞了两三天都不知道在干什么,就只能拼命地学,每天压力也很大,因为周围的人都比我水平高,他们都是从好的初中过来的而我的初中水平差,我每天就担心自己会不会垫底,所以心态很不好,人就很焦虑。
我那时从初三暑假开始在绍兴一中学,一个暑假就学会了很多东西,因为有学长带着,就把动态规划、图论基本上都学会了。后来想一想好像我也愿意走这条算法竞赛的路,就继续学了。
我人生有三次编程水平大飞跃的时期,我的高中时期是第一次。但这次背负了太大的压力,因为世界第一次向我敞开了大门,我之前根本就不敢去想清华北大之类的学校,因为我的人生目标一直都只是考上一个一本学校,然后回老家做一个公务员。突然间,看到了不一样的希望,因为太想要,所以最后也得不到。每天就是失眠,两三点要嗑安眠药才能睡着。大冬天下着雪,我穿一件衬衫也会流汗,但我就在那边拼命地学,因为我相信努力还是能出成绩的。那时候确实也学到了很多东西,每天早上七点就到机房,晚上怎么也得到十点十一点睡觉,有比赛的话就要到凌晨两三点,第二天又是七点去机房,每天重复这样的生活,大概过了一年多的时间。最后高中我水平也比较高,小比赛都很牛逼,但由于心态的原因,一到大比赛就会全线崩盘,差点就没大学上了,也受到了很多的质疑,质疑我平时在作弊,因为我平时的水平和比赛的水平差距实在太大了。我受了很大的委屈,我从小就很看不起作弊这件事情。
最后我运气比较好,进了上海交大,进交大的时候,我心里其实是有一股气的。我觉得我要证明我自己,因为高中相对来说还是有点失败的。那我得告诉以前那些小瞧我的人,他们是错的。
很庆幸我进了上海交通大学,无论是从能力上还是思想上都极大地改变了我的一生。
大学的时候,比赛是三个人一队,有两个队友,每天都在一起学习一起训练,这样的道路就不会觉得太孤单,以前一个人的时候会害怕,总会患得患失,现在队友就是坚强的后盾,你就不会再恐惧,因为你们三个人是一个整体。
那时候我也学了很多的数学,因为高中的学习其实很多是建立在猜上的,很多都是靠直觉,直觉就是依靠多次训练之后锻炼出来的,你觉得它是对的,它也确实是对的,但就是不知道为什么。大学学了线性代数、数分等等之后,第一次知道这些为什么是对的,而不是仅仅只会用它们。这件事情让我养成了一个很好的习惯,就是写代码之前要从数学上证明自己的想法,这会让你在写代码、打比赛的时候犯更少的错误。于是我实现了第二次飞跃。
那时候,我和队友们经常一起睡机房,也经常半夜到处翻墙,因为管机房的大爷要赶我们,我们每天要和他打游击。但那时候的生活是快乐的,为什么呢?因为我心中有一个目标,我就是要去战胜世界上最强大的对手,去追求那种一览众山小的感觉,所以你不会觉得那是一种苦,相反你会觉得非常有乐趣。最后的结果说好也不好,因为各种各样的原因,最后到一半我自己就把这个事情停掉了,就去做科研了。
在这个过程中,我花了五年的时间,也慢慢地自己治好了自己内心的不安和焦虑,重新获得了小时候那种平静。最后,我也发现,我压根就不需要向世界证明什么,压根就不需要去打败任何人,我唯一想做的就是,去探索更多的东西,去探索自己的极限到底在哪里,我的人生没有那么多的观众,做好我自己就行了。
又过了几年,当我开始教别人写程序的时候,我的编程水平又实现了一次飞跃。在这个过程当中,我神奇地发现,我对一些基础的理解其实并没有那么深刻,所以就经常讲了一半会讲不出个所以然来,于是就迫使我重新回去思考,突然就发现,自己又能做一些以前做不到的事情,又学会了一些以前好几年都学不会的算法。那就是说,我以前学不会是因为自己对一些事情的基础理解是错误的。所以大家在学习的时候,也要把自己的想法和理解告诉别人,这对你来说也是一个检验和提升的机会。
还有,在学习编程的过程中,我自己遇到了非常非常多的瓶颈期,就是那种半年一年啥都没提高的状态,每天练练练就是过不了那道坎。最后其实发现,其实熬熬就过去了,编程水平的提升好像就是这样的状态,你缓很久,然后突然上一个台阶,然后又缓很久,再提升,如此循环。所以现在大家学不会也不要着急,再熬一熬,也许过一段时间就上去了。
回首往事的时候我觉得自己是幸运的,为什么呢?
第一,我确实遇到了一批世界上最好的人,无论是高中还是大学,大家因为共同的爱好聚在一起,每天不分日夜地去努力,在这个过程中互帮互助;
第二,我接触到了很好的编程体系,因为无论是高中还是大学,都拥有全世界最好的编程训练体系。我为什么对这个事情有很深刻的理解呢,因为我初中三年真的什么都没学会,初中三年做的事,高中一个礼拜就全都能做到了,如果我不进绍兴一中或上海交通大学,我可能一辈子都不会知道编程到底是什么、算法到底是什么;
第三,也是感谢命运给了我那么多的失败,让我非常早地就理解了,成功不是我追求的东西,我追求的是变成一个更好的自己;
第四,在过程中我也抵挡住了很多的诱惑,因为我的初中老师和我讲,我的天赋是低于平均水平的,但就是熬熬熬,好像把比我聪明的人都熬走了,因为他们都去做别的事情了,就我继续在干这个,好像熬一熬我也熬成了这个圈子里水平不那么差的人。所以我相信,很多事情是因为坚持,你才能够与众不同。天赋只能帮助你一时,但只有热爱和坚持才能帮助你一世;
第五,那时候我经常会死磕,经常下一个狠心,我不吃饭不睡觉一定要做完一个事情。如果没有这一次次的死磕,我想我也不会是今天这样。
后来,无论是科研也好工作也罢,我真的看到了很多很多东西,每天都抱着一种好奇心,想要对世界多了解一点,但如果不是因为遇到了编程,遇到了这么多非常优秀的人,遇到了这么多优秀的老师,我这样天赋的人是压根不可能走到今天的。所以,现在我们想把我们的好东西分享给更多的人,我们真的想要把自己了解到的东西开放出来让大家少走一些弯路。因为我们知道走弯路是什么样的感觉,我们知道那种苦涩。那么既然我们有能力,我们就应该帮助更多的人。我们后面做的很多事情都是基于这个逻辑。 |