心想技术驱动业务,却在背道而驰

这里是Z哥的个人公众号

每周五11:45 按时送达

当然了,也会时不时加个餐~

我的第「165」篇原创敬上

大家好,我是Z哥。

相信每一位真正的程序员心里都有这样一个念想:只要我的技术够牛,就能驱动业务的发展。

但是往往我们在不自觉间做的是背道而驰的事情。

业务:我希望在这个报表里多展示某个字段行不行?现在每次我都得手动把数据合并一下,有点麻烦。

技术:这个字段不在我们的系统里,要加上的话,我们需要从别的业务系统拿数据,比较麻烦,而且可能准确性和及时性都会差一些。如果非要加的话,开发工期会比较久,你需要走需求流程。

业务:啊,不是吧。多个字段显示,有这么难吗?

业务:用户反馈这个活动链接分享给他的好友后他们点开是空白的。

技术:这个活动本身是站内活动,我们没考虑会分享到站外的情况,所以这里信息校验没通过,导致页面数据没有返回给客户端,造成了打开空白的情况。

业务:其实我只想知道……现在要怎么解决?

上面的这些景象是不是很熟悉呢?

那么技术驱动业务到底是不是存在呢?答案是肯定的。Z哥我认为,主要体现在以下两个目标:

  1. 解决过去无法解决的问题

  2. 让解决问题的效率大大提升

但是我们仔细来思考一下这两个目标。

首先,「解决过去无法解决问题」。“过去无法解决”这六个字就已经劝退99%的人了,这里面一部分人的想法是:过去无法解决,现在肯定也没法解决,算了。另一部分人甚至完全看不到这里存在问题,因为潜意识已经默认这个问题本就是现实的一部分。

其次,「让解决问题的效率大大提升」。这几乎肯定不是小打小闹能实现的,必然要从一个新的思路来解决问题才有可能。然而,人的思维惯性会阻碍新思路的产生,很少有人可以跳脱出现有解决方案的框架来重新考虑问题。

所以真正能做到技术驱动业务的关键并不在于你的技术有多牛,而是思维能否跳脱出过去的束缚,并且要拥有业务感觉,要懂业务。因为从概念上来说,业务是“钉子”,技术是“锤子”,前者是问题,后者是问题的解决方案。

其实,先不要说能「驱动业务」,能做好「支撑业务」的人我觉得就是一位优秀的程序员了,因为要达到这点也不容易。具体可以从以下三个方面入手。

/01  理解业务/

如果你无法吃透业务,真正理解业务,那么别说驱动业务了,你能把业务实现到预期的80%都不错了,就像上面提到的第二段对话。

当然技术人员对业务的理解方式和业务方、产品经理并不完全相同。最大的区别在于,技术人员需要对业务的“不可见”部分了解更多。比如,多个环节背后的流转过程,这会影响你的技术实现和程序设计。

对于这个方面,Z哥只给你一个建议,不管你用什么方式方法来理解业务,你一定要带着:这个业务的提出是为了解决什么问题或者实现什么目的?

要做到这点有难度,因为大家的本位意识会让你习惯于盯着开发工期、deadline这种方面。但是只要你能带着这个角度去思考,至少可以将业务实现地无限接近预期的100%。

不过,理解业务最多算是一个目标校准的工作,而且还没涉及到技术。我们要做好「支持业务」甚至是「驱动业务」的动力源还是在技术方面。

/02  稳健、可扩展的基础架构/

能够支撑或者驱动业务的首要前提,必须是你的“地基”不但稳固而且要领先于业务去规划。所以底层的基础架构设计非常重要,如果视野仅仅关注“这个需求该怎么实现”自然达不到这样的效果。

这一点需要提升你的软件设计意识。简单的像设计模式之类的,复杂一些的则需要你吃透一些经典的设计原则和设计思想背后的优缺点和适用场景。

常见的设计原则:

  • SRP 单一职责

  • OCP 开闭原则

  • LSP 里氏替换原则

  • DIP 依赖倒置原则

  • ISP 接口隔离原则

这些设计原则都有标准的定义,我就不一一列出来了,不清楚的可以自行网上搜索。

常见的设计思想:

  • 分层架构

  • 六边形架构

  • 洋葱架构

  • 领域驱动设计

这里的每一个设计思想,都够写好几篇文章,我这里就不展开了。

/03  构建完备的领域模型/

上面的四个设计思想,要我说哪个最有用,肯定是DDD。最近几年DDD也被炒的非常火。

这里的领域模型就是DDD中的概念。

我算是国内比较早一批接触DDD并运用的人,大概在2014年的时候机缘巧合了解到了DDD,然后啃了两本最经典的书,当时给我一种看到世外桃源的感觉(真实感受,不夸张)。

