随想011:关于编程

news/2024/11/21 1:41:03/
  • 1945 年时,刚开始有计算机,那时候使用二进制数编程
  • 到了40年代末期,出现了汇编器,可以自动将汇编程序转换为二进制数序列
  • 1951 年 Grace Hopper 发明了编译器
  • 1957 年,Fortran,第一个高级语言,首次亮相
  • 接下来就是层出不穷的新编程语言 - COBOLCPascalC++Java 等等1

经过了几十年的发展,今天的软件与过去的软件本质上仍然是一样的,程序都是由 顺序结构分支结构循环结构 组成,再没有出现新的结构。

  • 1958 年 John Mccarthy 发明了 LISP 语言,函数式编程 范式诞生
  • 1966 年 Ole Johan DahlKriste Nygaard 的论文开创了 面向对象编程 范式
  • 1968 年 Edsger Wybe Dijkstra 论证了 goto 语句的危害,结构化编程 范式诞生

经过了几十年的发展,今天的编程范式与过去完全一样,也是结构化编程 范式、 面向对象编程 范式和 函数式编程 范式,再没有出现新的编程范式。

到 1968 年,今天所有的程序结构和编程范式就已经全部出现,从那之后的半个多世纪以来,软件工程领域只是更新了更好的工具以及沉淀了一些构建程序的关键经验。

软件工程的最基本经验是:保持简洁2

软件设计有两种方式:一种是设计得极为简洁,明显没有缺陷;另一种是设计得极为复杂,没有明显的缺陷。第一种方式要难得多。3

大多数软件禁不起磕碰,毛病很多,就是因为过于复杂,很难通盘考虑。如果不能够理解一个程序的逻辑,就不能确信其是否正确,在出错时,你将更加没有头绪:可能性太多。

Brian Kernighan 认为 “计算机编程的本质就是控制复杂度”。要编写复杂软件而又不至于一败涂地的唯一方法就是降低其整体复杂度——用清晰的接口把若干简单的模块组合成一个复杂软件。如此一来,多数问题只会局限于某个局部,那么就还有希望对局部进行改进而不至牵动全身。

要保持代码简洁,需要艰辛的劳动和严格的职业操守,遵循的原则是“童子军规范”:每次迁入都要比迁出好一些。

要保持架构简洁,需要理解“单一职责原则”、“开闭原则”、“接口隔离原则” 、和“依赖反转原则”。

要保持设计简洁,需要思维上的转变。能删除什么?能简化什么?能重新定义什么?

所有的这些,一言蔽之,就一个字:简

把复杂的事情变简单,简单的事情便可靠






读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
千金难买知识,但可以买好多奶粉


  1. 《架构整洁之道》 ↩︎

  2. 《嵌入式系统设计的艺术》 ↩︎

  3. 《UNIX编程艺术》 ↩︎


http://www.ppmy.cn/news/81959.html

相关文章

Flutter 笔记 | Flutter 布局组件

布局类组件都会包含一个或多个子组件,布局类组件都是直接或间接继承SingleChildRenderObjectWidget 和MultiChildRenderObjectWidget的Widget,它们一般都会有一个child或children属性用于接收子 Widget。 不同的布局类组件对子组件排列(layo…

项目风险管理的四个阶段,你了解多少?

项目风险管理是项目管理的一部分,目的是保证项目总目标的实现。 风险管理包括风险识别、风险估计、风险解决和风险监控。风险管理贯穿在项目中的每个环节,在项目的生命周期中监控风险是非常重要的手段。 风险管理包含四个阶段: 1、风险识别…

开源云原生数仓引擎ByConity 存储计算分离架构和优势

供稿 | ByConity技术团队 出品 | CSDN 云计算 ByConity是一款字节跳动开源的云原生数仓引擎。它的一个重要优势是采用存储计算分离的架构,实现了读写分离和弹性扩缩容。这种架构确保读操作和写操作不会相互影响,使得计算资源和存储资源解耦,…

zabbix监控系统

一、Zabbix概述 1、使用zabbix的原因 作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。 利用一个优秀的监控软件,我们可以: ●通过一个友好的界面进…

【5.21】六、自动化测试—常用工具

目录 6.3 自动化测试常用工具 1. Selenium 2. Katalon Studio 3. UFT 6.3 自动化测试常用工具 常见的自动化测试工具: 1. Selenium Selenium是当前针对Web系统的最受欢迎的开源免费的自动化工具,它提供了一系列函数支持Web自动化测试,这些函数非常…

Java 与排序算法(1):冒泡排序

一、冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法,它的基本思想是通过不断交换相邻两个元素的位置,使得较大的元素逐渐往后移动,直到最后一个元素为止。冒泡排序的时间复杂度为 O ( n 2 ) O(n^2) O(n2)&…

12 Binder的原理

Binder的原理 一、前言 从前一节,我们知道从Android 8.0 开始,Binder机制,被拆分成了Binder(System分区 进程间通信)、HwBinder(支持System/Vendor分区进程间通信)、VndBinder(Vendor分区进程间通信)。 现在我们先单独分析一下Binder的机制,HwBinder和VndBinder留到后面…

使用ln命令在Linux系统中创建连接文件

在Linux中ln命令用来为文件创建连接,连接类型分为硬连接(Hard Link)和符号连接(Symbolic Link)两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。 关于软硬连接解释 硬连接 …