程序员究竟要具备什么底层思维?(免费送书)

2024-02-12 00:30

本文主要是介绍程序员究竟要具备什么底层思维?(免费送书),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

朋友张建飞出了一本《程序员的底层思维》,免费送一些,帮他宣传下。

画外音:无任何套路,就是直接送。

截取一段,看老张是怎么批判中台的。

前些年,阿里巴巴提出了“大中台、小前台”战略,在业界掀起了不小的波澜,一时间,各种中台建设的方法论和最佳实践满天飞。

中台的底层逻辑是什么?中台能带来的价值到底是什么?

中台的底层逻辑,用一句话解释就是通过复用提升研发效率。

如图1所示,基于这样的演进路径,有没有可能做一个Business-PaaS(业务中台),提炼业务中具有共性的内容,减轻前台业务,提升研发效率呢?

9130f2e51f55a66e02558ac2d29ac405.png

图1  业务中台的位置

单看图1,这个逻辑似乎是通的。于是,在“大中台、小前台”的旗帜下,业务中台诞生了。可是不管是一线研发人员的反馈,还是高层人员的质疑声,都表明了业务中台似乎并没有解决问题,反而制造了更多的阻碍和困难,这是为什么呢?

业务中台为何低效?

业务中台它解决的是复杂、多变的业务问题。如果你把镜头拉近一点看,会发现业务和业务中台的关系并不是像我们理想的一样在中间有一道清晰的边界线,而是像图2一样,犬牙交错地耦合在一起。

8809016f1fa2a16a78ea8e7f1b8de9e9.png94b8f4c5c4c6d6473cf75053507a72a2.png

图2  业务和业务中台的关系

前台业务要借助业务中台一起去完成业务逻辑,所以有一部分埋在了业务中台里,至于埋得多深,则取决于使用中台能力的多少,用得多就埋得深,用得少就埋得浅。

因此,用一句话来说,业务中台低效的根本原因在于,前台业务和业务中台的“深度单体耦合”。这种耦合性至少在以下3个方面严重影响了整体的研发效率。

1. 协作成本

研发≠写代码,实际上我们大部分时间不是在写代码,而是在沟通协调,况且与人打交道要比与机器打交道麻烦得多。

2. 认知成本

就阿里巴巴的业务中台体系来说,不可谓不复杂,其中有大量的业务概念,这会显著增加了开发者的认知负荷,让系统变得异常复杂。

3. 稳定性成本

理想的情况是我们能预见所有的业务变化,提前做抽象,预留所有的业务扩展点,这样针对不同的业务只需要在扩展点中定制就好了。但没人能预见未来,这样就难免要改动平台代码,比如加一个扩展点。由于平台代码是被所有业务共享的,这就给稳定性带来了极大的隐患。比如,A业务改动了平台代码,然而B业务什么也没做就出了故障。

如何解决中台的困境?

为了解决上述业务中台碰到的问题,至少可以做这么几件事:

(1)把业务能力做薄。做薄是为了解耦,业务最懂自己,因此不要尝试去“control”它们。中台可以更多地关注与“业务无关”的能力建设,比如稳定性、性能、监控、运维工具等非功能属性;

(2)把中台能力做强。除了非功能属性,中台还可以通过建设丰富的业务解决方案库、业务组件库等工具,赋能业务快速发展,用enable代替control;

(3)把系统结构做简单,复杂是万恶之源;

1. 解耦

协作成本和稳定性问题都是由前台业务和业务中台的深度耦合造成的,因此,中台这种集中式的代码管控和部署的“大单体”模式亟需改变。解决方案显而易见,解决“大”的问题的方法就是分而治之,解决“单体”的问题的方法就是服务化。

如图3所示。就像BPaas这个名字所隐喻的一样,让业务中台真正变成服务(Business Platform as a Service)。

8cfe99c53a30fd89dee3a244b7db4026.png

图3  业务和中台解耦

解耦不难,关键是这一刀要从哪里切?

所谓“业务无关”,就是想办法在业务中台中找到和具体业务无关的内核(kernel)。这样既可以最大程度上复用中台能力,又可以保持业务的灵活性。比如,所有的业务都需要对数据进行增删改查(CRUD)操作,这就是业务无关的,而业务的各种校验逻辑是业务相关的。

2. Platform as Code

简单不等于简陋,帮助业务快速发展的主要职责不能丢。

假如需要启动一个全新的业务,因为中台做薄了,之前在业务中台沉淀的业务能力很多都释放给业务自己了,中台要怎么帮助快速搭建新业务呢?

这时可以考虑借鉴DevOps中的概念——IaC(Infrastructure as Code),这里暂时将它命名为PaC(Platform as Code)。

f9d9a1244c7962d8040350f6ac0fd990.png

图4  PaC中台解决方案

当一个架构师设计一个系统的时候,他如果选择重用,那么同时也选择了耦合。因为重用不管是通过组合(Composition)还是继承(Inheritance)实现,都会引入耦合。然而,如果你不想耦合,可以采用重复代替重用。