它让代码里的model变得有血有肉,好像你在设计一个虚拟城市一样。这里需要摆一个物件,那么它需要长成什么样子,你要尽可能详细的描绘出来;那里需要摆一个人物,那么他长什么样子,当时正在做什么事,也得描绘出来。

DDD让你摒弃了传统三层架构以数据表为核心的代码设计方式,可以让业务含义更多地体现在代码中。如此的好处很明显,就是你的代码可扩展性必然很强,因为你的一个model体现了现实世界中所代表的对象,现实中的对象多了一种行为,那么给这个model增加一个对应的function就好。

如果你是一位DDD(领域驱动设计)新手,并对DDD感兴趣,可以翻阅我2016年写DDD系列文章《如何一步一步用DDD设计一个电商网站》来入门。(当时还没开通公众号,所以你得到我的博客去看:zacharyfan.com)

不过里面有些内容在后来我有新的理解,但并没有更新。不过这不影响你体会DDD的优雅,所以你还是可以看看。

当你做好了前面的3步, 你就具备了驱动业务的前提条件。

  1. 懂业务。

  2. 基础架构够稳、弹性够强。

  3. 现实的问题在技术维度上体现的够清楚。

在这之上你就可以尝试基于对领域模型的观察找到前面提到的技术能够驱动业务的两个目标:

  1. 当前无法解决的问题

  2. 当前解决效率不高地方

好了总结一下。

这篇呢,Z哥和你分享了我对技术驱动业务这件事的看法。

我认为技术驱动业务的关键并不在于技术多好,而在打破惯性思维和对业务的理解深度上。

所以,如果你想真正做到驱动业务,不妨先将以下3点基础工作做好,否则只是空想而已。

  1. 理解业务

  2. 稳健、可扩展的基础架构

  3. 构建完备的领域模型

希望对你有所启发。

推荐阅读:

  • 好的自我介绍,面试成功一大半

  • 软件如何优雅地向前兼容?

原创不易,如果你觉得这篇文章还不错,就「在看」或者「分享」一下吧。鼓励我的创作 :)

如果你有关于软件架构、分布式系统、产品、运营的困惑

可以试试点击「阅读原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后端学习 - SpringMVC

文章目录一 SpringMVC 简介1 MVC2 SpringMVC3 创建第一个 SpringMVC 项目二 RequestMapping1 注解类与方法的区别2 value 属性3 method 属性4 params 属性5 headers 属性6 SpringMVC 支持路径中的占位符三 获取 Request 的一系列参数1 通过控制器方法的形参2 控制器方法形参 映…

hbase shell远程连接_hbase与phoenix集成

Phoenix是构建在HBase之上的关系型数据库层,作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问Phoenix会将用户编写的sql查询编译为一系列的scan操作,最终产生通用的JDBC结果集返回给客户端Phoenix可以看成是mysql准备安装包apache-phoenix-4.…

对精致码农大佬的 [理解 volatile 关键字] 文章结论的思考和寻找真相

