写点什么

“我不懂的,总有人懂”,软件开发行业已经开始扭曲变形

  • 2023-11-02
    北京
  • 本文字数:3271 字

    阅读完需:约 11 分钟

大小:1.56M时长:09:04
“我不懂的,总有人懂”,软件开发行业已经开始扭曲变形

如今,一批所谓的专家只知道无脑上马那些炒作工具,但对其更深层次的运作方式却一无所知。这是个大问题,甚至正在毁掉我们的未来发展空间。

 

方向盘就是个抽象概念,却能帮助我们轻松驾驭车辆。动力转向又是另一个抽象层次,用于进一步改善驾控体验。所以抽象本身并没有错,只是在丹麦流传着这样一句谚语:

 

“无论太少还是太多,都会毁掉一切”。

 

如果抽象过度泛滥,那么如果有一天再没人理解其底层实现逻辑,我们又该如何应对呢?

 

自动化和信息化让程序员们变懒了

 

科技行业的一切其实都是以利润为核心进行驱动,人们对其他任何事情都没有兴趣。所以厂商必须要尽快发布新的产品或者服务,也就必须采取更多的抽象和自动化元素、努力压缩人手,对于整个系统底层的理解自然愈发浅薄。

 

如今,早就不存在什么程序员和系统管理员了,取而代之的是 DevOps 甚至是 DevSecOps。行业正努力把每项任务都塞进同一个职能角色的日常工作当中,就是说技术人员需要独力完成开发(Dev)、安全(Sec)和运营(Ops),即整个系统管理流程。但由于没有哪个人敢自称真正的通才,所以我们只能匆忙上马自动化方案,在节约资金的同时避免不同技术部门间的成员在复杂的交互中迷失方向。于是乎,现代技术人员被教导只使用特定的工具,而对其底层实现知之甚少。

 

所以一方面技术正变得越来越难以理解,另一方面我们的现代生活正越来越多地依赖于这些技术。那么,当科技行业的理解水平不断下滑,大多数人甚至根本不知道该如何修复自己手头的工具时,会引发怎样的后果?

 

换言之,人们已经习惯了高度抽象的状态,并认为这才是正确的方式。他们也很乐意添加更多抽象来加剧这种混乱。

 

也许会有傲慢的开发者嘲讽道:既然这样,那咱们直接用回汇编语言得了!

 

毫无疑问,我们是需要抽象的,但每一个层次的抽象都有相应的代价。而且讽刺的是,出于利润追求抽象最终可能引发巨大的收益损失。

 

现在,大多数“安全人员”对于安全知之甚少,只晓得如何使用某种预制的渗透测试工具。渗透测试工具的 Web GUI 板上显示了一大堆绿灯,就代表系统运行良好。但也许某位心存恶意的技术大牛早就入侵了该系统,并不断把有价值数据卖到暗网上去。整个过程看似毫无异常,也许会持续数年而无人发现,毕竟 GUI 仪表板说没问题的嘛。

 

过度依赖抽象,埋得不深的真相永远不会有人发现

我曾为一家公司推荐过第三方开发伙伴,那边的开发人员知道怎么使用“现代框架”把网站和 API 组合起来,但对框架自身的编码了解不多,对安全性更是一无所知。一旦出现问题,没人能判断到底发生了什么。于是在遇到问题并挣扎了几个月后,他们最终放弃并选择对外求助。

 

其实只要看看系统的真实运行情况,就能知道肯定是出了问题。我复制了所有内容来进行离线检查,之后花了一个晚上直接查看系统文件中的各个代码行,并把公司主机上运行的文件跟原始框架文件进行了简单比较。

 

其实我并不是建议大家手动检查所有内容,但保持这种手动检查习惯能让我们学到很多东西。真相往往埋得并不深,只要有点耐心就肯定可以找到。当然,这也要求我们对技术原理有基本的了解。

 

长话短说,我最终发现他们已经遭到黑客入侵,其系统被用作某种色情内容的后端分发数据库。但性能问题并非源自黑客攻击,而是由框架本身所引发,因为该框架速度极慢。另外,这次黑客攻击也是高度离散,要不是我决定“四下打探”并认真查看了文件和代码,很可能永远发现不了。

 

写给技术人们的建议:别跟风、保持好奇、不断学习

  • 别总跟着炒作话题或热门趋势跑。

  • 保持好奇心。不要单纯学习工具,更要了解其底层技术是如何起效的。

  • 如果可能,至少试着手动执行操作,例如如何配置工具来满足实际需求。

  • 如果可能,请尝试查看当前工具的代码。对这些代码的基本了解将非常有价值。

  • 培养良好的求知习惯、保持学习、不断实验,深入钻研你感兴趣的技术。最好能建立一个家庭实验室,在这里探索并尝试剖析一切。

 

