请问各位程序员,是我的思维方式有错误吗?

65,359

你好呀,我是歪歪。

前几天知乎给我推送了一个问题,我点进去一看,好家伙,竟然把我血压都看上来了是怎么回事。

我先把问题复述一遍,聊天记录比较长,但是看的过程中容易冲动,注意控制情绪:

最后,提问者还是说:顺便请你们分析下我的思维方式是怎样的?是个怎样的人?

遭不住

怎么样,你看完之后什么感觉?

反正我看完之后是直呼“遭不住”。

我甚至一度怀疑这个师傅是不是有什么把柄落在徒弟手里了啊?

这是一次错位感非常强烈的对话,而产生错位感的原因我认为是两个人的认知不同。

师傅,一个正在职场打拼的大厂程序员。

徒弟,一个准备踏入职场的单纯小菜鸡。

这个师傅一直在提的是:面试、工作、offer...

这个徒弟一直在提的是:原理、底层、细节...

如果说这个徒弟学习编程知识纯粹是为了爱好,学着玩,也不想着靠这个东西混口饭吃,就是想研究研究编程到底是啥玩意。

那么很好,徒弟没毛病,是一个值得鼓励的学术派。

但是从这两句话中,我猜测这个徒弟学编程不是纯粹为了爱好,也是想要找份工作,进入程序员这个行列的:

基于“想要去面试”这个提前下,他的这个问题:

请问各位程序员,是我的思维方式有错误吗?

有问题,那是相当有问题!

不仅是思维方式有问题,整个对话方式都是有问题的,给人一种情商有待提高的感觉。

我倒不是想批评他,我只是想基于他的这个问题,谈谈自己的一点看法。

思维方式

我先讲个我大学的时候的故事。

我大学的专业是计科,这个专业是要学模拟电路的。但是那一年,我这门课学的是一塌糊涂,老师上课我都听不懂,心想这玩意也太难了。

不知不觉混到期末,要考试了。

我在考试之前,下载了一整套的模电相关的视频。硬生生的在图书馆啃了一个月的时间,在磕磕绊绊的情况下,我终于在临近期末的时候把这套视频看完了。

那一个月把自己的感动的不行了,觉得自己真牛逼:这么难的东西,我竟然啃下来了。

学习路上就怕是误入歧途,还自我感动。

最后去考试,我发现其实大家都考的还可以。因为考题中大部分都是书里面的课后习题,大家拿一周的时间重点突击一下课后习题就好了。

后来我反思了一下,我觉得自己在图书馆里面看一个月模电视频这件事纯粹太傻了,就是在浪费自己的时间。

我属于完全是把时间用在了错误的地方。

我记得看视频的时候有一些比较难的地方,看不太懂,我还会去反复看,查阅其他资料,最后其实也是一知半解的样子。

我现在想起这件事就后悔。

我明明可以只用一周的时间突击一下就行了,但是我却傻傻的用了宝贵的一个月时间,期间学的还非常难受。

如果我带着现在的认知回到大学的时候,我一定要找到那个时候在图书馆啃模拟电路视频的自己,上去就是抡圆了两巴掌:

我们一起来复盘一下这件事啊。

首先,我看模电的初衷只是为了期末考试能过,不挂科就行。

其次,期末考试的时间是固定的,所以我的时间是非常有限的,这属于我的资源。

最后,整个过程中我都是单打独斗,甚至没有人知道我天天早出晚归的去图书馆,其中相当一部分的时间是在看模电。

结果你也知道,这样的投入产出比是非常的小的。

这样的情况其实和提问题的徒弟有点像:

首先,他去学这些东西的目的是进入到程序员这个行业中来,只要能通过面试就行。

其次,哪怕他把时间线拉长到一年或者两年呢,终归来说时间也是有限的。

但是他比我好的是,有一个师傅,一个过来人,告诉他说:你先别看这个东西,对你来说收益不大,先去攻克其他的目前来说对你更有价值的东西吧。

就像是我说的,当时有人在我看模电的时候过来给我一巴掌,说:你拿一个月时间看这个玩意还不如拿点时间敲几行代码呢。

我也算是能醒悟过来,但是,没有。

我当时还走入一个怪圈,看到不懂的地方还会钻牛角尖,还想要去尝试一下那些贼难的附加题。研究一下“茴”的几种不同写法。

这就是没有分清事情的优先级的表现。

能分清事情的优先级是一件非常非常非常重要的事情!

这个徒弟似乎也和我走入了同样的怪圈,但是自己浑然不知。

但是他比我更严重的是,有人给他指路了,他还非觉得自己坚持的才是对的。

再举一个我之前看书的例子。

如果你是搞 Java 开发的,那么你一定知道有一本书叫做《深入理解Java虚拟机》。

我第一次看这本书的时候,是 2016 年的国庆节,那个时候我才毕业 3 个月时间,对于 JVM 相关的知识储备是 0。

但是我当时知道这是一本非常好的书,所以那一年的国庆节,花了整个国庆节的时间把这本书一页一页的翻了一遍,而且不是走马观花的看,是认认真真的看,还做笔记的那种。

书里前几章的例子,我甚至都在电脑上敲了,跑起来看了看。

但是整个读完一遍之后的感觉是“云里雾里”,关上书之后就什么都不记得了。

好在我当时知道这是比较底层的东西,所以目的也只是通读一遍,并没有强制要求自己要学到多少东西。

如果,我当时要求自己把这本书吃透的话,这又会是一件投入产出比非常低的东西。我完全可以拿着这个时间去学习我当时根本不了解的、但是工作中在用的框架,比如 Dubbo、Spring、MyBatis 等等。

这样性价比会高很多。

我当时能想到时间的“性价比”这一点,也完全是因为我前面举的模电的例子带给我的思路。

我踩过坑了,我吸取教育了,以后再次遇到类似的时候我就知道应该避免一下了。

虽然当时没吸收到多少东西,但是在有一定的编程经验之后,比如两年之后,再次翻阅《深入理解Java虚拟机》我发现能吸收很多东西进去了。

我之前围绕这本书也写过很多文章。

假设,如果我第一次看的时候,就被下面文章中描述的这个问题深深的吸引进去了,然后花了很多时间才搞明白原来是这么一回事,其实没什么意义:

《深入理解Java虚拟机》第2版挖的坑终于在第3版中被R大填平了

又或者说,我被这个地方代码给吸引了,非要去研究一下为什么运行结果不一样,也没有什么意义:

《这个Bug的排查之路,真的太有趣了》

哪怕那个时候我去深入研究了什么三色标记、记忆集、卡表、读写屏障、jit...这些东西,都是没有意义的。

因为这就不是一个工作经验不到一年的程序员应该掌握的东西。掌握不了是正常的,掌握了说明你牛逼,你可以把附加题给做了。

这个例子我想表达的是:

学习的顺序也是一件非常非常非常重要的事情!

你可以在学习的时候去钻牛角尖,但是别忘了,你是一个“学渣”,钻牛角尖是“学霸”才有能力干的事情。

所以别忘了,你提问的时候自己说的你是一个“前端初学者”,研究底层原理是“中高级程序员”才有能力干的事情。

我不是说你不配去研究“原理、底层、细节”这些东西,而是我觉得你这样的投入产出比太小了,可以说是微乎其微。

而且你的研究之路从学习的顺序这个角度来说也不太对,如果你真的是想要去理解底层的东西,你应该踏踏实实的去看一下正儿八经的四年本科的专业课相关的课程,按照那个顺序去学。

才有可能把“底层之路”走的稍微顺畅一点。

我个人的学习经验是如果在掌握全局之前,太过于追求细枝末节的东西,会影响到你掌握全局的进度。

而如果你不能尽快掌握不了全局,你所追求的细枝末节就如你师傅说的:

对于一个想要入行的但还没入行的程序员来说,时间本来就是比较紧张的资源了。

本来好好的利用这个资源,你可以在面试的时候考到 60 分以上的,但是由于你对于资源进行了不合理的分配,一上来就要强吃原理,导致的情况就是时间节点到了,但是拿出的结果并不理想。

即使在有人提醒你的情况下,还是没有掌握到事情的轻重缓急。也就谈不上对于某个任务的资源利用最大化了。

这里面说的任务就是通过面试。而资源之一,就是指“时间”。

如果你真的是一个程序员,很可能在一个任务即将提测的时候,任务还没有完成,因为你大部分时间在研究这几行代码怎么写更加优雅。

我认为一个优秀的实用型程序员的职业素养之一就是不断在有限的开发时间和优雅的代码实现之间找到一个平衡点。

总之,提问者可能还是一种学生思维,我在当学生的时候,常常是手边来一个事情就做一个事情,不具备分辨事情优先级的能力。

自己不具备的时候,可以去请教过来人。

如果你手上的任务堆积非常的多,同时你又不知道那个任务的优先级高的话,那么一个明智的做法是尽快问一下给你分配任务的同事,然后告诉他:我现在手上有几个任务,冲突了,麻烦帮我拍个优先级吧,我自己有点拿捏不准。

先做十万火急的事情。切忌,来一个事情就做一个事情。

情商

我之前在知乎回答这个问题的时候就提到了这一点:

为什么他的这段对话能让人看的血压升高呢。

我截取几个地方,首先是听不进劝:

别人话都说到这个份上了,还在杠,还在杠,还在杠!

学习的路上你还会遇到无数个这样的小问题,如果每个你都要去杠一下,得了,别学了,去当运动员吧,国家抬杠一级运动员。

再说了,我一个后端都知道你问出来的这个问题,通过浏览器搜索很容易就搜索到答案了。

没有一点面向浏览器编程的意识,为师怎么放心让你踏足社会。

然后太自我了,就是那种目空一切,没有遭受过毒打的自我。

请把这句换成:我觉得这样可能会更好一点。

这句可以换成:我可能之前没有和你聊过,我其实是一个比较喜欢追求原理的人,所以会比较纠结一点。

这句可以换成...

算了,换成啥都不对味,没救了,看点相关的书,然后勤加练习吧。

下面这些都属于治疗低血压的良药:

如果你把这样的性格、这样的对话带入到职场中,相信我,来自社会的毒打会来的又快又猛,你甚至看不到是谁出招了,你就倒下了。

还有,“快”和“准”是两个字:

另外,徒弟在回复别人的时候提到说他是给了钱的:

这钱花的值,但是师傅的作用其实和大学老师一样。目标是把你领到门口来,至于能不能走到门里面就看各自的造化了。不是一直用来回答你技术问题的。

相对于精进编程能力,我个人觉得你也应该好好学学待人接物之道。

在网上冲浪的时候可以多留意一下这方面的信息。

进入职场之后,代码并不复杂,复杂的是人。代码你可以 Debug,但是人心隔肚皮。

最后,送你一张图,建议常常拿出来仔细观看: