编程的未来是什么
代码的未来是 Ruby 之父松本行弘三年(2009-2012)专栏《技术的剖析》内容的集合。
书中有两点很有启发性:
- 如何预测未来?极限思考法
- 从软件开发中学习如何提高效率?减负,拖延,委托
IT 技术人的真正价值应该并非只有“最早和未来相遇”,还应该要拥有自己创造未来的力量——创造出比这本书所预见的未来的还要更加美好的未来。
第1章 编程的时间和空间
编程的本质在于思考,思考:
- 人们到底想要什么
- 想要的这些东西的本质又是什么
- 要实现这个目的严格来说需要怎样的操作步骤
计算机在不断变化,而算法则保持不变
使用极限思考法预测未来:
- 如果计算机便宜到极致会怎么样
- 如果我们大多数人都能买到超高性能的计算会怎么样
- 如果计算机的存储容量大到超乎想象会怎样
- 如果网络带宽变得非常大会怎么样
作者预测:
- 嵌入式系统软件开发会越来越多
- 充分利用CPU 资源:并行处理
- 高速 SSD为基础的数据库系统,面向个人的数据仓库之类的数据分析工具会流行
- 性能与带宽寻求平衡过程中,网络两端系统构成也会像钟摆一样摇个不停
第2章 编程语言的过去现在和未来
古代编程语言三巨头:Fortran,Cobol,Lisp
编程语言进化的方向:抽象化,也被称为黑箱化
未来编程语言进化动机,不是工具和语言的简化,而是将这些工具和语言的结果更简洁的表现出来
作者预测20年后编程语言要更关注分布处理和并行处理,关注 Haskell 和 Erlang
常用 DSL 语言:awk,sql,正则表达式,sed,xml ,json...
内存空间释放自动化——GC
- GC 的三种基本方式:标记清除,复制收集,引用计数
- 基于上述三种基本方式衍生融合的方式:分代回收,增量回收,并行回收
- 垃圾回收的统一理论:任何一种 GC 算法,都是跟踪回收和引用计数两种思路的组合
异常处理是为了将程序员进行错误处理的负担尽量减轻而产生的一种机制
第3章 编程语言的新潮流
下一代编程语言中作者看好 go 、CoffeeScript 和 Lua ,不大看好 dart
Google 内部5大编程语言:C/C++,Java,Python,JavaScript,Go
限制开发语言的种类,主要从降低管理成本上来考虑的
第4章 云计算时代的编程
布隆过滤器,判断某个数据是否存在的数据结构,概率算法(偶尔会出错)
UNIX系操作系统中,同一台计算机进程间通信有:管道,消息,信号量,共享内存,TCP 套接字,UDP 套接字,UNIX域套接字
第5章 支撑大数据的数据存储技术
随着计算环境中的计算机数量达到几百台甚至更多,机器发生故障概率增加,在实际运营中就会发生延迟等问题,RDBMS 的特性 ACID 就很难满足,催生了 KV 存储模型
在大规模环境中,只能同时满足其中的两个:
- Consistency 一致性
- Availability 可用性
- Partition Tolerance 分裂容忍性
CAP 的解决方案 BASE
NoSQL = Not Only SQL
云,大规模分布式环境
VoltDB,内存型数据库,值得关注
第6章 多核时代的编程
提高 CPU 效率:
- 流水线
- 超线程
- 多核:同构多核,异构多核
CPU 越来越快的时代要结束了,软件开发者必须要付出更多努力,了解多核计算模型
改善软件运行速度:
- 采用更好的算法
- 减少无谓的开销
- 用空间来换时间
多核的困难:任务分割,通信开销,可靠性
无论是从事什么工作,最重要的是提高效率
从软件开发中学会如何提高效率:
- 减负 减少不必要不紧急的工作
- 拖延 按紧急程度从高到低完成任务,碎片时间处理杂事
- 委托 团队合作,从单核到多核,考虑将工作分割成异步任务、减少沟通开销和提升任务可靠性