记得质疑一切,特别是那些看似没有意义的事情。不要简单假设“我不懂的,总有人懂”——这只会让你变成盲目的追随者。有时候其他人确实懂,但这是不够的。我们要勇敢起来,坚持追寻自己的理念和客观事实,哪怕这会显得跟其他同行格格不入。

 

我想在本文中强调的,并不是每个人都要从第一原理出发认识一切,或者说就不该使用便利的自动化工具。文章开头我就提到,抽象当然是好的。而且不同的专业事务当然要由不同的专家来做,比如驾驶卡车有司机,修理卡车有技师。

 

我真正要说的,是工程师到底该用怎样的态度对待技术工作,以及这种态度对于技术从业者们的重要意义。

 

以软件开发为例,有太多的专业知识都被抽象了出来,进而被工具和自动化所取代。了解整个体系的人越来越少,很多人甚至连当前工作的往下一层都不愿深挖

 

这已经是个严重问题,导致很少有人能够修复垂直领域中的技术细节。没错,大家扪心自问,究竟是不是这样?

 

大约半年前,我偶然发现有些前端 Web 开发者根本不知道无需部署工具就能创建网站,甚至连 JavaScript 都可以不用。他们开发的可是赚钱的商业网站!带着惊讶之情,我询问了一位教授 Python 编程课的朋友,他的反应倒是很平静:

 

别那么吃惊,这就是如今的常态。技术行业希望我们培养更多只知道“按按钮”的从业者,而不是把专业学深、学透的人。

 

我知道,总会有人想要把专业学深、学透,但这不是重点。关键在于,我们的软件开发行业已经开始扭曲变形:由于加入了太多的抽象层,大家已经看不懂整个体系在如何运作。最终,这个行业一定会搬起石头砸了自己的脚。

 

我敢肯定,当一位 Web 开发者——无论是前端、后端还是“整合工作”——在制作网站时,完全不需要编码、TCP/IP、DNS、HTTP、TLS 或者安全性知识,而只靠预制的工具和框架就能搞定的时候,那大麻烦恐怕就离我们不远了。

 

网友怎么看?

 

这篇贴文在 Hacker News 上发布后,引来了诸多围观者。不少开发者在下方留言发表了自己的观点。

 

有网友称,文中提到的现象的确存在,但这不能完全怪开发者不去主动学习,因为一项优秀、可靠的技术需要很长时间的积累才能出现,开发者实际上不需要理解它就能操作它。

 

举个例子,文中提到了“是的,让我们都回到汇编编码吧!” 事实是:在高级语言成为主流之后的很长一段时间里,开发者仍然必须了解汇编才能成为一名开发者员,即使你的大部分工作是用 C 或 C 语言完成的。这是因为高级语言的编译器及其调试工具最初是一个“有漏洞的”抽象。当你的程序失败时,你必须了解汇编才能找出问题所在。如今,编译器和调试工具已经变得如此出色,那些日子已经一去不复返了,你真的不需要再了解汇编了。

 

但我们今天面临的问题是:我们一层又一层地堆积有漏洞的抽象,却没有给它成熟所需的时间。我们的设计是为了缩短开发人员完成某件事所花费的时间,但其实这是个错误的假设,因为开发者只想要一切按计划进行,不想花费大部分时间来调试计划之外的工作。这些抽象就是复杂且无意义的。

 

ID 名为 figassis 的网友称,自己一直不理解那些没上过大学就能从事编程工作的开发者。figassis 表示自己看到了一个怪象:过去几年还是十几年间,不需要上大学就可以成为程序员似乎成为一种趋势。figassis 称:

 

“确实,我的大部分技能都是在大学毕业后获得的,但是你从大学中获得了某种全球系统的理解(在我的例子中是计算机+软件+网络工程),掌握了这些基础技能,你可以快速缩小问题的潜在根源,包括 TCP/IP 堆栈、CPU 架构、内存管理,以及编译器如何错误地优化某些代码。它对于提出正确的问题也有很大帮助。如果你所知道的只是最新的框架/语言/工具,那么当出现问题时,周围的整个世界都会‘咬你一口’。关于抽象:我总是逃避那些鼓励抽象的语言。Java 就是其中之一,即使在大学里,整个 OOP 趋势对我来说也只是平淡无奇。我对框架(尤其是 JS)最大的恐惧是它们被抽象到这样的程度,以至于我无法希望在不寻求论坛或 Github 帮助的情况下在合理的时间内解决问题,因为我甚至不理解这些概念。什么是效果?反应如何工作?等等。”

 

原文链接:

https://unixsheikh.com/articles/we-have-used-too-many-levels-of-abstractions-and-now-the-future-looks-bleak.html

 

2023-11-02 14:1210116
用户头像

发布了 1194 篇内容, 共 963.9 次阅读, 收获喜欢 2364 次。

关注

评论 3 条评论

