作者:大飞哥
“垃圾的业务逻辑!!!” 估计很多程序员在刚接触一个新项目的业务代码的时候,都会在心里骂娘,说不准已经把前几任维护者的家人都给问候了一遍。
在我自己的职业生涯里面,也遇到过不少写得跟 “屎” 一样的业务代码,但业务代码,业务逻辑是一个程序员不可避免要接触的东西。
按 “二八原则”, 估计有80%的程序员是业务开发,而事实上,我觉得这个比例可能要到90%, 毕竟系统工程师,基础架构工程师,业务组件开发工程师等纯技术的岗位是很少的,当然这些 “纯” 技术岗位,也非完全不接触业务,只是上比例更少而已。
可以说,90%的程序员,职业生涯里80%的时间都是在跟业务打交道的,所以我们很有必要探讨一下这个话题。
纯技术驱动的公司,我觉得是不存在的,只不过有些公司的技术氛围会更好,技术人员的决策权会更大。
在目前的市场上, 产品+技术, 市场+技术 是比较正常的企业结构模式,至于技术人员在不同公司里面权重的大小,就要看具体情况了。
像腾讯是产品驱动的公司,阿里是电商,更多由市场驱动,一个是消费者市场,一个是商家市场;拼多多跟阿里类似,头条其实也是产品驱动的公司;美团由消费者市场驱动,小米卖的是产品,百度的搜索由消费者驱动,AI由企业市场驱动。
当然,这里不是说技术就只能从属于其它岗位了,目前很多企业对技术人员的重视度是越来越高的,而技术人员在实际工作中的决策权也在加大。我觉得这个跟技术的发展有关。
比如说,目前在市面上火爆的推荐型产品,如头条,抖音,技术在里面的决策比重就要比一般性产品的高。这个很好理解,因为产品形态本身就很依赖于技术,虽然产品的交互体验,UI 设计依然很重要,但最关键的还是你推荐出来的东西,用户有没有兴趣,而推荐这部分,就是技术驱动的。
还有一类是 AI型的产品,比如商汤科技,沐瞳科技这类,他们销售的是自身的AI能力,虽然还是市场主导,但技术在里面会有更多的决策权。
未来,我相信随着技术的发展,AI化的产品会越来越多,技术人员在里面的决策权也会越来越大。
另外,随着存量时代的到来,从增量市场进入到了存量市场。增量时代比拼的是快,存量市场比拼的是品质,这里的品质包括产品品质,也包括企业品质(高效的运作模式),这必然对技术提出更高的要求,技术人员在决策上的比重也自然会增加。
以上依然是不可避免的一件事情,在你实际面对那些恶心的业务逻辑代码的时候,你必定要吐槽一番,然后开始陷入深深的自我怀疑:"我这是在干什么?简直是在浪费时间!"
12年做存储的时候,我们遇到了一个问题,存储系统搞完了,却没有业务愿意接进来。
他们说,你的系统不稳定,而且性能也没有特别好(早期版本),为什么要接?
以上的反问,我也无可辩驳,但项目还是要向前推进,后来我们决定这些事情都由我们自己来搞。
于是我找了具体业务的负责人,跟他们说,我们来修改业务代码接入新的存储系统,中间过程如果出了问题,责任都算我们的。
第一批的业务,就靠这种方式推动起来了。
后面,我加入到业务团队后,第一接手的,是个核心但却恶心的业务系统,当时那个系统极不稳定,经常出问题,但上面下了死命令,你们就是要搞好,要不,你们团队就没有存在的价值!
于是噼噼啪啪,整了两个多月的时间,重构了很多的业务逻辑,才慢慢好起来。
我的实际经验是:踩坑,看恶心的代码本身,不会产生很大的价值,但是踩坑的过程中获得的经验,看恶心代码,修改恶心代码的过程中获得的负反馈,却极有价值。
它们虽然没有给你展示什么是好的,但是给你展示了什么是不好的,这过程中,你会慢慢明白,你应该怎么做,才不会重蹈前人的覆辙。
1、学会思考和总结
比如当 if else 写得太长的时候,是不是分析下判断条件的内在逻辑,有没有可能去构建一个状态机。
比如一段代码逻辑,当你写第二次的时候,是不是考虑抽成一个单独的函数,因为有第二次,就意味着会有第三次,第四次。
有不少同学觉得业务逻辑繁杂且没有技术含量,所以一直对业务逻辑有抵触的心理,但实际上,业务逻辑也不完全是无章可循,不可复用的。
如果你留心观察市面上的各类产品,各种App,你会发现,大家在功能上都会有很多的相同点。
比如,每个APP,几乎都会有这些功能:注册,登录,用户头像,昵称,用户资料管理。
有些APP会有消息聊天,有的APP会有论坛功能,有的APP会有内容推送,有的APP会有商城,会有支付。
总的来说,你可以认为To C 产品的业务逻辑是有限的( To B的业务丰富性会更高,但也是有限的),虽然具体的业务逻辑不同,但设计的关键点,其实是相同的。
比如说登录。一个产品的登录模块,一般会涉及:就近接入,IP重定向,加密设计,密码验证等。
比如说消息逻辑,消息逻辑的关键点一般是:消息的唯一性和顺序性。
类似论坛,内容推送,商城,支付,都一样,每个具体的业务都有其关键点,而且这些关键点几乎都有业内最佳实践,也有很高的经验可复用性。(代码不一定可以复用,但设计思路几乎都是相同的)。
所以这里一定要学会思考和总结,你的成长只能你做主,没人可以帮你!
2、不要只守着自己的一亩三分地
很多人做事,只守着自己一亩三分地,来一个需求,做一个需求,做完就不理了,不愿意进行更多的总结,也不愿意接触需求以外的代码和逻辑。
一个超过5人维护的系统,就可以认为是一个大系统了。这类系统,按一般比例,有 80% 的逻辑不是你维护的,所以这里就是关键了。有的人会去了解覆盖面更广的剩余的 80% 的逻辑,有的人就终日只守着自己那块。
所以最终,一定是更愿意了解全盘的人可以胜出,升职加薪,开始负责统筹整个项目。
这个道理很浅显的,只是很多人或懒或不屑去做,但人跟人的差距,确实就是在这些额外的付出中拉开的。
我发现不少同学的职业规划有点问题,有些人是围绕新技术来规划自己的职业发展的,这显然有问题了。这么做的结果,就是终日在追新技术,终日焦虑,但却没有形成核心的竞争力。
我觉得业务的同学应该围绕业务技术经验来规划自身的发展。
其实大家日常接触的所有需求,延展开来看,都是跟一个具体的行业相关的。
比如做微信,QQ,是 To C 的产品,再细分是社交产品,业务技术经验是社交架构和海量服务。
头条,抖音,是推荐型产品,业务技术经验是推荐系统。
企业级应用,SaaS,是 To B 的产品,业务技术经验是企业级应用,比如如何在共性需求和个性需求之间进行取舍。
搜索,电商等都是如此。
以上的这些业务技术经验都是有很高技术经验壁垒的,一旦你积累起来,后面就是猎头来挖你了。
跟挖人的猎头接触的时候,他们喜欢问,你有没有做社交产品的经验,你有没有做过搜索系统,做过推荐系统,有没有做过企业级的应用等。
挖人的猎头,招聘的面试官,都希望能够找到有相关经验的从业者,而客观来说,行业经验的壁垒比技术栈的壁垒要高很多。
新的技术栈,你可能花几个月的时间,就可以掌握到一定程度了,但行业经验,却是要经年累月积累的。
所以,你在做职业规划的时候,一定要认真思考这个问题,自己所在的行业是什么,未来可选择的有哪些公司,自己应该注重积累哪些业务技术经验。
技术服务于业务,这是客观存在的,不过随着技术的发展和存量时代的到来,技术人员的决策权会越来越大。
踩坑,阅读恶心的业务逻辑代码,是一件很有价值的事情,很多人不愿意做,但做的人,可以获得一份独到的经验,这个便是竞争的壁垒。
做业务的同学,平日要多思考,多总结,尝试思考业务的共性,思考业务的标准化,这能够极大的提高自身软件设计的能力。
职业发展的规划,是个开放性的问题,我的建议是围绕业务技术经验做职业规划,而非围绕技术栈做职业规划。
感谢大家能耐着性子看完这篇文章