人生就是一个自我投资的过程,关注我,这会是你程序员道路上最好的投资。
“只有知识的积累,而没有深度思考,终究无法完整蜕变。”——《感动中国》年度热心观众,程序员囧辉
ROI,即 Return on Investment,也就是投资回报率(投入产出比),它是一个投资术语。
在我看来,ROI 法则对于我们的工作、学习、生活,同样适用。
本文源于个人过去几年的成长、思考和总结,可能不完美,但是相信会有所帮助。
ROI 对于工作而言,主要体现在:1)绩效晋升;2)技术能力。
在工作中,很多程序员的工作模式应该是:做需求 -> 做需求 -> 做需求...,永无止境的做需求。
说实话,这种工作模式的 ROI 是非常低的,因为绝大部分需求都是在已有的框架里进行简单的 CRUD,即使在一些 QPS 几十万上百万的部门也会有很多这样的需求。
这些需求其实无法让你学到太多的东西,天天做这些需求,技术得不到进步,绩效和晋升也和自己彻底无缘,只能成为别人眼中苦逼的 “老黄牛”。
述职答辩时,不知道写什么,感觉自己好像很忙,做了很多需求,但是好像没啥有技术含量的可以写。跳槽时,简历不知道怎么写,都是一些 CRUD,真是头大。
因此,在工作中,我们需要“聪明点”,尽量让自己的工作 ROI 高一点。
以下是我自己这几年总结的常见提升工作 ROI 的思路:
1)可以做一些简单的 CRUD 需求,也必然会做一些简单的需求,但是绝对不能一直做简单的需求。可以主动去揽下一些线上问题排查、性能优化的事情,主管可能还会夸你积极。
2)解决问题是让自己技术能力提升最有效的途径,例如:解决线上问题、进行接口的性能优化、进行项目重构等。程序员说到底,就是拼谁的解决问题能力更强,解决问题的过程中会有很多新的认知,能让自己得到很多宝贵的经验。
3)任务排期时,一定要留有 buffer,可以按 0.7 ~ 0.8 来算,例如 8 天的工作量可以排 10 天,这样万一有什么线上问题之类的情况,自己就能从容的应对,而不是自己默默的加班。
4)需求是永远做不完的,你就算每天上24小时的班,需求仍然做不完。所以,请稍微自私一点,不要把自己的所有工作时间都排给做任务,尽量每天能留给自己 0.5~1 个小时的时间自由安排,利用这个时间去提升自己:思考、总结、看优秀技术文章、看源码都是不错的方式。
5)每做完一个任务,不要急着进入下一个任务,一定要进行思考和总结。
将自己的思考通过文档记录下来,经过思考和总结下来的内容通常是后面述职答辩时很好的材料,并且有文档记录,也能让主管看到你实实在在的产出,如果你的思考和总结内容足够好,说不定主管会在他自己的报告里使用上你的内容,那你在主管心中的地位一下子就上升了。
6)公司只付你 5 天的薪水,尽量不要在周末加班干活,把这个时间留给自己,有家庭的多陪陪家人,单身的可以看点书提升自己,最重要的,每周进行锻炼,身体是革命的本钱,照顾好自己。
7)解决问题和优化的过程可能很痛苦,有些甚至可能会持续到几个月,但是正是这些让你痛苦的时刻,逼迫着你成为更好的自己。
8)最重要的:多思考,多思考,多思考。程序员在每次迈向一个新的台阶时,必然要经历一个蜕变的过程,当你不断积累知识的同时,只有不断思考,才能让自己完成量变到质变的飞跃。
ROI 对于学习而言,主要体现在:1)面试;2)技术能力。
程序员行业目前内卷非常严重,而 Java 后端毫无疑问是 “卷王之王”,需要学的内容太多了,你要每个都去学,说实话不现实。
因此,就像我们以前准备考试一样,我们需要将时间合理的分配,优先准备那些重要的知识。
对于 Java 后端而言,我花三个月学习了 redis,你花三个月学习了 k8s(kubernetes),无论是日常工作,还是面试,毫无疑问肯定是我的 ROI 更高。
选错方向是很多新人容易犯的错,花了几个月,结果学了个寂寞。
对于 Java 后端知识体系而言,按当前面试题的重要程度/出现频率而言,我对各知识点的分档如下,越靠前越重要,学习的 ROI 越高:
如果你认为有些知识缺少了,或者觉得分档有问题,欢迎留言和我探讨。
同时,干我们这行的,大部分都要花业余时间去学习,但是很多人的学习思路可能不对,导致学习的 ROI 很低。
对于个人在业余时间的学习上,以下是我个人觉得的有利于提升 ROI 的经验:
1)知识的深度和广度都很重要,但是若要选择其中一个进行深造,我会选择深度。我自己也是这么做的,看我博客多的同学也应该能感觉的到,我其实写的知识点不会很多,但是深度基本都是在我能力范围内拉满。
2)深度是你进入大厂很重要的敲门砖,而且当你的深度足够深时,去提升广度你会发现非常容易,因为绝大部分优秀的开源软件其底层的设计思想都是相通的。
3)源码会让你更自信。如果一个知识点你没有深挖到源码,你在对线面试官的时候必然就会不自信,因为你没有亲自看过其“真面目”,面试官多问一句,你心里就虚了。
4)学习源码会让你付出很多,但是同样回报很多,自己亲眼看到“真相”的那种感觉,只能用一个字形容——爽。
5)学习源码的前提是你对这个东西有基础的了解,了解其核心的使用。在学习的过程中,不要硬怼,硬怼效率很低,而且容易出错。多参考已有的文章和书籍,站在巨人的肩膀上,我们才能看的更远。
6)99.9% 的公众号/博客文章都只能让你在某个知识点入门,有小部分能让你和 BAT 面试官对线,但是要达到和 BAT 面试官轻松对线的程度,还是需要自己去挖源码,自己去看真相。
7)看文章不在于多,而在于精。网上好的文章不少,但是水文更多,要学会辨别,文章注重质量而不是数量,一篇好文章的收获是非常可怕的。
8)文章也好、书籍也好,某个知识点看一遍不懂很正常,收藏起来多反复阅读理解,不懂的名词百度搜搜资料帮助理解,这个过程会让你的知识体系像树枝一样不断向外蔓延,这就是成长的过程。
9)尝试使用费曼学习法。我写博客是不赚一分钱的(这你还不关注?喵喵喵~),那我写博客的 ROI 岂不是很低?其实不全然是,如果是,那我不是在打自己的脸。
写博客其实是我落地“费曼学习法”的最终实践,所有你们看到的我发表出来的文章,其背后都可能是我反复看了无数遍文章和源码、无数遍自我提问、无数次的自我总结和思考、无数次的修改,最终才得出来的。
所以,我能很坦然的说,这就是我能力范围内拉满的文章了。
10)加一些优质优质优质的学习交流群,三个臭皮匠赛过诸葛亮,很多你想半天想不懂的问题,可能在别人那就是几秒钟的事。当然,那种只有群主每天定时发公文的群,加再多也没用。
11)有办法结交自己学习领域的大神,就多结交一点,当你不断的成长,到后面你会发现你要学的东西在网上资料很少,很多东西都只能自己硬怼。c++菜鸡的我在看 MySQL 源码时深有感触。
都聊到这了,给大家送个“福利”,简单介绍下我的学习方式,供大家参考。
15.7~17.01:这期间我是完全不学习的,就是一条彻头彻尾的咸鱼,看过我文章的同学也应该知道。
17.02~18.10:如梦初醒,通过面试题和书籍,快速成长,也开始写博客。
18.11~20.09:源码、写博客,将每个知识怼深了,通过写博客落地费曼学习法。
20.09~如今:项目、源码、写博客,换了个业务量很大的部门,努力学习积累中,源码和写博客当然也不能拉下。
可能有同学会问我难道不看别人的公众号/博客文章吗?
说老实话,虽然我自己写公众号,但是其实我自己很少主动看别人的公众号文章,因为要找到一篇好文章太难了。
我看别人文章的情况,大多是在我学习一个知识点时,我会去参考一些其他人的源码分析文章,来辅助自己的理解。
另外,就是也会看一些公司内网的文章,大公司内网的博客技术分享质量都比较高,所以不会有水文的烦恼,基本上或多或少能收获点东西。
所以,其实理论上从 17.02 算起,我的学习历程也就 4 年多而已。
这期间的学习为我带来了多少回报了,最直观的方式就是看年薪,我在 20 年跳槽的时候的年薪比 17.02 当时年薪已经增长超过 5 倍。
而如果以 20 年跳槽的时间点来算,其实就过了 3.5 年。而入职新公司以来,我最薄弱的项目也在飞速发展中,所以现在我的售价应该另算,哈哈。
就目前的互联网行情而言,我知道自己的薪水提升空间还是很大的,所以也还在努力提升自己。
程序员其实是一个相对比较公平的职业了,你只要坚持努力,多多少少会收到回报。
送给大家一句话:奋斗吧,将来的你一定会感谢现在努力的自己。
能多一个朋友,不要多一个敌人,随手就能帮的忙,随口就能说的好话,多做一点,可能会让对方感激很久。
比如我在文章最后求赞,有些人可能会想,求赞狗我才不点,我就要白嫖;而有些人则很 nice,花了几秒钟,点赞收藏留言一气呵成。
可能这随手的一键三连,就让我们成为了朋友,以后他有什么工作或职场的问题,我可以给出一些有用的建议,那这几秒钟的 ROI 是不是就很高了。