技术的变化根本没那么快

2019-07-08 16:41:19 +08:00
 keelii

不知道为什么周围的人似乎都在抱怨一个问题:技术的变更迭代太快,如果不学习就跟不上潮流。

最近在看到一篇 2003 年的关于 AOP 的 文章 时突然有所感悟。

时至今日( 2019 年),将近 20 年后我们再看这此文时,关于软件构架与设计方面涉及到的问题、面临的困境、解决的办法似乎根本没有变化过。

这就不禁让人产生疑问:到底是技术变化太快还是我们理解技术的的深度不够。

15273 次点击
所在节点    程序员
109 条回复
FrankHB
2019-07-09 11:01:24 +08:00
回到主题。
“关于软件构架与设计方面涉及到的问题、面临的困境、解决的办法似乎根本没有变化过。”
不对,是多出很多新的问题,而解决问题受到的限制更大了,而且整体演化成了没法单纯从技术上面对的问题工厂。
20 年前,软件规模要求的压力显然没现在这么大,原始需求的问题领域也没现在那么丰富。
而 20 年来软件开发人员成本的增长不足以支撑软件开发人员完成多出来的需求变化需要的能力的增长。
因为大多数管理人员习惯用“水平扩容”(增加资源数量)解决问题,在遇到人的瓶颈(总工时)也没有什么好的方案只能照猫画虎(要扩招更要 996 ),反而加剧了传统软件工程的问题(譬如,沟通成本)。
更有甚者,从业人员的平均基础水平实际上是下降了。
这一方面是因为现在的开发人员很多场景下分工过于专一,普遍欠缺考察迁移问题解决方案的能力的场景,要求降低了;
另一方面是基础教育本身就歪了(想想 SICP 都改用 py 了)。
这进一步导致解决新的问题时会倾向于专一而便于靠堆砌资源数量变通的解法,却不注重解的结构和内部关联,更不关注维护现有解决方案的成本去除冗余。
很多所谓的新的技术就是这时候炮制出来的。
由于“新”的技术越来越多,又不没几个人去查重归并,以后这方面问题复杂度会越来越高。
仅仅是“学习”的问题,其实算不上什么事儿。真正开始体现影响的是选型成本以及应对碎片化的机会成本。这时候就各显神通了:无视的无视,diss 的 diss,还有自己糊屎取而代之的。
直白点说,问题增长得本来就不慢,试图解决问题的人似乎有效地解决了一部分问题,但实际上制造了更多其它的问题,而且越来越不容易解决。这个倾向比原始问题快得多。
字面上,这当然能算得上技术变化很快。只是不应该那么快。
按理说人的忍耐总是有极限的。可惜现实由于韭菜(资本和相对低端的人力资源)仍然大批量进场的问题,这部分暂时还没法平衡,还会在天上飞一阵子。
littlewing
2019-07-09 11:13:31 +08:00
确实,现代计算机仍然摆脱不了 冯·诺依曼 架构

量子计算机啥时候能民用啊
FrankHB
2019-07-09 11:14:28 +08:00
@q397064399 我指出的是你所谓的这些抽象对底层实现者还是对高层用户都没有什么实际意义。因为实际的场景几乎全不是按你想象这样抽象的。
你给的模型典型实现中只是在微架构层面直接相关。ISA 以上的用户虽然被允许利用某些特定实现的知识做启发式优化,但一般根本不需要依赖这种模型编程。原则上,一些时候还应该避免做得到,否则就是泄漏实现细节的问题了:制造 side-channel attack 的机会是安全设计上的 bug。
另外,在 ISA 的层次上划分软硬件的分界只是侧重商业角度上的保守做法,不是普遍必须的。“指令”都不一定是硬件接受的编码处理的基本单位。
FrankHB
2019-07-09 11:26:24 +08:00
@littlewing 请不要再迫害冯诺依曼了……
纯冯诺依曼架构下的 CPU,共用总线读取指令或读 /写内存数据,没缓存没法并行。
你家“现代计算机”能受得了这种限制么。
v23x
2019-07-09 11:37:40 +08:00
2012 年的时候