3. Platform as Code + 组件化

在PaC的基础上,可以进一步考虑组件化,即把一些共用的逻辑封装成组件,打造一个“中台组件库”,如图5所示。业务可以按需组合这些组件去实现业务,同时,业务也可以把自己沉淀的组件“反哺”给组件库,形成一个良性循环的“大集市”——好的组件会被大量使用、迭代和演化,不好的组件会被逐渐淘汰。

241c51de3bc6c1569f93741dc09b7445.png

图5  PaC+组件化的中台解决方案

然而,业务具有易变、不确定、复杂和模糊性(Volatility Uncertainty Complexity Ambiguity,VUCA),很难标准化,如何设计组件并让组件和业务之间松耦合——即不要让组件绑架业务,困住业务的手脚,将是一个极大的挑战。

上面的文字节选自《程序员的底层思维》,如果喜欢,欢迎阅读原文入手。

323cbd8ab128d66ab90435bf9f40eee5.png

▊ 《程序员的底层思维》

张建飞 著

  • 本书带你学会用底层思维解决复杂技术问题

  • 这也是一本培养思维能力的通用技能书

本书涵盖程序员应知应会的16种思维能力:抽象思维、逻辑思维、结构化思维、批判性思维、维度思维、分类思维、分治思维、简单思维,以及成长型思维等解决日常问题的基础思维能力,除此之外,还有解耦思维、契约思维、模型思维、工具化思维、量化思维、数据思维,以及产品思维等专业思维能力。

 

免费抽奖送出5本,如何抽奖?

留言评论想看此书的原因。
一人一楼,5, 10, 15, 20...楼依次中奖。
中奖者我会回复你的评论与你联系。
抽奖截止时间:4.24 12:00
如果等不及了,欢迎阅读原文入手。

这篇关于程序员究竟要具备什么底层思维?(免费送书)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

哈希表的底层实现(1)---C++版

目录 哈希表的基本原理 哈希表的优点 哈希表的缺点 应用场景 闭散列法 开散列法 开放定值法Open Addressing——线性探测的模拟实现 超大重点部分评析 链地址法Separate Chaining——哈希桶的模拟实现 哈希表(Hash Table)是一种数据结构,它通过将键(Key)映射到值(Value)的方式来实现快速的数据存储与查找。哈希表的核心概念是哈希

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。

Linux 云计算底层技术之一文读懂 Qemu 架构

Qemu 架构概览 Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。 正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成

LabVIEW程序员是怎样成长为大佬

成为一名LabVIEW编程领域的“大佬”需要时间、实践、学习和解决复杂问题的经验。尽管LabVIEW作为一种图形化编程语言在初期可能相对容易上手,但要真正成为精通者,需要在多个层面上深入理解。以下是LabVIEW程序员如何逐步成长为“大佬”的路径: 1. 打好基础 LabVIEW的大佬们通常在初期会打下非常坚实的基础,理解LabVIEW编程的核心概念,包括: 数据流编程模型:Lab

颠覆你的开发模式:敏捷思维带来的无限可能

敏捷软件开发作为现代软件工程的重要方法论,强调快速响应变化和持续交付价值。通过灵活的开发模式和高效的团队协作,敏捷方法在应对动态变化和不确定性方面表现出色。本文将结合学习和分析,探讨系统变化对敏捷开发的影响、业务与技术的对齐以及敏捷方法如何在产品开发过程中处理持续变化和迭代。 系统变化对敏捷软件开发的影响 在敏捷软件开发中,系统变化的管理至关重要。系统变化可以是需求的改变、技术的升级、

【编程底层原理】方法区、永久代和元空间之间的关系

Java虚拟机(JVM)中的内存布局经历了几个版本的变更,其中方法区、永久代和元空间是这些变更中的关键概念。以下是它们之间的关系: 一、方法区: 1、方法区是JVM规范中定义的一个概念,它用于存储类信息、常量、静态变量、即时编译器编译后的代码等数据。 3、它是JVM运行时数据区的一部分,与堆内存一样,是所有线程共享的内存区域。 二、永久代(PermGen): 1、在Java SE 7之前,

ElasticSearch底层原理简析

1.ElasticSearch简述 ElastiaSearch(以下简称ES)是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,支持RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。ES设计用于云计算中,能够进行实时搜索,支持PB级搜索,具有稳定,可靠,快速,安装使用方便等

程序员必备心理学——心流

心理学之心流 前言一、“心流”是什么?二、心流的好处二、如何进入心流心流状态的四个阶段第一个阶段:挣扎第二个阶段:放松第三个阶段:心流第四个阶段:巩固 进入心流的技巧 总结题外话 前言 你是否常常感觉自己明明学习了一整天,但是就是感觉没有太多的收获。这个时候除了你的学习方向等问题之外,也可能是你的学习方法太低效了。作者本人就经常有这种情况,好在偶然间在b站刷到一个大佬的这个心