发布
用户头像
这篇文章像是在讨论基础知识是否重要。对于有成熟工具的岗位,基础知识是增值的存在。对于缺少成熟工具的岗位,基础知识是工作的基础。
2023-11-13 11:10 · 山东
回复
用户头像
现在软件编写要求很短时间内给出答案,几天内完整某个功能,几天内给出bug解决方案,测试人员测试能用不报错就可以了。框架是别人搭建的,框架依赖很多库,每个库提供自己的API,框架集成的时候又自定义一层调用的API,往往很简单的调用,被封装或者叫被抽象成很多层。具体的实现代码值得阅读吗?开发时间往往不允许去阅读源码,反正能跑就行了。毕竟软件项目的生命周期一般不会很久,过一两年,可能被淘汰了,或者被重构了。
2023-11-06 13:48 · 天津
回复
用户头像
文章提出了一个好问题:如何促进做软件的人,解决抽象层级多且复杂的软件系统的bug。解决方法其实很简单,就是老手把这些bug如何产生、如何复现、如何分析、如何定位、如何修复、如何验证的过程记录并分享出来,吸引新手学习,而不是自己修完就完了。
2023-11-03 15:00 · 北京
回复
没有更多了
发现更多内容

TypeScript 之 Typeof Type Operator

冴羽

JavaScript typescript html5 翻译 大前端

Java线程的生命周期包括哪几种状态?

程序员万金游

java线程

激荡十年,从未来窗口 re:Invent 看云计算发展变迁 | Q推荐

亚马逊云科技 (Amazon Web Services)

数据库 云计算 云原生 re:Invent

博文推荐 | Apache Pulsar 三大跨地域复制解决方案

Apache Pulsar

Java 架构 分布式 云原生 Apache Pulsar

(文末福利)如果代码莫名其妙跑起来了,就不要去动它了……吗?

Zilliz

数据库

学习Java需要掌握哪些技能?

程序员万金游

Java

Tapdata 在线研讨会:DaaS vs 大数据平台,是竞争还是共处?

MongoDB中文社区

mongodb

博文推荐|腾讯专家深度解析 Apache Pulsar 五大应用场景

Apache Pulsar

架构 分布式 云原生 Apache Pulsar 消息中间件

天翼账号网关系统架构演进历程

架构 网关 亿级流量 双十一

Java Collectors API实践

FunTester

Java API 测试开发 FunTester Collectors

数据倾斜的产生和解决办法?

编程江湖

我滴个乖乖!首次公布Java10W字面经,Github访问量破百万

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

【死磕Java并发】-----J.U.C之AQS:阻塞和唤醒线程

chenssy

11月日更 死磕 Java 死磕 Java 并发

一物一码可追溯!看区块链如何帮助消费者

CECBC

封神总结!蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

为什么要学习linux内核源码以及如何学习Linux内核源码

赖猫

c++ Linux 运维 嵌入式 Linux内核

如何修复org/jacoco/agent/rt/internal_773e439/Offline异常?

Changing Lin

11月日更

在 JavaScript 中如何检查对象为空

编程江湖

顺丰科技 x StarRocks :双十一实时运单分析实践

StarRocks

数据库 大数据 数据分析 StarRocks

Python Qt GUI设计:QSpinBox计数器类(基础篇—15)

不脱发的程序猿

Python PyQt GUI设计 QSpinBox计数器类

博文推荐|深度解析如何在 Pulsar 中实现隔离

Apache Pulsar

Java 架构 分布式 云原生 Apache Pulsar

在牛客逮到一个阿里10年老Java开发,聊过之后收益良多...

Geek_1df311

Java 编程 架构 面试 计算机

直播预告|11.27(周六)观测云&思否联合举办的开发者线上沙龙巡演第3站来啦

观测云

直播 沙龙

2021年底Java最新学习路线图

程序员万金游

Java

活动预告|AICon全球人工智能与机器学习技术大会

第四范式开发者社区

机器学习 开源 OpenMLDB

DPDK 网络协议栈-vpp-OvS-DDos-虚拟化专家之路

赖猫

Linux 网络协议栈 DPDK

秋招拿到offer之后,分享面试阿里、头条、腾讯的经过以及一些总结

Geek_1df311

Java 编程 程序员 架构 面试

Function Mesh:Serverless 在消息与流数据场景下的火花

Apache Pulsar

大数据 架构 云原生 Apache Pulsar pulsar社区

关于JAVA中顺序IO的基本操作

编程江湖

公司刚来的阿里p8,看完我构建的springboot框架,甩给我一份文档

热爱java的分享家

Java 面试 程序人生 经验分享 P8

豪华阵容!13位专家力荐Spring5为企业级开发提供一站式方案

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

“我不懂的,总有人懂”,软件开发行业已经开始扭曲变形_研发效能_unixsheikh_InfoQ精选文章