asp 还在大行其道....

jQuery 还是极其时髦

写原生 JS 的大把大把的

chrome 根本没人用...
v23x
2019-07-09 11:38:30 +08:00
div 还在慢慢取代 table....
karia
2019-07-09 12:01:02 +08:00
想不出节奏,好急
ninjachen
2019-07-09 12:06:26 +08:00
1960 年的 IBM 的软件项目的管理经验现在还基本能用呢。
说的技术发展太快是应用层的技术,不是概念层的
yuanxianrenqiu
2019-07-09 12:07:06 +08:00
刚刚在看 AOP 的这边文章,就刷到这个贴: https://juejin.im/post/5d217430e51d4556da53d132
其实计算机很多概念的东西都不会变得很快,变的是实现的东西。比如可能以前流行框架 A,后面流行框架 B 而已。核心思想、核心理念很多都没变。无非易用性方面变得多、变得快。
starsriver
2019-07-09 12:33:26 +08:00
@FrankHB 看你怼了这么多,我也不好说什么。但是,alu 本质不就是一个线性累加器吗?微代码是汇编的雏形,当初控制矩阵比较简单,低级硬件使用的东西,目前 cpu 支持的指令集里面包含这种代码,实际上和汇编没区别,你应该好好补习一下基础。

如果说计算机领域的新技术,inter 传承多年的 x 架构也快用矩阵代替了,将来是量子时代,现在是硅时代。
b00tyhunt3r
2019-07-09 12:37:36 +08:00
@yjxjn cobol 咋也成底层了
abcbuzhiming
2019-07-09 14:52:25 +08:00
@HuasLeung 前端变化快?不好意思,MVVM 是微软 2005 年搞出来的,现在三大前端框架不就是绕着这玩意变来变去吗
z0ne
2019-07-09 15:39:09 +08:00
重构 && 改进
比如前端,以前都是写原生或者加个 jquery,后来写多了,开发者们就想:为何不写个更方便的库,把这些重复的代码用更简单的形式表达出来呢?于是就多了很多库。
在“外行”看来是变化大,其实只不过是思路广,一个代码 n 种写法,衍生出不同技巧而已。

这是好事,因为懒而去不断进化,不都是我们人类在做的事吗
no1xsyzy
2019-07-09 15:43:35 +08:00
@lidfather native ?你是想说 naive 吧?
no1xsyzy
2019-07-09 15:51:32 +08:00
技术不曾改变,是技术的实现改变了
bojackhorseman
2019-07-09 15:58:14 +08:00
@v23x #85 那时候刚上大一,网站设计开发第一节老师教怎么用 table 布局。
pythonee
2019-07-09 16:19:15 +08:00
有没有大牛整理过近几年主要的技术变化和趋势呢?

我觉得有几点:
1、容器
2、协程
3、Serverless

还有 AI/EI/AR/VR 之类的新兴行业
leonard916
2019-07-09 16:24:49 +08:00
其實底層的東西還是那些 應用層只是越來越簡單了 當然可以實現的功能也越來越多了 而已
q397064399
2019-07-09 16:32:01 +08:00
@FrankHB #83
多人协作 把代码全部写一坨 怎么维护? 现代软件开发技术的进步很大程度上就在于屏蔽底层特性,
架构在抽象层面上,例如系统程序员不需要了解 CPU 门电路的实现,他只需要了解 ISA 指令,
根据指令文档指出的抽象描述来控制计算机,至于门电路 指令流水具体的实现 则交给 CPU 的设计者,
操作系统上面又把 ugly 的硬件进行了统一封装,你只要知道 open 文件描述符这个概念,
至于写入的是 SSd 还是机械硬盘 中间缓存什么的 都不用管。
这种分层的概念才是软件各个方面的精髓所在吧。
kindle958
2019-07-09 16:32:20 +08:00
@lidfather 是 native,还是 naive ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/581054

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX