想学技术,但是觉得自己特别菜,怎么办?

2022-08-26 15:59:16 浏览数 (2)

作者 | 梁唐

大家好,我是梁唐。

不知道大家有没有见过一些技术牛人,这些人就好像天生什么技术问题都见过,都能解决。在你身上一筹莫展头疼了很久的问题,到了他面前瞬间从巨龙变成了绵阳,三下五除二,站瓜切菜就搞定了。

当我是个萌新的时候,每次遇到这样的大牛都非常地羡慕,要是我也能这么牛就好了。后来随着阅历的增加和技术的成长,对于如何成为大牛这个问题终于悟到了一点皮毛,今天就和大家聊聊这个话题。

不知道大家有没有看过一个纸尿裤的广告,它的广告语只有一句话,叫做:天才第一步,xx纸尿裤。

虽然是个广告语,但是认真琢磨地话真的挺有意思。即使是天才也是从穿纸尿裤开始的,同样,那些技术巨牛的大佬们也是从一无所知的萌新开始的,没有人是生来就会写代码懂技术的。所以啊,我经常会思考一个问题,这些大牛的第一步是在哪里迈出的呢?

也就是说是什么让大牛成为了大牛,而菜鸟依然是菜鸟呢?

前几年我时不时地就会思考这个问题,就在这个时候,我听到了一个理论,叫做问题解决理论。这个理论是说,什么样的人是大牛?能够解决难题的人,越牛的人能够解决越难的问题。普通的工程师解决的是开发当中的小问题,代码中的bug,架构师解决的是某一个系统的架构和性能问题,再往上的大牛解决的可能是公司的战略发展问题,决定公司是生是死、未来成就的大问题。

从那之后,我就开始观察不同的人解决问题的方式和能力。这一观察就好像是进入了金庸武侠小说似的,看到了各种流派和风格。有积极主动的,有保守防御的,有的疾风暴雨三下五除二搞定,有的润物细无声默默耕耘搞出大成就。

虽然大家面对问题的方法论和风格大相径庭,但是有一点是一样的。一个人的能力和成就和他解决问题的能力的确是有些相关的。刚毕业的萌新们不少不知道如何解决问题,而摸爬滚打多年的老江湖们则要果断老练得多。

既然解决问题也是一种能力,它一定也是可以通过训练增强的。我们今天不聊深奥的,就只谈谈对于小白来说,如何提升自己解决问题的能力呢?

在职场里,一般来说刚毕业的新人入职都会分配一个比较资深的工程师做师兄,外企一般叫mentor。由mentor带着新人一起做事,给与新人指导带领他成长。

一般来说无论大小公司都是如此,很多人也会觉得这是天经地义的。这本身是一个挺好的制度,毕竟刚入职往往对技术栈、公司的技术体系等问题一无所知,想要干活肯定需要人指点。但是当提问-接受回答这个习惯养成了之后,很多新人会很自然地提出所有自己遇到的问题,对于mentor产生依赖心理。

不知道有没有读者被戳到痛处,其实这是很自然的心理反应,我当年刚毕业的时候也这样。

后来在我做了mentor之后,我也遇到了这样总是提问的萌新,转换视角之后发现了许多问题。比如说很多问题其实是他们可以解决的,比如有的人会直接甩给我一段报错的日志,问我遇到了这个报错,该怎么解决?然后我一看这个日志里面报错信息写得清清楚楚,google一下立马就能找到许多答案。

也有些人是心态比较毛躁,看到红色的报错信息就陷入了心里崩溃,开始抓耳挠腮,嘴里碎碎念,这是怎么回事?不应该啊?但就是不能静下心仔细看一下报错日志。

根据我的观察,至少90%的代码问题,都能从报错日志当中找到答案。大部分是直接把错误的地方怼到你脸上,小部分是需要你翻找一下日志,从方法调用栈当中找到出问题的那一行。只有小部分是通过日志直接找不到原因的,这些问题往往和分布式、并发等特殊领域相关。

我个人觉得其实只有无法从日志当中获得足够信息的问题是新人无法解决的,哪怕真的解决不了,也尝试一下思考和分析。

下面要说的点是英文很重要,至少书面阅读的能力很重要。

为什么英语很重要呢,因为很多第一手资料都是英文的,比如一些论文、博客和代码问题的解决。中文程序员社区其实也不算小,并且这几年也在不断地增大,但如果你去试着在中文搜索引擎当中搜索一些技术相关的问题往往还是找不到答案,或者是找不到正解。

但如果你尝试着搜索英文,可能会更容易一些。下面介绍两个著名的解决问题的社区,第一个大名鼎鼎,可能许多人听说过,它就是Stack Overflow。

Stack Overflow是一个程序员求助报错信息的社区,萌新在当中提出问题,大牛帮忙解答,然后萌新点赞。有点类似于知乎,只不过这里提的问题都是代码的报错日志或者是遇到的一些现实的技术问题。

另外一个大家其实也熟悉,就是github,不过不是代码仓库而是它的讨论区。一些著名开源软件或者是框架的讨论区也能看到非常多的问题讨论,搜索一下说不定就能发现和你类似的问题。

比如这是pytorch的讨论区,你可以看到这当中有着非常非常多的问题讨论,尤其有许多疑难杂症的讨论和解决。如果还没有,你甚至可以在其中自己提问,一些活跃的社区短短几个小时就能收到回复。如果你的问题质量足够高,甚至能够引起开发者的关注和亲自下场。

最后说一点,不知道大家有没有类似的问题重复遇见的情况,如果有的话,不知道大家有没有思考过它背后的原因?

比如说git merge的时候冲突不知道怎么解决,比如说maven build的时候包依赖冲突,比如模型效果不好等等。当你发现同一类问题反复出现的时候,就需要引起重视了,其实很多时候这并不是仅仅某个问题不知道如何解决而已。往往更深层次都藏着能力不足的根本原因。

其实能力不足是很正常的事,也没什么丢脸的。毕竟术业有专攻,毕竟很多领域需要经验积累,会有一些技术细节不了解、不熟悉是再正常不过的事情了,意识到问题比问题本身往往重要得多。

当我意识到了这个问题之后,凡是我经常磕磕绊绊需要网上查一下的领域,我都会花点时间去仔细研究一下,或者是系统性地学习一下原理。这么操作了一段时间之后,明显感觉到了自己的技术能力突飞猛进,不说成为大佬,但至少在我工作常用到的领域内,很少再有技术上无法解决的问题了。

某种程度上来说这也是一种心态,当你逃避问题的时候,问题只会越来越多,而一旦你决定勇敢面对,反而很多问题都不再出现了。

解决问题的前提是认识到问题,而认识问题的前提,则是鼓起勇气直面它。俗话说变强都是从承认自己弱小开始的,虽然好像有点鸡汤,但现实规律就是如此。

如果你也被技术上的种种问题困扰,希望上文能够帮助到你。

0 人点赞