宣纸一笔,思重于行——聊一聊思考的价值

2021 M01 30

前言

不知道大家是否有这样的困惑,很多时候,事情完成的结果和我们预期的并不完全一致。 有意思的是,即便是从头到尾都是自己来负责,也有可能出现这种诡异的情况。

举个例子,你下定决心三个月备战一次面试,有了想法立刻着手准备。 年轻人,雷厉风行,就是正视生活的态度,整起来,没毛病。

这期间,你把红宝书一阵猛翻,LeetCode一阵暴刷,源码一阵狂敲, 一套组合拳打完收工。

三月期限已到,你闭目沉思,只觉得山河大海,尽收眼底。 听闻同岗位面试者众多,你淡然一笑,心中默念:即使千万人在前,我要去,那便去。

然后面试官问了你一个基础的小知识点, 你当场懵逼,懵逼的不是题为什么这么简单,而是这么简单自己都不会。

面试官微微一笑,说没关系,然后你面试就挂了。

是否觉得过于真实,又觉得哪里不对?

本周双休,今天我们就来聊聊,思重于行的真正价值。

反差为何

是否好奇为什么结果和自己想要的会有偏差?我觉得是思考不够充分。 换句话说,只想到了某一个点。而实际上,你要考虑的是以点成线,以线构面。 如此,哪怕最后结果和预期仍然有偏差,也必然不会像之前那样过于离谱。

出于某种奇奇怪怪的心理,哪怕某件事没清晰的想法,只要有一个切入点,就可以去做。 这就像做数学大题,题会吗?说会拿不了满分,说不会还有点思路,能拿步骤分。 但你要是不做,那必然是零分。从这个角度考虑,预期和结果会有差异,是正常的。

如果可以,谁不想一开始就考虑的尽善尽美呢?

问题的关键在于,如何把一件事考虑的足够细致,足够全面。

初心为何

结合自身经历,我觉得如果想把一件事考虑的足够细致,最主要的就是初心。 初心,决定了你最终能达到的高度。

比如看源码,你就是漫无目的的看,那最终结果也必然是感觉会点东西但是又说不出层次感。

建议你在做某件事前,先问下自己这三个问题。

为什么要做? 做完能给自己带来什么? 完成需要从哪些角度入手?

下面我从技术提升和面试时源码准备两个角度来细化这三个问题。

技术提升

为什么要学?

为什么要学某项技术是一个很简单而又常被忽略的一个问题。

大佬们都在学,那我也学!即使不能成为大佬,也能靠近大佬。 现在趋势就是这个技术,很多培训机构都在讲,周围同事都在学,我不学就跟不上潮流啊... 以上想法不能说错,毕竟每个人都有自己的想法,适合自己的才是对的。

就我而言,我学习某项技术,会先关心是否和当前业务有关。 如果公司内就一直是react,不考虑vue,那我短时间就不会过多关注vue生态技术栈。 为什么?因为我要保证等效时间创造高的价值。学了一堆业务上几乎用不到的技术, 除了扩展自己的知识面,帮助有限。再者,没有合适的落地场景,过一段时间就忘了, 到最后相当于这段时间被白白浪费。

掌握某项技术能为自己带来什么

掌握某项技术能为自己带来什么?最直观的,一份工作。 也许你想问为什么都是从公司角度考虑问题,因为我只是平凡的打工人,家里没矿。 一份稳定的工作,就意味着有稳定的收入,收入稳定生活才有可能稳定。

掌握某项技术需要从哪些角度入手

掌握某项技术需要从哪些角度入手?这个方面很多,也可能因人而异,但大的方向殊途同归。 我以学习react为例,先撸官方文档核心概念部分。这部分看完意味着你对react有一个初步的认知, 了解了核心用法,此时就可以上手业务开发了。是的,不要有什么顾虑,这就可以了。在开发中, 发现某些东西不够用,或者想让代码更优雅,再去看高级指引。

