尝试LeetCode带来的思考

我想说,LeetCode不只是刷题那么简单,也不只是应付面试那么点用处。

我在多年的软件开发中,一直以来都不太去关注实验法和数据结构方面的东西,总是秉持浅度应用的理念,只要不是荒唐的暴力算法也就放过了自己在这个领域的挣扎。

最近无意间订阅了极客时间的课程,并参加了《左耳听风》发起的ARTS挑战,参加挑战的时候实无十足的把握能坚持下去,抱着试一试的心态,毕竟除了跑步、读书外就没有坚持过什么很有意义的事情。

首先ARTS第一项就是“Algorithm”:每周至少做一个 leetcode 的算法题,看到它的第一眼内心就有点慌张,虽然算法这一块我一旦钻研起来也不是最弱的那一个档次,但很多年没有去深入的对算法进行有意识的训练,也一直认为这是自身在技术领域的弱项。前两天第一次开始全神贯注的选了一个简单级别的算法题来热身,算法倒是实现了,但是执行时间是打败了30%左右的同类算法,内存消耗则是打败了10%左右的同类算法,莫名感到巨大的差距出现在面前。然后根据自己本身的理解去对算法调优,哪怕一个变量也不放过,最后结果还算满意,但也从另外一面暴露了对计算机基础理论知识运用的不熟练和深度思考的能力不足。

关于深度思考:

在工作中,很多时候我们都是在工作中不断的去学习新知识、巩固旧知识,付出比别人多得多的努力,总是认为努力就是值得的,努力就应该有收获,但大部分人的努力和收获都是不成正比的,一直在沮丧中寻求突破,就这样周而复始。另外,可能自己也会意识到努力带来的不是收获,而是因为对未来的迷茫和恐惧,不得已而为之。

我们IT行业的很多从业人员,当然也包括我自己,有过这样的感慨:大数据来了、人工智能来了、区块链诞生了...,计算机行业更新换代太快了,青春逐渐远去,35岁眼看越来越近。自己给自己带来恐惧,自己给自己设限,心乱则人浮,纵使努力加倍但还能有多大的提高呢。

IT行业无穷无尽的变革、无边无际的变化,心念之而无力。然而我想,如果自己在进行相应领域的工作时,能够更多的去思考这些技术背后的本质,深度的去挖掘它们在行业中的意义,慢慢的就会发现,很多东西是相通的,学一知十而不是学十知一,从厚积薄发转变到薄积厚发。但前提是学会深度思考,深度应用,即使面对全新的技术也能快速抓住核心,找到重点。最终形成自己的知识体系、独立的深度思考方式,当然,在一定程度上也得借助前辈们的经验和教训。例如,在工作中,我有时会去问别人的作品,这样做的原因是什么,他会饶有信心的把阿里或腾讯的App、网站统统打开,得到的回答是“阿里是这样做的、腾讯是这样做的...”,实际上听到这样的答案让人感到一阵阵的悲哀,有影响力的东西是在特定的环境中才有影响力、才有意义,并不是努力的拿来用就适合自己、就是最佳方案,而是要去理解这背后的深意才是最重要的。

关于计算机基础理论:

IT行业工作多年的人,大部分会遇到瓶颈,觉得什么都会,深究又什么都不会,问题在哪里呢?--基础理论。初入社会的大学生或者有多年工作经验的人,觉得实践才是检验真理的唯一标准,然而有没有想过,低标准的真理,实践再多有什么用呢。基础理论没有上升到一定层次,很可能一直处于所在低层次的顶端,无法突破,要想有所突破,简直比登天还难,这就是我们所能感受到的瓶颈。

最近在看王宝令老师的《Java并发编程实战》的专栏,他在专栏中提到了“基础理论”这一话题,深有同感。可能在java领域的同行们看过诸如《java核心编程》、《java编程思想》等等之类的大量书籍,感受是什么呢?这本书的内容我在那本书里面看过,有种踏雪无痕的快感,但你学的东西重复了,在花宝贵的时间学习同样的知识,内心是明白的:没什么太大的长进,就喜欢乐此不疲。

在我看来,理论基础是良好实践的开端,过于追求表面的东西就会变得华而不实,很容易走向技术领域的死角。在面试的时候,我不太喜欢问候选人会做的东西,喜欢从更基础更理论的方向去了解候选人在所知领域的突破能力、学习能力,并不是会这门技术、这种工具就能把事情做好,其实还远远不够。

在多年以前,始终觉得研究生、博士生没有什么了不起,象牙塔里的生活终究会被社会的残酷所淹没,他们多学三年或六年,甚至更长时间,总抵不过在社会上摸爬滚打同等时间所具备的能力,如今回想起来,那是大错特错。这不是智商的差距,而是层次和格局的差异,不是大多数普通人凭努力就能弥补的,他们在基础理论上的深度早已植入为一种本能,在抓住事物本质方面更精准、更快速,当然在实践过程中带来的效果和影响力更具有可信度、说服力。

最后:

通过一次简单的挑战尝试,ARTS挑战应该可以对自身深度思考和对计算机基础理论的理解更进一步,期待坚持到最后一周后养成的习惯,也许也就没有最后一周之说了,坚持已成习惯还会在乎坚持么。

你可能感兴趣的:(尝试LeetCode带来的思考)