当前位置: 首页 > news >正文

设计模式的阴谋论

阴谋论者都试图对历史或者当代事件作出特别解释,将事件解释为个人或是团体秘密策划的结果。其实我一直认为,在计算机的学习中,多用阴谋论的眼光去看待每一个问题,反而能更加深入底层机制的理解。

那么人类生产出计算机的阴谋到底是什么?

计算机的产生源自人工智能的发展,当世界上第一台图灵机产生之后,计算机就不再是单纯的计算器了,而是带有逻辑控制能力的机器。

其实从历史发展的轨迹来看,战争是促使人类进步的一大动力。第二次世界大战期间,为了研制和开发新型大跑和导弹,美国陆军军械部在马里兰州的阿伯丁设立了"弹道实验室"。而当时担任弹道研究所顾问,正在参加美国第一颗原子弹研制工作的数学家冯·诺依曼提出的"冯氏模型"成为至今为止计算机的低层架构基础。

如果抛开了"冯氏模型",那么我们今天所建立的一切编程思维都成为了无稽之谈。从"冯氏模型"产生的那一天起,计算机和人类大脑之间的战争就正式打响了。

"冯氏模型"提出在计算机内部用二进制代替十进制和程序存储的理论。这意味着,计算机能最终执行的,只能并且唯一是二进制的代码。

但是人类的大脑无法记忆,也很难适应二进制的东西。于是一些人阴谋让计算机更适应人类大脑的思维方式,汇编语言产生了,它使用mov ax,4C01之类的助记符帮助人类大脑避免直接接触计算机低层的二进制代码。

汇编语言只是阴谋的第一步,因为它仅仅是个助记符。在人类需要计算机做越来越多的工作的时候,它显然是无法胜任的。

改变人类历史的,往往只是少数几个人。在Dennis写Unix系统的时候,这位伟大的计算机科学家终于无法再忍受汇编的烦琐,创造出了C语言。

毫无疑问,C语言是计算机科学史上的一个里程碑,它是人类大脑战胜计算机的一场重要战役。尽管C只是被设计成为一种便携式汇编语言,但是这也决定了C是面向系统编程的最终极限,在面向系统编程时,没有任何一门语言能代替C语言。我一直很鄙夷语言之争,因为任何一门语言的产生,都是现实问题的阴谋实现。

在C语言产生之后,自此,人类在"抽象"的道路上愈行愈远。后来产生了C++、产生了Java、产生了Delphi。

可见,从计算机有纪元的那一天起,人类就在阴谋让计算机适应人类大脑的思维方式,而在这个阴谋实现过程中,人类大脑的抽象思维能力扮演了唯一重要的角色。这也是比尔·盖茨喜欢招物理系出身的人的原因,因为学物理的人抽象能力相对其他学科要强那么一点。

在这个抽象过程中,OO是重要的一环。至于是因为有了OO才有软件工程,还是有了软件工程才有OO这类鸡生蛋还是蛋生鸡的问题,讨论起来很无聊。软件工程从计算机诞生的那一刻起,就存在了。OO只是把软件工程推向了一个极致,因为软件工程是一种思想,而思想这个东西,从人类产生那一刻起就存在的。人类总是试图来创造和改变这个世界,尽管有时候创造和改变的有点愚昧,比如环境污染问题、还有最近流行的猪流感(题外话)。

后来人类发现有了OO还是不足以来贴近人类大脑的思维方式,也不足以适应人类活动的多变性。于是抽象出来了设计模式,这完全是另外一个阴谋,是人类阴谋把计算机完全变成和人类大脑一样思维的一个阴谋。

诚然,设计模型并不是因为有了OO才存在。设计模式是一种软件工程需要,也是一种思想,从人类产生的那一刻起,它也业已存在了。

那么,设计模式的阴谋就是因为OO表达抽象的能力不足,而设计模式这种东西是可以复用的。于是人类把它总结出来,作为OO编程的一种补充。

也许,在将来的某一天,我们不再需要设计模式。也许,某些人的英语编程设想真的能实现,当然,这种实现的前提是从低层改革图灵机和冯氏模型。

我们拭目以待吧!

相关文章:

  • c# mongodb driver 插入重复记录
  • 中国移动通信信息资源站实体与互联网短消息网关(ISMG)
  • MongoDB C# Driver 使用示例 (2.2)
  • C# GetHashCode 的实现方式
  • SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的区别比较
  • Dynamic Language Runtime (DLR) 初深
  • 2009 Webware 100 名单揭晓
  • DLR之 ExpandoObject和DynamicObject的使用示例
  • asp.net常用正则表达式
  • .Net 中Partitioner static与dynamic的性能对比
  • c# 中的 for vs foreach
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • 查看实时Mongodb query 命令
  • .Net 应用中使用dot trace进行性能诊断
  • 如何更改一台已经安装了SharePoint2007的服务器名称(转)
  • 时间复杂度分析经典问题——最大子序列和
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Android单元测试 - 几个重要问题
  • FineReport中如何实现自动滚屏效果
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JAVA 学习IO流
  • Java超时控制的实现
  • java取消线程实例
  • Linux gpio口使用方法
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue的全局变量和全局拦截请求器
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 好的网址,关于.net 4.0 ,vs 2010
  • 计算机在识别图像时“看到”了什么?
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 使用 @font-face
  • 微信开源mars源码分析1—上层samples分析
  • 我的面试准备过程--容器(更新中)
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (4) PIVOT 和 UPIVOT 的使用
  • (Git) gitignore基础使用
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (补)B+树一些思想
  • (分享)自己整理的一些简单awk实用语句
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (转)视频码率,帧率和分辨率的联系与区别
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 4.0中的泛型协变和反变
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET开发者必备的11款免费工具
  • .NET序列化 serializable,反序列化
  • @GetMapping和@RequestMapping的区别
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [ 蓝桥杯Web真题 ]-布局切换
  • [20190113]四校联考