这部分都了解了,是要开始看react源码了吗?不,不急。先关注一下react生态技术栈。

类型相关技术
数据请求axios
状态管理redux,mobx
路由react-router
UIantd

什么时候需要看源码

对于所有技术,在熟练使用前,不要考虑什么性能优化,源码如何如何的,先走起来再考虑跑。 等你在使用上得心应手,又好奇为什么某个api这样用,或者除了这样用,还能怎么用? 又或者,为什么这样用会报错?有类似这样问题的时候,就是你看源码的最佳时机。 因为你已经明确知道自己为什么要看且知道看完能给你带来什么。

看源码的方式有哪些

最明显的,那必然是GitHub找到对应的代码仓库,定位与你问题相关的代码。 这个定位不难,文件夹和文件名都是见名知意的。

如果能直接看懂那自然是最好,如果看不懂可以去掘金,知乎,思否,哔哩哔哩等平台看看有没有相关 的视频讲解或者文章讲解。如果都没有,可以去问问导师或者其他同事。 当然,能自己搞明白最好,哪怕多花时间,只要能解决你的业务痛点,就是值得的。 最后,也就是最重要的,业务方案总结,把你的收获落地。

不要盲目

我是深有体会,react用了不到一年就开始想着看React技术栈 相关源码了,然后各种仓库拉下来到本地。乍一看,目录结构很清晰,应该好理解。

打开细看,心态炸了:嗯?这都什么玩意?这谁看的懂啊?写的好牛逼啊!嗯,这部分为什么要这样写? 我擦,我是废物,代码也太多了。

于是乎,默默的删了拉取下来的代码。 就好像,它放在那里,是对自己的一个侮辱,时刻在嘲讽自己好菜。 就这样反反复复的,我折腾了一年,也没实际进展,因为确实缺少了一个清晰的初心。

直到2020年九月,被抖音面试官源码爆锤,一面挂。 简历所写,必问源码。从那以后,我才决定要提升源码能力,并且也有了提升的方向。

面试源码准备

定位核心

思之所以重于行,是因为在思的层面上,能避免无效的行。

大多数情况下,你看源码的动机,可以更纯粹些,比如就是为了进大厂。

在准备的时候,需要全部的都撸一遍吗?其实也不是。 以我参加的20多场面试来看,行业内似乎有一个君子协定。 面试官如果问源码,就只聊核心的,边边角角的就算了。

那问题来了,什么才是核心?

你问我核心是什么?

别人不会的你要会,别人会的你更应该会,面试高频,一路横扫,这,就是核心!

源码

下期会介绍上边提到的相关实现,本期只聊思想。

层次性的回答

厉害点面试官都是从一个看似基础的问题然后逐级递进的提问,这也就给了你一个回答的方向。

我举个例子,面试官让你用自己的话解释一下闭包。

先定义一个函数,在函数内部可以沿着作用域链查找到非当前作用域的变量。 这个函数就可以看做是闭包,其访问到的非当前作用域的变量是闭包变量。

如果你真的只是说一下概念,那你和其他面试者就没什么区别了。 最多是比其他人说的更严谨,更精准,但也仅仅如此。

我反复提及的思考,在这里体现的就是你想的要更全面。

比如说,闭包的应用场景有哪些,能不能面试的时候手写一个示例?

从这个角度你可以补充webpack的同步加载,不会加载重复模块是因为用闭包做了缓存。

cache

在此基础上,补充v8引擎通过函数预检查识别闭包存在,并拷贝相关变量到堆内存, 用以保证外部函数在出栈后闭包变量依旧可用。

我想如果你回答到这个层次,你的优势就很明显了,其他知识点也是如此。

想的足够全本身就意味着别人没想到的你要想到,这确实很难, 但如果都是基础,又怎么拉开差距呢?

再会

学而思,思而动,动有所得,所思皆值。

情如风雪无常,

却是一动既殇。

感谢你这么好看还来阅读我的文章,

我是冷月心,下期再见。