对开发来讲,业务重要还是技术重要?

2024-05-07 14:38

本文主要是介绍对开发来讲,业务重要还是技术重要?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

很多开发者为天天写业务代码无暇提升技术而焦虑、苦恼,比如:

又如:

又如:

再如:

那么,作为开发者,到底该怎么面对“写业务代码”这件事呢?

今天我们就从以下几个方面聊聊这个话题:

  1. 什么是业务
  2. 业务和技术的关系
  3. 业务和因解决业务而衍生的业务
  4. 对业务的态度因你在团队中的角色而不同
  5. 如何从写业务代码中跳出来,做你所谓的有技术含量的工作

我们先来看看,什么是业务。

1. 什么是业务

简单讲,“业务”就是需要处理的各种事务,但通常偏向指客户实际作业涉及的事务,“业务”最终的目的是完成工作所做的所有事务。

比如取款就是一种业务,ATM 机内运转的软件,要解决的业务就是取款。

比如挂号、预约、查检查报告,都是业务,趣医网的 App 就可以用来解决这些业务。

比如买火车票也是业务,12306 这个网站就是为解决买车票的业务服务的。

2. 业务和技术的关系

软件是用来解决现实世界中的业务给人们的工作带来便利的。

比如到火车站买票,要坐车、提前、排队,又麻烦又消耗时间又浪费精力,而 12306 网站和 App ,通过把买火车票这种现实业务虚拟化,为人们省去了奔波、排队、耗时的麻烦。

比如大家都想到好医院看病,人人都想挂专家号,很多人为了挂到某个医生的号,通宵排队,非常辛苦,而现在的各种网上挂号网站、微信公众号、 App ,通过软件技术手段,把专家大夫这种资源虚拟化,让大家随时随地能挂号,还不用到医院、不用通宵憋尿排队、不用担心被医托和黄牛忽悠,给患者带来了极大便利。

软件是现实业务虚拟化的载体,技术最终是为了解决业务问题的。从这个角度讲,所有的开发者,其工作最终都是指向某个特定业务问题的。没有业务,技术的存在就没有意义。技术不能解决实际问题,不能给人们带来便利,就没有价值。

但从另一方面来讲,技术是现实业务虚拟化的必要条件,没有技术,现实中的业务就无法被虚拟化。而且,同一种技术又可以实现多种业务的虚拟化。所以,很多初阶的开发者才会有种“错觉”:技术牛 X ,因为没有技术就无法实现业务,业务很 Low ,技术牛 X 了,随随便便就能搞定。

实际上,这些感觉虽然在一定阶段有其道理,但并不是真理哦。

关于业务和技术的关系,这里下个结论:

  1. 技术是为了解决业务问题的,只有在实现业务、给人们带来便利的前提下,技术的存在才有意义,所以,多数时候,是业务决定技术、业务统领技术。
  2. 没有技术,业务就无法被虚拟化,生产效率就很难有效提升
  3. 业务和技术具有相互促进、相互依存的关系。

我们回到开发者身上来看,写业务代码多一些,还是所谓的技术代码多一些,没有高下之分,只有个人取向和组织分工的不同。

3. 业务和因解决业务而衍生的业务

很多开发者会用割裂的眼光来看待业务和技术,比如把增删改查(CRUD)看作是无意义的业务代码,把实现 libuv 或 Redis 这样的框架看作是有技术含量的事情。

比如京东上《程序员的成长课》这本书的详情页,是这样的:

它对应的架构是这样的:

很多开发者会觉得,写那些用来展示《程序员的成长课》的图书封面、优惠券、促销等相关信息的代码是没什么技术含量的,因为那些是业务代码。

他们会觉得,写商品详情页架构中的 Redis、JMQ 或 JIMDB 是有技术含量的,是真正的技术代码。

但实际上,所谓的业务代码和技术代码,它们的区别,仅仅是和业务的距离远近不同而已:业务代码离业务更近,技术代码离业务稍远。它们最终都是指向业务实现的。

而且,你换一种视角来看业务,就会发现,其实每一层代码,都服务于它的上一层代码,上一层代码,就是它的业务

比如详情页架构的第2层“对外提供API”中的商品介绍个 API ,它的服务对象,就是前端页面,要解决的业务,就是“响应前端页面的查询,提供商品介绍”

而第2层底部的前端数据集群(JIMDB),它的服务对象,就是商品介绍,要解决的业务,就是“存储商品或代理商品介绍信息”。

简单说,每一层技术实现,都服务于上一层,都以上一层的需求为业务。从这个角度讲,现实中的业务在被虚拟化的过程中,会在技术实现层面引发分层,产生中间性、对用户不可见的新业务。

从这个广义业务的视角来看,每一层代码,都是业务代码!

但是为什么很多开发者又觉得所做的技术实现越接近现实业务越没技术含量呢?

这是因为,你越接近用户业务:

  1. 细节越多,繁琐度越高,越不容易做好,越容易因为一点小瑕疵而被否定,让人觉得自己的劳动没价值
  2. 现实性越强,变化几率越高,越容易来回修改代码,越让人觉得自己的掌控感低下
  3. 实现的代码可迁移性越差,劳动成果被复用的概率越低

而当你远离用户业务时:

  1. 你用到的技术,多数都是被高度抽象过的、用来解决从用户业务衍生出的技术性业务的,它们比具体的用户业务稳定,它们的适用面更广,也更容易被迁移到其它的业务领域
  2. 你的劳动成果因为具有抽象属性,被复用的概率会更高,你会更愿意打磨它,会更有成就感
  3. 你受到压力,经过距离用户近的几层同事的传递,得到了衰减,没那么大
  4. 你打交道的对象,多数时候是内部同事、是技术人群,更容易达成一致

