技术人成长中的得与失

“南宁IT圈”发起者零总前几天跟我说,最近陆续会有一些线下交流活动,问我是否有什么东西可分享一下的。刚开始我想分享一些具体的技术方案,但因为虽然参与过的项目比较多,却没有一直跟到现在的项目,因此有些东西时间久了感觉拿出去讲意义不大,并且这些类似方案网上也随处可见。还有一点,我自己熟悉的技术,有时候总想当然地以为别人也差不多都懂了,貌似没什么黑科技,因此没什么可讲。

几天过去了,我要分享的主题还没定下来,不过跟零总的这次交流,倒是触发了我回顾回顾自己这些年职业经历的兴趣,我把这些经历、所思所想概括为一个技术人成长过程中的得与失。

我想每个人在成长过程中,都免不了在得失中摇晃,对我来说,将来如何更好地去平衡得失,是需要思考的问题,而对新入行的年轻人来说,能从我这些总结中获得一点点启发,那我也会颇感欣慰。这,也是我对技术人成长中得失总结的意义所在。

1. 成长姿势

作为技术人,我们首先要考虑的是技术上的成长,而关于这个话题,一般又有以下三种说法,即深度优先,广度优先,或者兼而有之。

深度优先也就是纵向发展,即将大部分精力放在某个技术方向上,然后成为这个方向上的专家。比如有些人,毕业后就一直做桌面软件开发,这样十年后就成为桌面软件开发方面的专家,有些人一直使用Java系技术进行开发,长时间后也可以成为Java开发方向上的专家。这些人在单个方向上有非常丰富的经验,可以快速解决这些方向上的各种技术问题,或者给出技术方案。目前来看,大厂比较青睐这类技术人才,他们在自己的方向上都能独挡一面。

广度优先也叫横向发展,一般来说就是接触各种各样的技术,使用各种各样的框架,既参与前端开发,又参与后端开发,甚至参与运维或测试。这类技术人涉略面广,什么都懂一点,杂而不精。很多创业公司都需要这样的技术人员,在公司起步时,这类技术人员可以迅速建构公司的技术体系,比较清楚公司需要哪些技术人才组合才能打造出一个完整的产品,而自己工作时也有些面面俱到的意思。然后等公司发展上了规模,系统面临更大的挑战后,就需要招聘前面提到的各个领域的技术专家来负责大系统里面的各个子系统。

兼而有之的就是技术大牛了,既符合前面对技术专家的要求,也符合杂家的要求,技术方面既有深度又有广度。毕竟人的精力是有限的,要既有深度又有广度,有时候比较难以达成,这种可能需要环境的成全并加上个人的努力和天赋。当然也有人说,就目前很多人的努力程序,要在职场混得好还根本不需要拼天赋,努力就够了,哈哈。

2. 主次分明

我曾经看到过一些技术人员,花了很多时间去记忆一些非本质原理的东西,而这些东西,使用的时候查查文档就能找到了。当然你能背下来是更好的,不用查文档了,但是人的脑容量应该是有限的,我们应该花精力去理解并记忆那些属于本质原理的内容。

基于这些本质原理的具体实现可能有很多种,如果我们理解了本质原理,以后再碰到各种具体实现时都能较快地理解了。否则,具体实现变了,你又要去记住它,而具体实现多种多样,你怎么能记得完。因此,我们应该抓住本质原理,了解一两个具体实现就好了,这样也能达到以不变应万变的效果,不变的是本质原理,变化的是具体实现。

3. 学以致用

我自己在多年的学习中,没有注意学以致用,这也是我一个多么痛的领悟。我曾经学习各种各样的理论知识,然后觉得自己高人一等,但这些东西在我的工作中基本用不上,而随着时间的流逝,这些理论知识也慢慢从我记忆中消失,当我再遇到它们的时候,只有似曾相识的感觉,却已经无法理解其原理或思想。

而另外一些人,因为业务场景的需求,深挖某一方面的技术,从应用程一直到系统层甚至到硬件层。这种学习方式就是按需学习,也可以认为是根据使用场景进行学习,任何技术都是为了解决某些使用场景下的问题而出现的。因为有了实际的使用场景,这种学习的效果就会好得多,记忆也会更深刻,因此是我目前比较提倡的一种学习方式。

当然我们在学习的过程中,也会进行适当的延伸。比如你在学习一种新的技术时,这种技术又跟其它技术有关联,甚至是从其它技术衍生而来的,这种时候你可能又得回头去先学习一些前提知识,然后再学习眼前要掌握的技术。但有时候我们也会发现,如果一味地延伸,我们什么时候都回不到当下要学习的这种技术上来,这个时候,就要讲究适当延伸的问题了。也就是说,我们回头去学习那些前提知识的时候,学到不太影响我们理解当前要掌握的技术就好了,而不是一直延伸下去,这样猴年马月都拉不回来。

4. 理论与实践

当你觉得理论知识太抽象难以理解时,可能需要动手去实践以加深理解,而当你觉得实践没有头绪时,可能是需要补补理论知识了。因此,理论与实践总是相辅相成的。没有理论的实践就像无本之木,没有实践的理论就像空中楼阁。

以我自身的经历来说,我曾经花很多时间去学习一些自己暂时用不到的技术框架,网上的各种文章都看,而且感觉文章一篇写得比一篇好,貌似自己收获很大。然而因为没有实践,我对很多概念一知半解,直到我们项目亲自需要使用的时候,我才亲自用那种架构方式去搭建系统。当我搭建完系统后,我才发现,我根本不需要花那么多时间去看别人的文章,如果我没有亲自去搭建,可能我还会再花很多时间去看类似的文章,却可能永远达不到深刻理解的程度。

因此,技术是实践出真知的,有时候真的是:干就完了,否则,你会有类似这种困惑 – 为嘛听过无数的道理,依然过不好这一生?

5. 跳槽的问题

说起跳槽,我们几乎都不陌生,而技术人员流动性相比其它工种的人士更强。网上很多人都谈论过这个话题,在这里我还是不能免俗地要抛出自己的见解。

我认为,职场初期,适当花心是可以的。因为这个阶段的我们,往往不太清楚自己到底想做什么,适合做什么。这样的话,就需要更多的尝试,尝试不同的岗位,如果能有幸找到自己感兴趣的岗位,那么基本就是值得自己今后多年精力投入的方向了,你要知道,职场上太多人,只是为了谋生而从事一份工作,根本做不到乐在其中。

当你找到自己的方向后,建议沉淀下来,从技术、行业业务角度去构建自己的核心竞争力。这种情况下,如果其他方面问题不大,不建议频繁跳槽,最好在一个公司多呆几年,学到如何开发产品、如何运维系统、如果运营产品等知识。而很多技术人,可能只看到产品的功能,觉得这种功能技术上不过尔尔,感觉呆下去限制了自己技术的发展,于是就频频跳槽。这样的技术人,到最后就变成了只知道很多软件产品各个功能实现原理,却完全不懂得如何去运维去改进产品,更不用说运营了,而后面这些东西,却可能在一个技术人的核心竞争力中占据更大的比重。

6. 视野的问题

很多年前,有个在代码界略有名气的人在网上说,刚开始他觉得是数学限制了自己的发展,后来觉得是英语限制了自己的发展,再后来发现,其实那些都不是事,真正限制自己发展的,是自己的视野。

我也是比较赞同这个观点的,你能想象一个每天只默默耕种自己那一亩三分地的人,能够去开疆扩土搞大事情吗?因此作为技术人,想要不断地成长,同样需要多关注技术发展趋势,大的方面不说,起码对自己所使用技术栈过去发展历程和未来可能的发展方向有一点点了解,大概了解技术的演变史,这样对自己的技术选择可能会有些帮助。

还有一个开阔视野的方法是,多关注一下业界技术大拿。有不少技术大拿都有技术博客,你可以经常去看他们的技术文章,然后从他们博客链接,你可以了解到更多的技术牛人,向他们多学习。为什么这样能了解更多技术牛人呢?你想想,一个技术大拿,他博客链接或者微博关注的技术人,一般来说水平都是和他接近甚至比他更厉害的,而不会去关注菜鸟。你要理解大拿的这种心情,这种做事方式。因此,你了解了一个大拿后,都有一些办法顺藤摸瓜去了解更多的技术大拿,看看他们都在做些什么,学习他们的技术分享,久而久之,你就慢慢地变成小拿,如果有足够的毅力去努力,假以时日,你也许会成为了别人眼中的大拿。

以上是我摸爬滚打这么多年来的心沥总结,坦率地说,其中某些方面,我自己做得也不够好,对我来说,是多么痛的领悟。这些经验总结也好,得失总结也罢,不一定对每个人都有帮助,但也许你可以借鉴一下,如果对你真有那么一点点启发,那将是我的荣幸。

微信扫码,进入【技术人成长】社群逛逛。