一:背景1. 讲故事昨天在园里的编辑头条看到 精致码农大佬 写的一篇题为:[C#.NET 拾遗补漏]10:理解 volatile 关键字 (https://www.cnblogs.com/willick/p/13889006.html) 的文章,大概就是说在 多线程环境下,一个在debu…

后端学习 - SpringBoot

SpringBoot 是整合 Spring 技术栈的一站式框架,是简化 Spring 技术栈的快速开发脚手架约定大于配置 文章目录一 概述1 第一个 SpringBoot 项目2 SpringBoot 特性:依赖管理3 SpringBoot 特性:自动配置二 SpringBoot 的 IOC容器1 组件添加&…

centos rpm 安装 perl_Linux【常用软件安装篇】

摘要:本文介绍Linux常用的软件安装方式以及jdk、vim、mysql、tomcat、redis的安装过程。1 Linux常用软件安装方式常用方式有:rmp包安装、yum指令安装、源码包安装、解压免安装。1.1 rpm包安装rpm是Red-Hat Package Manager(RPM软件包管理器&a…

日计不足涓滴成河-自定义响应结果格式化器

什么是响应结果响应结果就是,在客户端向服务器发出请求后,服务器根据客户端的请求参数,给出的结果,这就是一个完整的响应结果过程。响应的结果包含的内容非常多,主要的有 HTTP Status Code,Content-Type,Co…

docker 容器启动顺序_Docker容器启动时初始化Mysql数据库

1. 前言 Docker在开发中使用的越来越多了,最近搞了一个Spring Boot应用,为了方便部署将Mysql也放在Docker中运行。那么怎么初始化 SQL脚本以及数据呢? 我这里有两个传统方案。 第一种方案是在容器启动后手动导入,太low了不行。第二…

后端学习 - JVM(上)内存与垃圾回收

JVM 架构图 文章目录一 JVM 简介二 类加载子系统:1 作用2 类的三个加载过程3 类加载器的分类4 双亲委派机制 & Tomcat为何不遵循5 两个 class 对象为同一个类的必要条件三 运行时数据区:PC寄存器(Program Counter Register)四…

SM2 国密算法被 Linux 内核社区接受

喜欢就关注我们吧!10 月 25 日,有开发者发文称,SM2 国密算法终于被 Linux 内核社区接受了。该作者表示,SM2 的补丁已经更新到了 v7 版本,这个版本的补丁最终被社区接受,目前已经合并到了 Linux 主线的 5.10…

后端学习 - MyBatis

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的 持久层框架 文章目录一 基于配置文件的 MyBatis 搭建1 搭建过程(增删改)2 查询操作3 特殊操作二 MyBatis 获取参数值的方式1 单个字面量类型的参数2 多个字面量类型的参数3 Map 类型的参数4 实体…

国产操作系统发展离不开人才和市场

日前,中国 1024 程序员节盛大举行,一大批开源大咖齐聚千年岳麓,围绕开源标准、生态、人才发展等主题分享,共议开源软件与操作系统未来。其中,统信软件总经理刘闻欢表示,“有了市场才会被真正的用起来”&…

后端学习 - Redis

文章目录一 Redis 概述Redis 为什么是单线程,单线程为什么这么快?数据存储结构二 常用数据类型1 String2 HashHash 的扩容机制:渐进式 rehash*3 List4 Set5 Zset三 Redis 事务1 乐观锁与 watch 命令2 事务的三个特性四 Redis 持久化1 RDB(Red…

再被补刀!Flash又遭抛弃,你会怀念它吗?

喜欢就关注我们吧!微软近日发布通知,称更新了关于 Adobe Flash Player 的删除。微软更新目录站点可下载更新 KB4577586,用于删除 Flash Player。此更新适用于所有受支持的操作系统版本。重要版本 Windows 10 和 Windows 8.1 的可选更新也将在…

4位加法器的设计代码verilog_HDLBits:在线学习Verilog(六 · Problem 25-29)

本系列文章将和读者一起巡礼数字逻辑在线学习网站 HDLBits 的教程与习题,并附上解答和一些作者个人的理解,相信无论是想 7 分钟精通 Verilog,还是对 Verilog 和数电知识查漏补缺的同学,都能从中有所收获。附上传送门:M…

译 | 将数据从Cosmos DB迁移到本地JSON文件

点击上方蓝字关注“汪宇杰博客”原文:Azure Tips and Tricks翻译:汪宇杰在Cosmos DB中使用数据迁移工具有一项重复的任务是将数据从一种数据库格式迁移到另一种数据库格式。我最近使用Cosmos DB作为数据库来存储Ignite大会发出的所有推文。然而一旦获得了…

在线教育后端开发项目总结

文章目录一 数据库访问接口1 MyBatis2 Spring Data JPA3 Spring Data MongoDB二 数据库1 MySQL2 MongoDB3 Redis三 开发规范化、响应格式与异常处理1 开发规范2 响应格式3 异常处理四 RabbitMQ五 Spring Cloud 相关工具1 Eureka2 Ribbon3 Feign4 Zuul 网关六 搜索服务1 Elastic…

通讯故障_掌握PLC必备知识,人机界面和 PLC 出现通讯故障如何分析解决

此次主要在阐述人机界面和 PLC 通讯时的模式状态,并列举了通讯故障实例。帮助大伙加深对这俩者的了解,掌握起来也不再是难题,解决掉拦路虎。一 台数 显 四 辊 卷 板 机PLC 控 制 系 统 核 心 与 人机界面在使用过程中,出现人机界面…

后端学习 - 设计模式与设计原则

文章目录设计原则1 单一职责原则2 开闭原则3 Liskov 替换原则4 依赖倒置原则5 接口隔离原则6 迪米特法则设计模式:创建型模式1 工厂模式2 抽象工厂模式3 单例模式设计模式:行为型模式1 观察者模式2 模板模式3 备忘录模式设计模式:结构型模式1…

ai的预览模式切换_AI字体制作,用AI制作创意阶梯式文字

本篇教程通过AI制作一款创意阶梯式文字,教程中有很多知识点需要掌握,比如路径分割为网络,3D效果应用等,我们要利用他们创造出我们需要的文字出来,具体是如何制作的,我们通过教程一起来学习一下吧。效果图&a…

新版本 Swashbuckle swagger 组件中的 坑

新版本 Swashbuckle swagger 组件中的 Servers 坑Intro上周做了公司的项目升级,从 2.2 更新到 3.1, swagger 直接更新到了最新,swagger 用的组件是 Swashbuckle.AspNetCore,然后遇到一个 swagger 的问题, 在本地测试是…