4. 对业务的态度因你在团队中的角色而不同

你对业务的态度,会因你在团队中承担的角色不同而不同。这是由开发团队的组织结构和职责分工导致的。

下面是我绘制的“团队结构、能力与职责”图:

在一个开发团队中,架构师这个角色,会负责业务拆分和软件架构的工作,并且领导团队来实现满足业务的软件。

注1 :有的研发团队里有业务架构师和软件架构师两种角色,业务拆分由业务架构师或业务分析师完成。

注2 :软件架构师和业务架构师这两个角色也可能由没有架构师头衔的研发经理兼任。

架构师一定是要以业务为导向的,要搞懂业务的。所以,在架构师这个阶段,在团队管理者这个阶段,业务的重要性,往往是高于技术的,在他们的眼中,业务统领技术,技术是用来实现业务的。

当团队完成业务架构和软件架构之后,就会选择不同的开发者来负责不同功能模块的实现。

负责不同功能模块实现的开发者,必须能够理解业务,并且要熟悉某个技术栈,能够进行模块设计和任务拆分,我称这样的开发者为“熟练开发者”。

熟练开发者会承接由架构师分派的子业务,负责模块设计和拆分,把拆分后的小任务,交给普通程序员来完成。

当你是一个熟练开发者时,业务和技术几乎同等重要,因为:

  • 你不理解业务,就很难将子业务模块映射到软件实现上,也很难做进一步的业务拆分。
  • 你不具备完整的技术栈和相应的知识体系,就很难找到合适的技术来实现业务,也很难做软件模块的拆分。

熟练开发者完成了子业务和软件模块的拆分,会形成一系列的叶子型任务,并把它们分派给具备特定专项技术能力的普通程序员。

普通程序员要做的事情比较简单,就是接受别人分派的任务,实现特定的业务细节。

注意当你是一个普通程序员的时候,团队要求你具备一定的专项技术能力,能够完成任务即可,你的角色,就拿把螺丝刀拧螺丝,拧好螺丝就 Ok 。

这个时候,你内心是痛苦的,对不停地写业务代码是拒绝的,因为你要再找工作时,别的组织看重你的专项技术能力甚于业务能力(他们有人做业务拆分,你过去了能拧螺丝即可),而你在现有组织中,却因为深陷业务代码的编写而无法持续淬炼你的技能能力。

所以普通程序员最纠结写业务代码这件事!

那么,该如何才能解脱呢?

5. 如何从写业务代码中跳出来

孔子说过一段话:“弟子入则孝,出则悌,谨而信,泛爱众而亲仁,行有余力,则以学文。”

翻译成现代文,是这个意思:“年轻人,在家就要孝顺父母,出门在外就要尊敬兄长,行为谨慎,言语有信,博爱众人,亲近仁者。这样都做到之后还有余力的话,就可以去学习从政,做更大的事业。”

这段话呢,给普通程序员指明了方向:轻松搞定你的业务代码,还有余力,就可以做更重要的事情

也就是说,当下你能力不够,组织上不可能给你更复杂的模块让你负责(再说团队里已经有更厉害的人在做那些事了),你得先轻松且漂亮地搞定手上的任务再说。

很多普通程序员天天抱怨老写业务代码没长进,可手上的任务却总是敷衍了事,完成得凑凑合合,那是很难摆重复简单业务任务的泥沼的。

那怎样才能做到轻松、漂亮地搞定任务呢? 4 点:

  1. 在深度和广度两个方面提升技术能力(如果当下任务繁重,就利用业余时间练习)
  2. 把自己的做的事情放在全局理解,提升业务理解能力
  3. 培养好的工作习惯,比如计划、回顾等
  4. 做好汇报和展示,让领导知道你的能力

当你慢慢做了上面 4 点之后,每次拿到任务,都能轻松又漂亮地搞定,超出领导的预期,还有未发挥完的火力,那团队就一定会给你复杂一点的任务,如果你还能轻松、漂亮地搞定并且还有余力,那团队就会给你复杂度再高一些的任务……

往复循环,你就可以跳出最简单的业务代码编写,做越来越重要的事情,人也变得越来越重要。

6. 小结

前面我们分 5 个部分阐述了业务和技术的关系,总结一下,关键的其实有 3 点:

  1. 技术是手段,业务是目的;软件开发工作是以业务为导向的,但是没有技术又无法实现业务。
  2. 业务和技术的关系,随着开发者角色的变化而变化。 
    • 刚入行时作为普通程序员,技术是基础,有技术才能实现业务,公司在招人时也以技术水平为门槛,从这点出发,一定要在短期内迅速提升技术。
    • 工作了 3 、 5 年,成了熟练开发者,可以独自负责一个业务模块时,需要更好地理解业务,这样才能更好的从技术上实现,此时业务和技术并重。
    • 从熟练开发者往前发展,有两条路,技术专家和架构师,如果你选择架构师的路线,则应该调整思维,以业务为导向,把业务放在更重要的位置,因为架构是从业务拆分出来的,如果你选择技术专家路线,则需要在深耕技术的同时保持对业务的敏感。
  3. 普通程序员要想从业务代码的泥沼中跳出,要从技术水平、做事的方法、习惯和自我展示几方面入手,努力做到搞定任务有余力,进入正向循环,慢慢获得做重要事情的机会,让自己变得重要。

这篇关于对开发来讲,业务重要还是技术重要?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967637

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof