程序员做业务开发的价值
说一下我个人的经历,其实在我刚毕业的第一家公司里,做的就是底层的中间件开发。但是做的过程中,觉得并不喜欢这种远离实际业务的感觉,所以后来换工作的时候就有意的选择了业务部门。所以,今天想讲一下为什么会做这种选择。
我为什么不做底层开发
首先,我想说一个很多人的认知,就是认为做底层的开发更容易学到东西,成长更快。我觉得这就是业务开发同学的臆想而已,底层开发没有大家想的那么利于学习,业务开发也没有大家想的那么不利于学习,原因我会在后边展开说。而之所以很多人有这样的认知,很大程度上是因为底层开发的招聘标准通常会高一些,所以这些人本身的学习能力和意愿就是要好一些。
其实底层开发的日常和业务开发也没有太大区别,都是在做需求。只是业务需求的来源是产品经理,底层需求的来源是其他开发,或者底层开发者本人的思考和想法。这里,我要说自己为什么不愿意做底层开发的第一个原因了,就是需求的来源不科学。首先,如果只做底层开发,而脱离了实际业务场景的话,对于技术的认知很可能是有偏差的,这样导致自己想做的一些事很可能是在自嗨,并没有实际应用价值。而如果从其他那些搜集需求呢,也会有类似的问题,业务开发的同学提出的意见可能也就是他自己的非常浅的想法而已,不一定经过了很完善的考虑;再者,业务同学对基础组件究竟该干什么也未必理解准确,他可能分不清楚什么事应该基础组件解决,什么事应该自己解决。
在这,引入了我不愿意做底层开发的第二个原因,就是职责边界不明确。这个和配合的业务方的能力强相关。有时候,自己有些事没做好,业务方也能找到办法解决;而有时,明明和自己没关系,也要被迫处理一些上层的逻辑。
大家也可以看到,上边两个问题都极度依赖同事的能力,所以,如果你一定要做底层开发的话,一定要去技术能力储备强的公司,这个直接关系到你的工作幸福度。公司的选择还影响一件事,就是工作内容,简单的说,就是要造轮子,还是完善开源工具,两类工作可以说是天差地别。造轮子,需要对各种底层知识很熟悉,确实是很能促进进步,这个也是“做底层有利于成长”这种想法的来源。但是这种事仅存在为数不多的几家大公司中。其他大量的完善开源工具的工作,其实和业务开发没有任何区别,只需要了解一下开源工具的边边角角,就可以完成大部分工作,既没有深度,也没有广度。我开篇的时候说底层开发并不能帮助学习,原因也就在这。
所以,要做底层开发,公司的选择至关重要,大,技术能力强,两个条件缺一不可。大家肯定会问,我去这样的公司做不就行了吗。话是这么说没错,但这带来的问题也就来了,这也是我不想做底层开发的第三个原因,职业选择面太窄。国内java底层做的好的也就某里某团两家而已,这两家的企业文化大家也都清楚。所以,不想去这样的公司,是不是就不干了?即使你能接受,巨大的供需量对比,也会带来疯狂的内卷,就像算法岗那样,你是否有足够的把握赢得这场内卷游戏呢?而对于业务开发来说,大厂经历只是一段必要的学习经历和自己简历上的一个亮点,当你对大厂的整个规范流程熟悉了之后,就可以自由的选择想去的公司了。
业务开发的价值
前边讲底层开发说的太多了,下边进入正题,就是业务开发的价值。在我看来,业务开发带给我的能力提升主要在三个方面:业务知识的积累,技术广度的提升和综合能力的提升。
先说业务知识,业务知识其实就是对现实世界的理解。对于我个人来说,工作之余,了解一下其他行业的运转模式,首先就是一个很有意思的事情。其次,不断的去了解不同行业的行业知识,我是完全能感受的到对我认知能力的提升的。这种能力能不能变现?当然是可以的。比如去炒股,工作中的积累让我有了分析一个公司商业模式的能力,对于什么样的是好公司好股票,显然可以比一般人理解的深一些。当然,这儿扯的太远了,大家看看就好,关键是看自己的兴趣,有没有意愿去了解一些技术之外的事情。
接下来是技术广度。业务开发和底层开发的最大区别,其实就是底层开发对深度要求更高,而业务开发对广度要求更高。业务开发需要对各种各样的框架、中间件都有所了解,并且不能了解的太浅,也需要一定的深度,要能够理解它们能解决什么问题,又会带来什么问题,适用于什么场景;面对复杂的业务场景和复杂的系统,要能够全面理解;发生问题时,要有能力快速定位到问题在哪。这些除了需要知识的积累,也需要实际场景下经验的积累。
然后说一下综合能力的提升,相比底层开发,业务开发对人的通用基础能力会有更大的锻炼,比如沟通能力、分析解决问题的能力、权衡取舍的能力。这些能力可以说和技术有关,但关联也没那么大,极端的讲,即使你将来转行了,这些普适性的能力也会很有帮助。我时常在想,学着用一个开源工具,和打王者荣耀,究竟有什么区别。作为新手,参考着现成的例子做一个demo, 就相当于第一次接触这个游戏,随便打打。而随着对这个逐渐熟悉,有的人可能就成了没有感情的调包机器,而有的人就可以逐渐去了解底层的实现。就像游戏里,有的人一直浑浑噩噩,打了几千场连电刀和无尽战刃有什么区别都不知道,而有的人就会去探索伤害的数值机制。所以,我觉得大家别把程序员看成一个多特殊的职业,它和其他职业并没有什么本质的区别。大部分职业事实上都是在用不同的方式解决问题,比如律师是依靠法律,基金经理是依靠对市场和基本面的认知,程序员就是靠代码。我们在不断的工作中,锻炼的是解决问题的能力,而解决的方法并没有人要求你一定要限制在技术之内。
我们在业务开发中,就是要不断积累上边三个方面的能力,这样才能滚起雪球,从而从容的应对中年危机。我写这篇文章,当然也并不是要说业务开发就是好,主要还是想帮大家分析清楚业务开发和底层开发的区别,从而做出一个理性的选择。
如果大家有什么想法,也可以来和我沟通。