软件是人类有史以来最复杂的系统。
其一、软件系统本身规模庞大,参与人手众多,难以管理;
其二、环境和需求不断变化,且错误难以避免。
人类无法驾驭过于复杂的事物,于是只能寻找方法简化软件系统:把系统分为许多子部分,人们开发一个部分的时候,系统其他部分都是一种抽象,无需了解其细节。
计算机程序设计,也就是我们说的编程,本质上是对人类遇到的现实问题的抽象——从现实问题空间模型到计算机算法空间模型的映射。编程中的抽象主要有过程抽象(函数、方法,也就是“算法”)与数据抽象(对象、实体、模型、结构体,也就是数据结构)。
过程抽象,就是编程语言中的函数,目的是封装计算过程的细节。应用过程抽象的原则是:一切可以定义为过程的计算片段都应该定义为过程。
数据抽象,最直接的理解就是面向对象编程,如 C++,而 Java 和 C# 则是更彻底的数据抽象。把一组过程抽象(类的方法)集中考虑,并加入内部状态(类的变量),就是一个数据抽象。每个数据抽象都应该把自己的内部对象状态和对象的实现隐藏起来,对外通过一组接口进行消息传递。
软件是计算机的灵魂,是藏在半导体电路芯片里面的精灵。要想真正领会到编程的真谛,绝知此事要躬行。
参考资料
https://book.douban.com/review/4559081/
《禅与计算机程序设计艺术》 / 陈光剑 目录
第一性原理
什么是禅?
什么是计算机?
什么是程序设计?
什么是艺术?
宇宙之起源
物质之形成
半导体材料
纳米光刻
二极管、三极管
太极阴阳与二进制
布尔代数与数字逻辑系统
模拟电子电路系统
信号与处理
信息论
图灵机模型
冯诺依曼模型
计算机演化史
什么是编程?
编程语言进化史
程序 = 数据结构 + 算法
模型关系思维
真理与模型
建筑工程、机械工程、电气工程与软件工程
CPU架构设计
缓存思想
计算机科学中的中间层理论
从01机器码到汇编指令到高级编程语言:一切皆是映射
美妙的递归
用计算机画一张分形图
分层思想
硬件驱动
操作系统
通信原理:TCP/IP 与 HTTP 协议、WIFI无线协议
互联网简史
数据的存储:从ROM、RAM到寄存器到L1/L2 Cache 再到磁盘文件
索引原理:来自大自然的启示 Tree 结构
人类社会数字化
人工智能
虚拟现实
技术、艺术与禅道
// TODO ...... 待续
网友评论